Disabilita la deframmentazione THP e THP sull'istanza di CentOS 7 EC2


9

Voglio disabilitare transparent_hugepage (THP) su un'istanza di CentOS 7 EC2, che è abilitata di default:

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

Questa impostazione può essere modificata manualmente:

# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

... ma le modifiche vanno perse dopo il riavvio.

Ho provato a mettere le echo never [...]istruzioni nel mio rc.locale nei cloud.cfgfile, ma non ha funzionato.

Ho anche provato ad aggiungere l'impostazione transparent_hugepage=neveralla riga del kernel di /etc/grub.conf(come spiegato qui ), ma non ha funzionato meglio.

Quindi ... come posso disabilitare THP su CentOS 7 in esecuzione su un'istanza di AWS EC2?

modifica: titolo modificato ... Devo disabilitare la deframmentazione THP e THP


Per motivi di interesse, posso chiederti perché vuoi disabilitare THP?
Cameron Kerr,


Dopo il riavvio, il tuo instasnce non funzionerà se "aggiungi trasparente_hugepage = mai alla riga del kernel di /etc/grub.conf" e dovrai rimuovere questa riga dal file grub. A tale scopo possiamo collegare un'istanza esistente a una nuova e montare la partizione nella cartella
Artem.Borysov,

Risposte:


14

La soluzione è sintonizzata , come sottolineato da @ michael-hampton. La parte difficile è che il plug-in VM può solo configurare l' /sys/kernel/mm/transparent_hugepage/enabledimpostazione.

Per disabilitare anche l' /sys/kernel/mm/transparent_hugepage/defragimpostazione, ho dovuto creare uno script che viene chiamato dal profilo all'avvio.

Alla fine, la soluzione completa è:

passaggio 1 : creare la directory per contenere il profilo personalizzato:

mkdir /etc/tuned/custom

passaggio 2 : creare il profilo /etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Si noti che questo profilo eredita da virtual-guest , che era il mio profilo attivo, in realtà sembra appropriato per il server virtualizzato (EC2). Puoi visualizzare il tuo profilo attivo con il comando tuned-adm active. Se sei curioso, puoi controllare il contenuto dei profili predefiniti in/usr/lib/tuned/

passaggio 3 : creare lo script /etc/tuned/custom/script.sh:

#!/bin/sh

. /usr/lib/tuned/functions

start() {
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    return 0
}

stop() {
    return 0
}

process $@

Renderlo eseguibile:

sudo chmod 755 /etc/tuned/custom/script.sh

passaggio 4 : attiva il nuovo profilo:

tuned-adm profile custom

Ora dovresti ottenere:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Persisterà dopo il riavvio.


Abbiamo scoperto che funzionava su una VM AWS Redhat 7.4. Grazie!
Jon Sampson,

2

Oltre a impostare la riga di comando di grub, devi anche configurare sintonizzato. Ma non usando le istruzioni a cui ti sei collegato, poiché sono così pieni di errori ci vorrebbe mezza giornata solo per spiegarli tutti.

Crea un profilo personalizzato (che chiamerò custom), quindi imposta il profilo. Lo baserai su un profilo esistente, ad esempio virtual-guestse stai eseguendo una macchina virtuale (EC2 è, ovviamente) o throughput-performancese sei su una macchina fisica.

Creare la directory per contenere il profilo personalizzato:

mkdir /etc/tuned/custom

Crea il profilo personalizzato /etc/tuned/custom/tuned.conf, ad esempio:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Ora imposta il profilo:

tuned-adm profile custom

Quelle istruzioni piene di errori? Ci vorrebbe mezza giornata per spiegare? Questo è quello che sto cercando di capire.
Vcarel,

A proposito, non capisco la tua risposta. Perché devo configurare grub e usare sintonizzato del tutto?
Vcarel,

1
Perché è attivo di default nella configurazione del kernel e acceso di default nella configurazione sintonizzata. Devi modificarli entrambi affinché sia ​​completamente efficace.
Michael Hampton,

1
La configurazione sintonizzata sembra abbastanza ... Non ho dovuto cambiare grub config. A proposito, c'è un'altra impostazione sintonizzata per disabilitare anche la deframmentazione THP?
Vcarel,

@vcarel Non è necessario perché gli hugepage trasparenti sono già disabilitati!
Michael Hampton,

1

Prova anche questo

nano /etc/init.d/disable-transparent-hugepages

#!/bin/sh
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    unset thp_path
    ;;
esac

sudo chmod 755 /etc/init.d/disable-transparent-hugepages

sudo chkconfig --add disable-transparent-hugepages


0

È possibile modificare il file /etc/rc.local e aggiungere il seguente comando a quel file:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

ed eseguire chmod +x /etc/rc.d/rc.localper assicurarsi che lo script venga eseguito durante l'avvio. testato su Amazon Linux 2.


-2

EDIT: la risposta sopra è sbagliata , perché al momento mancano le enormi manopole trasparenti della pagina da sysctl. Scusa per il rumore.


È possibile inserire i valori desiderati /etc/sysctl.conf.

Dalla pagina man sysctl.conf (5):

SYSCTL.CONF (5) Formati file SYSCTL.CONF (5)

NOME
       sysctl.conf - file di configurazione / precarico sysctl

DESCRIZIONE
       sysctl.conf è un semplice file contenente valori di sysctl da leggere e impostare da sysctl. La sintassi è semplicemente la seguente:

              # commento
              ; commento

              token = valore

       Si noti che le righe vuote vengono ignorate e gli spazi bianchi prima e dopo un token o un valore vengono ignorati, sebbene un valore possa contenere spazi bianchi all'interno. Linee che iniziano con un # o; sono considerati
       commenti e ignorati.

ESEMPIO
              # esempio di sysctl.conf
              #
                kernel.domainname = example.com
              ; questo ha uno spazio che sarà scritto nel sysctl!
                kernel.modprobe = / sbin / mod probe

1
Questo non può essere configurato usando sysctl.
Michael Hampton,

Perché? Spesso ritocco / sys / knowbs usando sysctl.conf ... Mi manca qualcosa qui? EDIT: non importa, l'ho trovato sulla documentazione RHEL. Grazie a indicarmelo;)
shodanshok,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.