大量のファイルを USB ドライブにコピーするとデスクトップがロックされるのはなぜですか?

大量のファイルを USB ドライブにコピーするとデスクトップがロックされるのはなぜですか?

私のデスクトップは、通常、高負荷時でも非常に応答性が高いです。しかし、ファイルを USB ドライブにコピーすると、しばらくすると必ずロックしてしまいます。「ロックする」というのは、次のことを意味します。

  • あるウィンドウから別のウィンドウにフォーカスを移動するには10~20秒かかることがあります
  • デスクトップの切り替えには10~20秒かかる
  • 動画が更新されなくなりました(YouTube では、音声は再生され続けますが、動画のみがフリーズします)

このような状況が発生した場合、システム負荷はそれほど高くありません。カーネルがどこかでビジー状態であることを示す白い部分が xosview にたくさん表示されることがあります。

一見すると、ファイルを USB ドライブにコピーすると、何らかの形で compiz に干渉するように見えますが、どのような関係があるのか​​想像できません。

出力は次のとおりですhtop:

ハングアップ直後のhtopの出力

iostat -c -z -t -x -d 12 分間のハング中の出力は次のとおりです。

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

ご覧のとおり、外付けハードディスクのみがアクティブです。完全なログは次のとおりです。http://pastebin.com/YNWTAkh4

ハングは 20:38:01 に始まり、20:40:19 に終了しました。

ソフトウェア情報:

  • オープンSUSE 12.1
  • KDE 4.7.x
  • ファイルシステム: 内蔵ハードディスク上の reiserfs と btrfs、USB ドライブ上の btrfs

答え1

btrfs私の最初の推測は、このファイル システムの I/O プロセスが時々引き継がれるためだと思いました。しかし、X がロックする理由は説明できません。

割り込みを見ると、次のようになります。

# 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

まあ、当然です。USB ドライバーはグラフィック カードと同じ IRQ を使用し、チェーンの先頭にあります。(ファイル システムが負荷の高い処理を実行するために) ロックすると、グラフィック カードが枯渇します (ネットワークも同様です)。

答え2

私は同様の問題を目にしてきましたオープンSUSE12.1 の Linux-3.1 カーネルで、透過的な巨大ページを無効にすると効果があることがわかりました。

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

根本的な問題は、アプリケーションが 4MB 以上を割り当てると、カーネルが巨大なページを割り当てようとすることです。そのためには、連続した 4MB の RAM 全体が必要になります。ここで、低速の USB デバイスに書き込む必要のあるダーティ ページが多数ある場合、メモリ割り当てを続行する前に、その IO が完了するまで待機します。

答え3

前述のように、これはおそらくカーネルのhugepagesの設定に関係しています。この問題に悩まされている人を何人か知っています。これに関するドキュメントはWeb上にいくつかあります。例えば、

私は、以下の手順で自分のセットアップの問題を完全に解決しました。結果は人によって異なるため、以下の修正がすべて必要というわけではなく、十分ではない可能性もあります。正直に言うと、何か忘れているかもしれません。とにかく、これが私のセットアップであり、うまく機能しています。

  • linux-ckカーネルを使用する
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag

答え4

ケーブルを交換してください。USB ポート/ケーブルから酸化物を除去してください。

関連情報