CentOS 7 EC2 उदाहरण पर THP और THP डीफ़्रेग को अक्षम करें


9

मैं एक CentOS 7 EC2 उदाहरण पर पारदर्शी_hugepage (THP) को अक्षम करना चाहता हूं, जो डिफ़ॉल्ट रूप से सक्षम है:

# 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(जैसा कि वहां बताया गया है ), लेकिन यह बेहतर काम नहीं करता था।

तो ... मैं AOS EC2 उदाहरण पर चल रहे CentOS 7 पर THP को कैसे निष्क्रिय कर सकता हूं?

संपादित करें: परिवर्तित शीर्षक ... मुझे THP और THP डीफ़्रैग को अक्षम करने की आवश्यकता है


ब्याज के लिए, क्या मैं पूछ सकता हूं कि आप टीएचपी को क्यों निष्क्रिय करना चाहते हैं?
कैमरन केर


रिबूट करने के बाद आपका इंस्टेंस काम नहीं करेगा अगर आप "पारदर्शी_हुगेपेज = को कभी भी /etc/grub.conf की कर्नेल लाइन में जोड़ें" और इस लाइन को ग्रब फ़ाइल से निकालने की आवश्यकता नहीं होगी। इस प्रयोजन के लिए हम मौजूदा उदाहरण को नए में संलग्न कर सकते हैं और फ़ोल्डर में विभाजन को जोड़ सकते हैं
Artem.Borysov

जवाबों:


14

समाधान ट्यून में है , जैसा कि @ माइकल-हैम्पटन द्वारा बताया गया है। मुश्किल हिस्सा यह है कि 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 पर काम करता है। धन्यवाद!
जॉन सैम्पसन

2

ग्रब कमांड लाइन सेट करने के अलावा, आपको ट्यून को कॉन्फ़िगर करने की भी आवश्यकता है। लेकिन आपके द्वारा लिंक किए गए निर्देशों का उपयोग न करते हुए, क्योंकि वे त्रुटियों से भरे हुए हैं इसलिए उन सभी को समझाने में आधा दिन लगेगा।

एक कस्टम ट्यून्ड प्रोफ़ाइल बनाएं (जिसे मैं कॉल करूंगा 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
क्योंकि यह कर्नेल विन्यास में डिफ़ॉल्ट रूप से चालू है और देखते विन्यास में डिफ़ॉल्ट रूप से चालू। पूरी तरह से प्रभावी होने के लिए आपको दोनों को बदलने की आवश्यकता है।
माइकल हैम्पटन

1
ट्यूनिंग को कॉन्फ़िगर करना पर्याप्त लगता है ... मुझे ग्रब कॉन्फिगरेशन को बदलना नहीं था। बीटीडब्ल्यू, क्या टीएचपी डीफ़्रैग को भी अक्षम करने के लिए एक और ट्यून सेटिंग है?
vcarel

@vcarel यह आवश्यक नहीं है क्योंकि पारदर्शी विशालता पहले से ही अक्षम है!
माइकल हैम्पटन

1

यह भी कोशिश करें

नैनो /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

सुडो चामोद 755 /etc/init.d/disable-transparent-hugepages

sudo chkconfig --add डिसएबल-ट्रांसपेरेंट-हैवीपेज


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यह सुनिश्चित करने के लिए कि बूट के दौरान स्क्रिप्ट निष्पादित की जाएगी। अमेज़न लिनक्स 2 पर परीक्षण किया गया।


-2

EDIT: ऊपर दिया गया उत्तर गलत है , क्योंकि पारदर्शी विशाल पृष्ठ knobs इस समय sysctl से गायब हैं। शोर के लिए क्षमा करें।


आप वांछित मान डाल सकते हैं /etc/sysctl.conf

Sysctl.conf (5) मैन पेज से:

SYSCTL.CONF (5) फ़ाइल प्रारूप SYSCTL.CONF (5)

नाम
       sysctl.conf - sysctl प्रीलोड / कॉन्फ़िगरेशन फ़ाइल

विवरण
       sysctl.conf एक सरल फ़ाइल है जिसमें sysctl मानों को sysctl द्वारा पढ़ा और सेट किया जाना है। सिंटैक्स इस प्रकार है:

              # टिप्पणी
              ; टिप्पणी

              टोकन = मूल्य

       ध्यान दें कि एक टोकन या मूल्य से पहले और बाद में रिक्त लाइनों को अनदेखा किया जाता है, और व्हाट्सएप को अनदेखा किया जाता है, हालांकि एक मान में व्हाट्सएप हो सकता है। लाइनें जो एक # या से शुरू होती हैं; माना जाता है
       टिप्पणी और नजरअंदाज कर दिया।

उदाहरण
              # sysctl.conf नमूना
              #
                kernel.domainname = example.com
              ; यह एक जगह है जो sysctl को लिखा जाएगा!
                kernel.modprobe = / sbin / mod जांच

1
इसे sysctl का उपयोग करके कॉन्फ़िगर नहीं किया जा सकता है।
माइकल हैम्पटन

क्यों? मैं अक्सर sysctl.conf का उपयोग करके / sys / knowbs को ट्वीक करता हूं ... मुझे यहां कुछ याद आ रहा है? संपादित करें: कोई बात नहीं, मैं इसे आरएचईएल प्रलेखन पर पाया। मुझे इशारा करने के लिए धन्यवाद;)
शोडान्शोक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.