Estoy buscando una manera de limitar un disco de procesos io a un límite de velocidad establecido. Idealmente, el programa funcionaría de manera similar a esto:
$ limitio --pid 32423 --write-limit 1M
Limitación del proceso 32423 a 1 megabyte por segundo de velocidad de escritura en el disco duro.
Respuesta aceptada:
Ciertamente, esa no es una tarea trivial que no se puede hacer en el espacio de usuario. Afortunadamente, es posible hacerlo en Linux, usando cgroup
mecanismo y su controlador blkio.
La configuración de cgroup es, de alguna manera, específica de la distribución, ya que es posible que ya esté montada o incluso utilizada en alguna parte. Sin embargo, esta es una idea general (suponiendo que tenga la configuración de kernel adecuada):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Ahora que tienes blkio
conjunto de controladores, puedes usarlo:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Ahora tienes un cgroup limit1M
que limita la velocidad de escritura en el dispositivo con números mayores/menores X:Y a 1 MB/s. Como puede ver, este límite es por dispositivo. Todo lo que tiene que hacer ahora es poner algún proceso dentro de ese grupo y debería estar limitado:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
No sé si/cómo se puede hacer esto en otros sistemas operativos.