Wie kann ich die Ausgabegeschwindigkeit von stdout begrenzen?

24

Ich verwende CentOS 5.7 und besitze ein Sicherungsdienstprogramm, in das die Sicherungsdatei gespeichert werden kann stdout. Die Sicherungsdatei ist ziemlich groß (mehrere Gigabyte). Das Ziel ist ein SSHFS-Dateisystem. Um sicherzustellen, dass ich die Bandbreite nicht einschränke und die Leistung des Netzwerks beeinträchtige, möchte ich die Geschwindigkeit begrenzen, mit der Daten auf die "Festplatte" geschrieben werden.

Wie kann ich die Möglichkeit einschränken, stdoutauf einer Byte-Nummer zu basieren? Begrenzen Sie beispielsweise die Schreibfähigkeit eines Prozesses auf etwa 768 Bit / s.

Wesley
quelle
6
@msw Bei dieser Frage geht stdoutes um die Begrenzung der Übertragungsrate, bei der vorherigen Frage ging es um die Begrenzung des Netzwerkverkehrs. Verschiedene Tiere ...
voretaq7
7
@msw Zuletzt habe ich überprüft, dass der Sinn des SE-Netzwerks darin besteht, eine große Menge an Wissen in bestimmten Bereichen zu sammeln. In diesem Fall geht es um * nix. Die Begrenzung der Ausgabe von stdoutunterscheidet sich von der Begrenzung der Bandbreite. Nur weil das zugrunde liegende Problem dasselbe ist, bedeutet dies nicht, dass zukünftige Besucher nicht jede Frage unabhängig von der anderen nützlich finden. Denken Sie daran, dass die Qs & As für Googler genauso wichtig sind wie für die eigentlichen Fragesteller. Deshalb ist das Löschen beantworteter Fragen hier eine Kardinalsünde.
MDMarra

Antworten:

27

Sie können Ihrer Pipeline ein Tool zur Ratenbegrenzung hinzufügen.

Zum Beispiel gibt es pvwelche mit einer Geschwindigkeitsbegrenzungsoption:

-L RATE, --rate-limit RATE

Begrenzen Sie die Übertragung auf maximal RATE Bytes pro Sekunde. Ein Suffix von "k", "m", "g" oder "t" kann hinzugefügt werden, um Kilobyte (* 1024), Megabyte usw. zu bezeichnen

Eine Alternative ist das Tool buffermit:

   -u microseconds

Nach jeder Schreibpause für so viele Mikrosekunden. Der Standardwert ist Null. (Überraschenderweise kann ein kleiner Energiesparmodus von 100 usecs nach jedem Schreibvorgang den Durchsatz auf einigen Laufwerken erheblich verbessern.)

maxschlepzig
quelle
3

Ich wäre versucht, dies auf einer lokalen Festplatte zu speichern, anstatt es direkt auf das Remote-Volume zu schreiben. Auf diese Weise können Sie rsyncmit --bwlimitauf einfache Weise die Übertragung einschränken.

Einer der Vorteile dieses Ansatzes besteht darin, dass die Übertragung unterbrochen wird, wenn ein Konnektivitätsproblem mit dem Remotecomputer auftritt, das Backup selbst jedoch nicht in einem Glanzlicht explodiert.

MDMarra
quelle
Zur Kenntnis genommen. Ich wünschte, rsyncdas wäre eine praktikable Lösung in dieser eher begrenzten Situation, in der ich mich befinde. = |
Wesley
3

pv (Rohransicht)

echo asdlfkjasdf | pv -q -L 12
Ole Tange
quelle