Yanıtlar:
Bu kesinlikle kullanıcı alanında yapılamayan önemsiz bir iş değildir. Neyse ki, cgroup
mekanizma ve onun blkio kontrolünü kullanarak Linux'ta yapmak mümkün .
Cgroup'u kurmak bir şekilde dağıtıma özgüdür, çünkü zaten monte edilmiş veya bir yerde bile kullanılabilir. Ancak, genel fikir (uygun çekirdek yapılandırmasına sahip olduğunuz varsayılarak):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Artık blkio
denetleyici ayarınız olduğu için onu kullanabilirsiniz:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Artık limit1M
büyük / küçük sayıları X: Y ile 1 MB / sn arasında olan aygıtta yazma hızını sınırlayan bir grubunuz var . Gördüğünüz gibi, bu sınır cihaz başına. Şimdi yapmanız gereken tek şey bu grubun içine bir süreç koymak ve bunun sınırlı olması gerekiyor:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Bunun diğer işletim sistemlerinde nasıl yapılıp yapılmadığını bilmiyorum.
dd ... oflag=direct
beklendiği gibi çalışacaktır. Dosya sistemi destekliyorsa cgroup v2 bunu yapabilir . Ayrıntılar: G / Ç sınırlaması için cgroups kullanma
ionice
dan util-linux
istediğini benzer bir şey yapar.
Mutlak IO limitleri koymaz, IO önceliği ve 'nezaket' belirler - nice
bir proses için ne yaptığına benzer - CPU önceliği.
Man sayfasından:
ionice - G / Ç programlama sınıfını ve önceliğini ayarlayın veya alın AÇIKLAMA Bu program, G / Ç zamanlama sınıfını ve programı. Herhangi bir argüman veya sadece -p belirtilmezse, ionice sorguyu sorgular. Mevcut G / Ç programlama sınıfı ve bu işlem için öncelik. Komut verildiğinde, ionice bu komutu verilen komutla çalıştıracaktır. argümanlar. Sınıf belirtilmezse, komut çalıştırılır. "en iyi çaba" planlama sınıfına sahip. Varsayılan öncelik seviyesi 4'tür.
CFQ
G / Ç zamanlayıcısı ile çalıştığını akılda bulundurmalıdır . Birçok modern sistemde deadline
varsayılan olarak bir tane etkindir.
systemd, grup tarafından manipüle edilen işlem çağrıları için bir sarıcı sağlar. Systemd run (1) kılavuz sayfasından:
Aşağıdaki komut, updatedb (8) aracını çağırır, ancak blok GÇ ağırlığını 10'a düşürür. BlockIOWeight = özelliği hakkında daha fazla bilgi için bkz. Systemd.resource-control (5).
systemd-run -p BlockIOWeight=10 updatedb
Programı ön planda çalıştırmak için bu --scope
seçeneği kullanmayı düşünün systemd-run
.
Fche'nin cevabı çok iyi bir ipucudur, bunun için teşekkürler, sorunu gerçekten çözmese de, sorunun bir süreci belirli bir bant genişliği ile sınırlandırmasıydı.
Böyle bir şey öneriyorum:
systemd-run -p "IOWriteBandwidthMax=/dev/sdX 1M" updatedb
veya kullanımdan kaldırılmış sürüm:
systemd-run -p "BlockIOWriteBandwidth=/dev/sdX 1M" updatedb
Yine de bu, soruya uymuyor çünkü halihazırda çalışan bir işlem için kullanılamıyor, ancak belki başka durumlarda yardımcı olabilir.
Bağlantılar:
echo "X:Y 1073741824" > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
ile alt gruplar oluşturmak için cihaza genel politika belirlemelisiniz ve X ile Y'yi yanils -l /dev/sda