私のデスクトップは、通常、高負荷時でも非常に応答性が高いです。しかし、ファイルを USB ドライブにコピーすると、しばらくすると必ずロックしてしまいます。「ロックする」というのは、次のことを意味します。
- あるウィンドウから別のウィンドウにフォーカスを移動するには10~20秒かかることがあります
- デスクトップの切り替えには10~20秒かかる
- 動画が更新されなくなりました(YouTube では、音声は再生され続けますが、動画のみがフリーズします)
このような状況が発生した場合、システム負荷はそれほど高くありません。カーネルがどこかでビジー状態であることを示す白い部分が xosview にたくさん表示されることがあります。
一見すると、ファイルを USB ドライブにコピーすると、何らかの形で compiz に干渉するように見えますが、どのような関係があるのか想像できません。
出力は次のとおりですhtop
:
iostat -c -z -t -x -d 1
2 分間のハング中の出力は次のとおりです。
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上にいくつかあります。例えば、
- https://bbs.archlinux.org/viewtopic.php?id=112846&p=1
- http://lwn.net/Articles/467328/
- http://forum.manjaro.org/index.php?topic=2062.0
- USBデバイスとの間でファイルをコピーする際のパフォーマンスが遅い
私は、以下の手順で自分のセットアップの問題を完全に解決しました。結果は人によって異なるため、以下の修正がすべて必要というわけではなく、十分ではない可能性もあります。正直に言うと、何か忘れているかもしれません。とにかく、これが私のセットアップであり、うまく機能しています。
- linux-ckカーネルを使用する
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
答え4
ケーブルを交換してください。USB ポート/ケーブルから酸化物を除去してください。