Ciertamente, esa no es una tarea trivial que no se puede hacer en el espacio de usuario. Afortunadamente, es posible hacerlo en Linux, utilizando mechanizmcgroup
y su controlador blkio .
La configuración de cgroup es de alguna manera específica de distribución, ya que puede estar montada o incluso utilizada en algún lugar. 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 tiene blkio
configurado el controlador, puede usarlo:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Ahora tiene 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 ser limitado:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
No sé si / cómo se puede hacer esto en otros sistemas operativos.
echo "X:Y 1073741824" > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
y obtener X e Y, es decirls -l /dev/sda