Hledám způsob, jak omezit proces disku io na nastavený limit rychlosti. V ideálním případě by program fungoval podobně jako tento:
$ limitio --pid 32423 --write-limit 1M
Omezení rychlosti zápisu na pevný disk 32423 na 1 megabajt za sekundu.
Přijatá odpověď:
To rozhodně není triviální úkol, který nelze provést v uživatelském prostoru. Naštěstí je to možné na Linuxu pomocí cgroup
mechanizm a jeho ovladač blkio.
Nastavení cgroup je nějak specifické pro distribuci, protože už může být někde připojeno nebo dokonce použito. Zde je však obecná myšlenka (za předpokladu, že máte správnou konfiguraci jádra):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Nyní, když máte blkio
sadu ovladačů, můžete ji použít:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Nyní máte cgroup limit1M
který omezuje rychlost zápisu na zařízení s hlavními/vedlejšími čísly X:Y až 1 MB/s. Jak vidíte, tento limit je na zařízení. Vše, co nyní musíte udělat, je vložit nějaký proces do této skupiny a měl by být omezen:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Nevím, zda/jak to lze provést na jiných operačních systémech.