Как это возможно в этом `cat`-процессе, когда пишется больше байтов, чем читается?

1049
Remi.b

Я запустил следующую команду bash, чтобы объединить несколько больших файлов

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

Процесс очень длинный, поскольку файлы занимают около 12 ГБ каждый. На activity monitor(Mac OSX 10.11.3) на вкладке под названием Diskя вижу следующую запись для интересующего процесса

Как это возможно в этом `cat`-процессе, когда пишется больше байтов, чем читается?

Как возможно, что в этом catпроцессе записывается больше байтов, чем читается?

2
Я не знаю OSX, но, возможно, общее количество мониторов включает доступ к диску во время замены. Если операционная система перезаписывает программу на диск, но она снова становится активной, прежде чем что-либо еще использует ее ОЗУ, то копия памяти будет использоваться для ее возобновления без повторного считывания. AFH 7 лет назад 0
Не зная и OSX, я предполагаю, что «записанные» данные включают в себя inode, обновляемые по мере того, как файл увеличивается, чтобы занимать их. Это не будет включено в данные «Чтение», потому что метаданные всех, кроме первого инода, несущественны для `cat`. Либо он может получить доступ к файлу, либо нет, а временные метки и т. Д. Игнорируются `cat` во входных файлах. Однако выходной файл, который создает оболочка, должен воспроизводить метаданные файла в каждом иноде, который используется для нового файла. Gypsy Spellweaver 7 лет назад 0
@GypsySpellweaver - Хороший вопрос. В любой установленной файловой системе может быть время доступа, поэтому строго возможно, что временные метки обновляются при чтении, хотя только для пары файлов! Но вы заставили меня задуматься о другом: если цель находится в журналируемой файловой системе, то будут как записи в журнале, так и данные. Я удивлен, что все это может составить 10% накладных расходов в этом вопросе. Может быть, это просто различия в двух разделах, размер кластера и фрагментации в частности. AFH 7 лет назад 1
Также я не знаю OSX. Я читал, что HFS + не поддерживает разреженные файлы; но в случае другой файловой системы я бы предположил, что по крайней мере один входной файл (частично) разрежен, а выходной файл - нет. Когда я `cat` полностью разреживаю файл в другой файл в Linux (файловая система BTRFS),` iotop` указывает, что процесс читает очень мало и пишет много. Разреженный текстовый файл встречается редко, так что это мое очень общее замечание. Kamil Maciorowski 6 лет назад 0
Этот вопрос следует повторить, чтобы задать вопрос о мониторе активности. Я не вижу никаких данных, свидетельствующих о том, что было написано больше, чем было прочитано - только тот монитор активности, который был зарегистрирован как таковой. Подсчитайте байты в результирующем файле и, скорее всего, это сумма входных файлов. sage 6 лет назад 0

0 ответов на вопрос

Похожие вопросы