當我將大量檔案複製到 USB 隨身碟時,為什麼桌面會鎖定?

當我將大量檔案複製到 USB 隨身碟時,為什麼桌面會鎖定?

我的桌面通常反應非常靈敏,即使在重負載下也是如此。但當我將文件複製到 USB 驅動器時,它總是在一段時間後鎖定。我所說的「鎖定」是指:

  • 將焦點從一個視窗移動到另一個視窗可能需要 10 到 20 秒
  • 切換桌面可能需要 10-20 秒
  • 影片不再更新(在 YouTube 中,音訊繼續播放,只有影片凍結)

發生這種情況時,系統負載並不是特別高。有時,我在 xosview 上看到很多白色,表示核心某處正忙。

乍一看,似乎將文件複製到 USB 驅動器會以某種方式乾擾 compiz,但我無法想像連接可能是什麼。

這是輸出htop

掛起後不久 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

如前所述,這可能與核心大頁面設定有關。我認識幾個有這個問題的人。您可以在網路上找到一些有關它的文檔,例如

我透過執行以下操作完全解決了我的設定問題。請注意,YMMV,並非下面的所有修復都是必要的,而且可能還不夠。老實說,我可能忘記了一些事情。無論如何,這是我的設置並且有效。

  • 使用linux-ck內核
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag

答案4

更換電纜。移除 USB 連接埠/電纜上的氧化物。

相關內容