全部产品
Search
文档中心

Alibaba Cloud Linux:Fitur Batas Page Cache

更新时间:Nov 20, 2025

Fitur Batas Page Cache tersedia di Alibaba Cloud Linux 3 mulai dari versi kernel 5.10.134-14 untuk mengatasi masalah ketidakstabilan sistem akibat penggunaan page cache tanpa batas, seperti jitter bisnis dan kesalahan kehabisan memori (OOM) yang tidak terduga.

Informasi Latar Belakang

Di dalam kernel, alokasi memori langsung memicu pengambilan ulang memori pada grup kontrol memori (memcg) saat batas atas memori yang ditentukan oleh memcg tercapai. Proses ini dapat memengaruhi kinerja proses yang sedang berjalan. Meskipun fitur pengambilan ulang asinkron backend memcg dirancang untuk menyelesaikan masalah ini, fitur tersebut kurang efektif untuk permintaan memori mendadak. Misalnya, saat menjalankan framework Spark, sejumlah besar memori digunakan sebagai page cache, dengan sebagian besar halaman dalam page cache menjadi Halaman kotor. Halaman kotor direklaim secara lambat, sehingga kernel mungkin gagal mendapatkan cukup memori, menyebabkan kesalahan OOM yang tidak terduga. Untuk memastikan stabilitas bisnis dan mencegah kesalahan OOM, penggunaan page cache harus dibatasi.

Alibaba Cloud Linux 3 menyediakan fitur Batas Page Cache untuk membatasi penggunaan page cache pada memcgs, termasuk root memcgs. Anda dapat menggunakan fitur ini untuk menentukan batas penggunaan page cache dan mereklaim page cache berlebih secara sinkron atau asinkron ketika batas terlampaui. Ini mencegah penggunaan memori yang lebih besar dari yang diharapkan untuk page cache, meningkatkan stabilitas dan keandalan sistem.

Antarmuka

Antarmuka

Deskripsi

/sys/kernel/mm/pagecache_limit/enabled

Saklar yang mengontrol apakah akan mengaktifkan fitur Batas Page Cache secara global di kernel. Nilai valid: 0 dan 1. Nilai default: 0.

  • 1: mengaktifkan fitur Batas Page Cache secara global.

  • 0: menonaktifkan fitur Batas Page Cache secara global.

/sys/fs/cgroup/memory/<Nama Direktori Memcg>/memory.pagecache_limit.enable

Saklar yang mengontrol apakah akan mengaktifkan fitur Batas Page Cache untuk memcg tertentu. Nilai valid: 0 dan 1. Nilai default: 0.

  • 1: mengaktifkan fitur Batas Page Cache untuk memcg.

  • 0: menonaktifkan fitur Batas Page Cache untuk memcg.

/sys/fs/cgroup/memory/<Nama Direktori Memcg>/memory.pagecache_limit.size

Penggunaan page cache maksimum untuk memcg tertentu. Satuan: byte. Nilai yang valid: 0 hingga nilai memory.limit_in_bytes yang Anda tentukan untuk memcg tersebut. Nilai default: 0.

  • 0: menonaktifkan fitur Batas Page Cache untuk memcg terlepas dari apakah saklar global dan saklar spesifik memcg untuk fitur tersebut diaktifkan.

  • Nilai non-nol: membatasi penggunaan page cache memcg ke nilai ini.

    Catatan

    Penggunaan page cache memcg adalah jumlah dari penggunaan page cache semua child memcgs di dalam memcg.

/sys/fs/cgroup/memory/<Nama Direktori Memcg>/memory.pagecache_limit.sync

Mengontrol apakah akan melakukan reklaim asinkron atau sinkron ketika memcg melebihi batas penggunaan page cache. Nilai valid: 0 dan 1. Nilai default: 0.

Jika sebuah tugas burst menghasilkan banyak Page Cache lebih cepat daripada workqueue asinkron dapat mereclaim-nya, jumlah Page Cache mungkin sementara melebihi pagecache_limit.
  • 0: melakukan reklaim asinkron. Sistem membuat workqueues untuk melakukan reklaim asinkron di latar belakang. Ini mengurangi dampak pada thread utama.

    Catatan

    Workqueue adalah mekanisme yang digunakan di seluruh kernel untuk mengelola dan menjalankan tugas-tugas asinkron (tugas latar belakang). Sistem memindahkan tugas-tugas reklaim ke thread latar belakang dengan menambahkan tugas-tugas tersebut ke workqueues untuk mereklaim page cache secara asinkron.

  • 1: melakukan reklaim sinkron. Tugas-tugas reklaim sinkron berjalan dalam konteks proses saat ini untuk memblokir proses dan mereklaim page cache secara langsung. Akibatnya, kinerja proses mungkin berfluktuasi.

Cara kerja fitur ini

Setelah mengaktifkan fitur Batas Page Cache, fitur ini bekerja pada memcgs berdasarkan prinsip-prinsip berikut:

  1. Ketika page cache dialokasikan ke proses memcg, fitur ini menentukan apakah memcg saat ini melebihi batas penggunaan page cache, dan melakukan traversal ke atas dari memcg tersebut untuk memeriksa nilai memory.pagecache_limit dari memcg induk secara hierarkis. Jika nilai memory.pagecache_limit dari memcg induk adalah 0, fitur Batas Page Cache dinonaktifkan untuk memcg induk tersebut. Penggunaan page cache tidak dibatasi untuk memcg induk tersebut dan child memcg-nya.

  2. Jika memcg saat ini melebihi batas penggunaan page cache, fitur ini menentukan apakah reklaim dilakukan secara sinkron atau asinkron berdasarkan nilai memory.pagecache_limit.sync.

  3. Fitur ini mereklaim page cache.

    • Reklaim sinkron: Secara default, hanya halaman file yang tidak dipetakan yang dapat direklaim. Saat kernel melakukan lebih dari empat pemindaian, halaman file yang dipetakan juga dapat direklaim.

    • Reklaim asinkron: Secara default, halaman file yang tidak dipetakan dan dipetakan dapat direklaim. Saat kernel melakukan lebih dari dua pemindaian, halaman kotor dapat direklaim.

      Catatan

      Berikut adalah jenis halaman memori yang tersedia:

      • Halaman file yang tidak dipetakan: Halaman memori yang tidak dipetakan ke file. Biasanya, halaman ini merupakan wilayah pribadi memori yang menyimpan data sementara dan tidak disimpan ke disk.

      • Halaman file yang dipetakan: Halaman memori yang dipetakan ke file, memungkinkan proses membaca dan menulis data file di memori untuk akses acak ke file.

      • Halaman kotor: Halaman file yang dipetakan yang telah dimodifikasi. Saat proses menulis data ke halaman file yang dipetakan, halaman tersebut ditandai kotor. Tanda ini menunjukkan bahwa salinan file di memori telah dimodifikasi dan berbeda dari file di disk. Halaman kotor secara berkala ditulis kembali ke disk untuk memastikan persistensi data.

Contoh cara mengonfigurasi antarmuka

Pada contoh ini, sebuah page cache 20 MiB dibuat dan penggunaan page cache dibatasi hingga 10 MiB. Setelah mengaktifkan fitur Batas Page Cache, verifikasi apakah fitur ini bekerja sesuai harapan.

  1. Hubungkan ke instance Elastic Compute Service (ECS).

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

  2. Aktifkan fitur Batas Page Cache secara global.

    sudo sh -c 'echo 1 > /sys/kernel/mm/pagecache_limit/enabled'
  3. Aktifkan fitur Batas Page Cache dan batasi penggunaan page cache untuk memcg tertentu.

    1. Buat direktori memcg. Contoh: /sys/fs/cgroup/memory/test/.

      sudo mkdir -p /sys/fs/cgroup/memory/test/
    2. Tentukan batas penggunaan page cache untuk memcg tersebut.

      Dalam contoh ini, batas penggunaan page cache memcg diatur menjadi 10.485.760 byte (sekitar sama dengan 10 MiB).

      sudo sh -c 'echo 10485760 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.size'
    3. Konfigurasikan skema reklaim page cache untuk memcg.

      • Untuk menggunakan skema reklaim asinkron, jalankan perintah berikut:

        sudo sh -c 'echo 0 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.sync'
      • Untuk menggunakan skema reklaim sinkron, jalankan perintah berikut:

        sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.sync'
    4. Aktifkan fitur Batas Page Cache untuk memcg tersebut.

      sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.pagecache_limit.enable'
  4. Buat page cache.

    1. Instal paket libcgroup.

      Perintah cgexec diperlukan untuk membuat page cache. Umumnya, perintah cgexec disediakan sebagai bagian dari paket libcgroup dan perlu diinstal. Jika perintah cgexec tidak tersedia di sistem Anda, instal paket libcgroup.

      sudo yum install libcgroup-tools
    2. Buat page cache.

      Dalam contoh ini, perintah dd digunakan untuk membuat page cache 20 MiB dengan menulis blok 1 MiB sebanyak 20 kali berturut-turut.

      sudo dd if=/dev/zero of=./testfile bs=1M count=20 oflag=direct
      sudo cgexec -g "memory:test" cat ./testfile > /dev/null
  5. Periksa apakah fitur Batas Page Cache bekerja sesuai harapan.

    1. Jalankan perintah berikut untuk memeriksa penggunaan page cache:

      grep cache /sys/fs/cgroup/memory/test/memory.stat

      Keluaran perintah berikut dikembalikan.

      image.png

      Dalam keluaran tersebut, cache menunjukkan bahwa penggunaan page cache dibatasi hingga 10.543.104 byte (sekitar 10 MiB).

    2. Periksa apakah fitur Batas Page Cache mereklaim page cache sesuai harapan.

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

      Keluaran perintah berikut dikembalikan.

      image.png

      Dalam keluaran tersebut, pagecache_limit_reclaimed_kb menunjukkan bahwa 10.108 KB (sekitar 10 MiB) page cache telah direklaim.

      Hasil verifikasi menunjukkan bahwa page cache 20-MiB dibuat dan penggunaan page cache dibatasi hingga 10 MiB. Ketika penggunaan page cache melebihi batas, 10 MiB page cache direklaim oleh fitur Batas Page Cache sesuai harapan.

      Catatan

      Jika nilai pagecache_limit_reclaimed_kb lebih tinggi dari yang diharapkan, hal ini mungkin disebabkan oleh jumlah data yang tidak tepat yang dibaca sebelumnya (read ahead) atau dipra-ambil (prefetched) selama operasi baca berurutan, sehingga menyebabkan reclaim page cache berlebihan. Kami menyarankan Anda menjalankan perintah echo 128 | sudo tee /sys/block/<Nama perangkat disk>/queue/read_ahead_kb untuk mengonfigurasi parameter read_ahead_kb untuk disk tersebut. Dalam contoh ini, vda digunakan sebagai nama perangkat disk. Parameter read_ahead_kb menentukan jumlah kilobita yang akan dibaca sebelumnya atau dipra-ambil oleh kernel selama operasi baca berurutan. Kemudian, verifikasi kembali fitur Page Cache.