Das ist sicherlich keine triviale Aufgabe, die nicht im Userspace erledigt werden kann. Glücklicherweise ist dies unter Linux mit cgroup
mechanizm und seinem blkio-Controller möglich .
Das Einrichten von cgroup ist irgendwie verteilungsspezifisch, da es möglicherweise bereits bereitgestellt oder sogar irgendwo verwendet wird. Hier ist jedoch eine allgemeine Idee (vorausgesetzt, Sie haben die richtige Kernel-Konfiguration):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Nachdem Sie den blkio
Controller eingestellt haben, können Sie ihn verwenden:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Jetzt haben Sie eine C-Gruppe limit1M
, die die Schreibgeschwindigkeit auf Geräten mit Haupt- / Nebennummern X: Y auf 1 MB / s begrenzt. Wie Sie sehen, gilt dieses Limit pro Gerät. Alles, was Sie jetzt tun müssen, ist, einen Prozess innerhalb dieser Gruppe zu platzieren, und dieser sollte begrenzt sein:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Ich weiß nicht, ob / wie dies auf anderen Betriebssystemen möglich ist.
echo "X:Y 1073741824" > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
ls -l /dev/sda