স্বচ্ছ হিটপেজগুলি অক্ষম করুন


63

আমরা একটি রেড মেশিনে এসএপি হানা ইনস্টল করছি । ইনস্টলেশন পদক্ষেপের অংশ হিসাবে, এটি উল্লেখ করা হয়েছে যে,

 To disable the usage of transparent hugepages set the kernel settings 
 at runtime with echo never > /sys/kernel/mm/transparent_hugepage/enabled 

সুতরাং রানটাইম পরিবর্তে, যদি আমি এটি স্থায়ী পরিবর্তন করতে চাই, আমি কি উপরের লাইনটি /proc/vmstatফাইলের ভিতরে যুক্ত করব ?


2
মনে রাখবেন যে আপনি যদি এখানে উল্লিখিত কিছু সমাধানগুলি ব্যবহার করেন, এমন কোনও সিস্টেমে যেটি 'টিউনড'ও চালায় তবে সুরযুক্ত সমাধানগুলি ওভাররাইড করতে পারে। আরও তথ্যের জন্য এখানে দেখুন: bugzilla.redhat.com/show_bug.cgi?id=1189868
দেজয় ক্লেটন

উত্তর:


80

এই স্থায়ী হিসাবে বিকল্পগুলি তৈরি করতে আপনি সাধারণত সেগুলি ফাইলে যুক্ত করতে পারেন /etc/sysctl.conf। আপনি এই কমান্ডটি ব্যবহার করে উপলভ্য বিকল্পগুলির একটি সম্পূর্ণ তালিকা দেখতে পাবেন:

$ sysctl -a

উদাহরণ

$ sudo sysctl -a | head -5
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 6000000
kernel.sched_latency_ns = 18000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_shares_ratelimit = 750000

আপনি hugepageযেমন আউটপুট সন্ধান করতে পারেন:

$ sudo sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0

ওখানে নেই?

তবে আউটপুট দিয়ে দেখছি না transparent_hugepage। আরও কিছুটা গুগল করা আমি এই ওরাকল পৃষ্ঠা জুড়ে এসেছি যা এই বিষয়টি নিয়েই আলোচনা করে। পৃষ্ঠাটির শিরোনাম: লিনাক্সে ওরেসলের জন্য হুগপেজগুলি কনফিগার করা (x86-64)

বিশেষত সেই পৃষ্ঠায় তারা উল্লেখ করে যে কীভাবে বিশাল পৃষ্ঠার বৈশিষ্ট্যটি অক্ষম করা যায়

উদ্ধৃতাংশ

স্বচ্ছ হিউজপেজ অক্ষম করার জন্য পছন্দের পদ্ধতিটি হ'ল "/etc/grub.conf" ফাইলের কার্নেল বুট লাইনে "স্বচ্ছ_হেজপেজ = কখনই না" যুক্ত করা।

   title Oracle Linux Server (2.6.39-400.24.1.el6uek.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.39-400.24.1.el6uek.x86_64 ro root=/dev/mapper/vg_ol6112-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=uk
    LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  rd_NO_DM rd_LVM_LV=vg_ol6112/lv_swap rd_LVM_LV=vg_ol6112/lv_root rhgb quiet numa=off
    transparent_hugepage=never
            initrd /initramfs-2.6.39-400.24.1.el6uek.x86_64.img

এটি কার্যকর করতে সার্ভারটি অবশ্যই পুনরায় চালু করতে হবে।

বিকল্পভাবে আপনি আপনার /etc/rc.localফাইলে কমান্ডটি যুক্ত করতে পারেন ।

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

আমি মনে করি যে আমি ২ য় বিকল্পের সাথে যাব, কারণ আপনি যখন কোনও কার্নেল থেকে অন্যটিতে উন্নীত করবেন তখন প্রথমটি আনসেট হওয়ার ঝুঁকিতে থাকবে।

আপনি নিশ্চিত করতে পারেন যে এটি পুনরায় বুট করার পরে নিম্নলিখিত কমান্ডের সাথে কাজ করেছে:

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

7
আপনি বেশিরভাগ ডিস্ট্রিবিউশনে / ইত্যাদি / ডিফল্ট / গ্রাবের মধ্যে GRUB_CMDLINE_LINUX_DEFAULT বিকল্পে স্বচ্ছ_হেজপেজ = কখনই যুক্ত না করে কার্নেল আপডেটগুলি টিকিয়ে রাখতে পারবেন option
Rwky

2
যদি আউটপুট cat /sys/kernel/mm/transparent_hugepage/enabledহয় [always] madvise never, তবে স্থিতিটি হয় alwaysবা এটি সক্ষম করা হয় ( []চারদিকে বন্ধনীগুলি নোট করুন always)
ub3rst4r

4
হিটপেজ এবং স্বচ্ছ হিটপেজকে বিভ্রান্ত করবেন না। পরবর্তীকালে অনেকগুলি সমস্যা হতে পারে, মূলত উচ্চ সিপিইউ ব্যবহারের সময় ক্রমাগত মেমরি ডিফ্র্যাগমেন্ট করার চেষ্টা করা হয় এবং সাধারণ 4 কেবি পৃষ্ঠাগুলিকে বিশাল 2 এমবি পৃষ্ঠায় রূপান্তর করতে হয়।
Marki555

2
@ রউকি - আপনার পরামর্শ অনুসারে টুইট করার সময় - আমি ফাইলটি সংরক্ষণের পরে পরবর্তী পদক্ষেপের উপর জোর দিয়েছি sudo update-grubনতুন সেটিংস "পাথরে লেখা" পাওয়ার জন্য সম্পাদন করা । গ্রাব ফাইল লাইনটি নির্দেশ করার জন্য +1।
ফারুন

2
ইসি ২-তে থাকা একটি আপডেট, ক্লাউডিমগ /etc/default/grub.d/50-cloudimg-settings.cfg ফাইল যুক্ত করে যা / etc / default / grub এ সেটিংসকে ওভাররাইড করে /etc/default/grub.d/ ফাইল যুক্ত করে 99-স্বচ্ছ-বিশাল পৃষ্ঠার কন্টেন্ট GRUB_CMDLINE_LINUX_DEFAULT = "$ GRUB_CMDLINE_LINUX_DEFAULT স্বচ্ছ_হেজপেজ = কখনই না" সহ এই বিষয়টিকে সমাধান করবে।
Rwky

13

আমি কেবল এই প্রশ্নের সাথে যুক্ত করতে চেয়েছিলাম কারণ আমি মারিয়াডিবি-র জন্য টোকুডিবি সক্ষম করার জন্য সেন্টোস ভি transparent তে স্বচ্ছ বিশাল পৃষ্ঠাগুলি অক্ষম করার চেষ্টা করছিলাম। আমি @ এসএলএম দ্বারা উল্লিখিত স্ক্রিপ্টটি এতে যুক্ত করেছি /etc/rc.localএবং এটি স্বচ্ছ হিটপেজগুলি অক্ষম করে। তবে লিনাক্সে যেভাবে স্টার্টআপ স্ক্রিপ্টগুলি কাজ করে /etc/rc.localতার কারণে সমস্ত পরিষেবা শুরু হওয়ার পরে কার্যকর করা হয়। অতএব, মারিয়াডিবি ইতিমধ্যে শুরু হওয়ার পরেও স্বচ্ছ বিশাল পৃষ্ঠাগুলি অক্ষম করা হচ্ছে এবং টোকুডিবি ইঞ্জিন আরম্ভ করবে না। স্বচ্ছ হিটপেজগুলি অক্ষম করার একমাত্র উপায় হ'ল transparent_hugepage=neverকার্নেল প্যারামিটারে যুক্ত করা।

আমি @ রওয়কির মন্তব্য লক্ষ্য করেছি You can make the first option survive kernel updates by adding transparent_hugepage=never to the GRUB_CMDLINE_LINUX_DEFAULT option in /etc/default/grub on most distributions.এবং জানতে পেরেছি যে সেন্টোস /etc/default/grubফাইলটি সমর্থন করে না এবং transparent_hugepage=neverএটি আপডেট হওয়ার পরে কার্নেল পরামিতিগুলি অদৃশ্য হওয়ার বিষয়ে উদ্বিগ্ন ছিল । তবে উদ্বেগের বিষয় নয়, সেন্টোসগুলি কার্নেল প্যারামিটারগুলিতে করা কোনও পরিবর্তন গ্রাবের মধ্যে রাখার জন্য সেটআপ করা হয় যাতে এটি আপডেট হয়ে গেলে সেগুলি রাখা হয়।

যোগ করার জন্য, গ্রাবের জন্য কার্নেল প্যারামিটারগুলি পরিবর্তন করার উপযুক্ত উপায়টি রয়েছে grubby। আমি transparent_hugepage=neverপ্রতিটি সাধারণ কার্নেলটি যুক্ত করতে এই সাধারণ স্ক্রিপ্টটি তৈরি করেছি grubby:

#!/bin/sh

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

for KERNEL in /boot/vmlinuz-*; do
    grubby --update-kernel="$KERNEL" --args='transparent_hugepage=never'
done

এর মতো বিকল্পের জন্য আমি এখনও চেষ্টা করব এবং এটিকে যুক্ত etc/sysctl.confকরব / যেহেতু বক্সে ইনস্টল করা কোনও কার্নেলের সাথে ধারাবাহিকভাবে প্রয়োগ করা হবে।
slm

আমি কেবল যুক্ত করতে চেয়েছিলাম আপনি যদি <code> / etc / default / grub </code> ফাইলটি সংশোধন করেন তবে grub-mkconfigগ্রাবের জন্য আসল কনফিগারেশন ফাইলটি তৈরি করতে আপনাকে 'রুট' হিসাবে চালানো দরকার ।
সিটলেটগাচো

3
ইসি 2 উবুন্টু দৃষ্টান্তের জন্য, /etc/default/grub.d/50-cloudimg-settings.cfgফাইলটি /etc/default/grubকাজ করার পরিবর্তে আমাকে ফাইলটি পরিবর্তন করতে হবে।
zhengyue

আমি CentOS 6.6 ব্যবহার করছি। আমি পরিবর্তন করেছি /etc/rc.localতবে এটি আমার পক্ষে কাজ করছে না। আপনি আমাকে দয়া করে মূল কেসটি ব্যাখ্যা করতে পারেন?
সন্দীপ সিং

@ s.singh হিসাবে আমি বলেছি /etc/rc.local is executed after all the services are startedতাই এটি কার্নেল স্তরে অক্ষম করা দরকার
ub3rst4r

6

পুতুল ব্যবহার করে এখানে একটি বাস্তবায়ন দেওয়া হল:

exec { "disable_transparent_hugepage_enabled":
  command => "/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled",
  unless  => "/bin/grep -c '\[never\]' /sys/kernel/mm/transparent_hugepage/enabled 2>/dev/null",
}

exec { "disable_transparent_hugepage_defrag":
  command => "/bin/echo never > /sys/kernel/mm/transparent_hugepage/defrag",
  unless  => "/bin/grep -c '\[never\]' /sys/kernel/mm/transparent_hugepage/defrag 2>/dev/null",
}

6

উপরের সমস্তগুলি আমার জন্য ইসি 2 উবুন্টু 16.04 এ কাজ করে নি, তবে এটি করেছে:

sudo apt install hugepages
sudo hugeadm --thp-never

4

যেহেতু কার্নেল লাইন transparent_hugepage=neverশুধু আমি যা প্রয়োজন অর্ধেক (উভয়, বিরক্তিকর MongoDB ব্যর্থ / লগ জন্য) নিষ্ক্রিয়, আমি মাধ্যমে জিদ করা হয়নি systemdপ্রারম্ভে স্ক্রিপ্ট কিন্তু এখন আছে: echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled। এটি সিস্টেমেটেল বুট স্ক্রিপ্টে (যখন সঠিকভাবে একটির মধ্যে কনফিগার করা থাকে /etc/systemd/system) বা সরাসরি ক্লিপ থেকে সরাসরি কাজ করে।


আপনি কি দয়া করে "সঠিকভাবে কনফিগার করা স্ক্রিপ্ট" এবং কীভাবে সবকিছু সেটআপ করবেন তার পদক্ষেপগুলি অন্তর্ভুক্ত করতে আপনার নির্দেশাবলী প্রসারিত করতে পারেন? অফিসিয়াল মঙ্গোডিবি নির্দেশাবলী ডকস.মংগডবি.আর. / ম্যানুয়াল / টিউটোরিয়াল / ট্রান্সপারেন্ট- হিউজ- পৃষ্ঠাগুলি পুরানো পথটি দেখায়, যদিও বর্তমানে সিস্টেমডটি প্রচলিত রয়েছে, এটি সিস্টেম পদ্ধতিতে ভাল লাগলে ভালো লাগবে।
ssasa

3

রেডিসের ক্ষেত্রে এটি একটি সতর্কতাও প্রকাশ করে যা টিএইচপি নিষ্ক্রিয় করার পরামর্শ দেয়। তবে বাগের প্রতিবেদনে যেমন উল্লেখ করা হয়েছে , অনেকগুলি ডিস্ট্রোসে /etc/rc.localপরিষেবাগুলি কার্যকর করা হয় এবং তারা পুনরায় আরম্ভ না করা পর্যন্ত এটি তাদের উপর কোনও প্রভাব ফেলে না। এছাড়াও নোট করুন যে ভার্চুয়ালাইজড পরিবেশে (যেমন ডিজিটালওশন) আপনি GRUB সেটিংস নিয়ন্ত্রণ করতে পারবেন না।

যেমন ক্ষেত্রে সমাধান ডেডিকেটেড ব্যবহার Init নিষ্ক্রিয় করতে স্ক্রিপ্ট স্বচ্ছ বৃহত পৃষ্ঠা হিসাবে এই পৃষ্ঠার , প্রস্তাব দেওয়া সেটিংস দ্বারা X-Start-Before। উদাহরণস্বরূপ, ডেবিয়ান Init Redis জন্য স্ক্রিপ্ট:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          disable-thp
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    redis-server
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable THP
# Description:       disables Transparent Huge Pages (THP) on boot
### END INIT INFO

case $1 in
start)
  if [ -d /sys/kernel/mm/transparent_hugepage ]; then
    echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
    echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
  else
    return 0
  fi
;;
esac 

ঠিক আমি খুঁজছেন ছিল কি.
নীলাও

2

ধন্যবাদ GitHub & PyYoshi
আমি systemd হল জন্য এই উদাহরণে পাওয়া

ফাইল তৈরি করুন

sudo vim /etc/systemd/system/disable-transparent-huge-pages.service

এটি পরিষেবা ফাইলে রাখুন

[Unit]
Description=Disable Transparent Huge Pages

[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

ডিবিয়ান / উবুন্টু ব্যবহারকারীদের জন্য

[Unit]
Description=Disable Transparent Huge Pages

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

তারপরে পরিষেবাটি সক্ষম করুন

systemctl enable disable-transparent-huge-pages
systemctl start disable-transparent-huge-pages
systemctl status disable-transparent-huge-pages

1

সমস্যার সাথে দেখা হলে

-bash: /sys/kernel/mm/transparent_hugepage/khugepaged/defrag: Permission denied

এমনকি সুডো সহ, নীচের কমান্ডগুলি ব্যবহার করে দেখুন:

sudo /bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
sudo /bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'

হাই, ইউনিক্স এসই তে স্বাগতম! দ্রষ্টব্য, এটি আরও ভাল হবে যদি আপনিও ব্যাখ্যা করেন যে আপনার আদেশগুলি কী করছে।
ব্যবহারকারী 259412

1

উত্তরযোগ্যদের জন্য এখানে একটি দ্রুত হ্যাক (আমি এর জন্য কোনও টেম্পলেট পরিচালনা করতে চাই না /etc/rc.local):

- name: Disable Transparent Huge Pages at boot
  lineinfile:
    dest: /etc/rc.local
    line: "if [ -d /sys/kernel/mm/transparent_hugepage ]; then echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled ; echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag ; fi"
  register: transparent_hugepage
- name: Disable disabled rc.local
  lineinfile:
    dest: /etc/rc.local
    line: 'exit 0'
    state: absent
- name: Disable Transparent Huge Pages at run time 1/2
  command: echo never > /sys/kernel/mm/transparent_hugepage/defrag
  when: transparent_hugepage|changed
- name: Disable Transparent Huge Pages at run time 2/2
  command: echo never > /sys/kernel/mm/transparent_hugepage/enabled
  when: transparent_hugepage|changed

0

YAST এবং GRUB বুটলোডার সহ SLES11 এসপি 3 transparent_hugepage=never-তে আমাদের [ইয়াস্ট-বুটলোডার-সম্পাদনা-.চ্ছিক কার্নেল প্যারামিটারের সাথে লাইন] যুক্ত করতে হবে। দ্রষ্টব্য: এই সরঞ্জামটি ফাইলটি পরিবর্তন করে /boot/grub/menu.lst

এই পরিবর্তন এবং পুনরায় বুট করার পরে কেবল টিএইচপি অক্ষম করা হয়েছিল।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.