CentOS 7 EC2 örneğinde THP ve THP birleştirme özelliğini devre dışı bırakma


9

Varsayılan olarak etkin olan CentOS 7 EC2 örneğinde şeffaf_huvi (THP) devre dışı bırakmak istiyorum:

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

Bu ayar manuel olarak değiştirilebilir:

# 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]

... ancak yeniden başlatmadan sonra değişiklikler kayboluyor.

echo never [...]Talimatları benim rc.localve cloud.cfgdosyalara koymaya çalıştım , ama işe yaramadı.

Ayrıca ( orada açıklandığı gibi ) transparent_hugepage=neverçekirdek satırına ayar eklemek için çalıştı , ama daha iyi çalışmadı./etc/grub.conf

Öyleyse ... AWS EC2 örneğinde çalışan CentOS 7'de THP'yi nasıl devre dışı bırakabilirim?

edit: başlık değiştirildi ... THP ve THP birleştirmeyi devre dışı bırakmam gerekiyor


İlgi alanına göre, THP'yi neden devre dışı bırakmak istediğinizi sorabilir miyim?
Cameron Kerr


Bilgisayarı yeniden başlattıktan sonra /etc/grub.conf çekirdek satırına "app_ şeffaf_hugepage = hiçbir zaman" eklemezseniz ve grub dosyasından bu satırı kaldırmanız gerekirse instasnce çalışmaz. Bu amaçla, mevcut örneği
yenisine

Yanıtlar:


14

Çözüm, michael-hampton tarafından belirtildiği gibi ayarlanmıştır . Zor kısmı, vm eklentisinin sadece /sys/kernel/mm/transparent_hugepage/enabledayarı yapılandırabilmesidir .

/sys/kernel/mm/transparent_hugepage/defragAyarı da devre dışı bırakmak için , başlangıçta profil tarafından çağrılan bir komut dosyası oluşturmak zorunda kaldım.

Sonunda, komple çözüm:

1. adım : Özel profili tutmak için dizin oluşturun:

mkdir /etc/tuned/custom

2. adım : Profili oluşturun /etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Bu profilin , aktif profilim olan sanal konuktan , aslında sanallaştırılmış sunucu (EC2) için uygun göründüğünü unutmayın. Etkin profilinizi komutla görüntüleyebilirsiniz tuned-adm active. Merak ediyorsanız, önceden tanımlanmış profillerin içeriğini şuradan kontrol edebilirsiniz:/usr/lib/tuned/

3. adım : Betiği oluşturun /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 $@

Yürütülebilir yap:

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

4. adım : Yeni profili etkinleştirin:

tuned-adm profile custom

Şimdi şunları elde etmelisiniz:

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

Yeniden başlattıktan sonra da devam edecektir.


Bunun bir AWS Redhat 7.4 VM üzerinde çalıştığını gördük. Teşekkürler!
Jon Sampson

2

Grub komut satırını ayarlamaya ek olarak, ayarlananı da yapılandırmanız gerekir. Ancak, bağlandığınız talimatları kullanmamakla birlikte, hatalarla dolu oldukları için, hepsini açıklamak yarım gün sürer.

Özel olarak ayarlanmış bir profil oluşturun (arayacağım custom) ve profili ayarlayın. Bunu, virtual-guestsanal bir makinede (EC2 elbette) çalıştırıyor veya throughput-performancefiziksel bir makinedeymiş gibi mevcut bir profile dayandıracaksınız .

Özel profili tutmak için dizin oluşturun:

mkdir /etc/tuned/custom

Özel profili oluşturun, /etc/tuned/custom/tuned.conförneğin:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Şimdi profili ayarlayın:

tuned-adm profile custom

Bu talimatlar hatalarla dolu mu? Açıklamak yarım gün sürer mi? Anlamaya çalıştığım şey bu.
vcarel

Bu arada cevabınızı anlamıyorum. Neden grub'u yapılandırmam ve ayarlananları tamamen kullanmam gerekiyor?
vcarel

1
O çekirdek yapılandırmasında varsayılan olarak açıktır Çünkü ve ayarlı konfigürasyonda varsayılan olarak. Tamamen etkili olabilmesi için her ikisini de değiştirmeniz gerekir.
Michael Hampton

1
Ayarlı yapılandırma yeterli görünüyor ... grub config değiştirmek zorunda değildi. BTW, THP birleştirmeyi de devre dışı bırakmak için başka ayarlanmış bir ayar var mı?
vcarel

@vcarel Şeffaf büyük sayfalar zaten devre dışı olduğundan gerekli değildir!
Michael Hampton

1

Bunu da dene

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 - devre dışı bırak-şeffaf-büyük sayfalar ekle


0

/Etc/rc.local dosyasını düzenleyebilir ve şu komutu bu dosyaya ekleyebilirsiniz:

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

ve chmod +x /etc/rc.d/rc.localönyükleme sırasında komut dosyasının yürütülmesini sağlamak için çalıştırın. Amazon Linux 2'de test edildi.


-2

EDIT: yukarıdaki cevap yanlış , çünkü şu anda şeffaf büyük sayfa düğmeleri sysctl eksik. Gürültü için üzgünüm.


İstediğiniz değerleri girebilirsiniz /etc/sysctl.conf.

Sysctl.conf (5) kılavuz sayfasından:

SYSCTL.CONF (5) Dosya Biçimleri SYSCTL.CONF (5)

ADI
       sysctl.conf - sysctl önyükleme / yapılandırma dosyası

AÇIKLAMA
       sysctl.conf, sysctl tarafından okunacak ve ayarlanacak sysctl değerlerini içeren basit bir dosyadır. Sözdizimi basitçe aşağıdaki gibidir:

              # yorum Yap
              ; yorum Yap

              belirteç = değer

       Boş satırların yok sayıldığını ve bir belirteç veya değerin önündeki ve sonundaki boşlukların yok sayılmasına rağmen, bir değer içinde boşluk bulundurabileceğini unutmayın. # Veya ile başlayan satırlar; dikkate alındı
       yorum ve yoksayıldı.

MİSAL
              # sysctl.conf örneği
              #
                kernel.domainname = example.com
              ; bu sysctl yazılacak bir boşluk var!
                kernel.modprobe = / sbin / mod probu

1
Bu, sysctl kullanılarak yapılandırılamaz.
Michael Hampton

Neden? Sık sık sysctl.conf kullanarak / sys / knowbs tweak ... Burada bir şey eksik? EDIT: boşver, RHEL belgelerinde buldum. Bana işaret
ettiğin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.