Wie Messen die IOPS für einen Befehl in linux?
Arbeite ich an einem Simulationsmodell, wo ich will, zu bestimmen, wenn die Speicher-IOPS-Kapazität wird zum Engpass (z.B. und HDD hat ~150 IOPS, während ein SSD-Laufwerk kann als 150.000). So bin ich versucht zu kommen mit ein Weg, um benchmark IOPS in einem Befehl (git) für einige verschiedene Operationen (push, pull, merge-Klon).
So weit, ich habe es gefunden-tools wie iostat, allerdings bin ich mir nicht sicher, wie Sie Sie zu beschränken Sie den Bericht auf, was einem einzigen Befehl nicht.
Die beste Idee, die ich mit oben kommen kann ist, um zu bestimmen, meine HDD IOPS-Kapazität, verwenden Sie Zeit auf die eigentlichen Befehl ein, sehen, wie lange es dauert, multiplizieren Sie, dass durch die IOPS-und das sind meine IOPS:
HDD ->150 IOPS
time df -h
real 0m0.032s
150 * .032 = 4.8 IOPS
Aber, das ist natürlich sehr blöd, da die Dauer der Ausführung wurden in Bezug auf CPU-Nutzung eher als HDD-Verwendung, es sei denn, die Nutzung der Festplatte war 100% für Zeit, macht es keinen Sinn zu Messen, Dinge wie, dass.
So, wie kann ich Messen die IOPS für ein Befehl?
- Möglich, Duplikat der dies, SO Frage oder dieser Server-Fehler-Frage Kann nicht markieren Sie als Duplikat wegen Kopfgeld
- Was ist Ihr Betriebssystem? Haben Sie überprüft, DTrace was ist für Unix/MacOS X/Solaris oder SystemTap, die verwendet werden können für Linux?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Zeit(1) - Kommandos auf einem typischen Linux-system; der Standardwert ist eine bash(1) vordefiniert, die ist etwas basic. Es ist auch
/usr/bin/time
die Sie ausführen können entweder durch aufrufen es genau so, oder das erzählen von bash(1) nicht zu verwenden, Aliase und gelieferten, indem Sie mit einem backslash, also:\time
. Debian hat es in der "Zeit" - Paket ist standardmäßig installiert, Ubuntu ist wahrscheinlich identisch, und die anderen Distributionen sehr ähnlich sein.Aufrufen, es in einer ähnlichen Weise wie die shell-builtin ist schon Ausführlicher und informativer, wenn auch vielleicht mehr undurchsichtig, es sei denn, Sie sind bereits vertraut mit dem, was die zahlen wirklich bedeuten:
Jedoch, würde ich mag zu zeichnen Ihre Aufmerksamkeit auf der Mann-Seite, die Listen der
-f
option zum anpassen die Ausgabe-format, und insbesondere die%w
- format, die zählt die Anzahl der Zeiten, die der Prozess gab Ihre CPU-Zeitscheibe für I/O:Beachten Sie, dass der erste Lauf beendet I/O-184 mal, aber der zweite Lauf beendet, nur einmal. Die erste Zahl ist glaubwürdig, denn es gibt 124 Verzeichnisse in meinem
~/Maildir
: das Lesen der Verzeichnis-und inode gibt grob zwei IOPS pro Verzeichnis, weniger ein bisschen, weil einige inodes waren wahrscheinlich nebeneinander und Lesen in einem Betrieb, plus einige extra nochmal für die Zuordnung in der du(1) Binär -, shared libraries und so weiter.Die zweite Figur ist natürlich niedriger aufgrund von Linux disk-cache. So, das Letzte Stück ist, um den cache leeren. sync(1) ist ein vertrautes, das spült die schmutzigen auf die Festplatte schreibt, aber nicht Spülen Sie den cache Lesen. Sie können bündig, dass man sich durch schreiben von 3 bis
/proc/sys/vm/drop_caches
. (Andere Werte sind auch gelegentlich nützlich, aber Sie wollen 3 hier.) Als nicht-root-Benutzer, der einfachste Weg, dies zu tun ist:Verbindung mit der
/usr/bin/time
ermöglichen sollte, die Sie zum erstellen des Skripts müssen Sie die benchmark-Befehle, die Sie interessiert sind in.Als eine kleine beiseite, tee(1) verwendet wird, da dies nicht funktioniert:
Den Grund? Obwohl das echo(1) als root läuft, die Umleitung ist als Ihr normales Benutzerkonto, das nicht über Schreibberechtigungen für
drop_caches
. tee(1) effektiv ist die Umleitung als root.'\time'
und cache löschen. DankDen
iotop
Befehl sammelt die I/O-Auslastung Informationen über die Prozesse auf Linux. Standardmäßig, es ist ein interaktiver Befehl, aber Sie können es im batch-Modus mit-b
/--batch
. Sie können auch eine Liste der Prozesse mit-p
/--pid
. So können Sie die Aktivität überwachen einesgit
Befehl mit:Können Sie ändern Sie die Verzögerung mit
-d
/--delay
.Können Sie pidstat:
pidstat -d 2
Genauer gesagt
pidstat -d 2 | grep COMMAND
oderpidstat -C COMMANDNAME -d 2
Den
pidstat
- Befehl wird verwendet, für die überwachung der einzelnen Aufgaben, die derzeit verwaltet der Linux-kernel. Es schreibt auf die Standardausgabe Aktivitäten für jede Aufgabe ausgewählt mit der option-p oder für jede Aufgabe verwaltet der Linux-kernel ist mit der option-p ALL verwendet wurde. Nicht Auswahl aller Aufgaben entspricht der Angabe von -p ALLE, sondern nur aktive Aufgaben (Aufgaben mit nicht-null-Statistik-Werte) im Bericht angezeigt.Die pidstat Befehl kann auch verwendet werden, für die überwachung der Kind-Prozesse von ausgewählten Aufgaben.
command not found: pidstat
. Stellt sich heraus, es ist standardmäßig nicht vorhanden, also musste ichsudo apt-get install sysstat
. (Nur erwähnen, um zu speichern, andere Passanten ein bisschen googeln und/oderapt-file search
ing...)