Powolne pamięci flash pod linuxem.
redflow podał informację TUTAJ.
napisał ryba@corp @ 10:08pm, Poniedziałek 11 Paździenik 2010. LINK
Kto nie spotkał się z powolnym kopiowaniem na tak popularne pamięci flash pod linuxem. Na starszym sprzęcie z USB 2.0 występują również problemy z responsywnością systemu podczas zapisu dużych plików na takie pamięci. Jest na to sposób. Wystarczy parę poleceń w konsoli i system zaczyna działać jak należy.
Najpierw zacznijmy od sprawdzenia jaki scheduler obsługuje naszego pendriva:
Kod:
ryba@lapek ~ % cat /sys/block/sdb/queue/scheduler
[noop] cfq
Jak widać u mnie już jest wybrany ioscheduler [b]noop[/code]. Pamięci flash nie posiadają żadnych ruchomych części. Czasy dostępu do sektorów są takie same bez względu na położenie, więc nie ma potrzeby optymalizować zapis i odczyt z takich dysków. Możemy zmienić ioscheduler dla pamięci flash za pomocą polecenia:
Kod:
lapek ~ # echo noop > /sys/block/sdb/queue/scheduler
Polecenie to wykonujemy z pod roota. Zamiast sdb należy podać właściwe urządzenie pod którym znajduje się pendrive. Aby za każdym razem, jak wkładamy pendrive do portu, został automatycznie wybrany właściwy ioscheduler możemy sobie utworzyć w /etc/udev/rules.d/ plik 99-pendrive.rules o zawartości:
Kod:
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{removable}=="1", RUN+="/bin/sh -c 'echo noop > /sys$DEVPATH/queue/scheduler'"
Kolejną ważną rzeczą jest wartość parametru dirty_ratio naszego kernela. Wartość ustawiona na 5% powinna dać znaczną poprawę responsywności desktopu i płynniejsze kopiowanie dużych plików na takie pamięci. Ustawiamy to za pomocą polecenia:
Kod:
lapek ~ # sysctl -w vm.dirty_ratio=5
Można wprowadzić tą wartość na stałe w systemie dodając do /etc/sysctl.conf linijkę:
Jeśli kożystamy z laptop mode tools to należy sprawdzić czy nie zmienia ono tej wartości.
W nowszych kernelach wprowadzono parametr dirty_bytes, ze względu na to, że wartość dirty_ratio odnosi się do procentowej części RAM-u co przy dużej jego ilości dość ograniczało pole manewru.
Kolejnym problemem może być zła kolejność ładowania modułów jądra. ehci_hcd powinno zostać załadowane przed ohci_hcd/uhci_hcd. Jeśli moduły załadują się w złej kolejności usb będzie dostępne tylko w trybie 1.1. Można zmusić do tego komputer tworząc w /etc/modprobe.d/ plik usb.conf o zawartości:
Kod:
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe --ignore-install ohci_hcd $CMDLINE_OPTS
Kod:
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe --ignore-install uhci_hcd $CMDLINE_OPTS
I wykonując update-modules. Ewentualnie można wkompilować na stałe w jądro te moduły.
==============
Edit:
Temat podobny LINK