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 |
| Mengaktifkan atau menonaktifkan fitur THP reclaim. Nilai valid:
Nilai default: disable. |
| Memeriksa status fitur THP reclaim. Parameter yang digunakan dalam antarmuka ini:
Nilai parameter di atas terdaftar dalam urutan menaik ID node NUMA, seperti node0 dan node1, dari kiri ke kanan. |
| Mengontrol bagaimana fitur THP reclaim dipicu. Parameter yang digunakan dalam antarmuka ini:
|
| Antarmuka global. Jika Anda tidak ingin mengonfigurasi fitur THP reclaim melalui grup kontrol memori, Anda dapat menggunakan antarmuka ini. Nilai valid:
|
Batasan
Gambar Alibaba Cloud Linux yang berisi versi kernel berikut mendukung fitur THP reclaim:
Alibaba Cloud Linux 2: kernel
4.19.91-24.al7atau lebih baruAlibaba Cloud Linux 3: kernel
5.10.134-15.al8atau lebih baru
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.
Jalankan perintah berikut untuk membuat grup kontrol memori bernama test:
sudo mkdir /sys/fs/cgroup/memory/test/Jalankan perintah berikut untuk mengaktifkan fitur THP reclaim untuk test:
sudo sh -c 'echo reclaim > /sys/fs/cgroup/memory/test/memory.thp_reclaim'Jalankan perintah berikut untuk memeriksa apakah fitur THP reclaim diaktifkan untuk test:
cat /sys/fs/cgroup/memory/test/memory.thp_reclaimKeluaran perintah berikut ditampilkan. Pengaturan yang berlaku diberi tanda kurung (
[]).[reclaim]dalam keluaran perintah menunjukkan bahwa fitur THP reclaim diaktifkan untuk test.
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'CatatanJika Anda mengatur
/sys/kernel/mm/transparent_enormouspage/reclaimantarmuka global kereclaimataudisable, antarmuka global memiliki prioritas lebih tinggi daripada antarmukamemory.thp_reclaim. Konfigurasi antarmukamemory.thp_reclaimdalam grup kontrol memori tidak terpengaruh.Jalankan perintah berikut untuk mengonfigurasi parameter
thresholddalam antarmukamemory.thp_reclaim_ctrluntuk 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.
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 parameterreclaim:CatatanAnda hanya dapat menulis
reclaimke antarmukamemory.thp_reclaim_ctrluntuk memicu subfitur reklaim subhalaman nol dari fitur THP reclaim. Anda tidak dapat menjalankan perintah cat untuk memeriksa pengaturanreclaim.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
reclaimke 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.
Jalankan perintah berikut untuk memeriksa status fitur THP reclaim untuk test:
cat /sys/fs/cgroup/memory/test/memory.thp_reclaim_statKeluaran perintah berikut dikembalikan:
panjang_antrian 14 split_enormouspage 523 reclaim_subpage 256.207Dalam 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.
Jalankan perintah berikut untuk mengatur
memory.limit_in_byteske 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_bytesKeluaran perintah berikut dikembalikan.

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'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 -wHpada 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.