System blokuje się, gdy dyskowe operacje we / wy są nasycone

8

Kiedy wykonuję duży transfer plików z zewnętrznego dysku twardego USB3 na wewnętrzny dysk twardy (lub odwrotnie), czy to przez Nautilus, czy przez terminal, Ubuntu (Unity) prawie się całkowicie zablokuje. Czynności takie jak Alt-Tab trwają 20 sekund lub dłużej, gdy trwa przesyłanie plików. Nie dzieje się tak, gdy na dysku jest wiele losowych odczytów / zapisów, na przykład podczas instalowania pakietów.

Gdy korzystałem z systemu Windows, mogłem uruchomić transfer plików w tle i nadal móc wykonywać różne czynności, aczkolwiek wolniej, gdy coś potrzebowało dostępu do dysku. Mógłbym jeszcze dobrze Alt-Tab.

Wygląda na to, że Ubuntu traktuje priorytetowo przesyłanie plików ponad wszystkie inne operacje wejścia / wyjścia na dysku, dlatego się blokuje. W systemie Windows wydaje się, że przesyłanie plików ma niższy priorytet, co oznacza, że ​​system może pozostać responsywny, gdy dysk jest nasycony.

Jak mogę to naprawić? Jest to dość irytujące, ponieważ komputer staje się całkowicie bezużyteczny podczas kopiowania plików. Ten problem występuje zarówno w 14.04, jak i 15.10. Jestem zmuszony podłączyć mój dysk twardy do portu USB2, aby zapobiec temu problemowi, a to powoduje znacznie dłuższy czas przesyłania.

Degru
źródło
Nie powinien, ale sprawdź, czy unix.stackexchange.com/questions/107703/… pomaga
Rmano

Odpowiedzi:

10

Mam ten sam problem na moim laptopie, który ma dość wolny system dyskowy w porównaniu do reszty komputera.

Udało mi się to znacznie poprawić, zmieniając algorytm planowania używany do przesyłania dysków. Domyślnie Ubuntu używa Ostatecznego terminu, ale okazuje się, że mój system reaguje szybciej, gdy używam cfq.

Aby zobaczyć, jakiego harmonogramu używasz, wydaj polecenie

cat /sys/class/block/sda/queue/scheduler    

Aby wykonać jednorazową zmianę (do ponownego uruchomienia), wydaj polecenie

echo cfq | sudo tee /sys/class/block/sda/queue/scheduler

Pamiętaj, że ważne jest, aby dokonać zmiany tego, co masz na zewnętrznym dysku twardym; Mój zwykle ładuje się jako sdb. więc wydałbym polecenieecho cfq | sudo tee /sys/class/block/sdb/queue/scheduler

Dokonuję zmiany na stałe dla wszystkich dysków podłączonych do mojego komputera, dodając parametr jądra elevator=cfqdo mojego pliku grub, który wygląda następująco:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noautogroup elevator=cfq"
Charles Green
źródło
Wow, zadziałało. Dzięki! Mój system jest teraz znacznie bardziej responsywny podczas przesyłania i faktycznie szybciej ładuje rzeczy.
Degru,
Cieszę się, że to pomogło.
Charles Green
1
> Domyślnie Ubuntu używa terminu, ale okazuje się, że mój system reaguje szybciej, gdy używam terminu. Podejrzewam, że chciałeś, aby ta fraza kończyła się na „... kiedy używam cfq”.
markus_b
Nigdy nie szukałem rozwiązania tego z jakiegoś powodu. Poprosiłem tę odpowiedź, kiedy została opublikowana kilka dni temu, teraz miałem okazję ją przetestować (musiałem migrować wiele torrentów z Potopu z powrotem do Transmisji, co wymagało ponownego sprawdzenia każdego pojedynczego torrenta), a zmiana harmonogramu była rzeczywiście ulepszenie. System nadal się zacina, szczególnie podczas przełączania obszarów roboczych, ale na pewno nie zawiesza się prawie tak, jak kiedyś. Dzięki! Ta odpowiedź jest tak przydatna, że ​​IMO zasługuje na nagrodę (a ja ją ustanawiam).
Kos
@kos To nie jest kompletne rozwiązanie, bo na pewno byłbym o wiele szczęśliwszy - wciąż jąkam od czasu do czasu i uważam to za bardzo frustrujące.
Charles Green