專利名稱:性能剖析方法、剖析工具和計(jì)算機(jī)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種性能剖析方法、剖析工具和計(jì) 算機(jī)系統(tǒng)。
背景技術(shù):
程序在計(jì)算機(jī)系統(tǒng)中運(yùn)行,一般情況下并不知道中央處理器(CentraProcessing Unit ;以下簡稱CPU)資源消耗到什么地方。不知道是哪一段代碼、哪一個(gè)業(yè)務(wù)或者哪一個(gè) 線程消耗了更多的CPU資源,這為系統(tǒng)優(yōu)化帶來了很大的困難。為了解決這個(gè)問題,計(jì)算機(jī) 行業(yè)提出了性能剖析技術(shù),該性能剖析技術(shù)可以分析出系統(tǒng)資源消耗在什么地方。現(xiàn)有的性能剖析技術(shù)主要包括兩類,一類是統(tǒng)計(jì),一類是采樣;雖然可以認(rèn)為統(tǒng)計(jì) 是采樣方法的一種特例,即樣本等于全集,但在工程上,這兩種方法是不同的。但無論是哪 種技術(shù),都依賴CPU本身對剖析指標(biāo)的統(tǒng)計(jì)。具體地,性能剖析技術(shù)通過分析被剖析類別上 發(fā)生的剖析指標(biāo)的變化值(通常是增加值),確定該剖析類別的資源消耗。在具體實(shí)現(xiàn)時(shí),統(tǒng)計(jì)技術(shù)在所有的剖析類別切換點(diǎn)上統(tǒng)計(jì)該類別的資源消耗情 況。舉例來說,假設(shè)對剖析類型“線程”進(jìn)行“運(yùn)行時(shí)間”類別的性能剖析,需要在調(diào)度程序 (線程切換點(diǎn))上增加代碼,統(tǒng)計(jì)每個(gè)線程進(jìn)入調(diào)度和退出調(diào)度的時(shí)刻。但是,發(fā)明人發(fā)現(xiàn) 統(tǒng)計(jì)技術(shù)對性能的消耗太大,很多剖析類型的剖析類別在運(yùn)行過程中都切換得非常頻繁, 反復(fù)進(jìn)入剖析程序?qū)ο到y(tǒng)的影響太大,可能造成剖析結(jié)果完全不可信。而采樣技術(shù)是統(tǒng)計(jì)技術(shù)的改進(jìn),為了減少剖析程序運(yùn)行的頻度,采樣技術(shù)讓CPU 在某個(gè)剖析指標(biāo)累計(jì)達(dá)到特定值的時(shí)候產(chǎn)生一次中斷,之后累計(jì)值會清零,這個(gè)過程稱為 一次“溢出”。剖析程序在中斷處理程序中執(zhí)行,統(tǒng)計(jì)這一次采樣過程中,是哪一個(gè)剖析類別 在占據(jù)CPU資源,從而得到所有剖析類別占用資源的一個(gè)樣本,通過這個(gè)樣本中各剖析類 別的資源占用情況,可以估計(jì)整個(gè)運(yùn)行過程中各剖析類別的占用情況。但是,發(fā)明人發(fā)現(xiàn) 采樣技術(shù)只能用操作系統(tǒng)內(nèi)部的信息,例如線程等作為剖析指標(biāo)進(jìn)行剖析。但剖析程序無 法獲知程序所運(yùn)行的業(yè)務(wù)狀態(tài),因此采樣技術(shù)無法采用業(yè)務(wù)狀態(tài)作為剖析指標(biāo)進(jìn)行剖析。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種性能剖析方法、剖析工具和計(jì)算機(jī)系統(tǒng),以實(shí)現(xiàn)以業(yè)務(wù)類 別作為剖析類別對待剖析應(yīng)用程序進(jìn)行性能剖析。本發(fā)明實(shí)施例提供一種性能剖析方法,包括當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器傳遞的線程專有存儲 鍵值,所述線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;所述剖析程序模塊根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng) 用程序的運(yùn)行信息。本發(fā)明實(shí)施例還提供一種剖析工具,包括業(yè)務(wù)類別傳遞器,用于從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程專有存儲鍵值,所述線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè) 務(wù)類別;剖析程序模塊,用于在進(jìn)入性能溢出中斷時(shí),接收所述業(yè)務(wù)類別傳遞器傳遞的所 述線程專有存儲鍵值,根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程 序的運(yùn)行信息。本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)系統(tǒng),包括硬件平臺和運(yùn)行在所述硬件平臺上 的操作系統(tǒng),所述操作系統(tǒng)之上運(yùn)行有至少一種待剖析應(yīng)用程序,以及,所述計(jì)算機(jī)系統(tǒng)進(jìn) 一步包括剖析工具,其中所述待剖析應(yīng)用程序,用于在開始處理業(yè)務(wù)時(shí),將所述業(yè)務(wù)的業(yè)務(wù)類別對應(yīng)的線 程專有存儲鍵值記錄在執(zhí)行所述業(yè)務(wù)的線程的線程專有存儲的指定變量中,所述線程專有 存儲鍵值用于表示所述待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;所述剖析工具,用于在進(jìn)入性能溢出中斷時(shí),從所述線程專有存儲的指定變量中 獲取所述線程專有存儲鍵值,根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析 應(yīng)用程序的運(yùn)行信息。本發(fā)明實(shí)施例還提供一種性能剖析方法,包括從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程專有存儲鍵值,所 述線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信 肩、ο通過本發(fā)明實(shí)施例,當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器 傳遞的線程專有存儲鍵值,該線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù) 的業(yè)務(wù)類別;剖析程序模塊可以根據(jù)所述業(yè)務(wù)類別傳遞器傳遞的線程專有存儲鍵值作為剖 析類別(這里的剖析類別可以理解為對系統(tǒng)進(jìn)行性能剖析的一種剖析指標(biāo)),統(tǒng)計(jì)待剖析 應(yīng)用程序的運(yùn)行信息;從而可以實(shí)現(xiàn)剖析程序模塊以業(yè)務(wù)類別作為剖析類別對待剖析應(yīng)用 程序進(jìn)行性能剖析,進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降低哪種類型的業(yè)務(wù)來降低系統(tǒng)的執(zhí) 行壓力。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā) 明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根 據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明性能剖析方法一個(gè)實(shí)施例的流程圖;圖2為本發(fā)明性能剖析結(jié)果一個(gè)實(shí)施例的示意圖;圖3a為本發(fā)明性能剖析結(jié)果另一個(gè)實(shí)施例的示意圖;圖北為現(xiàn)有技術(shù)一種性能剖析結(jié)果的示意圖;圖4為本發(fā)明性能剖析方法另一個(gè)實(shí)施例的流程圖;圖5為本發(fā)明剖析工具一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;圖6為本發(fā)明剖析工具另一個(gè)實(shí)施例的結(jié)構(gòu)示意圖7為本發(fā)明計(jì)算機(jī)系統(tǒng)一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。圖1為本發(fā)明性能剖析方法一個(gè)實(shí)施例的流程圖,如圖1所示,該性能剖析方法可 以包括步驟101,當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器傳遞的線 程專有存儲鍵值,該線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類 別。本實(shí)施例中,待剖析應(yīng)用程序在開始處理某個(gè)業(yè)務(wù)類別的業(yè)務(wù)時(shí),在線程專有存 儲(Thread Local Storage ;以下簡稱TLS)中,可以為當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別設(shè)置線 程專有存儲鍵值,該線程專有存儲鍵值可以為數(shù)字、字母或字符串等可以唯一標(biāo)識業(yè)務(wù)類 別的信息。然后,待剖析應(yīng)用程序可以將設(shè)置好的線程專有存儲鍵值記錄在執(zhí)行當(dāng)前業(yè)務(wù) 的線程的TLS的指定變量中。具體地,待剖析應(yīng)用程序?yàn)楫?dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別設(shè)置線程專有存儲鍵值的 一個(gè)示例如下msg = get_msg_from_queue () ;#從消息隊(duì)列中獲得當(dāng)前要處理的消息set_tls( "service", msg- > service_type);msg_handler[msg- > type]- > handler(msg);set_tls( "service", NONE_SERVICE_TYPE);當(dāng)然這只是本發(fā)明的一個(gè)示例,本發(fā)明實(shí)施例并不僅限于此,本發(fā)明實(shí)施例對待 剖析應(yīng)用程序?yàn)楫?dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別設(shè)置線程專有存儲鍵值的方式不作限定,只要 設(shè)置的線程專有存儲鍵值可以唯一標(biāo)識業(yè)務(wù)類別即可。然后,在剖析程序模塊進(jìn)入性能溢出中斷之前,業(yè)務(wù)類別傳遞器可以從TLS的指 定變量中獲取上述線程專有存儲鍵值,當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),業(yè)務(wù)類別傳 遞器可以將獲取的線程專有存儲鍵值發(fā)送給剖析程序模塊。優(yōu)選地,當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),業(yè)務(wù)類別傳遞器可以在接收到剖 析程序模塊的請求之后,將獲取的線程專有存儲鍵值發(fā)送給剖析程序模塊。步驟102,剖析程序模塊根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用 程序的運(yùn)行信息。這里的剖析類別可以理解為一種剖析指標(biāo),也就是說本實(shí)施例中可以業(yè)務(wù)類別作 為一種剖析指標(biāo),對待剖析應(yīng)用程序的運(yùn)行信息進(jìn)行統(tǒng)計(jì)。本實(shí)施例中,剖析程序模塊統(tǒng)計(jì)的待剖析應(yīng)用程序的運(yùn)行信息可以包括以下之一 或組合(1)加電事件(GL0BAL_P0WER_EVENTS);(2)分支退出(BRANCH_RETIRED);
(3)預(yù)測失敗的分支退出(MISPRED_BRANCH_RETIRED);(4)分支處理單元獲取請求(Branch Processing Unit Fetch Request;以下簡 稱BPU_FETCH_REQUEST);(5)指令查找緩沖索引的次數(shù)(ITLB_REFERENCE);(6)內(nèi)存操作取消的次數(shù)(MEM0RY_CANCEL);(7)內(nèi)存操作完成的次數(shù)(MEM0RY_C0MPLETE)。進(jìn)一步地,剖析程序模塊可以將統(tǒng)計(jì)的運(yùn)行信息寫入剖析數(shù)據(jù)庫中。最終,用戶可 以在剖析數(shù)據(jù)庫中獲得以業(yè)務(wù)類別為分類的性能剖析結(jié)果。在一種實(shí)現(xiàn)方式下,本實(shí)施例中,剖析程序模塊根據(jù)線程專有存儲鍵值作為剖析 類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信息可以為接收到剖析程序控制器的啟動(dòng)命令之后,剖 析程序模塊根據(jù)線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信息;剖析程序模塊根據(jù)線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行 信息之后,如果剖析程序模塊接收到剖析程序控制器的停止命令,則剖析程序模塊停止執(zhí) 行根據(jù)線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信息的步驟。本實(shí)施例中,以業(yè)務(wù)類別為分類的性能剖析結(jié)果可以如圖2或圖3a所示,圖2為 本發(fā)明性能剖析結(jié)果一個(gè)實(shí)施例的示意圖,圖3a為本發(fā)明性能剖析結(jié)果另一個(gè)實(shí)施例的 示意圖。圖北為現(xiàn)有技術(shù)一種性能剖析結(jié)果的示意圖。通過對比可知,通過本發(fā)明實(shí)施例, 用戶可以更容易發(fā)現(xiàn)系統(tǒng)具體消耗在什么類型的業(yè)務(wù)上了。上述實(shí)施例中,當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器傳遞 的線程專有存儲鍵值,該線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè) 務(wù)類別;然后,剖析程序模塊可以根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用 程序的運(yùn)行信息;從而可以實(shí)現(xiàn)剖析程序模塊以業(yè)務(wù)類別作為剖析類別對待剖析應(yīng)用程序 進(jìn)行性能剖析(例如分析業(yè)務(wù)的CPU占有率等指標(biāo)),進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降 低哪種類型的業(yè)務(wù)來降低系統(tǒng)的執(zhí)行壓力。圖4為本發(fā)明性能剖析方法另一個(gè)實(shí)施例的流程圖,如圖4所示,該性能剖析方法 可以包括步驟401,從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程專有存 儲鍵值,該線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別。本實(shí)施例中,從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程專有 存儲鍵值可以為在進(jìn)入性能溢出中斷時(shí),從線程專有存儲的指定變量中獲取上述線程專 有存儲鍵值。步驟402,根據(jù)線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信 肩、ο這里的剖析類別可以理解為一種剖析指標(biāo),也就是說本實(shí)施例中可以業(yè)務(wù)類別作 為一種剖析指標(biāo),對待剖析應(yīng)用程序的運(yùn)行信息進(jìn)行統(tǒng)計(jì)。本實(shí)施例中,待剖析應(yīng)用程序的運(yùn)行信息可以包括以下之一或組合(1)加電事件(GL0BAL_P0WER_EVENTS);(2)分支退出(BRANCH_RETIRED);(3)預(yù)測失敗的分支退出(MISPRED_BRANCH_RETIRED);
(4)分支處理單元獲取請求(BPU_FETCH_REQUEST);(5)指令查找緩沖索引的次數(shù)(ITLB_REFERENCE);(6)內(nèi)存操作取消的次數(shù)(MEM0RY_CANCEL);(7)內(nèi)存操作完成的次數(shù)(MEM0RY_C0MPLETE)。上述實(shí)施例可以實(shí)現(xiàn)以業(yè)務(wù)類別作為剖析類別對待剖析應(yīng)用程序進(jìn)行性能剖析 (例如分析業(yè)務(wù)的CPU占有率等指標(biāo)),進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降低哪種類型的 業(yè)務(wù)來降低系統(tǒng)的執(zhí)行壓力。圖5為本發(fā)明剖析工具一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,本實(shí)施例中的剖析工具可以實(shí) 現(xiàn)本發(fā)明圖1所示實(shí)施例的流程,如圖5所示,該剖析工具可以包括業(yè)務(wù)類別傳遞器51,用于從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲 取線程專有存儲鍵值,該線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè) 務(wù)類別;剖析程序模塊52,用于在進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器51傳遞的線 程專有存儲鍵值,根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信 肩、ο上述實(shí)施例中,業(yè)務(wù)類別傳遞器51可以從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲 的指定變量中獲取線程專有存儲鍵值,該線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前 處理的業(yè)務(wù)的業(yè)務(wù)類別,當(dāng)剖析程序模塊52進(jìn)入性能溢出中斷時(shí),可以接收業(yè)務(wù)類別傳遞 器51傳遞的線程專有存儲鍵值,然后,剖析程序模塊52可以根據(jù)該線程專有存儲鍵值作為 剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信息;從而可以實(shí)現(xiàn)剖析程序模塊52以業(yè)務(wù)類別作 為剖析類別對待剖析應(yīng)用程序進(jìn)行性能剖析,進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降低哪種類 型的業(yè)務(wù)來降低系統(tǒng)的執(zhí)行壓力。圖6為本發(fā)明剖析工具另一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,與圖5所示的剖析工具相比, 不同之處在于,圖6所示的剖析工具還可以包括剖析程序控制器53,用于在待剖析應(yīng)用程序根據(jù)當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別設(shè) 置所述線程專有存儲鍵值,并記錄在執(zhí)行所述業(yè)務(wù)的線程的線程專有存儲的指定變量中之 后,通知業(yè)務(wù)類別傳遞器51獲取上述線程專有存儲鍵值;然后,剖析程序控制器53還可以向剖析程序模塊52發(fā)送啟動(dòng)命令,以指示剖析程 序模塊52在進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器51傳遞的上述線程專有存儲鍵值, 根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行信息;接下來,剖析程序控制器53還可以向剖析程序模塊52發(fā)送停止命令,以指示剖析 程序模塊52停止執(zhí)行根據(jù)線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行 信息的步驟。剖析數(shù)據(jù)庫M,用于保存剖析程序模塊52統(tǒng)計(jì)的待剖析應(yīng)用程序的運(yùn)行信息。這 里的運(yùn)行信息可以理解為性能剖析結(jié)果。本實(shí)施例中,上述運(yùn)行信息可以包括以下之一或 組合(1)加電事件(GL0BAL_P0WER_EVENTS);(2)分支退出(BRANCH_RETIRED);(3)預(yù)測失敗的分支退出(MISPRED_BRANCH_RETIRED);
(4)分支處理單元獲取請求(BPU_FETCH_REQUEST);(5)指令查找緩沖索引的次數(shù)(ITLB_REFERENCE);(6)內(nèi)存操作取消的次數(shù)(MEM0RY_CANCEL);(7)內(nèi)存操作完成的次數(shù)(MEM0RY_C0MPLETE)。上述剖析工具可以實(shí)現(xiàn)以業(yè)務(wù)類別作為剖析類別對待剖析應(yīng)用程序進(jìn)行性能剖 析,進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降低哪種類型的業(yè)務(wù)來降低系統(tǒng)的執(zhí)行壓力。在一種實(shí)現(xiàn)方式下,本發(fā)明實(shí)施例的剖析工具還可以包括人機(jī)接口單元(圖中未 示出),用于展示剖析程序模塊52統(tǒng)計(jì)出的待剖析應(yīng)用程序的運(yùn)行信息。圖7為本發(fā)明計(jì)算機(jī)系統(tǒng)一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,如圖7所示,該計(jì)算機(jī)系統(tǒng)可 以包括硬件平臺71和運(yùn)行在該硬件平臺71上的操作系統(tǒng)72,該操作系統(tǒng)72之上運(yùn)行有至 少一種待剖析應(yīng)用程序73,以及,該計(jì)算機(jī)系統(tǒng)進(jìn)一步可以包括剖析工具74,其中待剖析應(yīng)用程序73,用于在開始處理業(yè)務(wù)時(shí),將該業(yè)務(wù)的業(yè)務(wù)類別對應(yīng)的線程專 有存儲鍵值記錄在執(zhí)行業(yè)務(wù)的線程的線程專有存儲的指定變量中,該線程專有存儲鍵值用 于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;剖析工具74,用于在進(jìn)入性能溢出中斷時(shí),從線程專有存儲的指定變量中獲取上 述線程專有存儲鍵值,根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn) 行信息。具體地,本實(shí)施例中的剖析工具74可以通過本發(fā)明圖6或圖5所示實(shí)施例的剖析 工具實(shí)現(xiàn),可以包括業(yè)務(wù)類別傳遞器741,用于從執(zhí)行業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取 線程專有存儲鍵值;需要說明的是,在一種實(shí)現(xiàn)方式下,業(yè)務(wù)類別傳遞器741運(yùn)行/部署在 操作系統(tǒng)72上,業(yè)務(wù)類別傳遞器741的作用在于使運(yùn)行在操作系統(tǒng)72中的剖析程序可以 感知被運(yùn)行在操作系統(tǒng)72上的應(yīng)用程序的業(yè)務(wù)類別。剖析程序模塊742,用于在進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器741傳遞的 線程專有存儲鍵值,根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序的運(yùn)行 信息;需要說明的是,這里的剖析程序模塊742可以理解為剖析程序,在一種實(shí)現(xiàn)方式下, 剖析程序可以運(yùn)行在操作系統(tǒng)72中;在另一種實(shí)現(xiàn)方式下,剖析程序可以運(yùn)行在操作系統(tǒng) 72之上。剖析數(shù)據(jù)庫743,用于保存剖析程序模塊742統(tǒng)計(jì)的待剖析應(yīng)用程序的運(yùn)行信息;剖析程序控制器744,用于在待剖析應(yīng)用程序73根據(jù)當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別 設(shè)置所述線程專有存儲鍵值,并記錄在執(zhí)行所述業(yè)務(wù)的線程的線程專有存儲的指定變量中 之后,通知業(yè)務(wù)類別傳遞器741獲取上述線程專有存儲鍵值;然后,剖析程序控制器744還可以向剖析程序模塊742發(fā)送啟動(dòng)命令,以指示剖析 程序模塊742在進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器741傳遞的上述線程專有存儲 鍵值,根據(jù)該線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序73的運(yùn)行信息;接下來,剖析程序控制器744還可以向剖析程序模塊742發(fā)送停止命令,以指示剖 析程序模塊742停止執(zhí)行根據(jù)線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)待剖析應(yīng)用程序73的 運(yùn)行信息的步驟。。綜上所述,本發(fā)明實(shí)施例的計(jì)算機(jī)系統(tǒng)中,剖析工具74在進(jìn)入性能溢出中斷時(shí),從線程專有存儲的指定變量中獲取上述線程專有存儲鍵值,根據(jù)該線程專有存儲鍵值作為 剖析類別,(這里的剖析類別可以理解為對系統(tǒng)進(jìn)行性能剖析的一種剖析指標(biāo)),統(tǒng)計(jì)待剖 析應(yīng)用程序的運(yùn)行信息;從而可以實(shí)現(xiàn)以業(yè)務(wù)類別作為剖析類別對待剖析應(yīng)用程序進(jìn)行性 能剖析,進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降低哪種類型的業(yè)務(wù)來降低系統(tǒng)的執(zhí)行壓力。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,附圖中的模塊或流 程并不一定是實(shí)施本發(fā)明所必須的。本領(lǐng)域技術(shù)人員可以理解實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述進(jìn)行分 布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上 述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁 碟、光盤、只讀存儲記憶體(Read-OnlyMemory ;以下簡稱R0M)或隨機(jī)存儲記憶體(Random Access Memory ;以下簡稱RAM)等。最后應(yīng)說明的是以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡 管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然 可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替 換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精 神和范圍。
權(quán)利要求
1.一種性能剖析方法,其特征在于,包括當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器傳遞的線程專有存儲鍵 值,所述線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;所述剖析程序模塊根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程 序的運(yùn)行信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述線程專有存儲鍵值是所述待剖析應(yīng) 用程序根據(jù)當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別設(shè)置,并記錄在執(zhí)行所述業(yè)務(wù)的線程的線程專有存 儲的指定變量中的,由所述業(yè)務(wù)類別傳遞器在所述剖析程序模塊進(jìn)入性能溢出中斷之前, 從所述線程專有存儲的指定變量中獲取的。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行 信息之后,還包括所述剖析程序模塊將統(tǒng)計(jì)的運(yùn)行信息寫入剖析數(shù)據(jù)庫中。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述待剖析應(yīng)用程序的運(yùn)行信息包 括加電事件、分支退出、預(yù)測失敗的分支退出、分支處理單元獲取請求、指令查找緩沖索引 的次數(shù)、內(nèi)存操作取消的次數(shù)和內(nèi)存操作完成的次數(shù)中的至少一種。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述剖析程序模塊根據(jù)所述線程專有存 儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息包括接收到剖析程序控制器的啟動(dòng)命令之后,所述剖析程序模塊根據(jù)所述線程專有存儲鍵 值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息;所述剖析程序模塊根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程 序的運(yùn)行信息之后,所述方法還包括接收到所述剖析程序控制器的停止命令之后,所述剖析程序模塊停止執(zhí)行所述根據(jù)所 述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息的步驟。
6.一種剖析工具,其特征在于,包括業(yè)務(wù)類別傳遞器,用于從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程 專有存儲鍵值,所述線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類 別;剖析程序模塊,用于在進(jìn)入性能溢出中斷時(shí),接收所述業(yè)務(wù)類別傳遞器傳遞的所述線 程專有存儲鍵值,根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的 運(yùn)行信息。
7.根據(jù)權(quán)利要求6所述的剖析工具,其特征在于,還包括剖析程序控制器,用于在所述待剖析應(yīng)用程序根據(jù)當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別設(shè)置所 述線程專有存儲鍵值,并記錄在執(zhí)行所述業(yè)務(wù)的線程的線程專有存儲的指定變量中之后, 通知所述業(yè)務(wù)類別傳遞器獲取所述線程專有存儲鍵值;所述剖析程序控制器,還用于向所述剖析程序模塊發(fā)送啟動(dòng)命令,以指示所述剖析程 序模塊在進(jìn)入性能溢出中斷時(shí),接收所述業(yè)務(wù)類別傳遞器傳遞的所述線程專有存儲鍵值, 根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息;所述剖析程序控制器,還用于向所述剖析程序模塊發(fā)送停止命令,以指示所述剖析程 序模塊停止執(zhí)行所述根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息的步驟。
8.根據(jù)權(quán)利要求6所述的剖析工具,其特征在于,還包括剖析數(shù)據(jù)庫,用于保存所述剖析程序模塊統(tǒng)計(jì)的所述待剖析應(yīng)用程序的運(yùn)行信息。
9.一種計(jì)算機(jī)系統(tǒng),其特征在于,包括硬件平臺和運(yùn)行在所述硬件平臺上的操作系 統(tǒng),所述操作系統(tǒng)之上運(yùn)行有至少一種待剖析應(yīng)用程序,以及,所述計(jì)算機(jī)系統(tǒng)進(jìn)一步包括 剖析工具,其中所述待剖析應(yīng)用程序,用于在開始處理業(yè)務(wù)時(shí),將所述業(yè)務(wù)的業(yè)務(wù)類別對應(yīng)的線程專 有存儲鍵值記錄在執(zhí)行所述業(yè)務(wù)的線程的線程專有存儲的指定變量中,所述線程專有存儲 鍵值用于表示所述待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;所述剖析工具,用于在進(jìn)入性能溢出中斷時(shí),從所述線程專有存儲的指定變量中獲取 所述線程專有存儲鍵值,根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用 程序的運(yùn)行信息。
10.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述剖析工具包括業(yè)務(wù)類別傳遞器,用于從執(zhí)行所述業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程 專有存儲鍵值;剖析程序模塊,用于在進(jìn)入性能溢出中斷時(shí),接收所述業(yè)務(wù)類別傳遞器傳遞的所述線 程專有存儲鍵值,根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的 運(yùn)行信息。
11.一種性能剖析方法,其特征在于,包括從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專有存儲的指定變量中獲取線程專有存儲鍵值,所述線 程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述從執(zhí)行當(dāng)前業(yè)務(wù)的線程的線程專 有存儲的指定變量中獲取線程專有存儲鍵值包括在進(jìn)入性能溢出中斷時(shí),從所述線程專有存儲的指定變量中獲取所述線程專有存儲鍵值。
13.根據(jù)權(quán)利要求11或12所述的方法,其特征在于,所述待剖析應(yīng)用程序的運(yùn)行信息 包括加電事件、分支退出、預(yù)測失敗的分支退出、分支處理單元獲取請求、指令查找緩沖索 引的次數(shù)、內(nèi)存操作取消的次數(shù)和內(nèi)存操作完成的次數(shù)中的至少一種。
全文摘要
本發(fā)明實(shí)施例提供一種性能剖析方法、剖析工具和計(jì)算機(jī)系統(tǒng),所述性能剖析方法包括當(dāng)剖析程序模塊進(jìn)入性能溢出中斷時(shí),接收業(yè)務(wù)類別傳遞器傳遞的線程專有存儲鍵值,所述線程專有存儲鍵值用于表示待剖析應(yīng)用程序當(dāng)前處理的業(yè)務(wù)的業(yè)務(wù)類別;所述剖析程序模塊根據(jù)所述線程專有存儲鍵值作為剖析類別,統(tǒng)計(jì)所述待剖析應(yīng)用程序的運(yùn)行信息。本發(fā)明實(shí)施例可以實(shí)現(xiàn)剖析程序模塊以業(yè)務(wù)類別作為剖析類別對待剖析應(yīng)用程序進(jìn)行性能剖析,進(jìn)而可以指導(dǎo)系統(tǒng)的使用者通過降低哪種類型的業(yè)務(wù)來降低系統(tǒng)的執(zhí)行壓力。
文檔編號G06F11/34GK102073580SQ201110034429
公開日2011年5月25日 申請日期2011年2月1日 優(yōu)先權(quán)日2011年2月1日
發(fā)明者李國柱 申請人:華為技術(shù)有限公司