Sto cercando un modo per limitare un disco di processi io a un limite di velocità impostato. Idealmente il programma funzionerebbe in modo simile a questo:
$ limitio --pid 32423 --write-limit 1M
Limitazione della velocità di scrittura del disco rigido da 32423 a 1 megabyte al secondo.
Risposta accettata:
Questo non è certamente un compito banale che non può essere svolto nello spazio utente. Fortunatamente, è possibile farlo su Linux, usando cgroup
mechanizm e il suo controller blkio.
La configurazione di cgroup è in qualche modo specifica della distribuzione in quanto potrebbe essere già montata o addirittura utilizzata da qualche parte. Tuttavia, ecco un'idea generale (supponendo che tu abbia una corretta configurazione del kernel):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Ora che hai blkio
set di controller, puoi usarlo:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Ora hai un cgroup limit1M
che limita la velocità di scrittura sul dispositivo con numeri maggiori/minori X:Y a 1 MB/s. Come puoi vedere, questo limite è per dispositivo. Tutto quello che devi fare ora è inserire un processo all'interno di quel gruppo e dovrebbe essere limitato:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Non so se/come questo possa essere fatto su altri sistemi operativi.