Wie ist es in diesem "cat" -Prozess möglich, dass mehr Bytes geschrieben als gelesen werden?

431
Remi.b

Ich habe den folgenden Bash-Befehl ausgeführt, um mehrere große Dateien zusammenzuführen

cat file1.txt file2.txt file3.txt file4.txt > merged.txt 

Der Vorgang ist sehr lang, da die Dateien jeweils etwa 12 GB groß sind. Auf dem activity monitor(Mac OSX 10.11.3), unter der Registerkarte Disk, sehe ich den folgenden Eintrag für den Prozess von Interesse

Wie ist es in diesem

Wie ist es dabei möglich cat, dass mehr Bytes geschrieben als gelesen werden?

2
Ich kenne kein OSX, aber der Monitorsupport umfasst möglicherweise den Datenträgerzugriff während des Austauschs. Wenn ein Betriebssystem ein Programm auf eine Disc austauscht, aber es wieder aktiv wird, bevor sein RAM von irgendetwas anderem verwendet wird, wird die Speicherkopie verwendet, um es fortzusetzen, ohne erneut einzulesen. AFH vor 7 Jahren 0
Ich kenne OSX auch nicht und meine Spekulation ist, dass die "Geschriebenen" Daten die Inodes enthalten, die mit zunehmender Belegung der Datei aktualisiert werden. Das wäre nicht in den "Read" -Daten enthalten, da die Metadaten aller außer dem ersten Inode für "cat" unerheblich sind. Entweder kann auf die Datei zugegriffen werden oder nicht, und die Zeitstempel usw. werden von `cat` in den Eingabedateien ignoriert. Die Ausgabedatei, die die Shell erstellt, muss jedoch die Metadaten der Datei in jedem Inode wiedergeben, der für die neue Datei verwendet wird. Gypsy Spellweaver vor 7 Jahren 0
@GypsySpellweaver - Guter Punkt. Es kann eine Zugriffszeit für das installierte Dateisystem geben. Daher werden unter Umständen nur Zeitstempel für Lesevorgänge aktualisiert, allerdings nur ein paar Mal pro Datei! Aber Sie haben mir noch etwas anderes einfallen lassen: Wenn sich das Ziel in einem Journall-Dateisystem befindet, wird es neben den Daten auch Journal-Schreibvorgänge geben. Ich bin überrascht, dass dies alles zu den 10% Overhead in der Frage beiträgt. Vielleicht sind es nur Unterschiede zwischen den beiden Partitionen, insbesondere der Clustergröße und der Fragmentierung. AFH vor 7 Jahren 1
Ich kenne auch kein OSX. Ich habe gelesen, dass HFS + keine Dateien mit geringer Dichte unterstützt. aber im Falle eines anderen Dateisystems würde ich spekulieren, dass mindestens eine Eingabedatei (teilweise) spärlich ist, die Ausgabedatei nicht. Wenn ich "cat" eine vollständig spärliche Datei in eine andere Datei (BTRFS-Dateisystem) in Linux ("BTRFS-Dateisystem") verwende, zeigt iotop an, dass der Prozess sehr wenig liest und viel schreibt. Eine spärliche Textdatei ist jedoch ungewöhnlich, daher ist dies nur eine sehr allgemeine Bemerkung von mir. Kamil Maciorowski vor 6 Jahren 0
Diese Frage sollte umbenannt werden, um nach dem Aktivitätsmonitor zu fragen. Ich sehe keine Daten, die darauf hindeuten, dass mehr geschrieben wurde als gelesen wurde - nur der Aktivitätsmonitor wurde als solcher gemeldet. Zählen Sie die Bytes in der resultierenden Datei und wahrscheinlich ist es die Summe der Eingabedateien. sage vor 6 Jahren 0

0 Antworten auf die Frage