Dlaczego mój pulpit blokuje się, gdy kopiuję wiele plików na dysk USB?

11

Mój pulpit jest zazwyczaj bardzo responsywny, nawet przy dużym obciążeniu. Ale kiedy kopiuję pliki na dysk USB, zawsze się blokuje po pewnym czasie. Przez „lock up” rozumiem:

  • Przeniesienie fokusa z jednego okna do drugiego może zająć 10-20 sekund
  • Przełączanie komputerów stacjonarnych może zająć 10-20 sekund
  • Filmy nie są już aktualizowane (w YouTube dźwięk jest odtwarzany, tylko wideo się zawiesza)

Gdy tak się dzieje, obciążenie systemu nie jest wyjątkowo wysokie. Czasami widzę dużo bieli na xosview, co wskazuje, że jądro jest gdzieś zajęte.

Na pierwszy rzut oka wygląda na to, że kopiowanie plików na dysk USB w jakiś sposób zakłóciłoby compiz, ale nie wyobrażam sobie, jakie może być połączenie.

Oto wynik htop:

Wyjście htopa krótko po zawieszeniu

Oto wynik iostat -c -z -t -x -d 12-minutowego zawieszenia:

19.07.2012 20:38:22
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1,27    0,00    0,38   37,52    0,00   60,84

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdg               0,00     2,00    0,00  216,00     0,00 109248,00  1011,56   247,75  677,69    0,00  677,69   4,63 100,00

Jak widać, aktywny jest tylko zewnętrzny dysk twardy. Oto pełny dziennik: http://pastebin.com/YNWTAkh4

Zawieszenie rozpoczęło się o 20:38:01 i zakończyło o 20:40:19.

Informacje o oprogramowaniu:

  • openSUSE 12.1
  • KDE 4.7.x
  • Systemy plików: reiserfs i btrfs na moim wewnętrznym dysku twardym, btrfs na dysku USB
Aaron Digulla
źródło
1
Czy próbowałeś zamontować napęd USB, syncaby zobaczyć, jaki to ma wpływ (jeśli w ogóle)?
Alexios
2
Wadą USB jest to, że w dużej mierze opiera się on na procesorze IO. Jaki procesor ma twój system? Dołącz wynik grep name /proc/cpuinfodo pytania.
jippie
1
Czy przeciągasz i upuszczasz pliki za pomocą delfina? Jeśli tak, spróbuj cpz wiersza poleceń, aby wykluczyć możliwe błędy delfinów.
Jari Laamanen,
@JariLaamanen: Używam rsyncz linii poleceń.
Aaron Digulla
1
@jippie: Nie bardzo, ponieważ interfejs użytkownika blokuje się, kiedy to się dzieje, więc nie mogę zrobić zrzutu ekranu. Spróbuję utworzyć dziennik ziostat -c -z -d 1
Aaron Digulla,

Odpowiedzi:

4

Moje pierwsze przypuszczenie było btrfstakie, że procesy we / wy tego systemu plików czasami przejmują kontrolę. Ale to nie wyjaśniałoby, dlaczego X się zamyka.

Patrząc na przerwania, widzę to:

# cat /proc/interrupts 
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0:        179          0          0          0          0          0          0          0  IR-IO-APIC-edge      timer
  1:          6          0          0          0          0          0          0          0  IR-IO-APIC-edge      i8042
  8:          1          0          0          0          0          0          0          0  IR-IO-APIC-edge      rtc0
  9:          0          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   acpi
 12:         10          0          0          0          0          0          0          0  IR-IO-APIC-edge      i8042
 16:    3306384          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   ehci_hcd:usb1, nvidia, mei, eth1

No cóż. Sterownik USB używa tego samego przerwania IRQ co karta graficzna i jest pierwszy w łańcuchu. Jeśli się zawiesi (ponieważ system plików robi coś kosztownego), karta graficzna głoduje (i także sieć).

Aaron Digulla
źródło
2

Widziałem podobne problemy z jądrem linux-3.1 openSUSE 12.1 i odkryłem, że wyłączenie przezroczystych ogromnych stron pomogło:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Podstawowym problemem jest to, że jeśli aplikacja przydzieli 4 MB lub więcej, jądro spróbuje nadać mu ogromną stronę, dla której potrzebuje całej ciągłej 4 MB pamięci RAM. Teraz, jeśli wokół jest wiele brudnych stron, które wciąż muszą zostać zapisane na wolnym urządzeniu USB, czeka na zakończenie IO przed kontynuowaniem przydzielania pamięci.

Bernhard M.
źródło
1

Jak wspomniano, prawdopodobnie ma to związek z konfiguracją stron z jądrem. Znam kilka osób z tym problemem. Możesz znaleźć kilka dokumentów na ten temat w Internecie, np

Całkowicie naprawiłem problem w mojej konfiguracji, wykonując następujące czynności. Zauważ, że YMMV, nie wszystkie poniższe poprawki mogą być konieczne i być może nie będą wystarczające. Być może zapomniałem o czymś szczerym. W każdym razie to moja konfiguracja i działa.

  • Użyj jądra linux-ck
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag
AF7
źródło
-2

Zmień kabel. Usuń tlen z portu / kabli USB.

Luis
źródło
To musi być trochę bardziej skomplikowane. Zobacz FAQ
Karlson,