Избавляемся от тормозов системы при копировании на usb-флешку


На компьютере с четырьмя гигабайтами оперативной памяти и двухядерным процессором в операционной системе Debian 6 наблюдались жуткие тормоза при копировании относительно больших файлов на флешки. Например при копировании файла размером 700 Мб процесс копирования достаточно быстро доходил до 70%, затем три минуты копировались оставшиееся 30%, при этом наблюдались жуткие тормоза. Как я понял, под дисковый кэш линукс отдает практически всю свободную память. У ядра есть буфер файловой системы, когда пишем много данных этот буфер заполняется, а потом уже происходит сброс на носитель. И, получается, что первые 70% процесса копирования фильма - быстрое копирование в буфер, после семидесяти процентов процесса копирования начинался непосредственный сброс кучи данных из буфера на флешку, при этом вся остальная работа встает, так как оперативная память занята, пока не окончится сброс на медленную флешку, в т.е. наблюдаем тормоза и слайд-шоу на экране. Ситуацию можно исправить уменьшением буфера. Я ограничил четырьмя мегабайтами (можете поэкспериментировать):


echo 4194304 > /proc/sys/vm/dirty_bytes
echo 4194304 > /proc/sys/vm/dirty_background_bytes

А теперь сохраним эти параметры, чтоб не слетело после перезагрузки. Откроем /etc/sysctl.conf :

nano /etc/sysctl.conf

и добавим туда строки:

vm.dirty_bytes = 4194304
vm.dirty_background_bytes = 4194304

Сохраняем измененный файл и сохраняем внесенные параметры командой:

sysctl -p

К сожалению скорость записи на большинстве современных флешек - печалька, но теперь хотябы процесс копирования больших файлов идет с постоянной скоростью и не вешает систему

July 12, 2013