LINUX.ORG.RU
ФорумAdmin

dd и vfat


0

1

Есть диск usb 3.0.

dd if=/dev/zero of=/mount/test bs=256k count=2048; sync показывает скорость 81.2MB/s в случае ext4.

В случае vfat - скорость максимум 21MB/s.

С чем это связано ?

★★☆☆

Последнее исправление: SI (всего исправлений: 2)

ext4 умеет помечать блоки как «заполненные нулями», без физической записи. Не могу блин нагуглить, как по-английски фича называется

selivan ★★★
()
Ответ на: комментарий от selivan

Вы про sparse files?

Оно правда их делает из настоящего потока нулей при write? Как-то это неожиданно (и не совсем в хорошем смысле).

LeninGad
()
Ответ на: комментарий от LeninGad

Точно, спасибо за подсказку.

Других вариантов для обеспечения такой разницы я не вижу. Проверить не сложно: предварительно забить какой-нибудь файл рандомом из /dev/urandom, поместить его в tmpfs(чтобы скорость чтения не влияла на скорость записи), и потестить.

selivan ★★★
()
Последнее исправление: selivan (всего исправлений: 1)
Ответ на: комментарий от selivan

И получить разницу из-за того, что tmpfs читается медленнее /dev/zero (а это скорее всего заметно).

Я проверил у себя - dd из /dev/zero не создаёт sparse file, как и ожидалось (du показывает «честное» занимаемое место, что легко проверить, создав настоящий дырявый файл через truncate(1)).

LeninGad
()
Последнее исправление: LeninGad (всего исправлений: 1)
Ответ на: комментарий от LeninGad

Считывание из памяти в разы быстрее записи на диск/SSD.

Тогда, скорее всего, разница из-за постояного обновления таблицы FAT, которая лежит в начале диска. ext этот вопрос как-то хитрее разруливает

selivan ★★★
()
Последнее исправление: selivan (всего исправлений: 1)

dd if=/dev/zero of=/mount/test bs=256k count=2048; sync

Нужно так: dd if=/dev/zero of=/mount/test bs=256k count=2048 conv=fsync

В первом случае dd выводит скорость записи в кэш, потому что при закрытии файла не происходит сброса данных на носитель. synс потом сбрасывает данные, но время выполнения sync уже не учитывается в подсчёте скорости. А FAT обычно монтируется с -o flush, то есть сбрасывает данные на носитель при закрытии файла. В этом случае dd подвисает на close() и вынужденно учитывает это время.

i-rinat ★★★★★
()

С чем это связано ?

с тем, что синтетика врёт.

emulek
()
Ответ на: комментарий от selivan

зачем гуглить? man 1 cp

By default, sparse SOURCE files are detected by a crude heuristic and the corresponding DEST file is made sparse as well. That is the behavior selected by --sparse=auto. Specify --sparse=always to create a sparse DEST file whenever the SOURCE file contains a long enough sequence of zero bytes. Use --sparse=never to inhibit creation of sparse files.

emulek
()
Ответ на: комментарий от LeninGad

Оно правда их делает из настоящего потока нулей при write?

AFAIK dd не делает. А вот cp — она делает. Впрочем, я не уверен.

emulek
()
Ответ на: комментарий от emulek

Cp (из coreutils) по умолчанию старается делать «как было», но умеет ещё два варианта (убрать дырки, создать дырки где возможно) с опцией --sparse.

LeninGad
()
Ответ на: комментарий от selivan

По факту чаще - это при закрытии файлов. А ещё руками сейчас сменные носители почти никто и не монтирует.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.