تنظیم huge page

مقدمه

Huge Pages ویژگی‌ای است که به مدیریت حافظه در سطح سیستم‌عامل کمک می‌کند و برای پایگاه‌داده‌هایی مانند Oracle Database بسیار مفید است. استفاده از Huge Pages باعث بهینه‌سازی عملکرد و کاهش سربار حافظه می‌شود.

از چه میزان رم به بالا توصیه می‌شود؟

استفاده از Huge Pages معمولاً برای سیستم‌هایی که دارای 16 گیگابایت رم و بالاتر هستند، توصیه می‌شود. دلیل این امر این است که در سیستم‌هایی با حافظه زیاد، مدیریت حافظه با صفحات بزرگ‌تر (مثلاً 2 مگابایت به جای 4 کیلوبایت) کارایی بالاتری دارد و منجر به کاهش تعداد ورودی‌های Page Table می‌شود.

توضیح مختصر در مورد Page Table

Page Table یک ساختار داده‌ای است که توسط سیستم‌عامل و سخت‌افزار پردازنده برای مدیریت فضای حافظه مجازی استفاده می‌شود. وظیفه اصلی آن نگاشت آدرس‌های حافظه مجازی (که توسط برنامه‌ها استفاده می‌شود) به آدرس‌های فیزیکی (در حافظه RAM) است.

هر ورودی در این جدول نشان‌دهنده یک صفحه (Page) در حافظه مجازی است و شامل اطلاعاتی مانند آدرس فیزیکی صفحه و مجوزهای دسترسی به آن است.

نقش Page Table و تأثیر Huge Pages

در سیستم‌هایی که از صفحات معمولی کوچک (مثلاً 4 کیلوبایت) استفاده می‌کنند، Page Table می‌تواند بسیار بزرگ شود، زیرا تعداد زیادی ورودی برای نگاشت آدرس‌ها نیاز دارد. استفاده از Huge Pages (مثلاً 2 مگابایت به جای 4 کیلوبایت) باعث می‌شود که تعداد ورودی‌های مورد نیاز در Page Table کاهش یابد، که به نوبه خود باعث کاهش سربار سیستم و افزایش کارایی حافظه می‌شود.

به‌طور خلاصه، با استفاده از Huge Pages، تعداد ورودی‌های Page Table کمتر شده و مدیریت حافظه مؤثرتر می‌شود.

فواید Huge Pages

  1. کاهش سربار حافظه: با استفاده از صفحات بزرگ‌تر، تعداد ورودی‌های Page Table کاهش می‌یابد و در نتیجه سربار CPU برای مدیریت حافظه کمتر می‌شود.
  2. کاهش Fragmentation: استفاده از Huge Pages باعث کاهش تکه‌تکه شدن حافظه (Fragmentation) می‌شود.
  3. ثبات حافظه: حافظه تخصیص داده‌شده برای Huge Pages به‌صورت دائمی در حافظه نگه‌داری می‌شود و در نتیجه برای پایگاه‌داده ثبات بیشتری فراهم می‌کند.
  4. کاهش استفاده از حافظه Swapping: Huge Pages به سیستم کمک می‌کند تا از حافظه swap کمتر استفاده کند که به نوبه خود به افزایش عملکرد کمک می‌کند.

عملکرد دقیق Huge Pages در کمک به دیتابیس

Huge Pages به Oracle Database کمک می‌کند تا حافظه مشترک (Shared Memory) را به‌طور موثرتری مدیریت کند. این صفحات بزرگ باعث می‌شوند که دسترسی به حافظه برای پردازش‌ها سریع‌تر انجام شود، که منجر به بهبود عملکرد کلی دیتابیس می‌شود. به‌طور خاص، Oracle از Huge Pages برای مدیریت SGA (System Global Area) استفاده می‌کند.

غیرفعال‌سازی transparent_huge_page در سیستم‌عامل

Transparent Huge Pages (THP) به‌صورت خودکار صفحات بزرگ را تخصیص می‌دهد، اما برای دیتابیس‌های Oracle این ویژگی می‌تواند منجر به کاهش کارایی شود. برای غیرفعال‌سازی THP:

  1. با استفاده از دستور زیر وضعیت فعلی THP را بررسی کنید:

cat /sys/kernel/mm/transparent_hugepage/enabled

خروجی به شکل زیر خواهد بود:

always madvise [never]

غیرفعال‌سازی transparent_hugepage با استفاده از Grubby

اگر وضعیت فعلی always یا madvise است، از دستورات زیر برای غیرفعال‌سازی استفاده کنید:

  1. هسته پیش‌فرض را شناسایی کنید:

grubby --default-kernel

مثلاً:

/boot/vmlinuz-4.1.12-61.1.6.el7uek.x86_64

دستور زیر را برای غیرفعال‌سازی transparent_hugepage اجرا کنید:

grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-4.1.12-61.1.6.el7uek.x86_64

بررسی کنید که پارامتر به درستی اعمال شده است:

grubby --info /boot/vmlinuz-4.1.12-61.1.6.el7uek.x86_64

روش جایگزین:

می‌توانید خطوط زیر را به فایل /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

بررسی وضعیت فعلی Huge Pages

وضعیت فعلی Huge Pages را با دستور زیر بررسی کنید:

grep Huge /proc/meminfo

خروجی نمونه:

AnonHugePages:         0 kB

ShmemHugePages:        0 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

در این مثال، اندازه صفحات 2 مگابایت است و هنوز Huge Pages پیکربندی نشده است.

بررسی و تنظیم memlock

پارامتر memlock مقدار حداکثر حافظه‌ای را که می‌تواند در حافظه قفل شود، مشخص می‌کند و باید حداقل 90 درصد از مقدار فعلی RAM باشد. برای بررسی تنظیمات فعلی:

cat /etc/security/limits.conf | grep memlock

خروجی:

#        - memlock - max locked-in-memory address space (KB)

oracle          soft    memlock    475423826

oracle          hard    memlock    475423826

تنظیم tmpfs برای استفاده مناسب از SGA

tmpfs یک سیستم فایل مبتنی بر حافظه است که می‌تواند برای ذخیره اطلاعاتی که نیاز به دسترسی سریع دارند، مورد استفاده قرار گیرد. نقطه Mount آن، /dev/shm، باید حداقل به اندازه‌ی SGA_MAX_SIZE باشد.

برای بررسی اندازه tmpfs:

df -h

خروجی نمونه:

tmpfs           128G  637M  128G   1% /dev/shm

برای تغییر اندازه tmpfs:

تنظیم موقت:

mount -t tmpfs shmfs -o size=4g /dev/shm

تنظیم دائمی: افزودن خط زیر به فایل /etc/fstab:

shmfs   /dev/shm        tmpfs   size=128g       0 0

و زدن دستور

mount -a remount

نحوه دقیق اجرای Huge Pages

پشتیبان‌گیری از PFILE و تنظیم SGA (در صورت نیاز):

sqlplus / as sysdba

create pfile='/home/oracle/pfile030202.ora' from spfile;

alter system set sga_max_size=70g scope=spfile;

alter system set sga_target=65g scope=spfile;

alter system set use_large_pages=only scope=spfile;

در سیستمی که در حال اجرا هستیم، میزان رم 128 گیگ است.

خاموش کردن دیتابیس: دیتابیس را خاموش کنید تا بتوانید تغییرات مورد نظر را اعمال کنید.

تنظیم مقدار Huge Pages در sysctl.conf:

روش a: محاسبه مقدار صفحات مورد نیاز

(maximum sga in GB * 1024 /2) + 1%

روش b: استفاده از اسکریپت hugepages_settings.sh:

https://t.me/vahiddb_dba/53

chmod +x hugepages_settings.sh

./hugepages_settings.sh

سپس، تنظیمات را به فایل /etc/sysctl.conf اضافه کنید:

vm.nr_hugepages=<recommended_value>

و تغییرات را اعمال کنید:

sysctl -p

راه‌اندازی مجدد دیتابیس: دیتابیس را راه‌اندازی کنید. اگر با خطایی مواجه شدید که به مقدار حافظه مربوط بود، حافظه را آزاد کنید:

echo 3 > /proc/sys/vm/drop_caches

بررسی وضعیت جدید Huge Pages: برای اطمینان از اعمال صحیح تنظیمات، دستور زیر را اجرا کنید:

grep Huge /proc/meminfo

خروجی مثال:

AnonHugePages:         0 kB

ShmemHugePages:        0 kB

HugePages_Total:   38400

HugePages_Free:    34849

HugePages_Rsvd:    32290

HugePages_Surp:        0

Hugepagesize:       2048 kB

اختیاری: آزادسازی فضای Swap: برای آزادسازی فضای Swap:

swapoff -a

swapon -a

توضیحات اضافی در مورد tmpfs و memlock

tmpfs

tmpfs یک سیستم فایل مبتنی بر حافظه است که برای داده‌هایی که به دسترسی سریع نیاز دارند، مورد استفاده قرار می‌گیرد. اندازه tmpfs باید به اندازه‌ی کافی بزرگ باشد تا بتواند مقدار SGA_MAX_SIZE را در خود جای دهد، زیرا Oracle از /dev/shm برای مدیریت حافظه مشترک (SGA) استفاده می‌کند. اگر اندازه tmpfs کمتر از SGA_MAX_SIZE باشد، دیتابیس دچار خطا می‌شود.

memlock

memlock تنظیمی است که میزان حافظه‌ای را که می‌تواند در حافظه فیزیکی قفل شود، مشخص می‌کند. این تنظیم باید حداقل 90 درصد از RAM باشد وقتی که Huge Pages فعال است، زیرا قفل کردن حافظه برای استفاده از Huge Pages الزامی است. این کار باعث می‌شود که Oracle حافظه مورد نیاز خود را از طریق Huge Pages به‌طور دائمی و بدون دخالت سیستم‌عامل در اختیار داشته باشد.