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