郭鐵魚,丁艷榮
(中國(guó)人民解放軍71282部隊(duì) 河南 洛陽(yáng) 471000)
硬盤[1-2]作為計(jì)算機(jī)的一個(gè)主要部件,肩負(fù)著記錄一切數(shù)據(jù)信息的重要職責(zé),它的性能對(duì)整個(gè)系統(tǒng)的性能有直接影響。但硬盤在整機(jī)系統(tǒng)中卻充當(dāng)著一個(gè)“瓶頸”的角色[3]。目前,磁盤評(píng)測(cè)軟件種類繁多,不同操作系統(tǒng)環(huán)境下亦有不同版本。Ziff-Davis Winbench99[4]是硬盤測(cè)試中最常用且較權(quán)威的測(cè)試軟件。但Winbench99的測(cè)試范圍包括整機(jī)、CPU、圖形等多個(gè)方面,磁盤性能測(cè)試只是其中的一個(gè)主要功能。HDTach[4]提供了硬盤的讀寫數(shù)據(jù)傳輸曲線,最高、最低和平均數(shù)據(jù)傳輸率和CPU占用率。Sisoft Sandra[4]是一款綜合測(cè)試軟件,盡管這個(gè)測(cè)試軟件功能不那么強(qiáng)大,但它有著簡(jiǎn)單的測(cè)試結(jié)果和清晰的測(cè)試界面,且?guī)в幸欢〝?shù)量的測(cè)試結(jié)果可供用戶作為參照。Intel IOMeter[3-4]是Intel公司開發(fā)的一個(gè)專門測(cè)試系統(tǒng)I/O(包括磁盤、網(wǎng)絡(luò)等)速度的軟件,用戶可以根據(jù)需要定制自己的運(yùn)行環(huán)境,功能十分強(qiáng)大。但該軟件只能在Win2000或WinNT系統(tǒng)下運(yùn)行,且測(cè)試結(jié)果 (輸出為txt文件)較復(fù)雜。
雖然以上測(cè)試軟件已相當(dāng)專業(yè)和成熟,功能也非常強(qiáng)大。但測(cè)試原理不盡相同,得到的評(píng)測(cè)結(jié)果也有所差別。此外這些測(cè)試軟件的源代碼尚未公開[5-7],測(cè)試項(xiàng)目的種類已經(jīng)固定,無(wú)法修改。針對(duì)以上缺點(diǎn),本文設(shè)計(jì)了一種新的硬盤測(cè)試軟件,完成以下硬盤參數(shù)的測(cè)試:磁盤的瞬時(shí)、平均、最大數(shù)據(jù)傳輸率,單位時(shí)間內(nèi)讀操作次數(shù),最大和平均讀響應(yīng)時(shí)間,讀錯(cuò)誤次數(shù),以及CPU利用率等。
硬盤檢測(cè)程序的主要任務(wù)是獲取衡量硬盤性能的各參數(shù)指標(biāo)值,因此本方案的核心是對(duì)指定測(cè)試路徑的硬盤或分區(qū)進(jìn)行讀操作,統(tǒng)計(jì)、計(jì)算出所需要的各個(gè)參數(shù)指標(biāo)值。
從硬件驅(qū)動(dòng)層上起,在驅(qū)動(dòng)程序一級(jí)截獲硬盤傳輸?shù)臄?shù)據(jù)量,再根據(jù)各個(gè)參數(shù)指標(biāo)的計(jì)算方法得到其值。這種方案的優(yōu)點(diǎn)是,硬盤的數(shù)據(jù)流量統(tǒng)計(jì)準(zhǔn)確。但此方案要求對(duì)硬盤驅(qū)動(dòng)程序的結(jié)構(gòu)、編程比較清晰,代碼量較大。且在驅(qū)動(dòng)程序一級(jí)統(tǒng)計(jì)出來(lái)的數(shù)據(jù)流量是整個(gè)系統(tǒng)的,不是針對(duì)某一個(gè)具體應(yīng)用的,所以在實(shí)現(xiàn)典型應(yīng)用環(huán)境下的磁盤性能檢測(cè)時(shí)比較困難。
本方案直接調(diào)用操作系統(tǒng)提供的API函數(shù),由這些API函數(shù)再調(diào)用硬盤驅(qū)動(dòng)程序,然后根據(jù)API函數(shù)的返回值統(tǒng)計(jì)硬盤的數(shù)據(jù)流量。該方案的優(yōu)點(diǎn)是,在進(jìn)行典型應(yīng)用環(huán)境中硬盤性能參數(shù)測(cè)試時(shí),能較方便地實(shí)現(xiàn)。缺點(diǎn)是,由于使用了操作系統(tǒng)的API函數(shù),測(cè)試結(jié)果必然受到操作系統(tǒng)I/O管理及調(diào)度策略的影響,給硬盤評(píng)測(cè)結(jié)果帶來(lái)誤差。且此種方法統(tǒng)計(jì)得到的I/O流量,只是測(cè)試軟件的I/O量,并不是硬盤總的I/O。因此,只有當(dāng)系統(tǒng)中其它程序的I/O很小時(shí),此種方法最終得到的測(cè)試結(jié)果誤差才較小。本文采用此種方案。
硬盤基本性能參數(shù)測(cè)試模塊是一個(gè)多線程模塊,包括主線程和在測(cè)試過(guò)程中創(chuàng)建的讀操作線程。其中,讀操作線程是一個(gè)Worker Thread類型的線程[6],進(jìn)行讀操作和變量累加工作;主線程則負(fù)責(zé)整個(gè)測(cè)試程序的運(yùn)行,并對(duì)讀線程中累加的變量進(jìn)行計(jì)算以得到各個(gè)性能參數(shù)指標(biāo)。主線程流程如圖1所示,主要包括:測(cè)試路徑的選擇,讀操作數(shù)據(jù)塊大小的選擇,讀操作方式選擇,創(chuàng)建讀操作線程,在每個(gè)定時(shí)器消息中進(jìn)行基本性能參數(shù)的計(jì)算和顯示,以及其他消息的處理。測(cè)試開始后,在主線程中會(huì)創(chuàng)建一個(gè)讀操作線程,并設(shè)定好定時(shí)器。在讀操作線程中,用CreateFile函數(shù)打開在主線程中選定的路徑硬盤驅(qū)動(dòng)器或分區(qū),以獲取設(shè)備句柄提供給后面的讀操作ReadFile使用。如果是隨機(jī)讀操作方式時(shí),每次讀操作之前用SetFilePointer函數(shù)隨機(jī)定位要讀數(shù)據(jù)塊的扇區(qū)號(hào)。此外還要在每次讀操作ReadFile函數(shù)之前,用new[7-9]根據(jù)測(cè)試數(shù)據(jù)塊大小開辟一個(gè)內(nèi)存空間,以接收數(shù)據(jù)。讀操作結(jié)束以后,立即用delete[7-9]釋放掉這塊內(nèi)存空間。其流程如圖2所示。
圖1 主線程框圖Fig.1 Block diagram of main thread
本硬盤測(cè)試軟件中,典型應(yīng)用環(huán)境下的測(cè)試分為4種:Web Server、File Server、DataBase Server、Streaming File Server。其中在前3種環(huán)境下,主要看硬盤對(duì)用戶的響應(yīng)情況,即支持多少個(gè)用戶,而最后的流式文件服務(wù)器測(cè)試,由于傳輸?shù)臄?shù)據(jù)是持續(xù)的,主要看其對(duì)每個(gè)用戶所能提供的帶寬,即數(shù)據(jù)傳輸率。
圖2 讀操作線程框圖Fig.2 Block diagram of read thread
由于硬件環(huán)境對(duì)測(cè)試結(jié)果的影響非常的大,所以有必要對(duì)一些重要的有參考價(jià)值的硬件信息進(jìn)行檢測(cè),以便對(duì)測(cè)試結(jié)果進(jìn)行合理的分析。檢測(cè)的信息項(xiàng)目有四項(xiàng),依次是硬盤信息、CPU信息、內(nèi)存大小、操作系統(tǒng)信息。
作為一個(gè)測(cè)試工具,往往需要將測(cè)試結(jié)果保存起來(lái),以便進(jìn)行分析,所以記錄日志功能也是不可缺少的。在實(shí)現(xiàn)時(shí),單獨(dú)寫了一個(gè)日志類來(lái)進(jìn)行操作,在類中主要使用了一些和文件操作有關(guān)的打開、寫文件、關(guān)閉等函數(shù)。此外,為了方便用戶保存日志文件,在將測(cè)試結(jié)果保存為日志文件之前,需提示用戶選擇保存的日志文件名和路徑。
硬盤基本性能參數(shù)測(cè)試由用戶選定測(cè)試路徑及讀取數(shù)據(jù)塊的大小,然后進(jìn)行順序的或者隨機(jī)的讀操作測(cè)試。經(jīng)過(guò)多次測(cè)試,測(cè)試結(jié)果呈現(xiàn)出以下兩個(gè)特點(diǎn)。
1)對(duì)于一個(gè)選定的測(cè)試路徑,順序讀操作的測(cè)試結(jié)果隨著讀取數(shù)據(jù)塊大小的增加,數(shù)據(jù)傳輸率先增大后減小。
選定測(cè)試路徑為C分區(qū),數(shù)據(jù)塊大小分別選擇1 kB、2 kB、4 kB、8 kB、16 kB、32 kB、64 kB、128 kB、256 kB 和 512 kB。圖3顯示,數(shù)據(jù)傳輸率首先隨著數(shù)據(jù)塊的增大而增加,當(dāng)數(shù)據(jù)塊大小為128 kB時(shí),達(dá)到最大值;然后當(dāng)數(shù)據(jù)塊的大小繼續(xù)增大時(shí),數(shù)據(jù)傳輸率開始下降。在其他機(jī)器上測(cè)試時(shí),數(shù)據(jù)傳輸率也呈現(xiàn)出這種趨勢(shì),只是達(dá)到最大數(shù)據(jù)傳輸率的數(shù)據(jù)塊大小有所不同。這表明不同的測(cè)試環(huán)境都有一個(gè)數(shù)據(jù)傳輸率的最大值。
圖3 C盤不同數(shù)據(jù)塊大小的數(shù)據(jù)傳輸率Fig.3 Transfer rate of different data blocks in Cdisk
2)讀取相同大小的數(shù)據(jù)塊時(shí),隨機(jī)讀操作測(cè)試結(jié)果的數(shù)據(jù)傳輸率比順序讀操作的測(cè)試結(jié)果小得多。
在隨機(jī)讀操作時(shí),由于每次所讀的扇區(qū)是隨機(jī)的,磁頭要進(jìn)行較長(zhǎng)時(shí)間的尋道定位工作,所以,單位時(shí)間內(nèi)只能完成較少次數(shù)的數(shù)據(jù)塊傳輸工作,這就導(dǎo)致了隨機(jī)讀操作的數(shù)據(jù)傳輸率比順序讀操作的要小得多。但是隨機(jī)讀操作的數(shù)據(jù)傳輸率隨著測(cè)試數(shù)據(jù)塊的增大而增加,這點(diǎn)與順序讀操作時(shí)數(shù)據(jù)傳輸率隨著測(cè)試數(shù)據(jù)塊的增大先增加后減少不同。
3.2.1 模擬Web Server測(cè)試結(jié)果分析
測(cè)試時(shí),選擇整塊硬盤作為測(cè)試路徑,測(cè)試時(shí)數(shù)據(jù)塊大小及其典型分布為:512 B 22%、1 kB 15%、2 kB 8%、4 kB 23%、8 kB 15%、16 kB 2%、32 kB%6、64 kB%7、128 kB 1%、512 kB 1%。Web Server的吞吐率如圖4所示。圖4顯示,模擬Web Server環(huán)境進(jìn)行讀操作測(cè)試時(shí),硬盤所提供的響應(yīng)次數(shù)集中在140~160次之間。
圖4 Web Server吞吐率折線圖Fig.4 Broken line graph of Web Server's throughput rate
3.2.2 模擬File Server測(cè)試結(jié)果分析
模擬File Server測(cè)試時(shí),數(shù)據(jù)塊的大小及分布情況為:512 B 10%、1 kB 5%、2 kB 5%、4 kB 60%、8 kB 2%、16 kB 4%、32 kB 4%、64 kB 10%。測(cè)試時(shí)仍然選擇整塊硬盤作為測(cè)試路徑,F(xiàn)ile Server的I/O吞吐率如圖5所示。圖5顯示,模擬File Server環(huán)境進(jìn)行讀操作測(cè)試時(shí),硬盤所提供的響應(yīng)次數(shù)集中在150-160次之間。
圖5 File Server I/O吞吐率折線圖Fig.5 Broken line graph of File Server I/O's throughput rate
3.2.3 模擬DataBase Server測(cè)試結(jié)果分析
模擬Database Server進(jìn)行測(cè)試時(shí),數(shù)據(jù)塊大小分布為512 B、1 kB、2 kB、4 kB。 Database Server的 I/O 吞吐率如圖 6所示。圖6顯示,模擬Database Server環(huán)境進(jìn)行讀操作測(cè)試時(shí),硬盤所提供的響應(yīng)次數(shù)主要集中在160~180次之間。
圖6 Database Server I/O吞吐率折線Fig.6 Broken line graph of Database Server I/O's throughput rate
3.2.4 模擬Streaming File Server測(cè)試結(jié)果分析
模擬Streaming File Server環(huán)境進(jìn)行測(cè)試時(shí),讀操作為128 kB的順序讀操作。根據(jù)測(cè)試結(jié)果將用戶數(shù)戶數(shù)目從1到6的各種情況的總數(shù)據(jù)傳輸率作圖7。從圖7中可以看出,當(dāng)只有一個(gè)用戶的時(shí)候,數(shù)據(jù)傳輸率較大,基本維持在24.5 MB左右,而這個(gè)值與前面普通測(cè)試對(duì)比,128 kB數(shù)據(jù)塊大小的順序讀操作的數(shù)據(jù)傳輸率基本一樣。
圖7 Streaming File Server多用戶環(huán)境總的數(shù)據(jù)傳輸率折線圖Fig.7 Broken line graph of total transfer rate in Streaming File Server multi user environment
本文開發(fā)了一種硬盤性能測(cè)試軟件,使用Visual C++6.0工具和MFC+AppWizard模式。整個(gè)測(cè)試算法的核心是在讀操作線程中調(diào)用ReadFile函數(shù)發(fā)出讀操作命令,然后統(tǒng)計(jì)操作過(guò)程中各種需要的數(shù)據(jù)量,計(jì)算得出各個(gè)性能指標(biāo)。主要完成了以下幾個(gè)功能:硬盤基本性能參數(shù)測(cè)試,典型應(yīng)用環(huán)境下的測(cè)試,測(cè)試環(huán)境軟硬件信息檢測(cè),記錄日志功能。在后續(xù)工作中還將完成硬盤的寫操作測(cè)試、硬盤的Burst I/OTest、硬盤CPU占用率的測(cè)試、完善測(cè)試原理等工作。
[1]謝其中.微型計(jì)算機(jī)常用外部設(shè)備[M].3版.武漢:華中科技大學(xué)出版社,2001.
[2]Jeppesen J,Allen W,Anderson S.Memory Products,Network and Computer Storage Hard Disk Controller[C].The Disk Drive's Brain and Body International Conference on Computer Design:VLSI in Computers&,Processors(ICCD'01),2001.
[3]Tools Development Staff.Iometer User’s Guid Intel FCD[S].Copyright(c) 1996-1999 Intel Corporation.
[4]許宏松.如何測(cè)試你的硬盤[J].微型計(jì)算機(jī),2002(5):42-48.XUHong-song.Howtotestyour hard disk[J].Micro Computer,2002(5):42-48.
[5]David J,潘愛民,王國(guó)印.Visual C++ 技術(shù)內(nèi)幕[M].4版.北京:清華大學(xué)出版社,1999.
[6]侯俊杰 著.深入淺出 MFC[M].2版.武漢:華中科技大學(xué)出版社,2001.
[7]錢能,董靈平,張敏霞.編著 C++程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2000.
[8]Eckel B,劉宗田,袁兆由.C++編程思想:第一卷:標(biāo)準(zhǔn)C++導(dǎo)引[M].2版.北京:機(jī)械工業(yè)出版社,2002.
[9]Petzold C.Windows程序設(shè)計(jì)[M].5版.北京:北京大學(xué)出版社,2000.