Как стать автором
Обновить

Комментарии 8

специальный файл /proc/sys/vm/drop_caches

Очищаю дисковые кеши для 2 случаев:

  1. когда проверяю sd-карты на вшивость -- например вычитать всю карту 2 раза и сравнить хеши. Очевидно, что нужно очищать кеш, иначе второй раз вычитается именно он.

  2. Когда проверяю что данные типа бекапов правильно записались на диск, хотя это уже попахивает параноей, особенно если бекап больше кол-ва ОЗУ :)

Для упрощения жизни патчу ядро, чтобы этот псевдо-файл был с пермишенами 0222 (т.е. доступный на запись для всех).

ну нифига себе вы упростили жизнь, вместо использования sudo/suid или чего-то такого

Именно! Вводить каждый раз 15-буквенный пароль влом :)

Вашу задачу правильнее решать через dd с ключами для чтения в обход кэша. Сброс кэша сбрасывает не всё и не всегда.
"dd iflag=direct", если не ошибаюсь. В идеале нужно бы ещё размер блока выставить заведомо больше чем, блок флэша, но кратным ему. Обычно подходят значения 64кБ, 128 кБ, либо 4МБ - в зависимости от типа накопителя. 4МБ гарантировано решает задачу даже на шаманских новых SSD-дисках с очень большими физическими блоками секторов.

Спасибо. Я конечно попробую ещё раз, но по воспоминаниям, такой флаг приводил к более медленной работе.

А ещё например, с кешем можно одновременно сливать диск на ссд и считать хешсумму, в этом случае 2 программы сначала догоняют друг друга, потом упираются в один и тот же медленный диск, получая блоки либо из блочного кеша, либо свежесчитанные.

Естественно, к более медленной - буфера-то не используются. Но вы именно этого и хотели, чтобы физический носитель проверить. Медленная работу можно компенсировать увеличением объёма буфера, но так, чтобы он оставался кратен физическому сектору. В общем 4МБ буфер и прочие бОльшие степени двойки отлично решат проблему низкой скорости настолько, насколько это возможно без использования буферов чтения.
С двумя программами может некрасиво получиться. Во-первых гонки внутри драйверов скорость могут снижать скорость, а во-вторых, на больших объёмах они могут отлично разойтись на объём, больший чем размер кэша, и тогда всё начнёт тормозить.

Проверил по-быстрому на простаивающем SBC с sdкартой -- возражение снимаю, на мегабайтных `bs=` получается по скорости как и без iflag=direct и чистыми кешами.

Второй случай естественно полезен только для ситуации, когда каждая из программ пережёвывает информацию сильно быстрее, чем диск её может выдавать.

Про этот параметр жаль не рассказали:

vm.vfs_cache_pressure

Зарегистрируйтесь на Хабре, чтобы оставить комментарий