Я загружаю файлы на SD-карту, установленную на Raspberry Pi, используя rtorrent, со скоростью около 6 МБ / с (ограничение пропускной способности). Пользовательский процесс не сбрасывает сами данные, и интервал, с которым очищается кэш диска, зависит от значений sysctl.
Используя iostat и nload, я могу видеть пропускную способность сети и профили записи на диск:
диск:
20M/s .....x.....x....xx...
.....x....xx....xx...
....xx....xx....xx...
0M/s ....xx....xx....xx...
Сеть:
5M/s ..xxx....x.. x.....x.
.xxxx...xx..xxx...xxx
0M/s xxxxx...xxx.xxx...xxx
Видимо, IO Writer всегда останавливается во время очистки. Это 4-ядерный процессор с 3-мя ядрами, которые постоянно находятся в режиме ожидания, а топ говорит о 100% iowait во время сброса.
Если я делаю while true; do sync; sleep 1; done
при загрузке, очистка диска происходит плавно, 6 МБ каждую секунду. И процесс загрузки не перекрыт, поэтому пропускная способность постоянна.
Я могу получить тот же эффект с:
/proc/sys/vm/dirty_writeback_centisecs:
как часто срабатывает очистка дискового кэша - единица измерения составляет 100 с; по умолчанию: 500
и /proc/sys/vm/dirty_expire_centisecs:
сколько лет должно быть на странице, чтобы иметь право на сброс в течение 100 с; по умолчанию: 3000
Установка их на 100 и 200 соответственно обеспечивает одинаковый профиль очистки диска и постоянную полосу загрузки.
Есть ли способ сделать эту настройку автоматической, т. Е. Сбрасывать как можно чаще, чтобы избежать необходимости блокировать процесс записи? Например, если скорость загрузки составляет 1 МБ / с, то сброса каждые 5 секунд, вероятно, будет достаточно.