全部产品
Search
文档中心

Alibaba Cloud Linux:THP reclaim

更新时间:Jul 02, 2025

Fitur Transparent Enormous Page (THP) reclaim memungkinkan Anda menyelesaikan masalah memori yang disebabkan oleh THP, seperti kesalahan kehabisan memori (OOM). Topik ini menjelaskan antarmuka yang digunakan untuk mengimplementasikan fitur THP reclaim dan memberikan contoh cara menggunakan antarmuka tersebut.

Informasi latar belakang

Dalam sistem operasi Linux, memori dikelola dalam blok yang dikenal sebagai halaman. Halaman memori reguler berukuran 4 KiB. THP adalah blok memori yang dapat berukuran 2 MiB dan 1 GiB. Aplikasi mengonsumsi jumlah memori yang terus meningkat, yang menghasilkan overhead terjemahan alamat yang tinggi. Saat aplikasi meminta memori, kernel secara dinamis mengalokasikan THP untuk mengurangi Translation Lookaside Buffer (TLB) misses dan meningkatkan kinerja aplikasi.

Namun, THP dapat menyebabkan pembengkakan memori. Jika Anda mengaktifkan fitur THP, kernel mengalokasikan dan membebaskan blok memori 2 MiB sebagai THP. Setiap THP setara dengan 512 halaman 4 KiB. THP dapat menyebabkan fragmentasi memori yang tinggi, yang menghasilkan pembengkakan memori.

Pembengkakan memori dapat menyebabkan kesalahan OOM. Sebagai contoh, jika aplikasi yang meminta 8 KiB memori (dua halaman 4 KiB) dialokasikan THP 2 MiB, THP mencakup dua halaman 4 KiB yang diminta oleh aplikasi dan 510 halaman 4 KiB yang diisi dengan nol, dikenal sebagai halaman nol. Ini merupakan pemborosan besar dalam ukuran set penduduk (RSS) dan dapat menyebabkan kesalahan OOM.

Untuk menyelesaikan masalah memori yang disebabkan oleh THP, Alibaba Cloud Linux menyediakan fitur THP reclaim untuk grup kontrol memori. Fitur THP reclaim membagi THP menjadi subhalaman dan mereklaim subhalaman nol untuk mencegah kesalahan OOM yang disebabkan oleh pembengkakan memori. Namun, fitur THP reclaim dapat menurunkan kinerja memori.

Antarmuka

Tabel berikut menjelaskan antarmuka yang digunakan untuk mengimplementasikan fitur THP reclaim.

Antarmuka

Deskripsi

memory.thp_reclaim

Mengaktifkan atau menonaktifkan fitur THP reclaim. Nilai valid:

  • reclaim: mengaktifkan fitur THP reclaim.

  • swap: Nilai ini dicadangkan untuk penggunaan di masa mendatang.

  • disable: menonaktifkan fitur THP reclaim.

Nilai default: disable.

memory.thp_reclaim_stat

Memeriksa status fitur THP reclaim. Parameter yang digunakan dalam antarmuka ini:

  • queue_length: jumlah THP dalam antrian setiap node. Jika fitur THP reclaim diaktifkan, THP ditambahkan ke antrian reklaim.

  • split_enormouspage: jumlah total THP yang dibagi oleh fitur THP reclaim untuk setiap node.

  • reclaim_subpage: jumlah total subhalaman nol yang direklaim oleh fitur THP reclaim untuk setiap node.

Nilai parameter di atas terdaftar dalam urutan menaik ID node NUMA, seperti node0 dan node1, dari kiri ke kanan.

memory.thp_reclaim_ctrl

Mengontrol bagaimana fitur THP reclaim dipicu. Parameter yang digunakan dalam antarmuka ini:

  • threshold: Jumlah maksimum subhalaman nol dalam sebuah THP. Jika jumlah subhalaman nol dalam THP melebihi nilai ambang, fitur THP reclaim dipicu. Nilai default: 16.

  • reclaim: memicu fitur THP reclaim.

/sys/kernel/mm/transparent_enormouspage/reclaim

Antarmuka global. Jika Anda tidak ingin mengonfigurasi fitur THP reclaim melalui grup kontrol memori, Anda dapat menggunakan antarmuka ini. Nilai valid:

  • memcg: Setiap grup kontrol memori menggunakan konfigurasi antarmuka memory.thp_reclaim. Ini adalah nilai default.

  • reclaim: secara paksa mengaktifkan fitur THP reclaim untuk semua grup kontrol memori.

  • swap: Nilai ini dicadangkan untuk penggunaan di masa mendatang.

  • disable: secara paksa menonaktifkan fitur THP reclaim untuk semua grup kontrol memori.

Batasan

Gambar Alibaba Cloud Linux yang berisi versi kernel berikut mendukung fitur THP reclaim:

  • Alibaba Cloud Linux 2: kernel 4.19.91-24.al7 atau lebih baru

  • Alibaba Cloud Linux 3: kernel 5.10.134-15.al8 atau lebih baru

Catatan

Anda dapat menjalankan perintah uname -r untuk memeriksa versi kernel yang terdapat dalam gambar.

Konfigurasikan fitur THP reclaim

Bagian ini menjelaskan cara mengonfigurasi fitur THP reclaim. Dalam contoh ini, grup kontrol memori bernama test digunakan.

  1. Jalankan perintah berikut untuk membuat grup kontrol memori bernama test:

    sudo mkdir /sys/fs/cgroup/memory/test/
  2. Jalankan perintah berikut untuk mengaktifkan fitur THP reclaim untuk test:

    sudo sh -c 'echo reclaim > /sys/fs/cgroup/memory/test/memory.thp_reclaim'
  3. Jalankan perintah berikut untuk memeriksa apakah fitur THP reclaim diaktifkan untuk test:

    cat /sys/fs/cgroup/memory/test/memory.thp_reclaim

    Keluaran perintah berikut ditampilkan. Pengaturan yang berlaku diberi tanda kurung ([]). [reclaim] dalam keluaran perintah menunjukkan bahwa fitur THP reclaim diaktifkan untuk test.

    image

  4. Jalankan perintah berikut untuk secara paksa mengaktifkan fitur THP reclaim menggunakan antarmuka global:

    sudo sh -c 'echo reclaim > /sys/kernel/mm/transparent_enormouspage/reclaim'

    Jalankan perintah berikut untuk secara paksa menonaktifkan fitur THP reclaim:

    sudo sh -c 'echo disable > /sys/kernel/mm/transparent_enormouspage/reclaim'
    Catatan

    Jika Anda mengatur /sys/kernel/mm/transparent_enormouspage/reclaim antarmuka global ke reclaim atau disable, antarmuka global memiliki prioritas lebih tinggi daripada antarmuka memory.thp_reclaim. Konfigurasi antarmuka memory.thp_reclaim dalam grup kontrol memori tidak terpengaruh.

  5. Jalankan perintah berikut untuk mengonfigurasi parameter threshold dalam antarmuka memory.thp_reclaim_ctrl untuk membatasi jumlah subhalaman nol dalam THP untuk test:

    sudo sh -c 'echo "threshold 32" >  /sys/fs/cgroup/memory/test/memory.thp_reclaim_ctrl'

    Dalam contoh ini, parameter threshold diatur ke 32. Saat jumlah subhalaman nol dalam THP melebihi 32, subfitur reklaim subhalaman nol dari fitur THP reclaim dipicu untuk mereklaim subhalaman nol.

  6. Picu subfitur reklaim subhalaman nol dari fitur THP reclaim.

    Setelah subfitur reklaim subhalaman nol dari fitur THP reclaim dipicu, subfitur tersebut mereklaim subhalaman nol berlebih saat jumlah subhalaman nol melebihi nilai threshold. Perhatikan item berikut untuk parameter reclaim:

    Catatan

    Anda hanya dapat menulis reclaim ke antarmuka memory.thp_reclaim_ctrl untuk memicu subfitur reklaim subhalaman nol dari fitur THP reclaim. Anda tidak dapat menjalankan perintah cat untuk memeriksa pengaturan reclaim.

    • Jalankan perintah berikut untuk memicu subfitur reklaim subhalaman nol dari fitur THP reclaim untuk grup kontrol memori saat ini:

      sudo sh -c 'echo "reclaim 1" >  /sys/fs/cgroup/memory/test/memory.thp_reclaim_ctrl'
    • Jalankan perintah berikut untuk secara rekursif memicu subfitur reklaim subhalaman nol dari fitur THP reclaim untuk grup kontrol memori saat ini dan grup kontrol anaknya:

      sudo sh -c 'echo "reclaim 2" >  /sys/fs/cgroup/memory/test/memory.thp_reclaim_ctrl'

      Anda dapat memicu subfitur reklaim subhalaman nol dari fitur THP reclaim dengan menulis reclaim ke antarmuka memory.thp_reclaim_ctrl. Fitur THP reclaim dapat dipicu oleh reklaim memori.

      • Jika terjadi kesalahan OOM, subfitur reklaim subhalaman nol dari fitur THP reclaim dipicu.

      • Jika fitur reklaim asinkron backend memcg dipicu, subfitur reklaim subhalaman nol dari fitur THP reclaim dipicu. Untuk informasi tentang fitur reklaim asinkron backend memcg, lihat Reklaim Asinkron Backend Memcg.

  7. Jalankan perintah berikut untuk memeriksa status fitur THP reclaim untuk test:

    cat /sys/fs/cgroup/memory/test/memory.thp_reclaim_stat

    Keluaran perintah berikut dikembalikan:

    panjang_antrian        14
    split_enormouspage     523
    reclaim_subpage 256.207

    Dalam keluaran perintah di atas:

    • queue_length: menunjukkan bahwa ada 14 THP dalam antrian.

    • split_enormouspage: menunjukkan bahwa 523 THP dibagi oleh fitur THP reclaim.

    • reclaim_subpage: menunjukkan bahwa 256.207 subhalaman nol direklaim oleh fitur THP reclaim.

Uji fitur THP reclaim

Bagian ini menyediakan kode C sampel yang digunakan untuk meminta THP untuk aplikasi. Anda dapat menggunakan kode C sampel untuk melakukan pengujian saat fitur THP reclaim diaktifkan dan dinonaktifkan, serta memperoleh hasil uji yang berbeda.

  1. Jalankan perintah berikut untuk mengatur memory.limit_in_bytes ke 1 GiB:

    sudo sh -c 'echo 1G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes'

    Jalankan perintah berikut untuk memeriksa nilai memory.limit_in_bytes:

    cat /sys/fs/cgroup/memory/test/memory.limit_in_bytes

    Keluaran perintah berikut dikembalikan.

    image

  2. Jalankan perintah berikut untuk menonaktifkan fitur reklaim asinkron backend memcg.

    Untuk informasi tentang fitur reklaim asinkron backend memcg, lihat Reklaim Asinkron Backend Memcg.

    sudo sh -c 'echo 0 > /sys/fs/cgroup/memory/test/memory.wmark_ratio'
  3. Jalankan kode C sampel berikut saat fitur THP reclaim diaktifkan dan dinonaktifkan dan periksa hasil uji:

    gcc -o test <test.c>

    Ganti parameter dalam kode C sampel <test.c> dengan nilai sebenarnya berdasarkan kebutuhan bisnis Anda.

    // Aplikasi meminta 1 GiB memori (512 THP), di mana 10 THP berisi subhalaman nol. 
    #include <stdlib.h>  // Untuk posix_memalign
    #include <string.h>  // Untuk memset
    #include <unistd.h>  // Untuk pause
    
    #define HUGEPAGE_SIZE 4096 * 512
    int main()
    {
            int i, thp = 512;
            char *addr;
            posix_memalign((void **)&addr, HUGEPAGE_SIZE, HUGEPAGE_SIZE * thp);
    
            for (i = 0; i < 10; i++) {
                    memset(addr, 0xc, HUGEPAGE_SIZE >> 1);
                    addr += HUGEPAGE_SIZE;
            }
    
            for (; i < thp; i++) {
                    memset(addr, 0xc, HUGEPAGE_SIZE);
                    addr += HUGEPAGE_SIZE;
            }
    
            pause();
            return 0;
    }

    Selama pengujian, Anda dapat menjalankan perintah dmesg -wH pada terminal lain untuk mendeteksi kesalahan OOM dan penggunaan memori dalam sistem. Hasil uji bervariasi berdasarkan apakah fitur THP reclaim diaktifkan.

    • Jika fitur THP reclaim diaktifkan, fitur tersebut membagi THP yang sebelumnya dialokasikan menjadi subhalaman dan mereklaim subhalaman nol. Ini mengurangi penggunaan memori dan mencegah kesalahan OOM.

    • Jika fitur THP reclaim dinonaktifkan, sistem tidak membagi THP atau mereklaim subhalaman nol. Akibatnya, kesalahan OOM mungkin terjadi. Log kernel menunjukkan memori tidak cukup dan detail proses yang mungkin dihentikan.

Referensi