Was wird von "perf" genau als Seitenfehler angezeigt?

884
Dark

Ich möchte die Anzahl der Festplattenzugriffe während einer vollständigen Ausführung meines Skripts zählen. Mein Bash-Skript führt lokal 2 andere ausführbare Dateien und 2 andere ausführbare Dateien aus der Ferne aus. So etwas (diese ausführbaren Dateien können selbst auf andere Tools zugreifen):

#!/bin/bash  ./executable1 DATA1 & ./executable2 DATA2 &  ssh remote_host './executable3 DATA3' & ssh remote_host './executable4 DATA4' &  wait; 

Jetzt führe ich mein bash-Skript mit perfso aus:

perf stat -e page-faults,page-faults:u ./myBashScript.sh 

Die Ergebnisse sind jedoch immer gleich, egal ob ich die DATA * -Dateien, die Befehle, die Anzahl der Befehle usw. ändere. Etwas in der Art:

128,470 page-faults 127,641 page-faults:u 

Jetzt ist meine Frage "Wie kann ich die Anzahl der Festplattenzugriffe für das gesamte Skript zählen?"

ps:

  • Wie Sie wissen, versucht Linux, die Anzahl der Festplattenzugriffe zu reduzieren, indem der freie Speicherplatz von RAM als Cache-Platte verwendet wird, und hier, indem Sie die Anzahl der Festplattenzugriffe zählen, meine ich genau, wie oft das Betriebssystem Daten von der Festplatte in den Hauptspeicher (= RAM Hit / Miss
  • Ich muss nur die Anzahl der Festplattenzugriffe auf der lokalen Maschine zählen, nicht die entfernte.
  • Entschuldigung für schwaches Englisch.
5

1 Antwort auf die Frage

0
osgx

Page-Fehler im perfTool von Linux-Tools ( perf_events) betreffen sowohl kleinere als auch größere Seitenfehler. Kleinere Seitenfehler betreffen nicht den Zugriff auf die Festplatte. Und nicht jeder größere Seitenfehler bezieht sich auf den Datenträgerzugriff (nur die Datenträgerdatei wurde mmapbearbeitet). Festplattenzugriffe von Lesen / Schreiben erzeugen keine Seitenfehler.

Einige generische Lösungen zur Fehlerzählung von Seiten finden Sie unter https://stackoverflow.com/questions/23302763 .

Um die Festplattenzugriffe global zu zählen, verwenden Sie das iostatTool http://man7.org/linux/man-pages/man1/iostat.1.html (tps, r / s, w / s) oder das vmstatTool http://man7.org/linux /man-pages/man8/vmstat.8.html (bo, bi, -d). Beide werden mit einem Zeitraum in Sekunden verwendet, um iostat 1oder vmstat 1alle Sekunden einen Satz von Aktivitäten zu drucken, bis sie von ctrl-c abgebrochen werden. oder ähnlich iostat 1 60oder vmstat 1 60um jede Sekunde für 1 Minute zu drucken und zu beenden.

Eine andere Lösung besteht in der Verwendung einer Kombination aus perfWerkzeug und bestimmten Ereignissen aus E / A- oder Platten-Subsystemen. Gregg hat einige Beispiele für die erweiterte Verwendung von Perf unter http://www.brendangregg.com/perf.html und https://github.com/brendangregg/perf-tools .

Sein iosnoop-Tool http://www.brendangregg.com/blog/2014-07-16/iosnoop-for-linux.html und http://www.brendangregg.com/blog/2014-07-23/linux-iosnoop -latency-heat-maps.html (basierend auf perf) kann Datenträger -E / A mit Prozess-PID, Datenträger-ID, Offset und Io-Größe verfolgen und die Latenz des Datenträgerzugriffs messen.

Überprüfen Sie auch "7.2. Heat Maps" von http://www.brendangregg.com/perf.html

Ich habe perf_events verwendet, um die Blockanforderungsausgabe (Datenträger-E / A) und statische Tracepoints für den Abschluss aufzuzeichnen:

 # perf record -e block:block_rq_issue -e block:block_rq_complete -a sleep 120