Warum hat 'Katze' dieses seltsame Zeitverhalten?


8

Ich verwende, catum verschiedene Dateien in eine große Datei zu leiten. Die Anzahl der verschiedenen Dateien variiert von zwei bis zu zehn Dateien, aber die Gesamtgröße aller Dateien ist immer gleich (ein paar GB).

Mein Problem: Immer , wenn ich auf den Fall, wo ich insgesamt sechs Dateien haben, die Zeit, die sie verketten nimmt Spitzen (dh deutlich mehr als mit fünf oder sieben), und ich habe keine Ahnung , warum.

Hat jemand eine Idee?

Die Dateien (alle gleich groß)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

Befehl

cat outputTEMP* >> output && rm -f outputTEMP*

Derzeit muss die Maschine einige Berechnungen durchführen, aber ich werde sie später aktualisieren, wenn neue Messungen verfügbar sind.


Was ist die genaue Befehlszeile, die Sie verwenden?
InnaM

Ich habe die Kommandozeile hinzugefügt.
Brandstaetter

Das ist definitiv seltsam. Ich kann Ihnen nicht sagen, warum es so funktioniert, aber vielleicht sollten Sie einen Klartext-Fehlerbericht an bug-coreutils@gnu.org senden.
Reynolds

Messe Es! Und stellen Sie sicher, dass Sie beim Messen nicht zwischenspeichern!
Davide

Antworten:


4

Eine Möglichkeit, dieses Problem zu beheben, ist die Verwendung von strace.

strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log 

23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3)                = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3)                = 0

Die Option -tt protokolliert den Zeitstempel des Systemaufrufs in Millisekunden Auflösung. -e trace = öffnen, Protokoll schließen nur öffnen, API schließen. Wenn Sie versuchen, sie zu entfernen, wird eine sehr verrauschte Protokolldatei angezeigt.


2

Davides Kommentar ist also genau richtig. Wir brauchen hier zwei Dinge, um eine genaue Einschätzung vorzunehmen:

  1. Assurance Caching ist nicht Teil des Szenarios
  2. tatsächliche Messung der Zeit, die es dauert.

Angenommen, Sie haben den Speicherplatz, beschreibe ich ein Testszenario, mit dem genauer festgestellt wird, ob dies ein echtes Problem ist. In diesem Fall helfen die unterstützenden Beweise aus diesem Ansatz den Entwicklern, zu erkennen, dass es real ist, und es reproduzieren zu können.

Um bei der Problemisolierung zu helfen, machen wir hier überhaupt nicht den rm-Teil. Lassen Sie die TEMP-Dateien danach herumliegen. Wenn Sie möchten, können Sie die Tests später mit dem Teil 'rm' wiederholen.

Hier ist das Testszenario:

  • Erstellen Sie 9 Verzeichnisse - eines für jede Anzahl von Dateien (2 3 4 5 6 7 8 9 und 10) - wenn Sie keinen Speicherplatz haben, führen Sie möglicherweise einfach 2, 5, 6, 7 und 10 aus.
  • Stellen Sie sicher, dass Sie VERSCHIEDENE Dateien in jedes dieser Verzeichnisse einfügen. KEINE Duplikate irgendwo
  • Verwenden Sie den Befehl time wie folgt:

    Zeit (cat outputTEMP * >> Ausgabe)

Erfassen Sie die tatsächlichen, Benutzer- und Systemnummern, die für jeden von Ihnen ausgeführten Test gemeldet wurden.

Ich stimme Reynolds zu; Wenn dies real ist, sollten Sie auf jeden Fall Details per E-Mail an bug-coreutils@gnu.org senden.


Ein weiterer Gedanke: Um sicherzustellen, dass Sie dieselbe GESAMTE Datenmenge in die Ausgabedatei kopieren. Wenn es also insgesamt 1 GB ist, haben Sie im Verzeichnis '2' Dateien mit einer
Größe von
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.