tar -xf
的性能(與塊大小相關)
我最近正在優化 . 的性能
tar -xf
,即解壓縮文件。我注意到在預設設置下,
tar -xf
呼叫write
s 一次以塊的形式寫入 10 KiB 輸出。但是,在我們目前的設置下,這會導致嚴重的儲存損失(使用O_DIRECT
帶有 I/O 的標誌進行快閃記憶體儲存)。有沒有辦法增加
tar
寫入輸出文件的塊大小?我在玩-b
參數,並註意到如果我這樣做tar -b 512 -xvf
,性能會提高2x
. 在這種情況下這是一個有效的用法嗎?(這些tar
文件是在預設設置下創建的。)我還能做些什麼來提高吞吐量
tar
?
tar 中的
-b
選項用於控制 tar 寫入設備的塊大小,因此這正是您想要的。但是-b 512
關於手冊頁 tar(1) 表示塊大小為 512*512 = 262144。所有塊大小都是有效的,您的設備(將 tar 輸出寫入其中)可以處理。在歷史上,tar 命令最初是針對不同的磁帶驅動器編寫的。
自 1990 年以來,所有 tar 實現都存在由內置於 star
star
中的性能問題解決的問題。FIFO
Star 預設情況下會創建一個 8MB 的 FIFO,這有助於提高性能,因為 Star 也分叉成兩個程序。一個程序讀取存檔,另一個程序執行
tar
提取任務。如果您在現代作業系統上並使用現代磁帶設備,我建議您指定更大的 FIFO 大小,最多為機器物理記憶體的一半。查看star fs=
選項。對於現代磁帶驅動器,我推薦fs=256M
更多。當無法使用流式磁帶模式時,這極大地減少了由於重新定位磁帶而導致的常見磁帶磨損問題。如果您使用的是真正的磁帶設備,則需要在創建時增加塊大小。請注意,對於磁帶的可移植性,您不應使用大於 6kB 的塊大小。如果您的本地作業系統和驅動器支持更大的塊大小(而不僅僅是增加的 FIFO 大小),請使用更大的值(參見星號手冊頁)。
請注意,如果您正在使用 Copy on Write 文件系統(如 ZFS),或者如果您使用的是文件系統緩衝區實現速度較慢的作業系統(如 Linux),您可能希望切換
star
到insecure mode
僅適用於gtar
. 通過添加來做到這一點-no-fsync
。在 Solaris 和ufs
星型預設安全模式下,性能降低不到 10%,在 ZFS 和慢速 Linux 緩衝區實現上,這種安全模式降低了 400% 的性能。