Isso certamente não é uma tarefa trivial que não pode ser feita no espaço do usuário. Felizmente, é possível fazer no Linux, usando cgroup
mechanizm e seu controlador de blkio .
A configuração do cgroup é de alguma forma específica para a distribuição, uma vez que já pode ser montada ou usada em algum lugar. Aqui está uma idéia geral, no entanto (supondo que você tenha a configuração correta do 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
Agora que você tem o blkio
controller set, você pode usá-lo:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Agora você tem um cgroup limit1M
que limita a velocidade de gravação no dispositivo com números maiores / menores X: Y para 1MB / s. Como você pode ver, esse limite é por dispositivo. Tudo o que você precisa fazer agora é colocar algum processo dentro desse grupo e isso deve ser limitado:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Eu não sei se / como isso pode ser feito em outros sistemas operacionais.