Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Linux:cgroup writeback özelliğini etkinleştirin

Son Güncelleme:Oct 08, 2026

Alibaba Cloud Linux 2 (çekirdek sürümü 4.19.36-12.al7 ve sonrası) ile Alibaba Cloud Linux 3'te, cgroup v1 çekirdek arayüzü için cgroup writeback özelliği kullanılabilir. Bu özellik, arabelleğe alınmış G/Ç hızını sınırlamanızı sağlar.

Arka plan bilgileri

Bu konuda cgroup olarak adlandırılan kontrol grupları, kaynak tahsisi yapmanızı sağlayan bir Linux çekirdeği özelliğidir. cgroup'lar iki sürümde mevcuttur: cgroup v1 ve cgroup v2. Daha fazla bilgi için Kaynak Yönetimi Kılavuzu'ndaki Kontrol Grupları Nedir? bölümüne bakın. Bu konu, işlemlerin arabelleğe alınmış G/Ç hızını sınırlamak amacıyla cgroup v1 için cgroup writeback özelliğinin nasıl etkinleştirileceğini açıklar.

Sınırlamalar

cgroup writeback özelliğini etkinleştirdikten sonra, bellek alt sistemi (memcg) ile G/Ç alt sistemi (blkcg) arasındaki eşlemenin bu bölümde açıklanan kurallara uygun olduğundan emin olun. Bu durum, işlemler için arabelleğe alınmış G/Ç hızını sınırlamak için gereklidir.

cgroup writeback özelliği, arabelleğe alınmış G/Ç hızını sınırlamak üzere memcg ve blkcg'nin birlikte çalışmasını gerektirir. Varsayılan olarak, cgroup v1'in kontrol alt sistemleri birlikte çalışmaz. Bu nedenle, memcg ve blkcg'yi belirli bir kurala göre bağlamanız gerekir: her bir memcg tek bir blkcg ile eşlenmelidir. Eşleme birebir veya çoka-bir olabilir; ancak bire-çok veya çoka-çok olamaz.

Örneğin, A ve B işlemleri için arabelleğe alınmış G/Ç hızını sınırlamak istediğinizde aşağıdaki kısıtlamalar geçerlidir.

  • A ve B farklı memcg'lere aitse, birebir ilişkiyle farklı blkcg'lere eşlenebilirler. Örneğin, A memcg1 ve blkcg1 öğelerine; B ise memcg2 ve blkcg0 öğelerine aittir.

  • A ve B farklı memcg'lere ait olsa da aynı blkcg'ye eşlenebilirler. Örneğin, A memcg1 öğesine ve B memcg2 öğesine aitken, hem A hem de B blkcg2 öğesine aittir.

  • A ve B aynı memcg'ye aitse, aynı blkcg ile eşlenmeleri gerekir. Örneğin, A ve B'nin her ikisi de memcg0 ve blkcg3 öğelerine ait olabilir.

cgroup writeback etkinleştirildikten sonra beklenmeyen sorunları önlemek için, arabelleğe alınmış G/Ç hızını sınırlamadan önce blkcg için cgroup.procs arayüzünü ayarlayın. Benzersiz bir blkcg eşlemesi sağlamak amacıyla bu arayüze bir işlem kimliği yazabilirsiniz. Ayrıca, memcg ile blkcg arasındaki eşlemeyi görüntülemek için araçlardan yararlanabilirsiniz. Daha fazla bilgi için bkz. memcg ve blkcg arasındaki eşlemeyi doğrulayın.

İşletim ve bakım (O&M) sırasında bir işlem başka bir cgroup'a taşınabilir. Eşleme kuralına göre, bir işlem memcg'ler arasında taşındığında sorun oluşmaz. Ancak, bir işlem blkcg'ler arasında taşındığında sorun meydana gelir. Bunu önlemek için özelliğin kodunda şu kural bulunur: Aktif bir blkcg'deki bir işlem başka bir blkcg'ye taşınırsa, eşleme kök blkcg'ye sıfırlanır. Kök blkcg'de genellikle bir hız sınırı eşiği ayarlanmadığından, hız sınırlama özelliği artık etkili olmaz.

Önemli

Çekirdek kodunda beklenmeyen sorunları önleyen bir kural bulunsa da, işletim sırasında işlemleri blkcg'ler arasında taşımaktan kaçınmanız önerilir.

cgroup writeback özelliğini etkinleştirin

cgroup writeback özelliği, cgroup v1 arayüzü için varsayılan olarak devre dışıdır. Özelliği etkinleştirmek için aşağıdaki adımları izleyin.

  1. Özelliği etkinleştirmek için grubby komutunu kullanarak cgwb_v1 alanını ekleyin.

    Bu örnekte çekirdek sürümü 4.19.36-12.al7.x86_64 olarak belirtilmiştir. Bu değeri kendi gerçek çekirdek sürümünüzle değiştirin. Çekirdek sürümünüzü kontrol etmek için uname -r komutunu çalıştırabilirsiniz.

    sudo grubby --update-kernel="/boot/vmlinuz-4.19.36-12.al7.x86_64" --args="cgwb_v1"
  2. Değişikliklerin etkili olması için sistemi yeniden başlatın.

    sudo reboot
  3. Aşağıdaki komutu çalıştırarak /proc/cmdline çekirdek dosyasını okuyun ve çekirdek komut satırı parametrelerinin cgwb_v1 alanını içerdiğini doğrulayın. Bu işlem, blkcg içindeki blkio.throttle.write_bps_device ve blkio.throttle.write_iops_device arayüzlerini etkinleştirerek arabelleğe alınmış G/Ç hızını sınırlar.

    cat /proc/cmdline | grep cgwb_v1
Not

Kubernetes (k8s) ortamında, cgroup writeback özelliğini etkinleştirdikten sonra memory ve blkio cgroup alt sistemlerini de birleştirmeniz gerekir. Bu işlem, bir işlem taşındığında hız sınırlamanın başarısız olmasını önler.

  1. memory ve blkio cgroup alt sistemlerini birleştirin.

    1. system.conf dosyasını düzenleyin.

      sudo vim /etc/systemd/system.conf
    2. JoinControllers yapılandırmasını değiştirin. Örnek:

      JoinControllers=cpu,cpuacct net_cls,net_prio memory,blkio
    3. Düzenleme modundan çıkmak için Esc tuşuna basın. Ardından, kaydetmek ve çıkmak için :wq girin.

  2. systemd yapılandırma değişikliklerinin etkili olması için başlangıç RAM disk görüntüsünü yeniden oluşturmak üzere aşağıdaki komutu çalıştırın.

    sudo dracut /boot/initramfs-4.19.36-12.al7.x86_64.img 4.19.36-12.al7.x86_64 --force
  3. Sistemi yeniden başlatmak için aşağıdaki komutu çalıştırın.

    sudo reboot
  4. memory ve blkio alt sistemlerinin birleştirildiğini doğrulamak için aşağıdaki komutu çalıştırın.

    ls /sys/fs/cgroup

cgroup writeback işlevinin etkili olduğunu doğrulayın

Bu örnek, cgroup writeback özelliğinin etkili olduğunu doğrulamak amacıyla G/Ç oluşturan iki işlemi simüle eder.

Not
  • dd komutu hızlı geri bildirim sağlar. Sonuçları görüntülemek için iostat komutunu kullanabilirsiniz.

  • dd komutu verileri sıralı olarak yazar. Sıralı bir G/Ç yenilemesi sırasında sistem verileri 1 MB'lık parçalar halinde geri yazar. Bu nedenle, blkio.throttle.write_bps_device eşiğini en az 1 MB (1048576) olacak şekilde ayarlayın. 1 MB'den küçük bir değer belirlerseniz G/Ç işlemi askıda kalabilir.

  1. G/Ç oluşturan iki işlemi simüle edin. Sınırlamaların gerektirdiği gibi, öncelikle blkcg'nin cgroup.procs arayüzünü ayarlayın.

    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"    # $$ is your process ID
    sudo bash -c "echo $$ > /sys/fs/cgroup/memory/memcg1/cgroup.procs"    # $$ is your process ID
  2. Arabelleğe alınmış G/Ç hızını sınırlamak için blkcg içindeki blkio.throttle.write_bps_device arayüzünü kullanın.

    sudo bash -c "echo 254:48 10485760 > /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.write_bps_device"    # Set the disk write-back rate limit to 10 MB/s based on the device number.
  3. Önbelleğe alınmış zaman uyumsuz G/Ç oluşturmak için oflag=sync parametresi olmadan dd komutunu kullanın.

    sudo dd if=/dev/zero of=/mnt/vdd/testfile bs=4k count=10000
  4. Sonuçları sorgulamak için iostat aracını kullanın. Çıktıdaki wMB/s sütununu kontrol edin. Hız yaklaşık 10 MB/s ile sınırlandırılmışsa cgroup writeback özelliği doğru çalışıyor demektir.

    iostat -xdm 1 vdd

memcg ve blkcg arasındaki eşlemeyi doğrulayın

memcg ve blkcg arasındaki eşlemenin birebir veya çoka-bir olduğunu doğrulamak için aşağıdaki yöntemlerden birini kullanabilirsiniz.

  • memcg ve blkcg arasındaki eşlemeyi görüntüleyin.

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

    Aşağıdaki örnek çıktı, memcg ve blkcg arasında birebir bir eşleme olduğunu göstermektedir.

    memory     <--->     blkio
    memcg1:   35 <---> blkcg1:   48
  • ftrace çekirdek izleme aracını kullanın.

    1. ftrace aracını etkinleştirin.

      sudo bash -c "echo 1 > /sys/kernel/debug/tracing/events/writeback/insert_memcg_blkcg_link/enable"
    2. Çıktı bilgilerini görüntüleyebilirsiniz.

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

      Aşağıdaki örnek çıktı memcg_ino=35 blkcg_ino=48 değerlerini göstermektedir. Bu durum, memcg ve blkcg arasında birebir bir eşleme bulunduğunu belirtir.

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