1.項目應用背景

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

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

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

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

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

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

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

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

  3.具體并行化的想法

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

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

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

  4.具體實施和效果

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

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