Performance
為什麼dd第一次顯示磁碟速度慢?
我正在使用 dd 命令檢查 CentOS 6 上硬碟的磁碟速度。該設置是一個 DRBD 設置 - 此伺服器是主伺服器。為了確保獲得正確的值,我使用不同的輸出文件執行 dd 命令 3 次,然後取讀/寫時間的平均值。但是 dd 命令的第一次讀取比下一次讀取慢一個數量級。例如。
time -p dd if=/dev/zero of=/mailstore/testfile bs=16k count=16384 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 88.5175 s, 3.0 MB/s real 90.12 user 0.00 sys 0.66 time -p dd if=/dev/zero of=/mailstore/testfile1 bs=16k count=16384 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 0.226015 s, 1.2 GB/s real 0.30 user 0.00 sys 0.22 time -p dd if=/dev/zero of=/mailstore/testfile2 bs=16k count=16384 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 0.22094 s, 1.2 GB/s real 0.22 user 0.00 sys 0.21
這是正常的嗎?我應該忽略第一次閱讀並在那之後再讀3次嗎?
正如 poige 所建議的, dd 命令使用 opflag=direct 選項提供一致的輸出。例如。
time -p dd if=/dev/zero of=/mailstore/filetest33 bs=16k count=16384 oflag=direct 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 296.587 s, 905 kB/s real 296.61 user 0.03 sys 1.07 time -p dd if=/dev/zero of=/mailstore/filetest44 bs=16k count=16384 oflag=direct 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 260.308 s, 1.0 MB/s real 260.42 user 0.04 sys 1.13 time -p dd if=/dev/zero of=/mailstore/filetest56 bs=16k count=16384 oflag=direct 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 253.681 s, 1.1 MB/s real 253.68 user 0.03 sys 1.06
dd
具有direct
要求核心繞過任何記憶體並將數據直接發送到塊設備的選項。如果您需要對設備而不是 RAM 進行基準測試,則必須使用它,例如:
dd if=/dev/zero of=direct_output bs=1M count=100 oflag=direct
所以,你說它是通過網路安裝的。哪個文件系統,CIFS 或 NFS?不管怎樣,我懷疑你可能已經被委派了文件。當您的客戶端獲得委託的文件時,它能夠在本地記憶體寫入。但是,當您使用 O_DIRECT (這就是 oflag=direct 的意思)時,寫入會立即發送到伺服器,而不是任何記憶體。
無論哪種方式,都會發生一些奇怪的事情。除非您實際上只使用 10Mbps 乙太網,否則您應該獲得超過 1.1MB/s 的速度。
此外,您可以通過在另一個視窗中執行 killall -USR1 dd 來獲得傳輸中的速度更新。 Ø 統計。在等待大磁碟傳輸時,我經常這樣做:
睡覺10;做killall -USR1 dd;完畢
哦,如果您懷疑磁碟記憶體,請使用以下命令刷新 readcache: echo 1 > /proc/sys/vm/drop_caches
祝你好運!