Performance

為什麼dd第一次顯示磁碟速度慢?

  • January 21, 2014

我正在使用 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

祝你好運!

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