對硬碟寫操作執行硬碟燈測試:
起初方法是在一段時間內高頻率的進行fwrite操作,現象是硬碟燈高頻閃爍,但是亮度很暗
關於fwrite函式
:fwrite是帶緩衝的,write不帶緩衝。如果檔案的大小是8k。
若用write,且只分配了2k的快取,則要將此檔案讀入需要做4次系統呼叫。
若用fwrite,則系統自動分配快取,則讀入此檔案只要一次系統呼叫。
也就是用write要讀4次磁碟,而用fwrite則只要讀1次磁碟。所以fwrite的效率比write要高4倍。
什麼是緩衝
系統核心對磁碟的讀寫都會提供乙個塊緩衝,當用write函式對其寫資料時,直接呼叫系統呼叫,將資料寫入到塊緩衝進行排隊,當塊緩衝達到一定的量時,才會把資料寫入磁碟。因此所謂的不帶緩衝的i/o是指程序不提供緩衝功能。每呼叫一次write或read函式,直接系統呼叫。
而帶緩衝的i/o是指程序對輸入輸出流進行了改進,提供了乙個流緩衝,當用fwrite函式網磁碟寫資料時,先把資料寫入流緩衝區中,當達到一定條件,比如流緩衝區滿了,或重新整理流緩衝,這時候才會把資料一次送往核心提供的塊緩衝,再經塊緩衝寫入磁碟
分析:一開始以為是沒寫進去,資料只寫到快取裡,
解決方式:在fwrite後面加fflush函式,該函式功能: 清除讀寫緩衝區,需要立即把輸出緩衝區的資料進行物理寫入,防止fclose之後,發現檔案的最後有一部分沒有寫入完整。關於fflush的其他用法:
fflush(stdin)重新整理標準輸入緩衝區,把輸入緩衝區裡的東西丟棄[非標準]
fflush(stdout)重新整理標準輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出裝置上
printf("。。。。。。。。。。。");後面加fflush(stdout);可提高列印效率
現象:還是很暗
分析:查詢關於fflush的具體功能得知,fflush:是把c庫中的緩衝呼叫write函式寫到磁碟[其實是寫到核心的緩衝區]。需要借助乙個函式,來把核心緩衝刷到磁碟上,也就是fsync,強制與描寫敘述字fildes相連檔案的全部改動過的資料(包含核內i/o緩衝區中的資料)傳送到外部永久介質。即重新整理fildes給出的檔案的全部資訊。而且等待寫磁碟操作結束,然後返回.
現象:還是很暗
分析:寫操作強度不夠壓力測試時硬碟燈高亮驗證這一分析
引入新的測試方法,dd 命令來測試硬碟讀寫速度
測試磁碟寫能力
time dd if=/dev/zero of=/dev/sdb bs=4k count=100000
測試磁碟讀能力
time dd if=/dev/sdb of=/dev/null bs=4k
關於/zero 和/null
這是linux下的兩個特殊檔案,很好用
/dev/null,也叫空裝置,是乙個特殊的裝置檔案,它丟棄一切寫入其中的資料(但報告寫入操作成功),讀取它則會立即得到乙個eof。
被稱為位桶(bit bucket)或者黑洞(black hole)。空裝置通常被用於丟棄不需要的輸出流,或作為用於輸入流的空檔案。這些操作通常由重定向完成。
/dev/zero 是乙個特殊的檔案,當你讀它的時候,它會提供無限的空字元(null, ascii nul, 0x00)。對它不會產生io,所以,io都會集中在of檔案中,of檔案只用於寫,所以這個命令相當於測試磁碟的寫能力。命令結尾新增oflag=direct將跳過記憶體快取,新增oflag=sync將跳過hdd快取。
Linux硬碟讀寫測試
linux伺服器想要知道硬碟的讀寫是否能滿足服務的需要,我們可以使用linux自帶的dd命令測試硬碟的讀寫速度,方法如下 登入ssh,輸入以下命令即可,根據測試資料的大小等待返回的時間不同 linux硬碟寫入速度 time dd if dev zero of var test bs 2k count...
linux測試硬碟讀寫速度
time有計時作用,dd用於複製,從if讀出,寫到of。if dev zero不產生io,因此可以用來測試純寫速度。同理of dev null不產生io,可以用來測試純讀速度。bs是每次讀或寫的大小,即乙個塊的大小,count是讀寫塊的數量。1.測 目錄所在磁碟的純寫速度 time dd if de...
linux測試硬碟讀寫速度
time有計時作用,dd用於複製,從if讀出,寫到of。if dev zero不產生io,因此可以用來測試純寫速度。同理of dev null不產生io,可以用來測試純讀速度。bs是每次讀或寫的大小,即乙個塊的大小,count是讀寫塊的數量。1.測 目錄所在磁碟的純寫速度 time dd if de...