全部产品
Search
文档中心

Alibaba Cloud Linux:Aktifkan fitur cgroup writeback

更新时间:Jun 28, 2025

Alibaba Cloud Linux 2 menyediakan fitur cgroup writeback untuk antarmuka kernel cgroup v1 pada versi kernel 4.19.36-12.al7 dan yang lebih baru. Fitur ini memungkinkan Anda membatasi laju I/O ter-buffer saat menggunakan antarmuka kernel cgroup v1.

Informasi latar belakang

Control groups, disingkat sebagai cgroups dalam topik ini, adalah fitur kernel Linux yang memungkinkan Anda mengalokasikan sumber daya. Cgroups tersedia dalam dua versi: cgroup v1 dan cgroup v2. Untuk informasi lebih lanjut, lihat bagian Apa itu Control Groups dalam Panduan Manajemen Sumber Daya. 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, periksa apakah pemetaan antara subsistem memori (memcgs) dan subsistem I/O (blkcgs) sesuai dengan aturan berikut. Jika pemetaan sesuai, batasi laju I/O ter-buffer dari proses.

Fitur cgroup writeback memerlukan kerja sama antara memcgs dan blkcgs untuk membatasi laju I/O ter-buffer. Namun, secara default, subsistem kontrol cgroup v1 tidak bekerja sama satu sama lain. Memcgs dan blkcgs harus dikaitkan berdasarkan aturan bahwa setiap memcg dipetakan ke blkcg unik. Pemetaan dari memcgs ke blkcgs dapat bersifat satu-satu atau banyak-satu, tetapi tidak boleh satu-banyak atau banyak-banyak.

Sebagai contoh, untuk membatasi laju I/O ter-buffer Proses A dan B, perhatikan hal-hal berikut:

  • Ketika A dan B termasuk dalam dua memcg berbeda, masing-masing memcg dapat dipetakan ke blkcg unik. Sebagai contoh, A termasuk dalam memcg1 dan blkcg1, dan B termasuk dalam memcg2 dan blkcg0.

  • Ketika A dan B termasuk dalam dua memcg berbeda, memcg tersebut juga dapat dipetakan ke blkcg yang sama. Sebagai contoh, A termasuk dalam memcg1 dan B termasuk dalam memcg2, dan baik A maupun B dapat termasuk dalam blkcg2.

  • Ketika A dan B termasuk dalam memcg yang sama, memcg tersebut hanya dapat dipetakan ke satu blkcg. Sebagai contoh, A dan B termasuk dalam memcg0 dan blkcg3.

Untuk mencegah pengecualian, kami sarankan Anda melakukan operasi berikut setelah mengaktifkan fitur cgroup writeback tetapi sebelum membatasi laju I/O ter-buffer suatu proses: Konfigurasikan antarmuka cgroup.procs untuk blkcg yang sesuai, dan tulis ID proses ke antarmuka tersebut untuk memastikan bahwa memcgs yang dipetakan ke blkcg ini tidak dipetakan ke blkcgs lainnya. Anda juga dapat menggunakan alat untuk melihat pemetaan antara memcgs dan blkcgs. Untuk informasi lebih lanjut, lihat Verifikasi pemetaan dari memcgs ke blkcgs.

Selama O&M, proses mungkin berpindah ke cgroups yang berbeda. Berdasarkan aturan sebelumnya, tidak ada pengecualian yang terjadi jika proses bergerak di antara memcgs. Namun, jika proses bergerak di antara blkcgs, pengecualian mungkin terjadi. Aturan berikut didefinisikan dalam kode fitur cgroup writeback untuk mencegah pengecualian: Jika proses dalam blkcg yang sedang berjalan berpindah ke blkcg lain, memcg tempat proses tersebut berada dipetakan ke blkcg root. Biasanya, tidak ada ambang batas throttling yang ditetapkan untuk blkcg root. Ketika memcg dipetakan ke blkcg root, fitur throttling tidak lagi berlaku.

Penting

Meskipun aturan sebelumnya didefinisikan dalam kode kernel, kami sarankan Anda tidak memindahkan proses di antara blkcgs.

Aktifkan fitur cgroup writeback

Secara default, fitur cgroup writeback dinonaktifkan untuk antarmuka cgroup v1. Untuk mengaktifkan fitur ini, lakukan langkah-langkah berikut:

  1. Tambahkan bidang cgwb_v1 ke perintah grubby dan jalankan perintah tersebut untuk mengaktifkan fitur cgroup writeback.

    Dalam contoh ini, versi kernel adalah 4.19.36-12.al7.x86_64. Anda harus memasukkan versi kernel aktual Anda selama operasi. Untuk menanyakan versi kernel Anda, jalankan perintah uname -r.

    sudo grubby --update-kernel="/boot/vmlinuz-4.19.36-12.al7.x86_64" --args="cgwb_v1"
  2. Mulai ulang sistem agar fitur cgroup writeback berlaku.

    sudo reboot
  3. Jalankan perintah berikut untuk membaca file kernel /proc/cmdline. Pastikan parameter perintah mencakup bidang cgwb_v1. Dengan cara ini, antarmuka blkio.throttle.write_bps_device dan blkio.throttle.write_iops_device dalam blkcgs yang sesuai dapat membatasi laju I/O ter-buffer.

    cat /proc/cmdline | grep cgwb_v1
Catatan

Dalam lingkungan Kubernetes, setelah Anda mengaktifkan fitur cgroup writeback untuk membatasi laju I/O ter-buffer suatu proses, Anda harus mengaitkan memcg dengan blkcg untuk mencegah throttling dinonaktifkan karena pergerakan proses.

  1. Kaitkan memcg dengan blkcg.

    1. Edit file system.conf.

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

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

  2. Jalankan perintah berikut untuk membuat ulang gambar kernel untuk memastikan konfigurasi systemd baru berlaku:

    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 memulai ulang sistem:

    sudo reboot
  4. Jalankan perintah berikut untuk memeriksa apakah blkcg dan memcg terkait:

    ls /sys/fs/cgroup

Periksa apakah fitur cgroup writeback berlaku

Dalam contoh ini, dua proses yang menghasilkan I/O disimulasikan untuk memeriksa apakah fitur cgroup writeback berlaku.

Catatan
  • Perintah dd merespons dengan cepat dan layar bergulir terlalu cepat untuk dilihat. Jalankan perintah iostat untuk melihat keluaran perintah dd.

  • Perintah dd menulis data secara berurutan. Sistem melakukan penyegaran I/O berurutan setiap kali 1 MB data keluaran dihasilkan. Oleh karena itu, Anda harus menetapkan ambang batas untuk blkio.throttle.write_bps_device menjadi nilai tidak kurang dari 1 MB (1.048.576 byte). Jika Anda menetapkan ambang batas untuk blkio.throttle.write_bps_device menjadi nilai kurang dari 1 MB, kemacetan I/O mungkin terjadi.

  1. Simulasikan dua proses yang menghasilkan I/O, dan atur antarmuka cgroup.procs blkcg berdasarkan batasan sebelumnya.

    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"    # $$ tentukan ID proses.
    sudo bash -c "echo $$ > /sys/fs/cgroup/memory/memcg1/cgroup.procs"    # $$ tentukan ID proses.
  2. Gunakan antarmuka blkio.throttle.write_bps_device dalam 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"    # Tetapkan ambang batas throttling writeback untuk disk menjadi 10 MB/s berdasarkan nomor perangkat.
  3. Gunakan perintah dd yang tidak memiliki oflag diatur ke sync untuk menghasilkan I/O ter-buffer.

    sudo dd if=/dev/zero of=/mnt/vdd/testfile bs=4k count=10000
  4. Gunakan alat iostat untuk menanyakan hasilnya. Lihat kolom wMB/s dalam keluaran perintah. Jika nilainya 10 MB/s, fitur cgroup writeback berlaku.

    iostat -xdm 1 vdd

Verifikasi pemetaan dari memcgs ke blkcgs

Anda dapat menggunakan salah satu metode berikut untuk memeriksa apakah pemetaan dari memcgs ke blkcgs bersifat satu-satu atau banyak-satu.

  • Jalankan perintah berikut untuk melihat pemetaan dari memcgs ke blkcgs:

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

    Contoh tanggapan berikut menunjukkan bahwa pemetaan dari memcg ke blkcg bersifat satu-satu.

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

    1. Gunakan alat ftrace.

      sudo bash -c "echo 1 > /sys/kernel/debug/tracing/events/writeback/insert_memcg_blkcg_link/enable"
    2. Lihat informasi keluaran.

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

      Contoh tanggapan berikut berisi memcg_ino=35 blkcg_ino=48, yang menunjukkan bahwa pemetaan dari memcg ke blkcg bersifat satu-satu.

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