Ich möchte die Anzahl der Bytes logisch bestimmen, die von allen Prozessen über syscalls wie read()
und write()
gelesen / geschrieben werden. Dies unterscheidet sich von der Anzahl der tatsächlich von der Speicherschicht abgerufenen Bytes (angezeigt durch Tools wie iotop), da sie beispielsweise Lesevorgänge enthält, die den Seitencache treffen, und unterscheidet sich auch, wenn Schreibvorgänge erkannt werden: Die logische Schreiboperation findet sofort statt wenn der write
-Aufruf ausgegeben wird, während die tatsächliche physische IO einige Zeit später abhängig von verschiedenen Faktoren auftreten kann (Linux puffert normalerweise Schreibvorgänge und führt das physische IO einige Zeit später aus).
Ich weiß, wie man pro Prozess vorgeht (siehe diese Frage zum Beispiel), aber nicht wie man die systemweite Zählung bekommt.
Wenn Sie /proc
filesystem für die Gesamtanzahl verwenden möchten (und nicht für die Anzahl pro Sekunde), ist es ziemlich einfach.
Dies funktioniert auch bei ziemlich alten Kernel (getestet auf Debian Squeeze 2.6.32 Kernel).
%Vor%Fassen Sie systemweit nur die Zahlen aus allen Prozessen zusammen, die aber nur kurzzeitig gut genug sind, da die Prozesse beim Ableben der Prozesse aus dem Speicher gelöscht werden. Sie müssten die Prozesskostenrechnung aktiviert haben, um sie zu speichern.
Die Bedeutung dieser Dateien ist in der Kernel-Quellen-Datei Documentation/filesystems/proc.txt
:
rchar - E / A-Zähler: Zeichen gelesen
Die Anzahl der Bytes, die diese Task verursacht hat aus dem Speicher gelesen werden. Das ist einfach die Summe der Bytes, die das sind Prozess wurde an read () und pread () übergeben. Es beinhaltet Dinge wie tty IO und es ist nicht davon betroffen, ob die tatsächliche physische Datenträger IO war oder nicht erforderlich (das Lesen wurde möglicherweise von Pagecache erfüllt)
wchar - E / A-Zähler: Zeichen geschrieben
Die Anzahl der Bytes, die diese Aufgabe hat verursacht, oder soll auf die Festplatte geschrieben werden. Ähnliche Einschränkungen gelten hier wie bei rchar.
syscr - E / A-Zähler: syscalls
lesenVersuch, die Anzahl der gelesenen E / A zu zählen B. syscalls wie read () und pread ().
syscw - E / A-Zähler: syscalls schreiben
Versuch, die Anzahl der Schreib-E / A zu zählen B. syscalls wie write () und pwrite ().
read_bytes - E / A-Zähler: gelesene Bytes
Versuch, die Anzahl der Bytes zu zählen, die Dieser Prozess hat wirklich dazu geführt, dass er aus der Speicherschicht geholt wurde. Fertig auf der Ebene submit_bio (), so ist es genau für Block-Backed Dateisysteme.
write_bytes - E / A-Zähler: geschriebene Bytes
Versuch, die Anzahl der Bytes zu zählen, die Dieser Prozess wurde an die Speicherschicht gesendet. Dies geschieht bei Seite-schmutzige Zeit.
cancelled_write_bytes
Die große Ungenauigkeit hier ist abgeschnitten. Wenn ein Prozess 1 MB in eine Datei schreibt und löscht dann die Datei, es wird tatsächlich keine Schreiboperation ausführen. Aber es wird als 1MB Schreibaufwand verursacht. In anderen words: Die Anzahl der Bytes, die dieser Prozess nicht ausgelöst hat, durch Seitencache wird abgeschnitten. Eine Task kann auch "negative" IO verursachen.
Tags und Links linux performance io