1.項(xiàng)目應(yīng)用背景

  隨著數(shù)據(jù)大集中趨勢的發(fā)展,信息系統(tǒng)性能特性越來越受到重視。在大型信息系統(tǒng)上線運(yùn)行前通常還需要聘請測試機(jī)構(gòu)對系統(tǒng)的性能水平進(jìn)行專門的測試和評估,以判斷系統(tǒng)在目前以及將來某一個(gè)時(shí)間范圍內(nèi)的服務(wù)水平。

  為了測試信息系統(tǒng)的性能水平,需要相應(yīng)的測試策略和專業(yè)的測試工具來支持。測試策略是指測試方案的定義、測試方法的選擇;測試工具是指通過軟件程序模擬眾多用戶的同時(shí)操作,形成對被測系統(tǒng)的性能壓力,并對結(jié)果進(jìn)行收集、統(tǒng)計(jì)和分析,以衡量系統(tǒng)的性能水平。

  當(dāng)CPU進(jìn)入多核時(shí)代,軟件架構(gòu)進(jìn)入分布式計(jì)算和云計(jì)算時(shí)代后,并行計(jì)算已經(jīng)成為一個(gè)新的熱點(diǎn),為此我們嘗試采用并行化技術(shù)應(yīng)用到性能測試工具的研發(fā)中, 以提升性能測試工具的效率。

  2.應(yīng)用的業(yè)務(wù)瓶頸、規(guī)模

  性能測試工具運(yùn)行的原理是采用軟件模擬一定數(shù)目的用戶同時(shí)向服務(wù)器發(fā)送請求,接收和分析服務(wù)器的應(yīng)答,以驗(yàn)證服務(wù)器性能指標(biāo)。在工作時(shí),通常可以劃分為三個(gè)步驟,首先編寫測試腳本記錄單次操作的動作;然后依據(jù)測試策略的定義創(chuàng)建指定數(shù)目的線程或進(jìn)程,每一個(gè)線程或進(jìn)行執(zhí)行腳本中記錄的動作;后,通過對運(yùn)行結(jié)果的收集、分析判斷系統(tǒng)的性能水平。

  性能測試的目的有很多種,衡量的指標(biāo)也很多。在本文中我們關(guān)注的測試目的是在給定衡量指標(biāo)的前提下,測試系統(tǒng)可支持的并發(fā)用戶數(shù)量,這里的衡量指標(biāo)可以指響應(yīng)時(shí)間、吞吐量。響應(yīng)時(shí)間是指一個(gè)事務(wù)所需要的時(shí)間,吞吐量是指服務(wù)器單位時(shí)間向外發(fā)送數(shù)據(jù)量。依據(jù)系統(tǒng)不同,并發(fā)的數(shù)據(jù)規(guī)模一般可達(dá)到幾百或幾千,甚至更多,也是說,在我們的測試工具中要?jiǎng)?chuàng)建幾百或幾千個(gè)線程,可能滿足工作的需要。

  目前的測試工具在給定用戶數(shù)量的情況下,評價(jià)系統(tǒng)的響應(yīng)時(shí)間和吞吐量是比較容易和高效的。但如果在給定響應(yīng)時(shí)間和吞吐量的指標(biāo)后,測試系統(tǒng)在當(dāng)前條件下系統(tǒng)可支持的并發(fā)用戶數(shù)時(shí),需要花費(fèi)大量的時(shí)間。

  因此,為了解決這一問題,提高測試的效率,使測試更能貼近用戶的真實(shí)感受,將并行化技術(shù)應(yīng)用到測試工具的研發(fā)中將會取得一定的效果。

  3.具體并行化的想法

  從單純提高主頻到如今提供更多的核,以往基于文本的順序編程模式已經(jīng)不再適用,一個(gè)簡單的例子是當(dāng)PC被升級為多核處理器之后,很多應(yīng)用程序的執(zhí)行速度并沒有任何的提高,主要的原因是并不是所有的核都得到了充分的利用。

  為了提高測試工具的效率,需要分析工具運(yùn)行時(shí)哪些模塊耗資源與處理時(shí)間,如果將這些模塊并行執(zhí)行,那么對于整個(gè)應(yīng)用程序在多核上的性能提升會有效果。另外,在工具運(yùn)行時(shí)創(chuàng)建多個(gè)線程應(yīng)依據(jù)負(fù)載的不同讓它們運(yùn)行在各自的核上。

  具體的并行化想法是:測試工具在模塊劃分上分為四個(gè)主模塊,分別為調(diào)度模塊、壓力產(chǎn)生模塊、實(shí)時(shí)收集模塊、實(shí)時(shí)分析模塊。其中調(diào)度模塊是整個(gè)工具的核心,它實(shí)時(shí)的管理壓力產(chǎn)生模塊,控制壓力的大小;壓力產(chǎn)生模塊是一組模擬用戶操作的線程,它們負(fù)責(zé)用被測系統(tǒng)施加壓力,受調(diào)度模塊管理;實(shí)時(shí)收集模塊可以實(shí)時(shí)的收集壓力產(chǎn)生模塊的結(jié)果數(shù)據(jù),提供給實(shí)時(shí)分析模塊;實(shí)時(shí)分析模塊通過對結(jié)果的分析,比較實(shí)時(shí)的結(jié)果與預(yù)設(shè)結(jié)果的差異,提供給調(diào)度模塊,調(diào)度模塊依據(jù)其結(jié)果判斷是否要改變調(diào)度策略。如此實(shí)時(shí)測試,實(shí)時(shí)分析、實(shí)時(shí)調(diào)整,可以大大提高測試的效率。

  4.具體實(shí)施和效果

  在具體的實(shí)施中采用了并行編程語言O(shè)penMP,OpenMP (Open Multi-Processing ,開放多處理 )是一種面向共享內(nèi)存以及分布式共享內(nèi)存的多處理器多線程并行編程語言,提供指導(dǎo)多線程、共享內(nèi)存并行的應(yīng)用程序編程接口( API ), 包含一組編譯器指令、庫程序、和影響運(yùn)行時(shí)行為的環(huán)境變量 。OpenMP對并行處理提供了較多的支持,例如通過#pragma omp parallel num_threads(4)可以方便的創(chuàng)建4個(gè)并行的線程。

  在測試工具原型的對比試驗(yàn)中,采用了并行化處理后,測試工具的效率有顯著的提高。但采用并行化也存在一定的問題,比如線程間的通訊、切換、同步以及安全性等問題要變得更為復(fù)雜,給程序的開發(fā)提出了更多的挑戰(zhàn)。