Tudjon meg többet a Linux hatalmas oldalairól. Értsd meg, mi a hatalmas oldal, hogyan kell konfigurálni, hogyan kell ellenőrizni az aktuális állapotot, hogyan lehet letiltani.
ebben a cikkben végigvezetjük a hatalmas oldalak részleteit, hogy válaszolni tudjon: mit hatalmas oldalak vannak Linuxban? Hogyan lehet engedélyezni/letiltani a hatalmas oldalakat? Hogyan lehet meghatározni a hatalmas oldalértéket? Linuxban, például RHEL6, RHEL7, Ubuntu stb.
kezdjük a hatalmas oldalak alapjait.
mi a hatalmas oldal a Linuxban?
A Hatalmas oldalak hasznosak a virtuális memória kezelésében a Linux rendszerben. Ahogy a neve is sugallja, segítenek a hatalmas méretű oldalak kezelésében a memóriában a szokásos 4KB oldalméret mellett. Megadhat olyan hatalmas, mint 1 GB oldalméret segítségével hatalmas oldalakat.
a rendszerindítás során a memória részét hatalmas oldalakkal foglalja le az alkalmazás számára. Ezt a memóriarészt, azaz ezeket a hatalmas oldalak által elfoglalt memóriát soha nem cserélik ki a memóriából. Addig fog ott maradni, amíg meg nem változtatja a konfigurációt. Ez nagymértékben növeli az alkalmazás teljesítményét, mint például az Oracle database, elég nagy memóriaigényekkel.
miért érdemes hatalmas oldalt használni?
a virtuális memória kezelésében a kernel fenntart egy táblázatot, amelyben a virtuális memória címét egy fizikai címre leképezi. Minden oldal tranzakcióhoz a kernelnek be kell töltenie a kapcsolódó leképezést. Ha kis méretű oldalakkal rendelkezik, akkor több oldalszámot kell betöltenie a rendszermagból, hogy több leképezési táblát töltsön be. Ez csökkenti a teljesítményt.
a hatalmas oldalak használata azt jelenti, hogy kevesebb oldalra lesz szüksége. Ez nagymértékben csökkenti a kernel által betöltendő leképezési táblák számát. Ez növeli a kernel szintű teljesítményt, ami végső soron előnyös az alkalmazás számára.
röviden, azáltal, hogy lehetővé teszi a hatalmas oldalak, a rendszer kevesebb oldal táblák foglalkozni, és így kevesebb rezsi eléréséhez / karbantartásához őket!
hogyan kell konfigurálni a hatalmas oldalakat?
futtassa a parancs alatt, hogy ellenőrizze az aktuális hatalmas oldalak részleteit.
root@kerneltalks # grep Huge /proc/meminfoAnonHugePages: 0 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kB
a fenti kimeneten látható, hogy az egyoldalas Méret 2 MB Hugepagesize
és összesen 0 oldal a rendszeren HugePages_Total
. Ez a hatalmas oldalméret 2 MB-ról max 1 GB-ra növelhető.
futtassa a szkript alatt, hogy megkapja, mennyi hatalmas oldalra van szüksége a rendszernek jelenleg. A forgatókönyv az Oracle – től származik, és megtalálható.
#!/bin/bash## hugepages_settings.sh## Linux bash script to compute values for the# recommended HugePages/HugeTLB configuration## Note: This script does calculation for all shared memory# segments available when the script is run, no matter it# is an Oracle RDBMS shared memory segment or not.# Check for the kernel versionKERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`# Find out the HugePage sizeHPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`# Start from 1 pages to be on the safe side and guarantee 1 free HugePageNUM_PG=1# Cumulative number of pages required to handle the running shared memory segmentsfor SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "*"`do MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q` if ; then NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` fidone# Finish with resultscase $KERN in '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; '2.6' | '3.8' | '3.10' | '4.1' ) echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;;esac# End
mentheti a /tmp
as hugepages_settings.sh
majd futtassa az alábbiak szerint :
root@kerneltalks # sh /tmp/hugepages_settings.shRecommended setting: vm.nr_hugepages = 124
A kimenet hasonló lesz néhány számhoz, amint azt a fenti Minta kimenet mutatja.
Ez azt jelenti, hogy a rendszernek 124 hatalmas, 2 MB-os oldalra van szüksége! Ha 4 MB-ot állított be oldalméretként, akkor a kimenet 62 lett volna. Érted a lényeget, ugye?
A hugepages konfigurálása a kernelben
most az utolsó rész a fent említett kernel paraméter konfigurálása és újratöltése. Adja hozzá a /etc/sysctl.conf
érték alatti értéket, majd töltse be újra a konfigurációt a sysctl -p
parancs kiadásával.
vm.nr_hugepages=126
figyeljük meg, hogy 2 extra oldalt adtunk hozzá a kernelhez, mivel néhány oldalt meg akarunk tartani a ténylegesen szükséges számnál.
most hatalmas oldalak vannak konfigurálva a kernelben, de ahhoz, hogy az alkalmazás használhassa őket, növelnie kell a memória korlátokat is. Az új memóriakorlátnak 126 oldal x 2 MB-nak kell lennie = 252 MB, azaz 258048 KB.
a Beállítások alatt szerkeszteni kell /etc/security/limits.conf
soft memlock 258048 hard memlock 258048
néha ezek a beállítások az alkalmazásspecifikus fájlokban vannak konfigurálva, mint például az Oracle DB its esetében /etc/security/limits.d/99-grid-oracle-limits.conf
ennyi! Érdemes újraindítani az alkalmazást, hogy használja ezeket az új hatalmas oldalakat.
hogyan lehet letiltani a hugepages-t?
a HugePages alapértelmezés szerint általában engedélyezve van. Az alábbi paranccsal ellenőrizheti a hatalmas oldalak aktuális állapotát.
root@kerneltalks # cat /sys/kernel/mm/transparent_hugepage/enabled madvise never
zászló a kimenet azt mutatja, hogy hugepages engedélyezve vannak a rendszeren.
RedHat alapú rendszereknél a fájl elérési útja /sys/kernel/mm/redhat_transparent_hugepage/enabled
Ha le szeretné tiltani a hatalmas oldalakat, akkor adja hozzá transparent_hugepage=never
a kernel
sor végén /etc/grub.conf
és indítsa újra a rendszer.