為什麼複製時我的隨身碟速度變慢?

為什麼複製時我的隨身碟速度變慢?

複製了幾分鐘後,速度變得越來越慢。為什麼?

例如,它以 20 MByte/s 開始,結束時為 @10 MByte/s。

各種文件,大文件、小文件等。

更新:問題是關於各種作業系統的,所以這是一個“一般問題”

答案1

此行為並非特定於您的隨身碟,您也可以在硬碟上看到此行為。它與大多數作業系統和磁碟用來加速小寫入的快取機制有關。

您看到的 20mb/s 是寫入磁碟快取的資料(通常速度很快但記憶體較小)。一旦該快取已滿,就必須將其刷新到磁碟 - 而現在您正受到較慢的磁碟的瓶頸。

範例 1:當您擁有一個具有大快取的控制器(例如良好的 RAID5 控制器)時,效果非常明顯,其中約 500mb 的資料在必須刷新到磁碟之前可以快速快取。

範例 2:如果在檔案複製「完成」的同時拔出隨身碟,您可以看到正在執行的快取。此時,您的檔案在磁碟和快取之間分割 - 因此就作業系統而言,複製已“完成”,但磁碟控制器仍需要將快取中剩餘的內容寫入磁碟。如果您將隨身碟放回原位並檢查文件,您會發現文件並非全部存在。

免責聲明:如果您沒有在作業系統/磁碟上啟用寫入緩存,則這些範例將不起作用。

進一步來說,如果是不是如果磁碟快取在工作,那麼您看到的可能是碎片的影響。隨著磁碟變得越來越滿,可用的連續可用空間越來越少,檔案系統必須更加努力地尋找放置檔案的位置。

答案2

雖然快取確實會導致部分問題,但它並不是唯一的因素。如果快取是唯一的因素,那麼我們預計寫入速度很快就會從幾百 MB/秒下降到驅動器的實際寫入速度,並在其餘寫入過程中保持該速度。然而,這不是我在執行與磁碟之間的大量傳輸(例如刻錄啟動映像)時觀察到的情況。相反,我觀察到速度在整個操作過程中逐漸降低。

這種速度減慢是由於用於儲存資料的快閃記憶體晶片上的資料殘留導致某些區塊需要多次寫入而引起的。

快閃記憶體晶片內部有可寫入的資料塊。寫入時,電腦只能做兩件事:擦除整個區塊,或將區塊中的部分(或全部)位元從 0 變更為 1。

然而,其中一些區塊比其他區塊更好,尤其是在品質較低的快閃磁碟機中,因此當寫入新資料時,某些位元有時會在寫入後立即自行切換回 0,並且不會不改變。因此,在寫入區塊時,作業系統需要檢查以確保所有資料均已正確寫入,如果不正確,則必須透過將相同資料寫入同一塊兩到三次來重做該區塊直到資料黏住。

因此,當您的電腦將大量資料寫入快閃磁碟機時,這裡有一個(不完全準確,但足夠好的)可以解釋它是如何做到這一點的:

  1. 取出第一組要寫入的區塊,並將它們全部寫入。
  2. 讀回我們剛剛編寫的所有區塊,並列出不匹配的區塊
  3. 寫入下一組區塊,以及上次未正確寫入的區塊。
  4. 重複2-3,直到所有區塊都正確寫入。

當電腦寫入磁碟機時,它會報告首次將區塊寫入磁碟機的速率。由於它還必須同時重寫較早的區塊,因此可用於原始區塊的總吞吐量會隨著需要進行的重寫次數的增加而下降。因此,表觀寫入速度隨著時間的推移而降低。

答案3

我在 OSX 上遇到了這個問題,並設法顯著改善了情況。首先,我阻止了 Spotlight Index 嘗試對目標磁碟機建立索引。然後我停止在目標磁碟機上產生縮圖(複製 55K 影像)

最後我放棄使用 GUI 並使用 rsync -a source target 切換到命令列

您可能可以依照這些思路對其他作業系統執行類似的操作。

答案4

當文件寫入驅動器(無論是閃存 USB 驅動器還是硬碟)時,資料不會/永遠不會讀回以查看是否匹配。那將需要永遠。寫入驗證由硬體完成(循環冗餘檢查),如果發生錯誤,則會從偵測到錯誤的硬體將其發送回應用程式。發生停頓並減慢(甚至暫停)的原因是 CPU 寫入速度快於設備處理能力。您不會發現這種情況發生在內部硬碟上。您永遠不會看到 Windows 作業系統上到底發生了什麼,但在 Linux 上您實際上可以看到 CPU 暫停,直到 USB 硬體表示「可以繼續」。

相關內容