ปิดใช้งานการจัดเรียงข้อมูล THP และ THP บนอินสแตนซ์ CentOS 7 EC2


9

ฉันต้องการปิดใช้งาน transparent_hugepage (THP) ในอินสแตนซ์ CentOS 7 EC2 ซึ่งเปิดใช้งานโดยค่าเริ่มต้น:

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

การตั้งค่านี้สามารถเปลี่ยนแปลงได้ด้วยตนเอง:

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

... แต่การเปลี่ยนแปลงจะหายไปหลังจากรีบูต

ฉันพยายามใส่echo never [...]คำแนะนำลงในไฟล์rc.localและของฉันcloud.cfgแต่มันไม่ทำงาน

ฉันยังพยายามที่จะผนวกการตั้งค่าtransparent_hugepage=neverไปยังเส้นเคอร์เนลของ/etc/grub.conf(ตามที่ได้อธิบายมี ) แต่มันก็ไม่ได้ทำงานได้ดีขึ้น

ดังนั้น ... ฉันจะปิดการใช้งาน THP บน CentOS 7 ที่ทำงานบนอินสแตนซ์ AWS EC2 ได้อย่างไร

แก้ไข: เปลี่ยนชื่อ ... ฉันต้องปิดการใช้งานการจัดเรียงข้อมูล THP และ THP


เพื่อประโยชน์ของฉันฉันขอถามว่าทำไมคุณต้องการปิดการใช้งาน THP?
Cameron Kerr


หลังจากรีบู๊ต instasnce ของคุณจะไม่ทำงานหากคุณ "ผนวก transparent_hugepage = ไม่ต้องไปที่เคอร์เนลบรรทัดของ /etc/grub.conf" และจะต้องลบบรรทัดนี้ออกจากไฟล์ด้วง เพื่อจุดประสงค์นี้เราสามารถแนบอินสแตนซ์ที่มีอยู่เข้ากับพาร์ติชั่นใหม่และเมานต์พาร์ติชั่นไปยังโฟลเดอร์ได้
Artem.Borysov

คำตอบ:


14

การแก้ปัญหาอยู่ในการปรับตามที่ชี้ให้เห็นโดย @ michael-hampton ส่วนที่ยุ่งยากคือปลั๊กอินvmสามารถกำหนดการ/sys/kernel/mm/transparent_hugepage/enabledตั้งค่าได้เท่านั้น

หากต้องการปิดใช้งานการ/sys/kernel/mm/transparent_hugepage/defragตั้งค่าฉันต้องสร้างสคริปต์ที่โปรไฟล์ถูกเรียกใช้ตั้งแต่เริ่มต้น

ในตอนท้ายโซลูชันที่สมบูรณ์คือ:

ขั้นตอนที่ 1 : สร้างไดเรกทอรีเพื่อเก็บโปรไฟล์ที่กำหนดเอง:

mkdir /etc/tuned/custom

ขั้นตอนที่ 2 : สร้างโปรไฟล์/etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

โปรดทราบว่าโปรไฟล์นี้สืบทอดมาจากผู้เยี่ยมชมเสมือนซึ่งเป็นโปรไฟล์ที่ใช้งานอยู่ของฉันซึ่งดูเหมาะสมสำหรับเซิร์ฟเวอร์เสมือนจริง (EC2) tuned-adm activeคุณสามารถดูรายละเอียดการใช้งานของคุณด้วยคำสั่ง หากคุณสงสัยคุณสามารถตรวจสอบเนื้อหาของโปรไฟล์ที่กำหนดไว้ล่วงหน้าได้/usr/lib/tuned/

ขั้นตอนที่ 3 : สร้างสคริปต์/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 $@

ทำให้ปฏิบัติการได้:

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

ขั้นตอนที่ 4 : เปิดใช้งานโปรไฟล์ใหม่:

tuned-adm profile custom

ตอนนี้คุณควรจะได้รับ:

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

มันจะคงอยู่หลังจากรีบูต


เราพบว่าสิ่งนี้ใช้ได้กับ AWS Redhat 7.4 VM ขอบคุณ!
Jon Sampson

2

นอกเหนือจากการตั้งค่าบรรทัดคำสั่ง grub คุณยังต้องกำหนดค่าการปรับ แต่ไม่ได้ใช้คำแนะนำที่คุณเชื่อมโยงด้วยเนื่องจากเต็มไปด้วยข้อผิดพลาดมันอาจใช้เวลาครึ่งวันในการอธิบายทั้งหมด

สร้างโปรไฟล์ที่ปรับแต่งเอง (ซึ่งฉันจะโทรหาcustom) จากนั้นตั้งค่าโปรไฟล์ คุณจะยึดตามโปรไฟล์ที่มีอยู่เช่นvirtual-guestถ้าคุณกำลังทำงานในเครื่องเสมือน (แน่นอนว่า EC2) หรือthroughput-performanceถ้าคุณอยู่บนเครื่องจริง

สร้างไดเรกทอรีเพื่อเก็บโปรไฟล์ที่กำหนดเอง:

mkdir /etc/tuned/custom

สร้างโปรไฟล์ที่กำหนดเอง/etc/tuned/custom/tuned.confตัวอย่างเช่น:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

ตอนนี้ตั้งค่าโปรไฟล์:

tuned-adm profile custom

คำแนะนำเหล่านั้นเต็มไปด้วยข้อผิดพลาด? ใช้เวลาครึ่งวันในการอธิบาย? นั่นคือสิ่งที่ฉันพยายามจะเข้าใจ
vcarel

ฉันไม่เข้าใจคำตอบของคุณ ทำไมฉันต้องกำหนดค่าด้วงและใช้การปรับแต่งพร้อมกัน?
vcarel

1
เพราะมันเป็นค่าเริ่มต้นในการกำหนดค่าเคอร์เนลและโดยค่าเริ่มต้นในการกำหนดค่าปรับ คุณต้องเปลี่ยนทั้งสองอย่างเพื่อให้มีประสิทธิภาพโดยสมบูรณ์
Michael Hampton

1
ดูเหมือนว่าการกำหนดค่าการปรับพอ ... ฉันไม่ต้องเปลี่ยนการตั้งค่าด้วง BTW มีการตั้งค่าอื่นที่ปรับแล้วเพื่อปิดการใช้งานการจัดระเบียบ THP ด้วยหรือไม่
vcarel

@vcarel ไม่จำเป็นเนื่องจาก hugepages แบบโปร่งใสถูกปิดใช้งานอยู่!
Michael Hampton

1

ลองนี่สิ

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 - เพิ่มปิดการใช้งานโปร่งใส hugepages


0

คุณสามารถแก้ไขไฟล์ /etc/rc.local และเพิ่มคำสั่งต่อไปนี้ไปยังไฟล์นั้น:

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

และเรียกใช้chmod +x /etc/rc.d/rc.localเพื่อให้แน่ใจว่าสคริปต์จะถูกดำเนินการในระหว่างการบูต ทดสอบบน Amazon Linux 2


-2

แก้ไข:คำตอบข้างต้นไม่ถูกต้องเนื่องจากลูกบิดหน้าขนาดใหญ่ที่โปร่งใสหายไปจาก sysctl ในขณะนี้ ขอโทษสำหรับเสียงรบกวน


/etc/sysctl.confคุณสามารถใส่ค่าที่ต้องการใน

จาก sysctl.conf (5) หน้าคน:

SYSCTL.CONF (5) รูปแบบไฟล์ SYSCTL.CONF (5)

ชื่อ
       sysctl.conf - sysctl preload / ไฟล์กำหนดค่า

รายละเอียด
       sysctl.conf เป็นไฟล์ง่าย ๆ ที่มีค่า sysctl ที่จะอ่านและตั้งค่าโดย sysctl ไวยากรณ์เป็นดังนี้:

              # ความคิดเห็น
              ; คิดเห็น

              ค่า token =

       โปรดทราบว่าบรรทัดว่างจะถูกละเว้นและช่องว่างก่อนและหลังโทเค็นหรือค่าจะถูกละเว้นแม้ว่าค่าสามารถมีช่องว่างภายใน เส้นที่ขึ้นต้นด้วย # หรือ; ได้รับการพิจารณา
       ความคิดเห็นและละเว้น

ตัวอย่าง
              ตัวอย่าง # sysctl.conf
              #
                kernel.domainname = example.com
              ; อันนี้มีที่ว่างซึ่งจะเขียนถึง sysctl!
                kernel.modprobe = / sbin / mod probe

1
ไม่สามารถกำหนดค่านี้โดยใช้ sysctl
Michael Hampton

ทำไม? ฉันมักจะปรับแต่ง / sys / Knowbs โดยใช้ sysctl.conf ... ฉันขาดอะไรบางอย่างที่นี่? แก้ไข: ไม่เป็นไรฉันพบมันในเอกสาร RHEL ขอบคุณที่ชี้ให้ฉันทราบว่า)
shodanshok
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.