Warum blockiert mein Desktop, wenn ich viele Dateien auf ein USB-Laufwerk kopiere?

11

Mein Desktop reagiert normalerweise sehr schnell, auch unter hoher Last. Wenn ich jedoch Dateien auf ein USB-Laufwerk kopiere, wird es nach einiger Zeit immer gesperrt. Mit "einsperren" meine ich:

  • Das Verschieben des Fokus von einem Fenster in ein anderes kann 10 bis 20 Sekunden dauern
  • Das Wechseln von Desktops kann 10 bis 20 Sekunden dauern
  • Videos werden nicht mehr aktualisiert (in YouTube wird das Audio weiter abgespielt, nur das Video friert ein)

Die Systemlast ist in diesem Fall nicht außergewöhnlich hoch. Manchmal sehe ich in xosview viel Weiß, was darauf hinweist, dass der Kernel irgendwo beschäftigt ist.

Auf den ersten Blick sieht es so aus, als würde das Kopieren von Dateien auf das USB-Laufwerk das Compiz irgendwie stören, aber ich kann mir nicht vorstellen, wie die Verbindung aussehen könnte.

Hier ist die Ausgabe von htop:

Ausgabe von htop kurz nach dem Aufhängen

Hier ist die Ausgabe iostat -c -z -t -x -d 1während eines 2-minütigen Hängens:

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

Wie Sie sehen, ist nur die externe Festplatte aktiv. Hier ist das vollständige Protokoll: http://pastebin.com/YNWTAkh4

Der Hang begann um 20:38:01 und endete um 20:40:19.

Software-Informationen:

  • openSUSE 12.1
  • KDE 4.7.x.
  • Dateisysteme: reiserfs und btrfs auf meiner internen Festplatte, btrfs auf dem USB-Laufwerk
Aaron Digulla
quelle
1
Haben Sie versucht, das USB-Laufwerk synczu montieren, um festzustellen, welche Auswirkungen (falls vorhanden) dies hat?
Alexios
2
Ein Nachteil von USB ist die Tatsache, dass es stark auf die CPU für E / A angewiesen ist. Welche Art von CPU hat Ihr System? Fügen Sie die Ausgabe grep name /proc/cpuinfobitte Ihrer Frage hinzu.
Jippie
1
Ziehen Sie die Dateien mit Delphin per Drag & Drop? Versuchen Sie in diesem Fall cpüber die Befehlszeile, mögliche Delfinfehler auszuschließen.
Jari Laamanen
@JariLaamanen: Ich benutze rsyncvon der Kommandozeile.
Aaron Digulla
1
@jippie: Nicht wirklich, weil die Benutzeroberfläche abstürzt, wenn es passiert, also kann ich keinen Screenshot machen. Ich werde versuchen, ein Protokoll mitiostat -c -z -d 1
Aaron Digulla

Antworten:

4

Meine erste Vermutung war, dass btrfsdie E / A-Prozesse dieses Dateisystems manchmal übernehmen. Aber es würde nicht erklären, warum X abstürzt.

Wenn ich mir die Interrupts ansehe, sehe ich Folgendes:

# 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

Nun, duh. Der USB-Treiber verwendet denselben IRQ wie die Grafikkarte und ist der erste in der Kette. Wenn es abstürzt (weil das Dateisystem etwas Teuereres tut), verhungert die Grafikkarte (und auch das Netzwerk).

Aaron Digulla
quelle
2

Ich hatte ähnliche Probleme mit dem Linux-3.1-Kernel von openSUSE 12.1 gesehen und festgestellt, dass das Deaktivieren transparenter großer Seiten hilfreich war:

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

Das zugrunde liegende Problem besteht darin, dass der Kernel, wenn eine Anwendung 4 MB oder mehr zuweist, versucht, ihm eine große Seite zu geben, für die er einen ganzen zusammenhängenden 4 MB RAM benötigt. Wenn nun viele schmutzige Seiten vorhanden sind, die noch auf ein langsames USB-Gerät geschrieben werden müssen, wartet es darauf, dass diese E / A beendet wird, bevor mit der Speicherzuweisung fortgefahren wird.

Bernhard M.
quelle
1

Wie bereits erwähnt, hat dies wahrscheinlich mit dem Setup der Kernel-Riesenseiten zu tun. Ich kenne mehrere Leute mit diesem Problem. Sie können verschiedene Dokumentationen dazu im Web finden, z

Ich habe das Problem in meinem Setup vollständig behoben, indem ich Folgendes getan habe. Beachten Sie, YMMV, möglicherweise sind nicht alle der folgenden Korrekturen erforderlich, und möglicherweise reichen sie nicht aus. Ich habe vielleicht etwas vergessen, um ehrlich zu sein. Jedenfalls ist das mein Setup und es funktioniert.

  • Verwenden Sie den Linux-ck-Kernel
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag
AF7
quelle
-2

Kabel wechseln. Entfernen Sie das Oxid vom USB-Anschluss / den Kabeln.

Luis
quelle
Es muss etwas aufwändiger sein. Bitte lesen
Karlson