qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          記一次磁盤性能測試

           磁盤測試的目的及概述
            盡管隨著業(yè)界發(fā)展,處理器速度、內(nèi)存大小以及I/O執(zhí)行速度在快速增長,但I/O操作的吞吐量和響應(yīng)時間仍然比內(nèi)存訪問操作要慢得多。此外,由于很多工作負(fù)載都涉及到I/O操作,磁盤I/O很容易成為系統(tǒng)的瓶頸。因此,磁盤讀寫性能往往是性能測試中一向需要考量的環(huán)節(jié)。
            本次測試目標(biāo)
            本次磁盤性能測試對宿主機和各個規(guī)格云主機的磁盤性能做出加壓。并重點關(guān)注云主機之間的互相影響,以及云主機與宿主機之間的影響。
            根據(jù)這個思路,設(shè)計以下四個測試點。
            測試點一:單獨測試各規(guī)格云主機的性能。一來將測試結(jié)果作為基準(zhǔn)數(shù)據(jù),二來通過對比IOPS與磁盤空間的比例關(guān)系來驗證磁盤QoS是否起作用。
            測試點二:設(shè)計宿主機磁盤使用率成梯度負(fù)載,測試一臺云主機、多臺云主機混合場景下的云主機磁盤性能變化。用于得出宿主機磁盤負(fù)載對其上云主機磁盤性能的影響。
            測試點三:宿主機空閑,云主機之間的互相影響。一臺云主機磁盤設(shè)計成梯度負(fù)載,測試另一臺云主機的磁盤變化情況。
            測試點四:多臺云主機組合加壓,使得宿主機的磁盤使用率呈現(xiàn)梯度,在這種場景下,測試宿主機磁盤性能。用于得出云主機磁盤壓力對宿主機磁盤性能的影響。
            設(shè)計測試用例時,應(yīng)當(dāng)時刻記住測試目的。先想好要得到什么樣的結(jié)果,要得到什么樣的對比,然后再有針對性的設(shè)計用例。做對比時,要保證只有一個參數(shù)再變動,如此才能得出這個參數(shù)對結(jié)果的影響。
            工具選取與調(diào)研
            考慮到用例設(shè)計中的各種場景以及想要掌握的資源指標(biāo),最后選取了Fio作為本次測試的工具。Fio是一個用來對硬件I/O進行壓力測試和驗證的工具。支持13種不同的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等。
            在Fio中,可以設(shè)置的選項有:
            讀寫方式:隨機讀、隨機寫、順序讀、順序?qū)憽㈦S機讀寫、順序讀寫。
            文件大小:Fio進行I/O操作時使用的文件大小。
            運行時間:一次測試執(zhí)行的時間,在該時間段內(nèi),F(xiàn)io將不斷執(zhí)行I/O操作。
            混合場景讀寫比例:如果指定為讀寫操作(讀與寫操作都有),那么可以指定讀與寫占的時間比例。
            線程數(shù):指定多線程同時執(zhí)行相同的測試任務(wù)。
            Fio輸出結(jié)果中含有iops、延遲時間、磁盤占用率等指標(biāo)數(shù)據(jù)。
            在本次測試中,通過指定Fio的rate_iops參數(shù),即限定云主機讀寫的負(fù)載,來達到用例中設(shè)計的組合場景。
            在使用Fio時,可以通過設(shè)定job文件,可以實現(xiàn)多條訪問規(guī)則的順序執(zhí)行,進而縮減命令行中的選項長度。
            一個job文件可以控制產(chǎn)生特定數(shù)目的線程和文件。典型的job文件有g(shù)lobal段,一個或多少job段。
            運行時,fio從文件讀這些參數(shù),做處理,并根據(jù)這些參數(shù)描述,啟動這些仿真線程/進程。
            運行job的方式: fio job_file
            job文件采用經(jīng)典的ini文件,[]中的值表示一項job的名稱。
            監(jiān)控指標(biāo)的確定
            磁盤I/O的性能經(jīng)常基于吞吐率和延遲來評估。磁盤驅(qū)動器對大數(shù)據(jù)量順序傳輸?shù)奶幚沓3?yōu)于小數(shù)據(jù)量隨機傳輸操作。對于磁盤的監(jiān)控指標(biāo),主要集中在以下三個方面:
            測試工具Fio統(tǒng)計的指標(biāo):iops,bps(傳輸速度),延遲時間。
            系統(tǒng)cpu相關(guān)的指標(biāo):%usr,%sys,%iowait,中斷次數(shù),上下文切換次數(shù)。特別關(guān)注cpu0的使用情況。
            系統(tǒng)磁盤I/O相關(guān)的指標(biāo):tps,await,svctm,%util。
            上述各項指標(biāo)含義如下:
            IOPS:每秒鐘處理的磁盤IO次數(shù),由fio工具統(tǒng)計得出。
            BPS:每秒鐘處理的數(shù)據(jù)量大小,由fio工具統(tǒng)計得出。
            延遲時間:
            %usr:在用戶級別運行所使用的CPU的百分比,由mpstat命令統(tǒng)計得出。
            %sys:在系統(tǒng)級別(kernel)運行所使用CPU的百分比,由mpstat命令統(tǒng)計得出。
            %iowait:因IO導(dǎo)致的進程等待,由mpstat命令統(tǒng)計得出。
            中斷:CPU中斷次數(shù),由vmstat命令統(tǒng)計得出。
            上下文切換:CPU的控制權(quán)由運行任務(wù)轉(zhuǎn)移到另外一個就緒任務(wù)時所發(fā)生的事件次數(shù),由vmstat命令統(tǒng)計得出。
            tps:每秒從物理磁盤I/O的次數(shù),由iostat命令統(tǒng)計得出。
            await:從設(shè)備流出的平均I/O請求時間,包括請求在隊列和服務(wù)時的時間,由iostat命令統(tǒng)計得出。
            svctm:平均I/O請求的服務(wù)時間,由iostat命令統(tǒng)計得出。
            磁盤util%:磁盤利用率,由iostat命令統(tǒng)計得出。


           測試過程
            一、測試腳本的準(zhǔn)備與驗證
            1.編寫運行在云主機上的測試腳本
            該腳本主要用于觸發(fā)Fio進行測試,并制定log文件的存放路徑。
            2.將測試腳本及監(jiān)控腳本拷貝至云主機
            為了讓測試過程盡可能自動化,在宿主機上將必要的文件分發(fā)到特定云主機上執(zhí)行。需要的文件有測試腳本及負(fù)責(zé)監(jiān)控的腳本。
            3.ssh遠(yuǎn)程執(zhí)行云主機上腳本
            宿主機上通過ssh命令使云主機上測試腳本運作,并觸發(fā)監(jiān)控腳本對資源使用情況進行記錄。
            4.收集結(jié)果數(shù)據(jù)拷貝回宿主機
            云主機上測試結(jié)束后,統(tǒng)一將各個輪次結(jié)果拷貝回宿主機歸檔,便于后續(xù)集中處理。
            二、指標(biāo)監(jiān)控的實現(xiàn)
            使用Perfease進行資源監(jiān)控。 工具介紹鏈接:http://doc.hz.netease.com/pages/viewpage.action?pageId=16782036
            三、測試結(jié)果的收集與整理
            使用monitor.sh會將測試過程中所有的指標(biāo)數(shù)據(jù)統(tǒng)計并保存到文件中。而為了保證監(jiān)控數(shù)據(jù)的有效性,監(jiān)控的時效往往略小于真實測試時間。此外專門編寫了腳本來計算各指標(biāo)的平均值,但將各輪測試的結(jié)果挑選出來放進報告中頗為費時。
            而在整理數(shù)據(jù)的過程中,可能會遇到一些問題,例如同一用例跑兩輪,兩輪結(jié)果誤差較大。當(dāng)誤差超過5%時,基本可以認(rèn)定其中有一組數(shù)據(jù)無效。需要再跑一輪測試進行驗證。
            還有可能會發(fā)現(xiàn),結(jié)果數(shù)據(jù)是準(zhǔn)確的,但與對應(yīng)場景預(yù)期的結(jié)果不符。這種情況可能是腳本參數(shù)設(shè)置不對,也有可能暴露了其他問題。需要對這種情況需要找開發(fā)了解相關(guān)背景信息,進而定位原因。
            測試結(jié)論與總結(jié)
            針對四個測試點的測試目的分別對測試結(jié)果進行提煉總結(jié),結(jié)果與測試前的預(yù)期相符:
            通過測試不同規(guī)格的云主機磁盤性能,各云主機iops比例與云主機磁盤空間比例相近,可以驗證磁盤QoS起了作用。
            隨著宿主機磁盤負(fù)載增加,云主機iops快速下降;await與svctm差值增大,表明IO在請求隊列中的時間增加;%iowait增大,cpu等待io時間變長。
            宿主機磁盤空閑時,單臺云主機磁盤負(fù)載增加,對其他云主機的磁盤性能影響很小。多臺云主機負(fù)載增加時,其他云主機IO等待時間變長。
            隨著云主機磁盤負(fù)載增加,宿主機iops減少,await與svctm差值增大,說明IO請求在隊列中時間增加。
            預(yù)測試的重要性
            預(yù)測試是指在正式測試之前對基本功能的一個基本驗證。在這個過程中進行一些探索和驗證,小規(guī)模的模擬正式測試來提前暴露一些問題,最終降低測試成本與風(fēng)險。
            這幾個月下來的工作給我的體會是,性能測試過程似乎具備這樣的特點:
            測試工具需要設(shè)置多項參數(shù)來實現(xiàn)業(yè)務(wù)規(guī)模、場景負(fù)載等條件,各項指標(biāo)間可能需要捆綁設(shè)置。即測試條件較復(fù)雜。
            執(zhí)行一個輪次下來往往時間很長,且大多數(shù)測試工具在執(zhí)行完成后才會出具結(jié)果報告。即測試時間較漫長。
            測試環(huán)境要保證前后一致。測試進程盡量獨占整個系統(tǒng),避免測試外的因素影響最終結(jié)果。
            鑒于以上幾點,如果因為測試腳本或測試環(huán)境的原因影響了結(jié)果,則會造成很大的時間損失。而引入預(yù)測試的目的,就是幫助我們提前檢驗測試腳本和測試環(huán)境,估量實際測試時間并發(fā)現(xiàn)需要人工介入的時刻。
            此外,由于預(yù)測試幫助我們快速地領(lǐng)略了一遍測試過程的“生命周期”,正式測試時會更加得心應(yīng)手。
            及時發(fā)現(xiàn)問題
            即便使用預(yù)測試來提前收集測試信息,但如何能夠確保測試腳本和測試環(huán)境不出一點問題呢?很多時候我們發(fā)現(xiàn)不了錯誤是因為我們根本不知道自己犯了錯誤。
            “實踐是檢驗真理的唯一方法”,確保能發(fā)現(xiàn)的問題已經(jīng)解決后,只好提心吊膽地開始正式測試了。
            測試執(zhí)行過程雖然漫長,但不能掉以輕心,時刻關(guān)注新鮮出爐的結(jié)果數(shù)據(jù)。若結(jié)果表現(xiàn)與預(yù)期不符,要及早定位問題:是系統(tǒng)誤差,還是測試工具設(shè)置不對,還是數(shù)據(jù)收集時統(tǒng)計錯了目標(biāo)?
            越早發(fā)現(xiàn)問題,越能節(jié)省成本。
            向測試自動化靠攏
            由于測試需要關(guān)注宿主機與云主機兩方面的資源情況,監(jiān)控數(shù)據(jù)需要分別收集。且測試用例設(shè)計了各種負(fù)載梯度,造成測試腳本和Fio的job文件偏多,需要對應(yīng)分發(fā)到各個云主機上。這些都是繁瑣但不可缺少的環(huán)節(jié),為了防止人工操作帶來的失誤,在這些機械的操作盡可能地編寫腳本令其自動實現(xiàn)。
            自動化除了可以用來分發(fā)測試腳本、收集測試數(shù)據(jù),還可以對新分配的云主機進行初始化,例如安裝必要的工具包、更新軟件源等等操作。
            總而言之,自動化是一項提高效率,避免機械繁瑣操作的好思路、好方法。磨刀不誤砍柴工,花一點時間編寫自動化工作的腳本,能為后續(xù)工作帶來極大便利。

          posted on 2013-12-17 09:09 順其自然EVO 閱讀(277) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洪江市| 永德县| 上高县| 长兴县| 宝鸡市| 南通市| 阿拉善左旗| 金堂县| 中阳县| 瑞丽市| 广宗县| 汝南县| 平舆县| 诸城市| 通城县| 安岳县| 上犹县| 城步| 娱乐| 泸溪县| 承德县| 古浪县| 芦山县| 汤原县| 饶阳县| 隆安县| 崇仁县| 盈江县| 依兰县| 大方县| 平谷区| 商水县| 和田市| 佛山市| 石河子市| 新野县| 射阳县| 嘉义县| 临江市| 瑞金市| 霍山县|