現在有一臺 nfs 伺服器,掛載到一臺業務伺服器,有海量的小檔案需要拷貝到 nfs 伺服器上,經過測試發現:單個大檔案傳輸速度很快,但是海量的小檔案傳輸就很慢了。新增掛載引數 rsize=8192,wsize=8192,發現效率還是很慢;這個問題如何優化?
Total: 24
-
小檔案估計無解,nfs smb 9p 等似乎都快不起來
-
小檔案,tcp 的慢啟動,再加上建立檔案啥的都需要網路 io 。
tar 打包壓縮,傳了再解壓。 -
開多執行緒併發傳
-
@matrix67 不能 tar
-
tar 打包,輸出到 stdout,走管道。
另一端 tar 從 stdin 解包,釋放到檔案系統。
中間可以通過 ssh 、netcat 等方式連線。 -
換物件儲存🤣
-
全快閃記憶體
-
@Jirajine 贊同
-
tar 唄,不能 tar 總得有個原因吧。
-
@Jirajine 老哥詳細說說怎麼實現呢
-
物件儲存
-
tar cvf - src_path | tar xvf - -C nfs_path
-
抱歉,剛才路上手機匆忙回覆,沒有細想,上一條給出的方法還是走 NFS 進行寫入操作,沒有意義。
如果你走 SSH 的話,這樣操作:
tar cvf - src_path | ssh [email protected]_host "tar xvf - -C dst_path" -
@zent00 我們這邊是要通過 nfs 共享檔案,有沒有啥引數可以優化一下的?
-
基本上 無解
-
如果只是一次性傳輸,用 rsync 傳吧,支援斷點續傳
-
有兩個點可以注意一下:
- 儲存伺服器不要用 ZFS 。NFS on ZFS 儲存小檔案時很慢。
- 用 nfsstat 和 nfsiostat 看看有沒有效能上的問題。有時候瓶頸是網路 IO,有時候瓶頸是儲存伺服器的效能。
- 試試 pNFS 。
但是歸根結底,在 NFS 上儲存小檔案效能低的根源是 NFS 的設計本身。如果 NFS RPC 可以全部並行的話,儲存小檔案的效能會提高很多。 -
不只是傳輸的問題,我們程式有依賴,需要 find 某目錄下的檔案並迴圈檔名,然後做處理。因為是在 nfs 伺服器上,所以迴圈的時候特別慢
-
如果你的 nfs 可以用 v3 協議的話可以開啟 async,不過看你 size 只設到 8k,是不是隻能用 v2 協議?
另外對本身存放海量檔案的伺服器還可以調整一下檔案系統引數例如 ext4 裡設定 noatime 等。 -
@zlowly 如果是 v3 的應該要給多少 K
-
@mrsupns 對於 v3 和 v4 一般預設就是 32k,網路穩定且 tcp 傳輸的話你可以測試下調高到 64k 。
-
用 rsync 試試呢?
-
@snip 不行呢
Add a reply