Könnte mich jemand an einen Befehl weiterleiten, um TLB-Fehler unter LINUX zu messen? Ist es in Ordnung, kleinere Seitenfehler zu berücksichtigen (oder ungefähr), wenn TLB fehlt?
Sie können perf verwenden, um auf die Hardware-Leistungsindikatoren zuzugreifen:
$ perf stat -e dTLB-load-misses,iTLB-load-misses /path/to/command
z.B :
$ perf stat -e dTLB-load-misses,iTLB-load-misses /bin/ls > /dev/null
Performance counter stats for '/bin/ls':
5,775 dTLB-load-misses
1,059 iTLB-load-misses
0.001897682 seconds time elapsed
Ein kleiner Fehler und ein TLB-Fehler sind keine guten Analoga. Ein kleiner Fehler tritt auf, wenn sich eine angeforderte Seite im Speicher befindet, aber nicht in der aktuellen Seitentabelle zugeordnet ist. Es wäre sicherlich der Fall, dass ein geringfügiger Fehler mit einem TLB-Fehler verbunden ist (da die TLB-Einträge Verknüpfungen zu Seitentabelleneinträgen sind), aber TLB-Fehler werden durch viele andere Dinge verursacht, z. B. schwere Fehler oder einen Übergang in der Lokalität eines Programms .
Kleinere Seitenfehler treten auf, wenn die Seite bereits in den Speicher geladen ist, der zugehörige Seitentabelleneintrag jedoch noch nicht erstellt wurde. Als Nebeneffekt führen kleinere Seitenfehler immer zu TLB-Fehlern. Andererseits tritt ein TLB-Fehler auf, wenn sich der Übersetzungseintrag für eine Seite nicht im TLB befindet (bei dem es sich um einen Cache handelt). Dies kann vorkommen, wenn dieser TLB-Eintrag aufgrund der begrenzten Kapazität des TLB zuvor entfernt wurde.