Ich suche nach einer Möglichkeit, ein Process Disk io auf eine festgelegte Geschwindigkeitsbegrenzung zu begrenzen. Idealerweise würde das Programm wie folgt funktionieren:
$ limitio --pid 32423 --write-limit 1M
Begrenzung von Prozess 32423 auf 1 Megabyte pro Sekunde Schreibgeschwindigkeit der Festplatte.
Akzeptierte Antwort:
Das ist sicherlich keine triviale Aufgabe, die nicht im Userspace erledigt werden kann. Glücklicherweise ist dies unter Linux mit cgroup
möglich mechanizm und sein blkio-Controller.
Das Einrichten von cgroup ist irgendwie verteilungsspezifisch, da es möglicherweise bereits irgendwo gemountet oder sogar 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
Jetzt haben Sie blkio
Controller-Set, können Sie es 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 Kontrollgruppe limit1M
das begrenzt die Schreibgeschwindigkeit auf dem Gerät mit Major/Minor-Nummern X:Y bis 1MB/s. Wie Sie sehen können, gilt dieses Limit pro Gerät. Alles, was Sie jetzt tun müssen, ist, einen Prozess innerhalb dieser Gruppe zu platzieren, und er sollte begrenzt sein:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Ich weiß nicht, ob/wie dies auf anderen Betriebssystemen möglich ist.