Как уменьшить буфер записи Linux для съемных устройств?

Как уменьшить буфер записи Linux для съемных устройств?

При записи контента на съемные устройства в Linux (USB-накопители/жесткие диски, SD-карты и т. д.) я часто наблюдаю невероятную скорость записи в первые несколько секунд, иногда порядка ГБ/с (заполнение буфера записи), за которой следует несколько минут тишины (буфер фактически записывается на устройство).

Это вводит в заблуждение. Это затрудняет оценку фактической скорости записи. Это раздражает (невозможно прервать программу, пока она очищает буферы). Это может привести к повреждению ФС и, как минимум, к не записанному контенту, если устройство отключено, пока оно все еще записывается.

Буфер записи, похоже, в моем случае превышает ГБ. Есть ли способ его контролировать? Я бы хотел уменьшить его до более разумного значения.

Примечание: это не касается кэша файловой системы, этот эффект проявляется и на необработанных устройствах.

Примечание: я не хочу полностью отключать буферы записи.

Спасибо!

решение1

Я нашел ответ. 64-битный Linux по умолчанию поддерживает большой буфер записи (20% доступной памяти!). (Интересно, что 32-битный Linux ограничивает себя максимум 180 МБ) Чтобы изменить размер грязного буфера, например, до 200 МБ, можно использовать

echo 200000000 > /proc/sys/vm/dirty_bytes

ИЛИдля использования процента оперативной памяти, например 1%:

echo 1 > /proc/sys/vm/dirty_ratio

Больше информации:https://lwn.net/Articles/572911/

Связанный контент