Rsync

由於大的空閒時間(rsync、cp、..),文件複製操作的性能低下

  • July 27, 2020

我目前正在將大型目錄樹從外部 HDD 複製到伺服器的內部儲存。複製操作的性能基本相當不錯,即通過USB2連接外置硬碟時為35MB/s。

但是,我只獲得了大約 30 秒的性能,然後復製過程沒有得到任何 CPU 時間。這意味著,rsync(以及 cp)不會複製任何數據,不會更新其標準輸出,或對 SIG-TERM 做出反應。大約 1 分鐘後,它再次被調度並以 35MB/s 的速度再次複製 30 秒,然後再沒有任何東西,依此類推。

有誰知道這裡會發生什麼或給我命名任何工具來調查正在發生的事情?我已經將 rsync 程序的 nice 值增加到 19,但這並沒有改變任何東西。在rsync的空閒時間內,整個系統處於空閒狀態(沒有其他IO,沒有其他佔用CPU的程序。基本上整個系統都是空閒的)。在活動期間,rsync 程序具有三個執行緒,它們在“執行”、“不可中斷睡眠”和“可中斷睡眠”之間切換。在非活動期間,所有執行緒要麼處於“不可中斷睡眠”狀態,要麼處於“可中斷睡眠”狀態。正因為如此,我認為 rsync 必須等待一些持久的 IO 操作。但是我怎麼能確定什麼操作需要這麼多時間呢?

該系統在 5.4.34-1-pve linux 核心上執行,內部儲存是 LVM 上的 LUKS 加密 ZFS 文件系統。LVM 位於 mdadm RAID 5 之上。我用來啟動 rsync 的命令是:rsync -ah –no-compress –progess

感謝您的任何建議!

我們發現問題出在 ZFS 使用的記憶體上。問題是我們沒有創建額外的讀寫記憶體。因此,ZFS 使用預設記憶體放置在包含數據的 zpool 中/旁邊。因此,對於任何讀取操作,數據都是從 RAID 寫入讀取,寫入記憶體(也進入 RAID),然後提供給使用者。類似的寫入。由於 RAID 是加密的,每次讀取和寫入都會觸發多次加密/解密和 RAID 同步,這會導致 RAM 緩衝區滿一段時間後性能下降。

我們通過為 ZFS 添加額外的讀/寫記憶體(ZFS中的 L2ARC 和 ZIL SLOG)解決了這個問題——在我們的例子中是兩個額外的小型 HDD。即使將記憶體放置在 HDD 上,我們也可以獲得更高的讀寫速度並且不會降低性能。

引用自:https://serverfault.com/questions/1021408