Увеличиваем скорость записи на flash-накопители и избавляемся от тормозов системы при копировании на них.
На компьютере с четырьмя гигабайтами оперативной памяти и двухядерным процессором в операционной системе Debian 6 наблюдались жуткие тормоза при копировании относительно больших файлов на флешки. Например, при копировании файла размером 700 Мб процесс копирования достаточно быстро доходил до 70%, затем три минуты копировались оставшиеся 30%, при этом наблюдались жуткие тормоза. Как я понял, под дисковый кэш линукс отдает практически всю свободную память. У ядра есть буфер файловой системы, когда пишем много данных, этот буфер заполняется, а потом уже происходит сброс на носитель. И, получается, что первые 70% процесса копирования фильма - быстрое копирование в буфер, после семидесяти процентов процесса копирования начинался непосредственный сброс кучи данных из буфера на флешку, при этом вся остальная работа встает, так как оперативная память занята, пока не окончится сброс на медленную флешку, т.е. наблюдаем тормоза и слайд-шоу на экране. Ситуацию можно исправить уменьшением буфера. Я ограничил четырьмя мегабайтами (можете поэкспериментировать):
echo 4194304 > /proc/sys/vm/dirty_bytes echo 4194304 > /proc/sys/vm/dirty_background_bytes
А теперь сохраним эти параметры, чтоб не слетело после перезагрузки. Откроем /etc/sysctl.conf :
mcedit /etc/sysctl.conf
и добавим туда строки:
vm.dirty_bytes = 4194304 vm.dirty_background_bytes = 4194304
Сохраняем измененный файл и сохраняем внесенные параметры командой:
sysctl -p
К сожалению, скорость записи на большинстве современных флешек - печалька, но теперь хотя бы процесс копирования больших файлов идет с постоянной скоростью и не вешает систему.
В Slackware-14.2 такого файла ''/etc/sysctl.conf'', по умолчанию не существует, поэтому создаём его по примеру поста на форуме linuxquestions:
mcedit /etc/sysctl.conf
# Disable routing triangulation. Respond to queries out # the same interface, not another. Helps to maintain state # Also protects against IP spoofing net.ipv4.conf.all.rp_filter = 1 # Disable redirects net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # Disable acceptance of ICMP redirects net.ipv4.conf.all.accept_redirects = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 # Disable source routing net.ipv4.conf.default.accept_source_route = 0 # Disable TCP Timestamps net.ipv4.tcp_timestamps = 0 # Blocks the reporting of known kernel address leaks kernel.kptr_restrict = 1 # Turns off Kernel Module loading! Be sure whether you really need this! # You will NOT be able to load Kernel Modules after it is set! kernel.modules_disabled = 1 vm.dirty_bytes = 4194304 vm.dirty_background_bytes = 4194304
Сохраняем созданный файл и сохраняем внесённые параметры командой:
sysctl -p