話說,Linux 自帶的dd工具測試硬盤讀寫速度只能提供一個大概的測試結果,而且是連續IO 而不是隨機IO ,理論上文件規模越大,測試結果越准確。理論上bs越大,所測得性能越高。
上句來自網上,是不是真的呢?百聞不如一見。今天來進行實際的測試和對比。
找了一台沒有硬盤的機器,再找了一塊希捷7200rpm 3T的硬盤。一塊硬盤只能做raid0,條帶設置為256K。 敲入lsblk命令如下。
一、格式化前對新加的盤進行測試
1. 讀測試
2. 寫測試
3. 在測試完下面的2.5后,再返回來測試該磁盤的寫
可以看出,這三種差別不大。但是和上面一步相差很大!都快成倍數關系了。
4. 懷着忐忑的心情,再次測試了下 oflag=dsync參數。結果很快,沒有想象的那么慢,將近10秒,雖然比上面大了不少。當然速度也慢了不少!
5. 上面的寫速度相差比較大,所以再次測試了讀速度。總量沒變,還是1G的數據,只是改變了塊大小,發現速度截然不同!塊變大,速度反而變小,小太多!
估計是因為沒有文件系統。
6. 不同的bs塊大小測試,發現寫速度變化不大!
二、對系統盤的目錄/mnt/disk1進行測試
1. 在home目錄下操作失敗了
2. of 必須指定文件,存不存在沒關系。應該是sda盤已經格式化了文件系統有關。
3. 把參數改為oflag=dsync,半天還沒結束!
過了很久幾次查看沒動靜,約一小時后,再開了個shell 進來看,文件變成了4G多點!不應該是1G?
4. 先ctrl+c退出原理的shell再測試下,不帶后面的參數,再加上時間time的命令。比第二步(2.2)的速度稍有提高。
5. 反復三種方式測試了一下
速度基本上比較穩定。沒有加參數速度稍微快一點點,而加參數conv=fdatasync 或者 fsync這兩種沒區別。
而oflag=dsync后續再測。
6. 從1.5返回測試不同的塊大小。時間和速度變化不大,和上面(2.5)對比變化也很小,證明開始推斷是正確的。所以文件系統必須要安裝!
7. 介於上面oflag=dsync的結果,我們再測試一下。
上面又卡主了,約五分鍾后,我新開了一個shell窗口,連續兩次查1.img的大小,已經都4G了,還在增大。所以上面的shell窗口ctrl+c果斷推出。
8. 讀速度非常高,bs為16k是更大。
到這里為止,我們可以得出一些結論。
1.oflag=dsync是對物理數據(磁盤)的緩沖,不經過文件系統。而conv=fdatasync 或者conv=fsync是對文件系統的緩沖,其實字面f就是文件file;而前者data表示只緩存數據,后者數據和元數據都緩存。所以一般情況下都是安裝了文件系統的,所以應選文件系統的參數,也可以默認不選擇,差別不大。
2.bs塊大小在寫磁盤,其值變化應該沒多大影響。而對於讀,有文件系統的情況下,變大性能上升;但是對於物理裸盤,變大性能反而下降。
當然只是目前測試的結果,可能還不夠充分,后續有機會再完善,有問題也歡迎提出。
另,有關文件IO知識可以參考https://www.cnblogs.com/orange-CC/articles/12671487.html,來自本人博客;還有更多文件系統和內存管理的知識歡迎閱讀!