Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Linux:Code duptext feature

Son Güncelleme:Oct 08, 2026

Eşit olmayan bellek erişimli (NUMA) mimarilerde, özellikle Arm tabanlı örneklerde işlemler bazen kendi yerel düğümü yerine uzak bir NUMA düğümünde depolanan kod bölümlerine erişir. Bu düğümler arası erişim gecikme süresini artırır ve bant genişliği kullanımını yükseltir. Code duptext özelliği, uzak kod bölümlerini yerel düğüme kopyalayarak işlemlerin yerel bellekten okumasını sağlar ve bu ek yükü ortadan kaldırır.

Nasıl çalışır?

Çekirdek, bir NUMA düğümündeki bir işlemin başka bir düğümdeki kod bölümlerine eriştiğini algıladığında sayfa düzeyinde granüleriteyle (her sayfa 4 KB'dir) yerel bir kopya oluşturur:

  1. Düğüm 1'deki bir işlem, düğüm 0'da depolanan libc.so dosyasına erişir veya düğüm 0'daki bir işlem, düğüm 1'de depolanan test dosyasına erişir.

  2. Çekirdek, uzak kod bölümünün yerel düğümde bir kopyasını oluşturur; düğüm 1'de bir libc.so kopyası ve düğüm 0'da bir test kopyası bulunur.

  3. Her işlem kendi yerel kopyasından okuma yapar, böylece düğümler arası erişim ortadan kalkar.

Kod bölümünü tutan orijinal sayfaya ana sayfa adı verilir. Duptext özelliği tarafından oluşturulan yerel kopyaya ise alt sayfa adı verilir.

İşletim sistemi, bellek baskısını gidermek veya yük dengeleme gereksinimlerini karşılamak amacıyla belleği birden fazla NUMA düğümüne dağıtabilir; bu durum düğümler arası kod erişimine neden olur. Önerilen azaltma yöntemi, code duptext özelliğini etkinleştirmektir.

image

Sınırlamalar

Code duptext özelliği aşağıdaki iki koşulu aynı anda gerektirir:

  • Örnek türü: ECS Bare Metal Instance aileleri. Daha fazla bilgi için bkz. Genel Bakış.

  • Görüntü: Çekirdek sürümü 5.10.112-11 veya üzeri olan Alibaba Cloud Linux 3.

Örneğinizin çekirdek sürümünü kontrol etmek için aşağıdaki komutu çalıştırın:

uname -r

Anahtarlar

Bu özellikte iki anahtar bulunur: genel bir anahtar ve memcg başına bir anahtar. Çekirdeğin bir işlem için alt sayfalar oluşturabilmesi için her ikisinin de etkinleştirilmesi gerekir.

Anahtar Açıklama Varsayılan
/sys/kernel/mm/duptext/enabled Genel anahtar. Özelliği tüm sistem için etkinleştirmek üzere 1 değerine, devre dışı bırakmak üzere 0 değerine ayarlayın. 0
/sys/fs/cgroup/memory/<memcg-dir>/memory.allow_duptext Memcg başına anahtar. Özelliği ilgili memcg içindeki tüm işlemler için etkinleştirmek üzere 1 değerine, devre dışı bırakmak üzere 0 değerine ayarlayın. 0
Genel anahtar 0 olarak ayarlandığında çekirdek, örnekteki tüm alt sayfaları otomatik olarak temizler.

Alt sayfaları izleyin

Duptext etkinliğini kontrol etmek için aşağıdaki dosyaları kullanın:

Dosya veya alan Gösterdiği bilgiler
nr_duptext içeren /proc/vmstat Çekirdekte şu anda duptext olarak işaretlenmiş alt sayfa sayısı. Sıfırdan büyük bir değer, özelliğin aktif olarak alt sayfalar oluşturduğunu doğrular. Özelliği etkinleştirdikten sonra değer sıfırda kalıyorsa düğümler arası kod erişimi algılanmamıştır.
DupText içeren /proc/meminfo Duptext alt sayfaları tarafından kullanılan toplam bellek miktarı (KB cinsinden).
/proc/<pid>/smaps İşlem başına alt sayfa istatistikleri. Çıktıdaki DupText alanı, ilgili işlem için yerel düğümde bir alt sayfa oluşturulup oluşturulmadığını doğrular.

Code duptext özelliğini etkinleştirin

Bu örnekte, iki düğümlü bir NUMA örneğinde bir test programı derlenip çalıştırılır.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Alibaba Cloud Linux 3 (5.10.112-11 veya üzeri) çalıştıran bir ECS Bare Metal Instance

  • Kök veya sudo erişimi

Adımlar

  1. ECS örneğine bağlanın. Talimatlar için bkz. SSH üzerinden bir Linux örneğine bağlanmak için Workbench'i kullanma.

  2. (İsteğe bağlı) Örneğin NUMA topolojisini görüntüleyin:

    numactl yüklü değilse öncelikle sudo yum install numactl komutunu çalıştırın.
    numactl -H

    Çıktı, tüm NUMA düğümlerini listeler. Aşağıdaki örnekte, düğüm 0 ve düğüm 1'e sahip iki düğümlü bir örnek gösterilmektedir.

    image.png

  3. Test programını düğüm 1'de derleyin; böylece test ikili dosyası için sayfa önbelleğini düğüm 1 tutar:

    numactl -N 1 -m 1 gcc test.c -o test
  4. Genel anahtarı etkinleştirin:

    sudo sh -c 'echo 1 > /sys/kernel/mm/duptext/enabled'
  5. Bir memcg dizini oluşturun ve bunun için duptext özelliğini etkinleştirin:

    sudo mkdir /sys/fs/cgroup/memory/test
    sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.allow_duptext'
  6. test ikili dosyasını memcg altında, düğüm 0'a bağlı olarak çalıştırın. Çekirdek düğümler arası erişimi algılar ve test kod bölümünün bir alt sayfa kopyasını düğüm 0'da oluşturur:

    cgexec yüklü değilse öncelikle sudo yum install -y libcgroup-tools komutunu çalıştırın.
    sudo cgexec -g "memory:test" numactl -N 0 -m 0 ./test
  7. test işlemi için bir alt sayfa oluşturulduğunu doğrulayın:

    sudo cat /proc/$(pidof test)/smaps

    Çıktıdaki DupText alanı, düğüm 0'da bir alt sayfa kopyası oluşturulduğunu doğrular.

    image.png

    Örnek düzeyindeki duptext istatistiklerini kontrol etmek için aşağıdaki komutları çalıştırın:

    cat /proc/vmstat | grep -i duptext
    cat /proc/meminfo | grep -i duptext

    nr_duptext değeri sıfırdan büyükse özellik aktif olarak alt sayfalar oluşturmaktadır.

Code duptext özelliğini devre dışı bırakın

İş gereksinimlerinize göre code duptext özelliğini devre dışı bırakabilirsiniz. Devre dışı bırakıldığında çekirdek, örnekteki tüm alt sayfaları otomatik olarak temizler.

  1. ECS örneğine bağlanın. Talimatlar için bkz. SSH üzerinden bir Linux örneğine bağlanmak için Workbench'i kullanma.

  2. Genel anahtarı devre dışı bırakın:

    sudo sh -c 'echo 0 > /sys/kernel/mm/duptext/enabled'
  3. Tüm alt sayfaların temizlendiğini doğrulayın:

    cat /proc/vmstat | grep -i duptext
    cat /proc/meminfo | grep -i duptext

    Her iki değer de 0 olmalıdır; bu durum özelliğin devre dışı bırakıldığını ve tüm alt sayfaların geri alındığını doğrular.

    image.png