Transparent Huge Page سعی می کند بصورت خودکار و با کمترین مداخله ادمین سیستم عامل وهمچنین صرف نظر از applicationای که در سرور در حال اجرا است، Huge Page را مدیریت کند.
این ویژگی(THP) برخلاف standard Huge Page به صورت پیش فرض در بسیاری از توزیع های لینوکس فعال است.
THP صرفا از صفحات با سایز 2MB را پشتیبانی می کند و برخلاف standard Huge Page، قابلیت swap شدن هم دارد.
البته قابلیت THP با باگهایی هم همراه بود و به طور کلی، Red Hat فعال ماندن این قابلیت(Transparent Huge Page) را برای محیطهایی که دیتابیسها در حال اجرا هستند، توصیه نمی کند.
“THP is not recommended for database workloads.”
اوراکل هم در MOS Note:361323.1، توصیه به غیرفعال کردن این ویژگی در محیطی که دیتابیس اوراکل درآن در حال اجرا است دارد. بر طبق این توصیه اوراکل، فعال بودن THP در محیط RAC ممکن است سبب reboot شدن غیرمنتظره نودهای کلاستر هم شود:
MOS Note:361323.1
“Because Transparent HugePages are known to cause unexpected node reboots and performance problems with RAC, Oracle strongly advises to disable the use of Transparent HugePages.In addition, Transparent Hugepages may cause problems even in a single-instance database environment with unexpected performance problems or delays. As such, Oracle recommends disabling Transparent HugePages on all Database servers running Oracle. This ONLY applies to the new feature Transparent HugePages, Oracle highly recommends the use of standard HugePages that were recommended for previous releases of Linux.”
علاوه بر این نکته، بررسی های تیم اوراکل لینوکس نشان می دهد که فعال بودن THP می تواند تا حدود 30 درصد به پرفورمنس دیتابیس لطمه وارد می کند.
غیرفعالسازی Transparent Huge Page
برای غیر فعال کردن این ویژگی، در ابتدا بررسی می کنیم که این ویژگی فعال است یا خیر؟
[root@myhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
عبارت [always] بیانگر فعال بودن این قابلیت است و عبارت [never] هم به غیرفعال بودن آن اشار دارد. با در نظر داشتن این مسئله، قابلیت THP در سیستم جاری فعال می باشد. همچنین دستور زیر حجم anonymous transparent huge page را نمایش می دهد:
[root@myhost ~]# cat /proc/meminfo | grep AnonHugePages
AnonHugePages: 73728 kB
علاوه بر دو روش فوق، با کمک دستور زیر هم می توان فعال بودن THP را با جزییات بیشتری مشاهده کرد:
[root@myhost ~]# egrep ‘trans|thp’ /proc/vmstat
nr_anon_transparent_hugepages 36
thp_fault_alloc 242
thp_fault_fallback 0
thp_collapse_alloc 27
thp_collapse_alloc_failed 0
thp_split 3
thp_zero_page_alloc 0
thp_zero_page_alloc_failed 0
برای غیرفعال کردن THP، باید عبارت transparent_hugepage=never را به فایل grub و پارامتر GRUB_CMDLINE_LINUX اضافه کنیم:
[root@myhost ~]# vi /etc/default/grub
GRUB_CMDLINE_LINUX=”crashkernel=auto rhgb quiet numa=off transparent_hugepage=never“
برای اعمال کردن این پارامتر، نیاز به بازسازی مجدد grub هست. با دستور زیر این بازسازی را انجام می دهیم:
[root@myhost ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Generating grub configuration file …
Found linux image: /boot/vmlinuz-4.1.12-94.3.9.el7uek.x86_64
Found initrd image: /boot/initramfs-4.1.12-94.3.9.el7uek.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d3f957112e484e61890c1e849a44b850
Found initrd image: /boot/initramfs-0-rescue-d3f957112e484e61890c1e849a44b850.img
done
در انتها سیستم را reboot می کنیم. با اجرای دستورات زیر، خواهیم دید که این قابلیت غیرفعال شده است:
[oracle@myhost ~]$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-4.1.12-94.3.9.el7uek.x86_64 root=UUID=3fb8ff10-01d8-4bd5-a363-5aaf4e78bcae ro crashkernel=auto rhgb quiet numa=off transparent_hugepage=never
[oracle@myhost ~]$ cat /proc/meminfo | grep AnonHugePages
AnonHugePages: 0 kB
[oracle@myhost ~]$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[oracle@myhost ~]$ egrep ‘trans|thp’ /proc/vmstat
nr_anon_transparent_hugepages 0
thp_fault_alloc 0
thp_fault_fallback 0
thp_collapse_alloc 0
thp_collapse_alloc_failed 0
thp_split 0
thp_zero_page_alloc 0
thp_zero_page_alloc_failed 0
Comments (2)