Je cherche un moyen de limiter un disque de processus io à une limite de vitesse définie. Idéalement, le programme devrait fonctionner comme ceci :
$ limitio --pid 32423 --write-limit 1M
Limitation du processus 32423 à 1 mégaoctet par seconde de vitesse d'écriture sur le disque dur.
Réponse acceptée :
Ce n'est certainement pas une tâche triviale qui ne peut pas être effectuée dans l'espace utilisateur. Heureusement, il est possible de le faire sous Linux, en utilisant cgroup
mechanizm et son contrôleur blkio.
La configuration de cgroup est en quelque sorte spécifique à la distribution car il peut déjà être monté ou même utilisé quelque part. Voici une idée générale, cependant (en supposant que vous ayez une configuration de noyau appropriée) :
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Maintenant que vous avez blkio
jeu de contrôleur, vous pouvez l'utiliser :
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Vous avez maintenant un cgroup limit1M
qui limite la vitesse d'écriture sur l'appareil avec des nombres majeurs/mineurs X:Y à 1 Mo/s. Comme vous pouvez le voir, cette limite est par appareil. Tout ce que vous avez à faire maintenant est de mettre un processus à l'intérieur de ce groupe et il devrait être limité :
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Je ne sais pas si/comment cela peut être fait sur d'autres systèmes d'exploitation.