Hugetext, Şeffaf Büyük Sayfaların (Transparent Huge Pages - THP) bir uzantısıdır ve uygulamaların yanı sıra dinamik bağlantı kütüphanelerinin (DLL) yürütülebilir bölümlerini büyük sayfalara (genellikle 2 MB) eşler. Talimat Çeviri Yan Bakım Arabelleği (iTLB) hatalarını azaltarak ve iTLB kullanımını artırarak Hugetext; MySQL ve PostgreSQL gibi veritabanları ile büyük ölçekli Java uygulamaları dahil olmak üzere geniş kod segmentlerine sahip iş yüklerinin performansını iyileştirir. Hugetext ayrıca bellek parçalanmasını ve şişmesini önlemeye yardımcı olur, böylece genel bellek kullanımını geliştirir.
Performans kazanımları platforma ve iş yüküne göre değişir. Hugetext, iTLB baskısının darboğaz oluşturduğu durumlarda en büyük etkiyi gösterir.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
-
Aşağıdaki kernel sürümlerinden birini çalıştıran bir Alibaba Cloud Linux örneği:
Alibaba Cloud Linux 2: kernel
4.19.91-25veya üzeriAlibaba Cloud Linux 3: kernel
5.10.112-11veya üzeri
Örneğinizdeki kernel sürümünü kontrol etmek için uname -r komutunu çalıştırın.
Nasıl çalışır
Hugetext, THP ile benzer şekilde çalışır ancak tüm anonim bellek yerine yalnızca kod segmentlerini hedef alır. Etkinleştirildiğinde kernel, ikili dosyalar ve DLL'ler dahil olmak üzere yürütülebilir bellek eşlemelerini eşzamansız olarak tarar ve uygun sayfaları 2 MB'lık büyük sayfalarda birleştirir. Bu işlem, gereken iTLB girdisi sayısını azaltır, iTLB hata oranını düşürür ve uygulamanın yaşam döngüsü boyunca CPU verimliliğini artırır.
Hugetext eşzamansız çalıştığından, özelliği etkinleştirdiğinizde sayfalar hemen birleştirilmez ve devre dışı bıraktığınızda hemen ayrılmaz.
Hugetext'i etkinleştirin
Hugetext varsayılan olarak devre dışıdır. sysfs arayüzü üzerinden /sys/kernel/mm/transparent_hugepage/hugetext_enabled yoluna aşağıdaki değerlerden birini yazarak özelliği etkinleştirin.
| Değer | Mod | Açıklama |
|---|---|---|
1 |
İkili sayfa ve dinamik kütüphane sayfaları | İkili dosyaların ve DLL'lerin yürütülebilir bölümlerini büyük sayfalara eşler. Çoğu veritabanı ve uygulama iş yükü için bu modu kullanın. |
2 |
Anonim yürütülebilir sayfalar | Anonim yürütülebilir sayfaları (JIT ile derlenen kod) büyük sayfalara eşler. Java veya diğer JIT tabanlı çalışma zamanları için bu modu kullanın. |
3 |
Yukarıdakilerin tümü | Mod 1 ve Mod 2'yi birleştirir. İş yükünüz hem statik ikili dosyalar hem de JIT ile derlenen kod içeriyorsa bu modu kullanın. |
İlgili komutu çalıştırın:
-
Mod 1 — İkili sayfa ve dinamik kütüphane sayfaları:
sudo sh -c 'echo 1 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled' -
Mod 2 — Anonim yürütülebilir sayfalar:
sudo sh -c 'echo 2 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled' -
Mod 3 — İkili sayfalar, dinamik kütüphane sayfaları ve anonim yürütülebilir sayfalar:
sudo sh -c 'echo 3 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
Hugetext'i önyükleme sırasında yapılandırın
Hugetext ayarının yeniden başlatmalarda kalıcı olmasını sağlamak için GRand Unified Bootloader (GRUB) yapılandırmanızda hugetext önyükleme parametresini ayarlayın. Parametre, yukarıdaki tabloda açıklandığı gibi aynı değerleri (0, 1, 2 veya 3) kabul eder. Kesin söz dizimi için GRUB sürümünüzün ve görüntü belgelerinizin ilgili kısmına bakın.
Hugetext'in etkin olduğunu doğrulayın
Hugetext'i etkinleştirdikten sonra kernelin sayfaları eşzamansız olarak birleştirmesi için biraz zaman tanıyın. Ardından, bir işleme eşlenen büyük sayfaların boyutunu (KB cinsinden) raporlayan /proc/<pid>/smaps içindeki FilePmdMapped alanını kontrol edin.
<pid> ifadesini gerçek süreç kimliği (PID) ile değiştirin. Çalışan bir hizmetin PID değerini bulmak için pidof komutunu kullanın. Örneğin: pidof sshd.
sudo cat /proc/<pid>/smaps | grep FilePmdMapped | awk '{sum+=$2}END{print"Sum= ",sum}'
Sum değeri 0'dan büyükse süreç büyük sayfaları kullanıyor demektir. Değer 0 ise kernel henüz o süreç için sayfaları birleştirmemiş veya sürecin uygun nitelikte kod segmentleri yoktur.
Hugetext'i devre dışı bırakın
sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
Devre dışı bırakıldıktan sonra kernel mevcut büyük sayfaları hemen ayırmaz. Büyük sayfa önbellekleri de korunur. Bunları temizlemek için aşağıdaki yöntemlerden birini kullanın.
Büyük sayfa önbelleklerini temizleyin
Test sonuçlarının önceki bir oturumdan kalan önbelleğe alınmış büyük sayfalar nedeniyle sapmamasını sağlamak için kıyaslama yapmadan önce bu komutlardan birini çalıştırın.
-
Sistem genelindeki sayfa önbelleğini temizleyin:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' -
Belirli bir dosya için sayfa önbelleğini temizleyin:
sudo vmtouch -e /<path>/target<path>ifadesini uygulama ikili dosyanızın diziniyle değiştirin. Virtual Memory Toucher (vmtouch) yüklü olmalıdır. Yüklü değilse şu komutu çalıştırın:sudo yum install vmtouch -
Kalan büyük sayfaları ayırın:
sudo sh -c 'echo 1 > /sys/kernel/debug/split_huge_pages'
Dolgu özelliğini etkinleştirin
Dolgu (padding), bir ikili dosyanın metin segmenti 2 MB'tan küçük olduğu ve tek başına büyük sayfa kullanamadığı durumlar için isteğe bağlı bir optimizasyondur. Metin segmenti boyutu hugetext_pad_threshold değerini aştığında kernel segmenti 2 MB'a doldurarak büyük sayfaya eşlenmesine olanak tanır.
Dolgu özelliğinin çalışması için Hugetext'in etkin olması gerekir.
hugetext_pad_threshold değerini ayarlayarak dolguyu etkinleştirin (geçerli aralık: 0–2097151):
sudo sh -c 'echo [0~2097151] > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold'
Çoğu durumda 4096 değeri iyi sonuç verir:
sudo sh -c 'echo 4096 > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold'
Dolguyu devre dışı bırakmak için:
sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold'
Hizalama notu: Dolgunun beklendiği gibi çalışması için kod ve veri segmentlerinin 2 MB hizalı olması gerekir. Bunları hizalamak için varsayılan bağlayıcı betiğini (IDS dosyası) değiştirin ve her kod veya veri segmentinden önce . = ALIGN(0x200000); ifadesini ekleyin. 2 MB hizalaması olmadan rw-p veya r--p segmentlerini izleyen içerik beklendiği gibi doldurulmayabilir ve bazı bölümler 4 KB sayfalara geri dönebilir.
Performans faydaları
Fiziksel makinelerde Hugetext genellikle uygulama performansını %5–%8 oranında iyileştirir. Sanal makineler TLB baskısı gideriminin sanallaştırılmış ortamlarda daha belirgin olması nedeniyle daha yüksek kazançlar elde edebilir.
Aşağıdaki sonuçlar, 32 sanal CPU (vCPU) içeren bir Arm platformundaki örnek üzerinde yapılan MySQL kıyaslamasından alınmıştır.
Saniye başına işlem sayısı (TPS): 2 MB büyük sayfalar ile 4 KB standart sayfalar

| Eşzamanlılık | Performans kazancı |
|---|---|
| 1 bağlantı | Büyük sayfalarla ~%6,9 daha yüksek TPS |
| 8–16 bağlantı (CPU çekişmesi ortadan kalktı, ~%25–%50 kullanım) | >%6,5 daha yüksek TPS |
| 32 bağlantı (CPU %100'de, yarışan iş yükleri) | ~%11 daha yüksek TPS; büyük sayfalar ayrıca daha kararlı TPS gösterir |
iTLB ölçümleri: büyük sayfalar ile 4 KB sayfalar

MySQL için Hugetext etkinleştirildikten sonra:
iTLB hataları yaklaşık on kat azaldı.
iTLB hata oranı ~%0,09'dan ~%0,08'e düştü.
Bin talimat başına iTLB hatası (MPKI) yaklaşık altı kat azaldı.
PostgreSQL de performansta %7'lik bir artış elde etmek için büyük sayfaları kullanabilir.
Temel kavramlar
| Terim | Açıklama |
|---|---|
| Büyük sayfa | Standart 4 KB'tan daha büyük bir bellek sayfasıdır. Büyük sayfalar, gerekli Çeviri Yan Bakım Arabelleği (TLB) girdisi sayısını azaltır ve bellek erişim verimliliğini artırır. |
| Şeffaf Büyük Sayfalar (THP) | Her sürecin sanal bellek alanını (VMA) tarayarak küçük sayfaları eşzamansız olarak 2 MB'lık büyük sayfalarda birleştiren bir kernel özelliğidir. THP anonim belleği hedef alır. |
| Hugetext | Yalnızca kod segmentlerini büyük sayfalarda birleştiren, yürütülebilir ikili bölümleri ve DLL'leri hedef alan bir THP uzantısıdır. |
| iTLB hatası | CPU'nun talimat TLB'sinde (iTLB) eşleşen bir girdi bulamaması durumunda oluşur. Yüksek hata oranı CPU aktarım hızını düşürür. |
| iTLB kullanımı | Aktif olarak kullanılan iTLB girdilerinin oranıdır. Daha yüksek kullanım, daha az hata ve daha iyi CPU aktarım hızı anlamına gelir. |
| iTLB MPKI | Bin talimat başına iTLB hatası. Daha düşük değer, daha iyi CPU verimliliğini gösterir. |
Sonraki adımlar
Alibaba Cloud Linux, veri segmentleri için bellek erişim verimliliğini artırmak amacıyla standart THP'yi de destekler. THP, 4 KB sayfaları 2 MB veya daha büyük büyük sayfalarda birleştirerek tüm bellek türlerinde sayfa tablosu girdilerini (PTE) ve TLB baskısını azaltır. Ayrıntılar için bkz. Alibaba Cloud Linux'ta performansı ayarlamak için THP'yi nasıl kullanırım?