All Products
Search
Document Center

Alibaba Cloud Linux:Aktifkan fitur cgroup writeback

Last Updated:Aug 25, 2026

Di Alibaba Cloud Linux 2 (versi kernel 4.19.36-12.al7 dan yang lebih baru) serta Alibaba Cloud Linux 3, fitur cgroup writeback tersedia untuk antarmuka kernel cgroup v1. Fitur ini memungkinkan Anda membatasi laju I/O ter-buffer.

Informasi latar belakang

Control groups, yang dalam topik ini disebut cgroups, adalah fitur kernel Linux yang memungkinkan Anda mengalokasikan resource. cgroups tersedia dalam dua versi: cgroup v1 dan cgroup v2. Untuk informasi selengkapnya, lihat bagian What are Control Groups dalam Resource Management Guide. Topik ini menjelaskan cara mengaktifkan fitur cgroup writeback untuk cgroup v1 guna membatasi laju I/O ter-buffer dari proses.

Batasan

Setelah mengaktifkan fitur cgroup writeback, Anda harus memastikan bahwa pemetaan antara subsistem memory (memcg) dan subsistem I/O (blkcg) mengikuti aturan yang dijelaskan dalam bagian ini. Hal ini diperlukan untuk membatasi laju I/O ter-buffer bagi proses.

Fitur cgroup writeback mengharuskan memcg dan blkcg bekerja secara bersamaan untuk membatasi laju I/O ter-buffer. Secara default, subsistem kontrol cgroup v1 tidak bekerja sama. Oleh karena itu, Anda harus menghubungkan memcg dan blkcg berdasarkan aturan tertentu: setiap memcg hanya boleh dipetakan ke satu blkcg. Pemetaannya dapat bersifat satu-ke-satu atau banyak-ke-satu, tetapi tidak boleh satu-ke-banyak atau banyak-ke-banyak.

Sebagai contoh, untuk membatasi laju I/O ter-buffer bagi proses A dan B, berlaku batasan berikut.

  • Jika A dan B berada dalam memcg yang berbeda, keduanya dapat dipetakan ke blkcg yang berbeda dalam hubungan satu-ke-satu. Misalnya, A berada dalam memcg1 dan blkcg1, sedangkan B berada dalam memcg2 dan blkcg0.

  • Jika A dan B berada dalam memcg yang berbeda, keduanya juga dapat dipetakan ke blkcg yang sama. Misalnya, A berada dalam memcg1 dan B berada dalam memcg2, tetapi keduanya berada dalam blkcg2.

  • Jika A dan B berada dalam memcg yang sama, keduanya harus dipetakan ke blkcg yang sama. Misalnya, A dan B keduanya dapat berada dalam memcg0 dan blkcg3.

Untuk mencegah masalah tak terduga setelah mengaktifkan cgroup writeback, atur antarmuka cgroup.procs untuk blkcg sebelum membatasi laju I/O ter-buffer. Anda dapat menuliskan ID proses ke antarmuka ini untuk memastikan pemetaan blkcg yang unik. Anda juga dapat menggunakan tool untuk melihat pemetaan antara memcg dan blkcg. Untuk informasi selengkapnya, lihat Konfirmasi pemetaan antara memcg dan blkcg.

Selama operasi dan maintenance (O&M), sebuah proses mungkin dipindahkan ke cgroup lain. Berdasarkan aturan pemetaan, tidak akan terjadi masalah jika proses dipindahkan antar memcg. Namun, jika proses dipindahkan antar blkcg, akan terjadi masalah. Untuk mencegah hal ini, kode fitur mencakup aturan berikut: jika proses dalam blkcg aktif dipindahkan ke blkcg lain, pemetaannya akan diatur ulang ke root blkcg. Akibatnya, fitur pembatasan laju tidak lagi berlaku karena ambang batas pembatasan laju biasanya tidak ditetapkan pada root blkcg.

Penting

Meskipun kode kernel mencakup aturan untuk mencegah masalah tak terduga, Anda sebaiknya menghindari pemindahan proses antar blkcg selama operasi.

Aktifkan fitur cgroup writeback

Fitur cgroup writeback dinonaktifkan secara default untuk antarmuka cgroup v1. Ikuti langkah-langkah berikut untuk mengaktifkannya.

  1. Tambahkan bidang cgwb_v1 menggunakan perintah grubby untuk mengaktifkan fitur tersebut.

    Dalam contoh ini, versi kernel adalah 4.19.36-12.al7.x86_64. Gantilah dengan versi kernel aktual Anda. Anda dapat menjalankan perintah uname -r untuk memeriksa versi kernel Anda.

    sudo grubby --update-kernel="/boot/vmlinuz-4.19.36-12.al7.x86_64" --args="cgwb_v1"
  2. Restart sistem agar perubahan diterapkan.

    sudo reboot
  3. Jalankan perintah berikut untuk membaca file kernel /proc/cmdline dan pastikan parameter baris perintah kernel mencakup bidang cgwb_v1. Hal ini mengaktifkan antarmuka blkio.throttle.write_bps_device dan blkio.throttle.write_iops_device di blkcg untuk membatasi laju I/O ter-buffer.

    cat /proc/cmdline | grep cgwb_v1
Catatan

Dalam lingkungan Kubernetes (k8s), setelah mengaktifkan fitur cgroup writeback, Anda juga harus menggabungkan subsistem cgroup memory dan blkio. Hal ini mencegah kegagalan pembatasan laju jika suatu proses dipindahkan.

  1. Gabungkan subsistem cgroup memory dan blkio.

    1. Edit file system.conf.

      sudo vim /etc/systemd/system.conf
    2. Ubah konfigurasi JoinControllers. Contohnya:

      JoinControllers=cpu,cpuacct net_cls,net_prio memory,blkio
    3. Tekan tombol Esc untuk keluar dari mode edit. Lalu, masukkan :wq untuk menyimpan dan keluar.

  2. Jalankan perintah berikut untuk membuat ulang image initial RAM disk. Hal ini memastikan perubahan konfigurasi systemd diterapkan.

    sudo dracut /boot/initramfs-4.19.36-12.al7.x86_64.img 4.19.36-12.al7.x86_64 --force
  3. Jalankan perintah berikut untuk restart sistem.

    sudo reboot
  4. Jalankan perintah berikut untuk memverifikasi bahwa subsistem memory dan blkio telah digabung.

    ls /sys/fs/cgroup

Verifikasi bahwa cgroup writeback berlaku

Contoh ini mensimulasikan dua proses yang menghasilkan I/O untuk memverifikasi bahwa fitur cgroup writeback berlaku.

Catatan
  • Perintah dd memberikan umpan balik cepat. Anda dapat menggunakan perintah iostat untuk melihat hasilnya.

  • Perintah dd menulis data secara sekuensial. Selama refresh I/O sekuensial, sistem melakukan write-back data dalam chunk berukuran 1 MB. Oleh karena itu, atur ambang batas blkio.throttle.write_bps_device ke nilai minimal 1 MB (1048576). Jika Anda menetapkan nilai kurang dari 1 MB, proses I/O mungkin hang.

  1. Simulasikan dua proses yang menghasilkan I/O. Sesuai persyaratan batasan, atur terlebih dahulu antarmuka cgroup.procs dari blkcg.

    sudo mkdir /sys/fs/cgroup/blkio/blkcg1
    sudo mkdir /sys/fs/cgroup/memory/memcg1
    sudo bash -c "echo $$ > /sys/fs/cgroup/blkio/blkcg1/cgroup.procs"    # $$ adalah ID proses Anda
    sudo bash -c "echo $$ > /sys/fs/cgroup/memory/memcg1/cgroup.procs"    # $$ adalah ID proses Anda
  2. Gunakan antarmuka blkio.throttle.write_bps_device di blkcg untuk membatasi laju I/O ter-buffer.

    sudo bash -c "echo 254:48 10485760 > /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.write_bps_device"    # Atur batas laju write-back disk menjadi 10 MB/s berdasarkan nomor perangkat.
  3. Gunakan perintah dd tanpa parameter oflag=sync untuk menghasilkan I/O asinkron ter-cache.

    sudo dd if=/dev/zero of=/mnt/vdd/testfile bs=4k count=10000
  4. Gunakan tool iostat untuk menanyakan hasilnya. Periksa kolom wMB/s dalam output. Jika laju dibatasi sekitar 10 MB/s, berarti fitur cgroup writeback berfungsi dengan benar.

    iostat -xdm 1 vdd

Konfirmasi pemetaan antara memcg dan blkcg

Anda dapat menggunakan salah satu metode berikut untuk memastikan bahwa pemetaan antara memcg dan blkcg bersifat satu-ke-satu atau banyak-ke-satu.

  • Lihat pemetaan antara memcg dan blkcg.

    sudo cat /sys/kernel/debug/bdi/bdi_wb_link

    Output contoh berikut menunjukkan bahwa memcg dan blkcg memiliki pemetaan satu-ke-satu.

    memory     <--->     blkio
    memcg1:   35 <---> blkcg1:   48
  • Gunakan tool pemantauan kernel ftrace.

    1. Aktifkan tool ftrace.

      sudo bash -c "echo 1 > /sys/kernel/debug/tracing/events/writeback/insert_memcg_blkcg_link/enable"
    2. Anda dapat melihat informasi output.

      sudo cat /sys/kernel/debug/tracing/trace_pipe

      Output contoh berikut menampilkan memcg_ino=35 blkcg_ino=48. Hal ini menunjukkan bahwa memcg dan blkcg memiliki pemetaan satu-ke-satu.

      <...>-1537  [006] ....    99.511327: insert_memcg_blkcg_link: memcg_ino=35 blkcg_ino=48 old_blkcg_ino=0