專利名稱:一種程序行為動態(tài)剖析的并行加速方法
技術(shù)領(lǐng)域:
本發(fā)明屬于程序行為動態(tài)剖析領(lǐng)域,具體涉及一種多線程程序(主要針對基于共 享內(nèi)存體系結(jié)構(gòu)的多線程編程模型,例如基于OpenMP和^tel TBB等編程模型的多線程程 序)行為動態(tài)剖析的并行加速方法,適用于程序的動態(tài)剖析、動態(tài)插樁、以及利用多核進行 并行加速等的研究。
背景技術(shù):
程序行為是指程序在CPU上執(zhí)行過程所表現(xiàn)的一系列特性,例如緩存(cache)缺 失率、分支預(yù)測信息、程序內(nèi)存使用量和運行時間、及多線程間的同步和通信等。理解程序 的動態(tài)行為特征對于體系結(jié)構(gòu)設(shè)計、編譯器優(yōu)化、程序的性能和瓶頸分析具有非常重要的 作用。隨著處理器頻率的不斷提高,制造工藝尺寸的不斷降低,處理器面臨著功耗和 發(fā)熱控制瓶頸,使得很難單純依靠提高處理器頻率來提高處理器性能。處理器開始朝著 多核多線程的方向發(fā)展,片上多處理器(Chip Multiprocessor)以及同時多線程技術(shù) (Simultaneous Multi-Threading)逐漸成為主流的計算平臺。硬件支持的核心和線程數(shù)量 的不斷增加,使得多線程程序設(shè)計逐漸成為主流編程模型,但由于多線程程序設(shè)計固有的 復(fù)雜性,例如任務(wù)分解、死鎖、競爭以及多線程程序執(zhí)行的不確定性,使得設(shè)計編寫高效的 多線程程序是件艱巨的工作,這就急需能對多線程程序進行高效剖析的方法。另一方面,軟 件工程思想和軟件設(shè)計技術(shù)的不斷發(fā)展,為提高設(shè)計靈活性和系統(tǒng)的動態(tài)可配置性,通常 引人越來越多的間接層次,例如虛擬機、中間件以及OPENMP之類的編程模型,間接層次的 引入簡化了應(yīng)用程序的開發(fā),但也引入了抽象和復(fù)雜性,因此帶來了一定的開銷。軟件開發(fā) 人員需要更高效的、更透明的和易用的調(diào)試和分析工具,來了解軟件的動態(tài)行為和發(fā)現(xiàn)軟 件的缺陷及性能瓶頸,保證軟件的可靠性和縮短軟件開發(fā)和測試過程。此外,理解程序的動 態(tài)行為特征對于體系結(jié)構(gòu)設(shè)計和編譯器優(yōu)化也具有非常重要的作用。體系結(jié)構(gòu)設(shè)計者經(jīng)常 需要利用程序的動態(tài)行為信息優(yōu)化系統(tǒng)的體系結(jié)構(gòu)設(shè)計和系統(tǒng)仿真及模擬;編譯器設(shè)計者 可以利用程序執(zhí)行時信息優(yōu)化代碼生成和自動并行化。目前對程序進行剖析(profiling)主要有兩種方法一是基于硬件計數(shù) (Hardware Performance Counter)白勺 7^ ; 二 ■于軟 ^f牛白勺動 Hi (Dynamic
Instrumentation)技術(shù)?;谟布嫈?shù)器的剖析技術(shù),通常開銷低但收集數(shù)據(jù)比較粗糙。 基于插裝的性能剖析技術(shù),通常能收集詳細準(zhǔn)確的數(shù)據(jù)而且靈活可定制性強,基于動態(tài)插 裝可以構(gòu)建cache建模,容錯分析,內(nèi)存泄露等工具,但引入的額外開銷較高,主流動態(tài)插 樁工具,例如PiruDynam0RIO和Valgrind,在做簡單的基本塊計數(shù)統(tǒng)計時,被分析程序插樁 后執(zhí)行時間為不插樁時執(zhí)行時間的2. 5倍以上,如果對程序做復(fù)雜的剖析,性能會下降的 更多,例如cache模擬時,Valgrind通常比本地(native)執(zhí)行時慢上100多倍。一般來說, 好的剖析工具具有兩個特征一是收集盡可能多和準(zhǔn)確的數(shù)據(jù);二是具有較低的開銷。但 這兩者在實現(xiàn)中卻是矛盾的,收集全而準(zhǔn)確的性能數(shù)據(jù)通常意味著高的開銷,反之亦然。
本發(fā)明針對剖析工具對收集數(shù)據(jù)準(zhǔn)確性和剖析開銷的矛盾,以及多線程程序開發(fā) 者對多線程程序行為高效動態(tài)剖析的迫切需求與動態(tài)插樁開銷很大的矛盾,提出利用多核 處理器的閑置資源,對動態(tài)插樁后的程序進行分割并行執(zhí)行,從而達到加快程序行為動態(tài) 剖析的目的,同時能平衡數(shù)據(jù)完整準(zhǔn)確性和剖析開銷,使對長時間運行程序進行復(fù)雜剖析 成為可能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種多線程程序行為動態(tài)剖析的并行加速方法,加快了程序 行為剖析速度?!N程序行為動態(tài)剖析的并行加速方法,其步驟為(1)捕獲被分析程序;(2)生成被分析程序的各線程的分片;(3)對各分片進行分析代碼插樁;(4)將插樁后的分片分派到指定處理器核與被分析程序并發(fā)執(zhí)行;(5)對執(zhí)行結(jié)束的分片的執(zhí)行結(jié)果進行歸約處理,依據(jù)歸約處理結(jié)果獲知程序行 為信息。所述步驟O)具體為(21)對被分析程序的各線程分別采樣,并向各線程發(fā)送對應(yīng)采樣信號;(22)線程收到采樣信號后,判斷CPU負載是否小于預(yù)定負載閥值,若是,進入步驟 (23),否則,進入步驟(24);(23)當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)小于預(yù)定分片閥值時,直接生成收到采樣信號的 線程的一個分片,否則,結(jié)束執(zhí)行超時或阻塞的分片,再生成收到采樣信號的線程的一個分 片,進入步驟05);(24)當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)小于預(yù)定閥值時,進入步驟(25),否則,結(jié)束執(zhí)行 超時或處于阻塞狀態(tài)的分片,進入步驟05);(25)返回步驟(22),直到被分析程序結(jié)束。所述預(yù)定分片閥值取值為大于或等于1。所述預(yù)定分片閥值為處理器核數(shù)減去被分析程序的線程數(shù)。本發(fā)明的技術(shù)效果體現(xiàn)在本發(fā)明針對各線程生成分片,將各分片插樁后分派到 指定處理器核與被分析線程并發(fā)執(zhí)行,使得被分析程序的運行不受插樁影響,加快程序動 態(tài)剖析的速度。進一步的,本發(fā)明采用兩階段采樣來驅(qū)動整個系統(tǒng)的插樁和并行化工作。在 第一階段采樣中,當(dāng)采樣條件發(fā)生時插入本發(fā)明方法的檢查代碼;在第二階段采樣中,檢查 代碼檢測第二階段采樣條件,當(dāng)采樣條件滿足時創(chuàng)建分片并對分片插入分析代碼。分片與 被分析程序在多核環(huán)境下并行的執(zhí)行,從而實現(xiàn)分析代碼與被分析程序的解耦和并行化。 對分片依據(jù)根據(jù)采樣信號和CPU負載生成的分片進行插樁而不是原線程進行插樁,其實質(zhì) 是利用多核處理器的閑置資源,對動態(tài)插樁后的程序進行分割并行執(zhí)行,從而達到加快程 序行為動態(tài)剖析的目的,同時能平衡數(shù)據(jù)完整準(zhǔn)確性和剖析開銷,使對長時間運行程序進 行復(fù)雜剖析成為可能。本發(fā)明具有以下特點和優(yōu)點(1)具有較好的擴展性和加速比,以及精確的數(shù)據(jù)采樣和數(shù)據(jù)分析能力,并能直觀地反映評測結(jié)果;(2)能平衡數(shù)據(jù)完整準(zhǔn)確性和剖析開銷, 使對長時間運行程序進行復(fù)雜剖析成為可能;(3)提供易于使用的編程API,用戶使用API 能獲得并行加速和基于硬件計數(shù)器的采樣功能;(4)允許用戶定義自己數(shù)據(jù)處理和分析函 數(shù),對并行加速框架進行擴展。
圖1為本發(fā)明的流程圖;圖2為本發(fā)明的體系結(jié)構(gòu)圖;圖3為本發(fā)明的運行過程示意圖。
具體實施例方式下面結(jié)合附圖和實例對本發(fā)明進行詳細說明。如圖1所示,本發(fā)明方法的步驟為(1)開始(2)系統(tǒng)啟動后,當(dāng)被分析程序準(zhǔn)備執(zhí)行時,監(jiān)控器捕獲到被分析程序開始執(zhí)行事 件,并將client (即待插入的代碼)和自身加載進被分析程序的地址空間,并初始化CPU相 關(guān)信息(例如核心等)、分片調(diào)度和出錯處理策略。(3)初始化采樣策略,并設(shè)定采樣事件、相關(guān)閾值(CPU負載使用當(dāng)前執(zhí)行的線程 數(shù)與CPU核心數(shù)的比值表示,用戶可以指定負載閾值為大于或等于1的一個值,默認負載閾 值為1 ;分片閾值可以為用戶指定,默認設(shè)置為CPU核心數(shù)減去被分析程序的線程數(shù))以及 注冊采樣處理函數(shù),啟動采樣。(4)在接收到第一階段采樣信號時,監(jiān)視器對應(yīng)用程序進行插樁,插入檢查點代碼。(5)當(dāng)檢查點代碼被執(zhí)行時,其執(zhí)行第二階段的采樣。監(jiān)控器根據(jù)CPU的負載和系 統(tǒng)當(dāng)前執(zhí)行的分片數(shù)進行判斷若CPU負載小于預(yù)定負載閥值,當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)小于預(yù)定閥值時,生成 一個分片,對分片進行插樁執(zhí)行。當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)大于或等于預(yù)定分片閥值時,首 先結(jié)束執(zhí)行超時的或一直處于阻塞狀態(tài)的分片,然后再生成一個新的分片;若CPU負載大于或等于預(yù)定負載閥值,當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)小于預(yù)定分片閥 值時,忽略該采樣信號,當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)大于或等于預(yù)定閥值時,結(jié)束執(zhí)行超時的 或一直處于阻塞狀態(tài)的分片。(6)產(chǎn)生分片后,調(diào)度器根據(jù)CPU各處理器核心的利用情況和既定的調(diào)度策略對 分片進行調(diào)度和分派。(7)分片被分派到指定核心后與被分析線程并發(fā)執(zhí)行。當(dāng)分片時間執(zhí)行完時,分片 結(jié)束并根據(jù)用戶定義的歸并處理函數(shù),對分片數(shù)據(jù)進行規(guī)約處理。若分片執(zhí)行過程出現(xiàn)錯 誤,則根據(jù)設(shè)定的策略進行重新執(zhí)行或丟棄分片。(8)重復(fù)步驟(2) - (7),直到被分析程序結(jié)束。(9)當(dāng)被分析程序結(jié)束時,監(jiān)視器捕獲到被分析程序結(jié)束的事件后,釋放相應(yīng)的資 源,真正結(jié)束動態(tài)剖析過程。
實例本發(fā)明的運行過程參考圖3,下面用一個實例來詳細說明(1)資源配置及被分析程序信息在一個四核的Linux系統(tǒng)上,運行一個具有兩個線程的被分析程序。插樁代碼為 基本塊計數(shù)函數(shù),對程序執(zhí)行的基本塊數(shù)目進行統(tǒng)計。(2)初始化在被分析程序準(zhǔn)備執(zhí)行時,監(jiān)控器將插樁代碼和自身加載到被分析程序的地址空 間,執(zhí)行初始化操作。在本實例中,具體初始化了以下信息采樣策略為使用PAPI_T0T_INS 硬件計數(shù)器事件并設(shè)定閾值為5M條指令進采樣;CPU負載=當(dāng)前執(zhí)行的線程數(shù)/CPU核心 數(shù),負載的閥值設(shè)為1 ;分片數(shù)的閥值設(shè)為CPU核心數(shù)減去被分析程序的線程數(shù)。(3)生成分片和執(zhí)行在接收到第一階段采樣信號時,監(jiān)視器對應(yīng)用程序進行插樁,插入本發(fā)明方法的 檢查點代碼。當(dāng)檢查點代碼被執(zhí)行時,其執(zhí)行第二階段的采樣,監(jiān)控器根據(jù)CPU負載和當(dāng)前 分片數(shù),決定是否生成一個分片,并采取和執(zhí)行后續(xù)相關(guān)操作。(4)分片調(diào)度在本實例中,分片調(diào)度策略初始化為采用操作系統(tǒng)的默認調(diào)度策略,也即分片產(chǎn) 生后由操作系統(tǒng)去調(diào)度。(5)并行執(zhí)行與插樁分片與被分析線程并行執(zhí)行,并在執(zhí)行過程中插入基本塊統(tǒng)計代碼。(6)結(jié)果統(tǒng)計分析與輸出在本實例中,直接歸并和匯總各分片的數(shù)據(jù),輸出分析和統(tǒng)計結(jié)果。以上所述,僅為本發(fā)明最佳的具體實現(xiàn)方式,本發(fā)明的實現(xiàn)方法并不局限于此,任 何在本發(fā)明領(lǐng)域內(nèi)不脫離本發(fā)明精神下的改變,都應(yīng)涵蓋在本發(fā)明范圍內(nèi)。
權(quán)利要求
1.一種程序行為動態(tài)剖析的并行加速方法,其步驟為 (1)捕獲被分析程序;(2)生成被分析程序的各線程的分片;(3)對各分片進行分析代碼插樁;(4)將插樁后的分片分派到指定處理器核與被分析程序并發(fā)執(zhí)行;(5)對執(zhí)行結(jié)束的分片的執(zhí)行結(jié)果進行歸約處理,依據(jù)歸約處理結(jié)果獲知程序行為信肩、ο
2.根據(jù)權(quán)利要求1所述的并行加速方法,其特征在于,所述步驟(2)具體為(21)對被分析程序的各線程分別采樣,并向各線程發(fā)送對應(yīng)采樣信號;(22)線程收到采樣信號后,判斷CPU負載是否小于預(yù)定負載閥值,若是,進入步驟 (23),否則,進入步驟(24);(23)當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)小于預(yù)定分片閥值時,直接生成收到采樣信號的線程的 一個分片,否則,結(jié)束執(zhí)行超時或阻塞的分片,再生成收到采樣信號的線程的一個分片,進 入步驟(25);(24)當(dāng)系統(tǒng)當(dāng)前執(zhí)行的分片數(shù)小于預(yù)定閥值時,進入步驟(25),否則,結(jié)束執(zhí)行超時 或處于阻塞狀態(tài)的分片,進入步驟(25);(25)返回步驟(22),直到被分析程序結(jié)束。
3.根據(jù)權(quán)利要求2所述的并行加速方法,其特征在于,所述預(yù)定分片閥值取值為大于 或等于1。
4.根據(jù)權(quán)利要求2所述的并行加速方法,其特征在于,所述預(yù)定分片閥值為處理器核 數(shù)減去被分析程序的線程數(shù)。
全文摘要
本發(fā)明公開了一種程序行為動態(tài)剖析的并行加速方法,首先捕獲被分析程序,依據(jù)資源和負載狀態(tài)生成被分析程序的各線程的分片;然后對各分片進行分析代碼插樁;接著將插樁后的分片分派到指定處理器核與被分析線程并發(fā)執(zhí)行;最后對執(zhí)行結(jié)束的分片的執(zhí)行結(jié)果進行歸約處理,依據(jù)歸約處理結(jié)果獲知程序行為信息。本發(fā)明利用閑置的計算資源收集程序的行為信息,加速了程序的動態(tài)剖析過程。
文檔編號G06F9/46GK102110052SQ20111005092
公開日2011年6月29日 申請日期2011年3月3日 優(yōu)先權(quán)日2011年3月3日
發(fā)明者喻之斌, 張偉富, 涂旭平, 金海 申請人:華中科技大學(xué)