全部产品
Search
文档中心

Alibaba Cloud Linux:Fitur kode duptext

更新时间:Jun 28, 2025

Dalam arsitektur akses memori non-uniform (NUMA), terutama pada Instance ECS Elastic Compute Service (ECS) berbasis Arm, setiap node NUMA memiliki memori lokal. Ketika program atau proses di satu node NUMA perlu mengakses potongan kode pada node NUMA lainnya, akses lintas-node menyebabkan latensi tambahan dan overhead performa. Untuk menangani masalah ini, Anda dapat menggunakan fitur kode duptext untuk menyalin potongan kode dari node remote ke node lokal.

Informasi latar belakang

  • Akses lintas-node potongan kode dan dampaknya pada sistem

    • Akses lintas-node potongan kode

      NUMA adalah arsitektur komputer yang dirancang untuk mengatasi masalah seperti latensi akses memori dan ketidakseimbangan beban bandwidth dalam sistem multiprosesor. Dalam arsitektur NUMA, sebuah node terdiri dari inti prosesor dan subsistem memori. Setiap node memiliki memori lokal. Suatu node NUMA mungkin menjalankan aplikasi atau proses yang potongan kodenya disimpan di node NUMA lainnya. Hal ini terjadi karena sistem operasi mungkin mengalokasikan memori ke beberapa node untuk menyelesaikan masalah kekurangan memori atau memenuhi persyaratan penyeimbangan beban. Dalam skenario akses lintas-node sebelumnya, aplikasi atau proses harus mendapatkan instruksi dari potongan kode yang disimpan di node lain.

    • Dampaknya pada sistem

      Akses lintas-node ke potongan kode dapat menyebabkan masalah performa tertentu, seperti meningkatnya latensi akses, efisiensi eksekusi yang berkurang, dan meningkatnya penggunaan bandwidth memori. Masalah-masalah tersebut terjadi karena akses lintas-node memerlukan transfer data melalui bus atau jaringan interkoneksi serta akses memori ke node remote. Operasi-operasi ini lebih lambat daripada operasi yang terlibat dalam akses memori lokal. Kami merekomendasikan agar Anda tidak melakukan operasi yang memerlukan akses lintas-node.

  • Prinsip fitur kode duptext yang menyelesaikan masalah yang disebabkan oleh akses lintas-node ke potongan kode

    Ketika akses lintas-node terdeteksi untuk potongan kode, fitur kode duptext membuat salinan potongan kode dari node remote dan menyimpan salinan tersebut di node lokal. Dengan cara ini, aplikasi atau proses di node lokal dapat mengakses salinan potongan kode tanpa akses lintas-node, yang mencegah latensi tambahan dan overhead memori. Gambar berikut menunjukkan alur kerja fitur kode duptext.

    1. Proses 1 di node 1 mengakses potongan libc.so di node 0, atau proses 0 di node 0 mengakses potongan test di node 1.

    2. Fitur kode duptext digunakan untuk membuat salinan libc.so di node 1 dan salinan test di node 0.

    3. Proses 1 dapat mengakses salinan libc.so, dan proses 0 dapat mengakses salinan test, yang menghilangkan akses lintas-node.

    Catatan

    Kernel mengelola memori dengan granularitas tingkat halaman. Setiap halaman berukuran 4 KB. Potongan kode suatu program disimpan di satu atau lebih halaman memori. Pertama kali potongan kode suatu program dibaca ke dalam memori dari hard disk dan ditambahkan ke cache halaman memori, halaman tempat potongan kode disimpan disebut halaman utama. Jika kernel mendeteksi bahwa suatu program di node lokal mengakses potongan kode di node lain, kernel menggunakan fitur kode duptext untuk membuat salinan potongan kode di node lokal dengan granularitas tingkat halaman. Halaman yang menyimpan salinan potongan kode disebut subhalaman.

Batasan

Hanya tipe instance dan gambar berikut yang mendukung fitur kode duptext:

  • Tipe instance: Keluarga Instance ECS Bare Metal Instance. Untuk informasi lebih lanjut, lihat Ikhtisar.

  • Gambar: Gambar Alibaba Cloud Linux 3 yang menjalankan versi kernel 5.10.112-11 atau lebih baru.

    Catatan

    Untuk menanyakan versi kernel suatu gambar, jalankan perintah uname -r.

Aktifkan atau nonaktifkan fitur kode duptext

Fitur kode duptext dapat dikontrol secara global atau menggunakan memcg. Kernel hanya dapat menggunakan fitur kode duptext untuk proses jika saklar global dan saklar memcg dihidupkan untuk mengaktifkan fitur kode duptext.

Saklar

Deskripsi

/sys/kernel/mm/duptext/enabled

Saklar global digunakan untuk mengontrol apakah fitur kode duptext diaktifkan untuk sistem kernel saat ini. Nilai valid: 0 dan 1. Nilai default: 0.

  • 1: mengaktifkan fitur kode duptext.

  • 0: tidak mengaktifkan atau menonaktifkan fitur kode duptext.

    Catatan

    Ketika fitur kode duptext dinonaktifkan, kernel secara otomatis membersihkan semua subhalaman pada suatu instance.

/sys/fs/cgroup/memory/<nama direktori memcg>/memory.allow_duptext

Ketika saklar global dihidupkan, saklar memcg dapat digunakan untuk mengontrol apakah fitur kode duptext diaktifkan untuk proses di setiap memcg. Nilai valid: 0 dan 1. Nilai default: 0.

  • 1: mengaktifkan fitur kode duptext untuk proses di setiap memcg.

  • 0: tidak mengaktifkan fitur kode duptext untuk proses di setiap memcg.

Catatan

Selain menggunakan saklar di atas, Anda dapat menggunakan metode berikut untuk menanyakan statistik subhalaman.

  • Tanyakan bidang nr_duptext di file /proc/vmstat atau bidang DupText di file /proc/meminfo untuk melihat statistik subhalaman pada suatu instance.

    • nr_duptext menunjukkan jumlah subhalaman yang ditandai sebagai duptext di kernel.

    • DupText menunjukkan jumlah memori yang menyimpan data duptext, dalam KB. Ukuran halaman memori tipikal adalah 4 KB.

  • Tanyakan file /proc/pid/smaps untuk melihat statistik subhalaman proses.

Gunakan fitur kode duptext

Dalam contoh ini, program uji bernama test.c dikompilasi dan dieksekusi pada instance ECS yang memiliki dua node NUMA.

  1. Hubungkan ke instance ECS.

    Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.

  2. (Opsional) Jalankan perintah berikut untuk melihat informasi tentang node NUMA instance ECS:

    numactl -H
    Catatan

    Jika Anda belum menginstal alat numactl, jalankan perintah sudo yum install numactl untuk menginstal alat tersebut.

    Gambar berikut menunjukkan bahwa instance memiliki dua node NUMA: node 0 dan node 1.

    image.png

  3. Jalankan perintah berikut untuk mengompilasi program uji dan menghasilkan file yang dapat dieksekusi.

    Dalam contoh ini, file kode sumber test.c dikompilasi di node 1, dan node 1 menghasilkan cache halaman file test.

    numactl -N 1 -m 1 gcc test.c -o test
  4. Jalankan perintah berikut untuk menghidupkan saklar global untuk fitur kode duptext:

    sudo sh -c 'echo 1 > /sys/kernel/mm/duptext/enabled'
  5. Jalankan perintah berikut untuk membuat direktori memcg dan mengaktifkan fitur duptext untuk memcg:

    sudo mkdir /sys/fs/cgroup/memory/test
    sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.allow_duptext'
  6. Jalankan perintah berikut untuk menggunakan fitur kode duptext guna menghindari akses lintas-node.

    Dalam contoh ini, alat cgexec dan numactl digunakan untuk menjalankan file yang dapat dieksekusi bernama test dan mengikat proses ke node 0. Dalam hal ini, salinan potongan kode terkait test dibuat di node 0. Program test dapat mengakses salinan potongan kode di node 0, tanpa akses lintas-node.

    sudo cgexec -g "memory:test" numactl -N 0 -m 0 ./test
    Catatan

    Jika Anda belum menginstal alat cgexec, jalankan perintah sudo yum install -y libcgroup-tools untuk menginstal alat tersebut.

  7. Jalankan perintah berikut untuk melihat statistik subhalaman program test:

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

    Contoh keluaran perintah berikut menunjukkan statistik subhalaman program test. Salinan kode program test dihasilkan di node 0.

    image.png

    Catatan

    Anda juga dapat menjalankan perintah berikut untuk melihat statistik subhalaman pada instance:

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

Nonaktifkan fitur kode duptext

Anda dapat menonaktifkan fitur kode duptext berdasarkan kebutuhan bisnis Anda. Ketika fitur kode duptext dinonaktifkan, kernel secara otomatis membersihkan semua subhalaman pada instance.

  1. Hubungkan ke instance ECS.

    Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.

  2. Jalankan perintah berikut untuk menonaktifkan fitur kode duptext:

    sudo sh -c 'echo 0 > /sys/kernel/mm/duptext/enabled'
  3. Jalankan perintah berikut untuk memverifikasi bahwa fitur kode duptext dinonaktifkan:

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

    Contoh keluaran perintah berikut menunjukkan bahwa semua subhalaman pada instance dibersihkan, yang menunjukkan bahwa fitur kode duptext dinonaktifkan.

    image.png