2016-04-05 5 views
0

Ich habe ein Programm erstellt, das die Zeit misst, die ein read() für eine Datei benötigt, und das mehrmals, um die Blockgröße meines Dateisystems zu bestimmen.Vergleichen der Zeit bis zum Lesen() aus dem Dateisystem

Meine Frage: Nach dem Zeichnen dieser Daten, jedes Mal, wenn ich es versuche, unabhängig von der Größe, die ich in jeder Iteration lese, dauert der erste Lesevorgang wesentlich länger im Vergleich zu jedem anderen Lesevorgang. Ich weiß, dass, sobald ein Block das Lesen abgeschlossen hat, die Zeit für das nächste Lesen im neuen Block ein bisschen mehr Zeit braucht (was ich in meinem Plot beobachtet habe), aber dieser erste gelesene Wert ist viel höher als das auch.

Hat jemand eine Dateisysteme/O.S. basierte Antwort, warum dies der Fall ist?

+1

Wie groß sind Ihre Dateien? Wenn sie nur ein paar KB groß sind, könnten sie irgendwo zwischengespeichert werden (Level-Cache, usw.). – Leandros

+1

@Leandros Wenn genügend ungenutzter Speicher verfügbar ist, können sogar Gigabytes von Dateien im Seitencache gespeichert werden. – EOF

+0

@Leandros Meine Datei ist 3 MB. –

Antwort

2

Ich kann mir eine Reihe von Gründen vorstellen, warum dies der Fall sein könnte. Das Dateisystem kann die Daten, die von der Festplatte gelesen werden, zwischenspeichern (im Voraus abrufen), so dass es möglicherweise sogar mehrere Blöcke von der Festplatte gelesen hat, selbst wenn es nur einen Block an Ihr Programm zurückgibt; Damit Sie das nächste Mal einen Lesevorgang ausführen, ziehen Sie nur mehr aus diesen zwischengespeicherten Daten. Es ist auch möglich, dass der Lesekopf zum Anfang der Datei verschoben werden muss? Dies ist wahrscheinlich sehr Dateisystem-abhängig. Ich denke, dass Caching eher die Ursache ist?