Ermitteln Sie die Anzahl der "logischen" Bytes, die in einem Linux-System gelesen / geschrieben werden

8

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.

    
BeeOnRope 16.02.2015, 07:39
quelle

2 Antworten

9

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

lesen      

Versuch, 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.

    
Marki555 15.06.2015, 14:59
quelle
1

Hier ist ein SystemTap-Skript, das die logische IO verfolgt. Es basiert auf dem Skript in Ссылка

%Vor%     
VolenD 10.06.2015 23:04
quelle

Tags und Links