Nonaktifkan defrag THP dan THP pada instance CentOS 7 EC2

9

Saya ingin menonaktifkan transparent_hugepage (THP) pada instance CentOS 7 EC2, yang diaktifkan secara default:

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

Pengaturan ini dapat diubah secara manual:

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

... tetapi perubahannya hilang setelah reboot.

Saya mencoba memasukkan echo never [...]instruksi ke dalam file rc.localdan saya cloud.cfg, tetapi tidak berhasil.

Saya juga mencoba menambahkan pengaturan transparent_hugepage=neverke baris kernel /etc/grub.conf(seperti yang dijelaskan di sana ), tetapi tidak berfungsi lebih baik.

Jadi ... bagaimana saya bisa menonaktifkan THP pada CentOS 7 yang berjalan pada instance AWS EC2?

sunting: judul diubah ... Saya perlu menonaktifkan defrag THP dan THP

vcarel
sumber
Demi kepentingan, bolehkah saya bertanya mengapa Anda ingin menonaktifkan THP?
Cameron Kerr
Setelah reboot, instasnce Anda tidak akan berfungsi jika Anda "menambahkan transparent_hugepage = tidak pernah ke baris kernel dari /etc/grub.conf" dan harus menghapus baris ini dari file grub. Untuk keperluan ini kita dapat melampirkan instance yang sudah ada ke yang baru dan me-mount partisi ke folder
Artem.Borysov

Jawaban:

14

Solusinya sedang disetel , seperti yang ditunjukkan oleh @ michael-hampton. Bagian yang sulit adalah bahwa plugin vm hanya dapat mengkonfigurasi /sys/kernel/mm/transparent_hugepage/enabledpengaturan.

Untuk menonaktifkan /sys/kernel/mm/transparent_hugepage/defragpengaturan juga, saya harus membuat skrip yang dipanggil oleh profil saat mulai.

Pada akhirnya, solusi lengkapnya adalah:

langkah 1 : Buat direktori untuk menyimpan profil khusus:

mkdir /etc/tuned/custom

langkah 2 : Buat profil /etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Perhatikan bahwa profil ini diwarisi dari virtual-guest , yang merupakan profil aktif saya, sebenarnya terlihat sesuai untuk server virtual (EC2). Anda dapat melihat profil aktif Anda dengan perintah tuned-adm active. Jika Anda penasaran, Anda dapat melihat konten dari profil yang telah ditentukan di/usr/lib/tuned/

langkah 3 : Buat skrip /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 $@

Jadikan itu dapat dieksekusi:

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

langkah 4 : Aktifkan profil baru:

tuned-adm profile custom

Sekarang Anda harus mendapatkan:

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

Ini akan bertahan setelah reboot.

vcarel
sumber
Kami menemukan bahwa ini bekerja pada AWS Redhat 7.4 VM. Terima kasih!
Jon Sampson
2

Selain mengatur baris perintah grub, Anda juga perlu mengkonfigurasi disetel. Tetapi tidak menggunakan instruksi yang Anda tautkan, karena mereka begitu penuh kesalahan, hanya perlu setengah hari untuk menjelaskan semuanya.

Buat profil yang disetel khusus (yang akan saya panggil custom), lalu atur profil. Anda akan mendasarkannya pada profil yang ada, seperti virtual-guestjika Anda menjalankan mesin virtual (EC2 tentu saja), atau throughput-performancejika Anda menggunakan mesin fisik.

Buat direktori untuk menyimpan profil khusus:

mkdir /etc/tuned/custom

Buat profil khusus /etc/tuned/custom/tuned.conf, misalnya:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Sekarang atur profil:

tuned-adm profile custom
Michael Hampton
sumber
Instruksi itu penuh kesalahan? Butuh setengah hari untuk menjelaskan? Itulah yang saya coba pahami.
vcarel
Saya tidak mengerti jawaban Anda. Mengapa saya harus mengkonfigurasi grub dan menggunakan tuned sama sekali?
vcarel
1
Karena diaktifkan secara default dalam konfigurasi kernel dan diaktifkan secara default dalam konfigurasi yang disetel. Anda perlu mengubah keduanya agar benar-benar efektif.
Michael Hampton
1
Mengkonfigurasi sepertinya sudah cukup ... Saya tidak perlu mengubah konfigurasi grub. BTW, apakah ada pengaturan lain yang disetel untuk menonaktifkan defrag THP juga?
vcarel
@vcarel Tidak perlu karena hugepage transparan sudah dinonaktifkan!
Michael Hampton
1

Coba juga ini

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 - tambahkan disable-transparan-hugepages

Artem.Borysov
sumber
0

Anda dapat mengedit file /etc/rc.local dan menambahkan perintah berikut ini ke file itu:

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

dan jalankan chmod +x /etc/rc.d/rc.localuntuk memastikan skrip akan dieksekusi saat boot. diuji di Amazon Linux 2.

Yuda Prawira
sumber
-2

Sunting: jawaban di atas salah , karena kenop halaman transparan yang besar tidak ada pada sysctl saat ini. Maaf atas kebisingannya.


Anda dapat memasukkan nilai yang diinginkan di /etc/sysctl.conf.

Dari halaman manual sysctl.conf (5):

SYSCTL.CONF (5) Format File SYSCTL.CONF (5)

NAMA
       sysctl.conf - sysctl preload / file konfigurasi

DESKRIPSI
       sysctl.conf adalah file sederhana yang berisi nilai sysctl untuk dibaca dan diatur oleh sysctl. Sintaksnya adalah sebagai berikut:

              # komentar
              ; komentar

              token = nilai

       Perhatikan bahwa baris kosong diabaikan, dan spasi putih sebelum dan sesudah token atau nilai diabaikan, meskipun nilai dapat berisi spasi putih di dalamnya. Baris yang dimulai dengan # atau; dipertimbangkan
       komentar dan diabaikan.

CONTOH
              # sysctl.conf contoh
              #
                kernel.domainname = example.com
              ; yang ini memiliki ruang yang akan ditulis ke sysctl!
                kernel.modprobe = / sbin / mod probe
shodanshok
sumber
1
Ini tidak dapat dikonfigurasi menggunakan sysctl.
Michael Hampton
Mengapa? Saya sering mengubah / sys / knowbs menggunakan sysctl.conf ... Saya kehilangan sesuatu di sini? EDIT: sudahlah, saya menemukannya di dokumentasi RHEL. Terima kasih untuk menunjukkannya kepada saya;)
shodanshok