時鐘節(jié)拍;根據時鐘頻率,確定第一時鐘節(jié)拍以及第二時鐘節(jié)拍的時間差值,作為磁盤的旋轉時間??梢?,本發(fā)明通過對磁盤進行I/O操作,可以方便地測試出磁盤的旋轉時間,尤其適用于磁盤特性測試中。
[0049]本發(fā)明所提供的測試磁盤的旋轉時間的另一種【具體實施方式】的流程圖如圖2所示,該方法包括:
[0050]步驟S201:預先將磁盤隊列調度算法設置為NOOP ;
[0051]其中,NOOP指不使用磁盤的優(yōu)化調度算法,避免算法對測試結果造成的影響。
[0052]步驟S202:設置磁盤寫模式為Write-through ;
[0053]在進行磁盤寫操作的時候不使用磁盤緩存而直接將數據寫入磁盤,使測試結果更加準確。
[0054]步驟S203:創(chuàng)建一個寫磁盤地址O處的B1,本申請中B1指塊設備層輸入輸出請求;
[0055]步驟S204:順序向磁盤下發(fā)兩次B1 ;
[0056]步驟S205:在B1的回調函數中,記錄第一次寫操作結束的第一時鐘節(jié)拍Timel ;
[0057]步驟S206:在B1的回調函數中,記錄第二次寫操作結束的第二時鐘節(jié)拍Time2 ;
[0058]步驟S207:結合時鐘頻率,計算Time2和Timel的時間差值,即為旋轉時間。
[0059]作為一種優(yōu)選實施方式,本實施例還可以進一步包括:
[0060]重復步驟S204到步驟S207的操作N次,計算N次的平均值,從而得到旋轉時間Time0其中,N指重復讀寫的次數,次數越多得到的旋轉時間也就越精確。
[0061]本實施例中通過在磁盤地址的O位置處,對磁盤進行重復寫操作,并記錄一個時間值。每次寫相同的大小,如可以設定為4KB,可在創(chuàng)建時指定。通過獲得完成B1操作所需要的時間計算得到磁盤的旋轉時間。與上一實施例相比,本實施例在寫之前首先設置磁盤的隊列調度算法和磁盤的寫模式,以禁止使用任何調度算法和磁盤緩存,避免這兩者對結果造成的影響,能夠進一步提高測試的準確度。
[0062]需要指出的是,本發(fā)明中B1是存儲系統(tǒng)中塊設備層的輸入輸出請求,可確定讀寫操作的的大小及位置。該B1在完成請求后會調用一個事先設定好的回調函數。
[0063]需要指出的是,本發(fā)明通過在Linux系統(tǒng)內核中發(fā)起B(yǎng)1讀寫磁盤的某些位置,而不是從用戶態(tài)發(fā)起讀寫請求。從內核態(tài)發(fā)起請求能夠盡可能減少從發(fā)起請求到磁盤執(zhí)行請求中間的過程,能夠減少誤差。
[0064]本發(fā)明中通過系統(tǒng)時鐘節(jié)拍首先計算系統(tǒng)的時鐘頻率,在需要積累系統(tǒng)時間時獲得時鐘節(jié)拍,并根據上述計算得到的系統(tǒng)時鐘頻率得到需要記錄的時間值。
[0065]本發(fā)明所提供的測試磁盤旋轉時間的裝置的一種【具體實施方式】的結構框圖如圖3所示,該裝置包括:
[0066]第一創(chuàng)建模塊100,用于創(chuàng)建第一塊設備層輸入輸出請求,所述第一塊設備層輸入輸出請求從O位置處進行預設大小的寫操作;
[0067]第一下發(fā)模塊200,用于順序向磁盤下發(fā)兩次第一塊設備層輸入輸出請求的寫操作;
[0068]第一記錄模塊300,用于分別記錄第一次寫操作結束的第一時鐘節(jié)拍以及第二次寫操作結束的第二時鐘節(jié)拍;
[0069]第一確定模塊400,用于根據時鐘頻率,確定所述第一時鐘節(jié)拍以及第二時鐘節(jié)拍的時間差值,作為磁盤的旋轉時間。
[0070]本發(fā)明所提供的測試磁盤旋轉時間的裝置,通過創(chuàng)建第一塊設備層輸入輸出請求,順序向磁盤下發(fā)兩次第一塊設備層輸入輸出請求的寫操作,分別記錄第一次寫操作結束的第一時鐘節(jié)拍以及第二次寫操作結束的第二時鐘節(jié)拍;根據時鐘頻率,確定第一時鐘節(jié)拍以及第二時鐘節(jié)拍的時間差值,作為磁盤的旋轉時間??梢?,本發(fā)明通過對磁盤進行I/O操作,可以方便地測試出磁盤的旋轉時間,尤其適用于磁盤特性測試中。
[0071]本發(fā)明所提供的測試磁盤旋轉時間的裝置與上述測試方法相對應,在此不再贅述。
[0072]本發(fā)明所提供的測試磁盤柱面容量的方法的一種【具體實施方式】的流程圖如圖4所示,該方法包括:
[0073]步驟S301:創(chuàng)建第一塊設備層輸入輸出請求以及第二塊設備層輸入輸出請求,所述第一塊設備層輸入輸出請求從O位置處進行預設大小的寫操作,所述第二塊設備層輸入輸出請求從預設偏移量位置處進行所述預設大小的寫操作;
[0074]步驟S302:順序向磁盤下發(fā)第一塊設備層輸入輸出請求的寫操作以及第二塊設備層輸入輸出請求的寫操作;
[0075]步驟S303:記錄所述第二塊設備層輸入輸出請求的寫操作的時間;
[0076]步驟S304:按照預設增量逐漸增大所述預設偏移量的大小,重復上述向磁盤下發(fā)第一塊設備層輸入輸出請求的寫操作以及第二塊設備層輸入輸出請求的寫操作的過程,依次獲取每次第二塊設備層輸入輸出請求的寫操作的時間;
[0077]步驟S305:當寫操作的時間不滿足預設規(guī)律時,根據當前寫操作的次數、所述預設偏移量以及所述預設增量確定磁盤的柱面容量。
[0078]如當前寫操作的次數為n,預設偏移量為a,預設增量為b,則磁盤的柱面容量為a+ (n_l) b0
[0079]本發(fā)明所提供的測試磁盤柱面容量的方法,通過對磁盤不同位置進行讀寫,分析讀寫操作時間,進而獲得柱面大小。
[0080]本發(fā)明所提供的測試磁盤柱面容量的方法的另一種【具體實施方式】的流程圖如圖5所示,該方法包括:
[0081 ] 步驟S401:設置磁盤隊列調度算法為NOOP ;
[0082]其中,NOOP指不使用磁盤的優(yōu)化調度算法,避免算法對測試結果造成的影響。
[0083]步驟S402:設置磁盤寫模式為Write-through ;
[0084]在進行磁盤寫操作的時候不使用磁盤緩存而直接將數據寫入磁盤,使測試結果更加準確。
[0085]步驟S403:創(chuàng)建一個寫磁盤地址O處的第一塊設備層輸入輸出請求B1 (記為b1l);
[0086]步驟S404:創(chuàng)建一個寫磁盤地址預設偏移量位置處的第二塊設備層輸入輸出請求B1 (記為b12),預設偏移量offset可以為4KB ;
[0087]步驟S405:順序提交b1l和b12,記錄當前時鐘節(jié)拍TimeO ;
[0088]步驟S406:在B1完成的回調函數中分別記錄兩個B1完成時的時鐘節(jié)拍Timel和 Time2 ;
[0089]步驟S407:通過Time2和TimeO計算b12寫操作所用的時間Time ;
[0090]步驟S408:將偏移單位offset增加4KB,重復N次步驟S405到步驟S407 ;
[0091]步驟S409:分析得到N個時間值,得到出現時間突然增大時寫操作的次數n,n*4KB就是該磁盤柱面的大小。
[0092]優(yōu)選地,上述N值可以在最初通過預估一個柱面的最大大小得到,用預估的磁盤一個柱面可能的最大容量除以每次寫操作的大小(4KB)得到的值即是N。
[0093]本實施例通過在內核態(tài)發(fā)起對磁盤特點位置的寫操作,每次寫操作寫相同的大小,如可設定為4KB,該大小可以由用戶自行設定,這均不影響本發(fā)明的實現。記錄寫操作所用的時間值,每次寫操作之后都要確保磁頭回到磁盤的地址O位置處,即對O地址出進行一次寫操作。逐漸增大寫的地址,如每次增加4KB大小,這樣每次寫操作所用的時間也會呈現遞增的趨勢。寫地址在磁盤的同一柱面時,這個值是一個有規(guī)律的增長。當寫地址增大到一定程度,超過一個柱面的大小時,需要更換柱面,此時寫操作的時間將不再只有旋轉時間,還會增加一個尋道時間,因此,這時寫操作所用的時間值會出現一個突然增大的狀態(tài),同時這個值也大于