測試磁碟隨機讀取時間

2022-05-02 21:03:07 字數 803 閱讀 4292

寫了乙個測試磁碟尋道(+旋轉)時間的程式,方法如下:建立乙個大檔案(如果太小,檔案所有內容都在乙個磁軌上),使

o_direct

開啟檔案,隨機選擇乙個位置(

4k的倍數),讀取

4k(檔案系統塊

)大小的資料。

測試程式分別執行1、

10、100、

1000

、10000

次隨機讀檔案操作,結果發現在

1000

次以內,消耗的時間總是

1-3ms

,超過10000

才會略有大的增長,但也在

1s範圍內。發現

directio

根本沒有生效,百思不得其解。

仔細閱讀了

man手冊上關於

o_direct

的說明:

使用directio

要求緩衝區、

offset

跟塊大小對齊,而程式中的緩衝區在棧上分配的,塊對齊的機率很低。怎麼保證記憶體跟塊大小(

4096b

)對齊呢?

man posix_memalign

。int posix_memalign(void **memptr, size_t alignment, size_t size);

void *memalign(size_t boundary, size_t size);

經過修改後,程式工作正常,測試結果如下:執行

10000

次隨機讀請求,平均讀時間為

3.6ms

,因為檔案的順序性,這裡測試的隨機性不是太好。

讀取磁碟檔案

例項說明 在程式執行之前,在任意路徑下新建乙個文字文件,文件內容為hello world!程式設計實現從鍵盤中輸入檔案路徑及名稱,在螢幕中顯示出該檔案中的內容。技術要點 用到fopen函式來開啟檔案 file fp fp fopen 檔名,使用檔案的方式 用到fgetc函式 ch fgetc fp ...

讀取磁碟內容

訪問磁碟上某一具體資訊,由3部分時間組成 1.查詢時間 磁頭定位到相應柱面 磁軌 的時間,0.1s 2.等待時間 碟片旋轉到相應盤塊的時間,0.0083s 7200rpm 3.傳輸時間 資料通過系統匯流排傳到記憶體的時間,乙個位元組大概0.02us 磁碟以盤塊 block 為單位讀取資料,即每次讀入...

隨機讀取記錄

方法一 直接通過sql語句實現,如 topn from tablea order bynewid 這是最簡單的方法,通過呼叫sqlserver的newid 函式 產生guid 全域性唯一標誌符 來產生隨機記錄。採用這種方法時,需要將表中所有記錄與newid 生成的值進行比較從而進行排序。因此,如果表...