GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie drosselt man E/A pro Prozess auf ein maximales Limit?

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.


Linux
  1. So begrenzen Sie die CPU-Auslastung eines Prozesses in Linux

  2. Linux – Wie überwacht man die Festplatten-E/A in einem bestimmten Verzeichnis?

  3. Linux – Wie beschränke ich einen Prozess auf einen CPU-Kern in Linux??

  4. So aktivieren Sie die sudo-E/A-Protokollierung

  5. So begrenzen/drosseln Sie die rsync-Übertragungsgeschwindigkeit unter Linux

So beenden Sie einen Zombie-Prozess unter Linux

So beenden Sie einen Prozess in Linux

Wie man die Gesamtressourcen (Speicher) eines Prozesses und seiner Kinder begrenzt

Wie kann ich die Netzwerk-E/A-Nutzung pro Prozess unter Linux überwachen?

Wie protokolliere ich die CPU-Nutzung pro Prozess?

Wie überprüfe ich die Festplatten-E/A-Auslastung pro Prozess?