本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種CPU占用率檢測方法及裝置。
背景技術(shù):
在嵌入式系統(tǒng)和其它對實時性和性能要求較高的操作系統(tǒng)領(lǐng)域,CPU(Central Processing Unit,中央處理器)占用率是評估系統(tǒng),特別是系統(tǒng)性能和實時性評估的關(guān)鍵指標,例如,在Linux系統(tǒng)中,CPU占用率是系統(tǒng)性能監(jiān)控,性能調(diào)優(yōu)以及故障定位等不可或缺的基礎(chǔ)數(shù)據(jù)。
標準Linux系統(tǒng)CPU占用率的檢測是基于時鐘采樣方式統(tǒng)計系統(tǒng)和任務(wù)的執(zhí)行時間完成的。但是,現(xiàn)有技術(shù)在進行前述執(zhí)行時間的統(tǒng)計時,會受到中斷的影響,導(dǎo)致統(tǒng)計的執(zhí)行時間不準確,進而導(dǎo)致檢測CPU占用率的精度較差。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于提供一種CPU占用率檢測方法及裝置,旨在提高檢測CPU占用率的精確度。
為實現(xiàn)上述目的,本發(fā)明提供一種CPU占用率檢測方法,所述CPU占用率檢測方法包括:
獲取當前檢測周期內(nèi)預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長以及第一中斷時長;
在獲取到所述第一執(zhí)行時長以及第一中斷時長時,將所述第一執(zhí)行時長和所述第一中斷時長的差值,作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長;
獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二實際執(zhí)行時長,并基于所述第一實際執(zhí)行時長、所述第二實際執(zhí)行時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
優(yōu)選地,所述獲取當前檢測周期內(nèi)預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長以及 第一中斷時長的步驟包括:
在當前檢測周期內(nèi),基于所述預(yù)設(shè)任務(wù)每次切入所述CPU以及每次切出所述CPU的時間點計算所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長,將當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一執(zhí)行時長;
基于所述預(yù)設(shè)任務(wù)每次到中斷例程的入口以及每次中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點計算中斷例程的每次執(zhí)行時長,將當前檢測周期內(nèi)中斷例程的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一中斷時長。
優(yōu)選地,各時間點通過讀取所述CPU的時間戳計數(shù)器記錄。
優(yōu)選地,所述在獲取到所述第一執(zhí)行時長以及第一中斷時長時,將所述第一執(zhí)行時長和所述第一中斷時長的差值,作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長的步驟之后,還包括:
獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二執(zhí)行時長以及第二中斷時長;
基于所述第一中斷時長、第二中斷時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率。
優(yōu)選地,所述基于所述第一中斷時長、第二中斷時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率的步驟之后,還包括:
累加各所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率,并將累加的結(jié)果作為中斷例程在所述CPU的執(zhí)行占用率。
此外,為實現(xiàn)上述目的,本發(fā)明還提供一種CPU占用率檢測裝置,所述CPU占用率檢測裝置包括:
獲取模塊,用于獲取當前檢測周期內(nèi)預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長以及第一中斷時長;
計算模塊,用于在獲取到所述第一執(zhí)行時長以及第一中斷時長時,將所述第一執(zhí)行時長和所述第一中斷時長的差值,作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長;
所述計算模塊還用于獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二實際執(zhí)行時長,并基于所述第一實際執(zhí)行時長、所述第二實際執(zhí)行時長 以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
優(yōu)選地,所述獲取模塊還用于在當前檢測周期內(nèi),基于所述預(yù)設(shè)任務(wù)每次切入所述CPU以及每次切出所述CPU的時間點計算所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長,將當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一執(zhí)行時長;以及基于所述預(yù)設(shè)任務(wù)每次到中斷例程的入口以及每次中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點計算中斷例程的每次執(zhí)行時長,將當前檢測周期內(nèi)中斷例程的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一中斷時長。
優(yōu)選地,各時間點通過讀取所述CPU的時間戳計數(shù)器記錄。
優(yōu)選地,所述獲取模塊還用于獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二執(zhí)行時長以及第二中斷時長;
所述計算模塊還用于基于所述第一中斷時長、第二中斷時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率。
優(yōu)選地,所述計算模塊還用于累加各所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率,并將累加的結(jié)果作為中斷例程在所述CPU的執(zhí)行占用率。
本發(fā)明通過分別對待檢測任務(wù)在兩個檢測周期內(nèi)在CPU的實際執(zhí)行時長進行統(tǒng)計,剔除了CPU因執(zhí)行中斷例程而導(dǎo)致的執(zhí)行時長誤差,并進一步基于統(tǒng)計的實際執(zhí)行時長以及檢測周期,計算所述預(yù)設(shè)任務(wù)在CPU的執(zhí)行占用率。相較于現(xiàn)有技術(shù),本發(fā)明能夠提高檢測CPU占用率的精確度。
附圖說明
圖1為本發(fā)明CPU占用率檢測方法第一實施例的流程示意圖;
圖2為本發(fā)明CPU占用率檢測裝置第一實施例的功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種CPU占用率檢測方法,參照圖1,在本發(fā)明CPU占用率檢測方法的第一實施例中,所述CPU占用率檢測方法包括:
S10,獲取當前檢測周期內(nèi)預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長以及第一中斷時長;
本實施例提供的CPU占用率檢測方法可以應(yīng)用于Linux系統(tǒng)中,例如,可用于精確檢測預(yù)設(shè)任務(wù)在CPU的執(zhí)行占用率。以下以本CPU占用率檢測方法應(yīng)用于Linux系統(tǒng)進行說明。
本實施例中,所述檢測周期是預(yù)先設(shè)置的,用于周期性的測量與CPU相關(guān)的各種占用率。需要說明的是,在Linux系統(tǒng)中,CPU占用率分為系統(tǒng)級(CPU級)和任務(wù)級(進程/線程級)的占用率檢測。其中,系統(tǒng)級占用率檢測是指每CPU的占用率情況,常見的系統(tǒng)級占用率統(tǒng)計的時間構(gòu)成包括每CPU的空閑時間,用戶態(tài)運行時間,內(nèi)核態(tài)運行時間,I/O等待時間,軟中斷和硬中斷執(zhí)行時間;任務(wù)(進程/線程)級占用率檢測是指進程/線程在CPU的執(zhí)行占用率。本實施例主要以任務(wù)級CPU占用率的檢測進行說明。
具體地,在當前檢測周期到達時,獲取所述預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長,即所述CPU在檢測周期內(nèi)執(zhí)行所述預(yù)設(shè)任務(wù)的執(zhí)行時間長度。本領(lǐng)域技術(shù)人員可以理解的是,CPU在執(zhí)行任務(wù)的過程中,當中斷到達時,CPU會暫停正在執(zhí)行的任務(wù),而跳轉(zhuǎn)去執(zhí)行相應(yīng)的中斷例程,在中斷例程執(zhí)行完成后,再跳轉(zhuǎn)至任務(wù)繼續(xù)執(zhí)行,導(dǎo)致任務(wù)的執(zhí)行時長中疊加了中斷例程的執(zhí)行時長,影響任務(wù)在CPU的執(zhí)行占用率檢測。有鑒于此,本實施例還獲取所述預(yù)設(shè)任務(wù)在所述CPU的第一中斷時長,即所述CPU在檢測周期內(nèi)因執(zhí)行中斷例程而暫停執(zhí)行所述預(yù)設(shè)任務(wù)的時間長度。其中,所述預(yù)設(shè)任務(wù)可以是任何可以被CPU執(zhí)行的任務(wù),包括工作任務(wù)和空閑任務(wù)。當所述預(yù)設(shè)任務(wù)為工作任務(wù)時,對應(yīng)任務(wù)級CPU占用率的檢測;當所述預(yù)設(shè)任務(wù)為空閑任務(wù)時,對應(yīng)系統(tǒng)級CPU占用率的檢測。
S20,在獲取到所述第一執(zhí)行時長以及第一中斷時長時,將所述第一執(zhí)行時長和所述第一中斷時長的差值,作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長;
基于前述技術(shù)方案的描述,本領(lǐng)域技術(shù)人員容易理解的是,所述第一執(zhí)行時長減去所述第一中斷時長的差值即為所述預(yù)設(shè)任務(wù)在檢測周期內(nèi)被所述 CPU實際執(zhí)行的時長,將其作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長。需要說明的是,在執(zhí)行所述第一執(zhí)行時長與所述第一中斷時長的相減操作時,將相減結(jié)果的絕對值作為所述第一執(zhí)行時長與所述第一中斷時長的差值。
S30,獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二實際執(zhí)行時長,并基于所述第一實際執(zhí)行時長、所述第二實際執(zhí)行時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
本實施例中,獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二實際執(zhí)行時長可參照前述技術(shù)方案施行,此處不再贅述。
在獲取到所述第一實際執(zhí)行時長以及所述第二實際執(zhí)行時長之后,將所述第一實際執(zhí)行時長與所述第二實際執(zhí)行時長的差值(取絕對值)作為所述預(yù)設(shè)任務(wù)在當前檢測周期內(nèi)在所述CPU的實際執(zhí)行時長,并將所述實際執(zhí)行時長與檢測周期的比值作為所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
進一步地,在本實施例中,上述步驟S30之后,還包括:
顯示所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
容易理解的是,進行CPU占用率檢測的目的在于,提供系統(tǒng)性能監(jiān)控、性能調(diào)優(yōu)以及故障定位等不可或缺的基礎(chǔ)數(shù)據(jù),本實施例中,在計算出所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率后,顯示所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率,以供用戶進行相應(yīng)的操作。
本實施例提出的CPU占用率檢測方法,通過分別對待檢測任務(wù)在兩個檢測周期內(nèi)在CPU的實際執(zhí)行時長進行統(tǒng)計,剔除了CPU因執(zhí)行中斷例程而導(dǎo)致的執(zhí)行時長誤差,并進一步基于統(tǒng)計的實際執(zhí)行時長以及檢測周期,計算所述預(yù)設(shè)任務(wù)在CPU的執(zhí)行占用率。相較于現(xiàn)有技術(shù),本發(fā)明能夠提高檢測CPU占用率的精確度。
進一步地,基于第一實施例,提出本發(fā)明CPU占用率檢測方法的第二實施例,在本實施例中,步驟S10包括:
在當前檢測周期內(nèi),基于所述預(yù)設(shè)任務(wù)每次切入所述CPU以及每次切出所述CPU的時間點計算所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長,將當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一執(zhí)行時 長;
基于所述預(yù)設(shè)任務(wù)每次到中斷例程的入口以及每次中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點計算中斷例程的每次執(zhí)行時長,將當前檢測周期內(nèi)中斷例程的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一中斷時長。
需要說明的是,在本實施例中,各時間點的記錄是通過讀取所述CPU的時間戳計數(shù)器(Time Stamp Counter,TSC)記錄的。其中,TSC是CPU中的一個計數(shù)器,它記錄自CPU啟動以來消耗的時鐘周期數(shù)。TSC提供了非常高的計時精度,TSC記錄的時鐘周期數(shù)可以被轉(zhuǎn)化為秒,方法是將其除以CPU的主頻。例如,目前主流CPU的主頻為1.5-3.5GHz,其TSC的精度可達納秒級。
具體地,在當前檢測周期內(nèi),偵測到預(yù)設(shè)任務(wù)切入到CPU執(zhí)行時,記錄切入時間點,偵測到所述預(yù)設(shè)任務(wù)切出所述CPU時,記錄切出時間點,相鄰的所述切入時間點和所述切出時間點的差值即為所述預(yù)設(shè)任務(wù)的一次執(zhí)行時長,將所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一執(zhí)行時長,即所述預(yù)設(shè)任務(wù)在當前檢測周期內(nèi),切入CPU的總執(zhí)行時長。本領(lǐng)域技術(shù)人員可以理解的是,在CPU執(zhí)行任務(wù)的過程中,當中斷到達時,CPU會暫停正在執(zhí)行的任務(wù),而跳轉(zhuǎn)去執(zhí)行相應(yīng)的中斷例程,在中斷例程執(zhí)行完成后,再跳轉(zhuǎn)至任務(wù)繼續(xù)執(zhí)行,導(dǎo)致任務(wù)的執(zhí)行時長中疊加了中斷例程的執(zhí)行時長。有鑒于此,在本實施例中,同時還基于所述預(yù)設(shè)任務(wù)每次到中斷例程的入口以及每次中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點計算中斷例程的每次執(zhí)行時長,將當前檢測周期內(nèi)中斷例程的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一中斷時長,即當前檢測周期內(nèi),所述CPU因執(zhí)行中斷例程而暫停執(zhí)行所述預(yù)設(shè)任務(wù)的時間長度。
需要說明的是,前述統(tǒng)計所述第一中斷時長時,在所有中斷例程的共同入口的開始處和結(jié)束處讀取TSC的計數(shù)值,以記錄中斷例程的開始時間點和結(jié)束時間點,相鄰的所述開始時間點和所述結(jié)束時間點的差值即為中斷例程的一次執(zhí)行時長,這個執(zhí)行時長可能包含了該中斷例程嵌套了其它中斷例程的情況,本實施例只記錄所述預(yù)設(shè)任務(wù)到中斷例程的入口以及該中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點,而不區(qū)分該時長是哪個中斷例程的執(zhí)行時長。
進一步地,由于任務(wù)在CPU的執(zhí)行是以進程的形式體現(xiàn)的,而進程包括 至少一個線程,CPU在某一時刻只能執(zhí)行一個線程。本實施例中,在統(tǒng)計任務(wù)的實際執(zhí)行時長時,需要遍歷任務(wù)對應(yīng)進程(線程組)中各線程進行時間統(tǒng)計。具體地,當線程調(diào)度運行時,將線程此次調(diào)度期間的運行時間累加至對應(yīng)進程的總執(zhí)行時長中,以及將線程此次調(diào)度期間的中斷時長累加至對應(yīng)進程的總中斷時長中;將累加的總執(zhí)行時長減去累加的總中斷時長,即進程(任務(wù))的實際執(zhí)行時長。
本實施例基于CPU的TSC進行計時統(tǒng)計,能夠進一步地提升檢測CPU占用率的精確度。
進一步地,基于第一或第二實施例,提出本發(fā)明CPU占用率檢測方法的第三實施例,在本實施例中,上述S20之后,還包括:
獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二執(zhí)行時長以及第二中斷時長;
基于所述第一中斷時長、第二中斷時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率。
本實施例中,在獲取到所述第一中斷時長以及所述第二中斷時長之后,將所述第一中斷時長和所述第二中斷時長的差值(取絕對值)作為所述預(yù)設(shè)任務(wù)在當前檢測周期內(nèi)在所述CPU的中斷時長,并將所述中斷時長與檢測周期的比值作為所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率。
進一步地,基于第三實施例,提出本發(fā)明CPU占用率檢測方法的第四實施例,在本實施例中,所述基于所述第一中斷時長、第二中斷時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率的步驟之后,還包括:
累加各所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率,并將累加的結(jié)果作為中斷例程在所述CPU的執(zhí)行占用率。
本實施例中,所述預(yù)設(shè)任務(wù)包括所述CPU執(zhí)行的所有工作任務(wù)和空閑任務(wù),通過累加各所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率,即累加所述CPU在執(zhí)行任務(wù)過程中,執(zhí)行的各中斷例程在所述CPU的執(zhí)行占用率,將累加的結(jié)果作為中斷例程在所述CPU的執(zhí)行占用率,實現(xiàn)系統(tǒng)級CPU占用率檢測。
需要說明的是,在本實施例中,統(tǒng)計的中斷時長包括硬中斷時長和軟中 斷時長之和?;诒緦嵤├岢龅募夹g(shù)方案,本領(lǐng)域技術(shù)人員可以理解的是,還可僅對CPU執(zhí)行的硬中斷進行統(tǒng)計,以實現(xiàn)硬中斷在CPU的執(zhí)行占用率的檢測。
本發(fā)明還提供一種CPU占用率檢測裝置,參照圖2,在本發(fā)明CPU占用率檢測裝置的第一實施例中,所述CPU占用率檢測裝置包括:
獲取模塊10,用于獲取當前檢測周期內(nèi)預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長以及第一中斷時長;
本實施例提供的CPU占用率檢測裝置可以應(yīng)用于Linux系統(tǒng)中,例如,可用于精確檢測預(yù)設(shè)任務(wù)在CPU的執(zhí)行占用率。以下以本CPU占用率檢測裝置應(yīng)用于Linux系統(tǒng)進行說明。
本實施例中,所述檢測周期是預(yù)先設(shè)置的,用于周期性的測量與CPU相關(guān)的各種占用率。需要說明的是,在Linux系統(tǒng)中,CPU占用率分為系統(tǒng)級(CPU級)和任務(wù)級(進程/線程級)的占用率檢測。其中,系統(tǒng)級占用率檢測是指每CPU的占用率情況,常見的系統(tǒng)級占用率統(tǒng)計的時間構(gòu)成包括每CPU的空閑時間,用戶態(tài)運行時間,內(nèi)核態(tài)運行時間,I/O等待時間,軟中斷和硬中斷執(zhí)行時間;任務(wù)(進程/線程)級占用率檢測是指進程/線程在CPU的執(zhí)行占用率。本實施例主要以任務(wù)級CPU占用率的檢測進行說明。
具體地,在當前檢測周期到達時,獲取模塊10獲取所述預(yù)設(shè)任務(wù)在CPU的第一執(zhí)行時長,即所述CPU在檢測周期內(nèi)執(zhí)行所述預(yù)設(shè)任務(wù)的執(zhí)行時間長度。本領(lǐng)域技術(shù)人員可以理解的是,CPU在執(zhí)行任務(wù)的過程中,當中斷到達時,CPU會暫停正在執(zhí)行的任務(wù),而跳轉(zhuǎn)去執(zhí)行相應(yīng)的中斷例程,在中斷例程執(zhí)行完成后,再跳轉(zhuǎn)至任務(wù)繼續(xù)執(zhí)行,導(dǎo)致任務(wù)的執(zhí)行時長中疊加了中斷例程的執(zhí)行時長,影響任務(wù)在CPU的執(zhí)行占用率檢測。有鑒于此,本實施例獲取模塊10還獲取所述預(yù)設(shè)任務(wù)在所述CPU的第一中斷時長,即所述CPU在檢測周期內(nèi)因執(zhí)行中斷例程而暫停執(zhí)行所述預(yù)設(shè)任務(wù)的時間長度。其中,所述預(yù)設(shè)任務(wù)可以是任何可以被CPU執(zhí)行的任務(wù),包括工作任務(wù)和空閑任務(wù)。當所述預(yù)設(shè)任務(wù)為工作任務(wù)時,對應(yīng)任務(wù)級CPU占用率的檢測;當所述預(yù)設(shè)任務(wù)為空閑任務(wù)時,對應(yīng)系統(tǒng)級CPU占用率的檢測。
計算模塊20,用于在獲取到所述第一執(zhí)行時長以及第一中斷時長時,將 所述第一執(zhí)行時長和所述第一中斷時長的差值,作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長;
基于前述技術(shù)方案的描述,本領(lǐng)域技術(shù)人員容易理解的是,所述第一執(zhí)行時長減去所述第一中斷時長的差值即為所述預(yù)設(shè)任務(wù)在檢測周期內(nèi)被所述CPU實際執(zhí)行的時長,計算模塊20將其作為當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第一實際執(zhí)行時長。需要說明的是,所述計算模塊20在執(zhí)行所述第一執(zhí)行時長與所述第一中斷時長的相減操作時,將相減結(jié)果的絕對值作為所述第一執(zhí)行時長與所述第一中斷時長的差值。
所述計算模塊20還用于獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二實際執(zhí)行時長,并基于所述第一實際執(zhí)行時長、所述第二實際執(zhí)行時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
本實施例中,所述計算模塊20獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二實際執(zhí)行時長可參照前述技術(shù)方案施行,此處不再贅述。
在獲取到所述第一實際執(zhí)行時長以及所述第二實際執(zhí)行時長之后,計算模塊20將所述第一實際執(zhí)行時長與所述第二實際執(zhí)行時長的差值(取絕對值)作為所述預(yù)設(shè)任務(wù)在當前檢測周期內(nèi)在所述CPU的實際執(zhí)行時長,并將所述實際執(zhí)行時長與檢測周期的比值作為所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
進一步地,在本實施例中,所述CPU占用率檢測裝置還包括顯示模塊,用于顯示所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率。
容易理解的是,進行CPU占用率檢測的目的在于,提供系統(tǒng)性能監(jiān)控、性能調(diào)優(yōu)以及故障定位等不可或缺的基礎(chǔ)數(shù)據(jù),本實施例中,在計算模塊20計算出所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率后,顯示模塊顯示所述預(yù)設(shè)任務(wù)在所述CPU的執(zhí)行占用率,以供用戶進行相應(yīng)的操作。
本實施例提出的CPU占用率檢測裝置,通過分別對待檢測任務(wù)在兩個檢測周期內(nèi)在CPU的實際執(zhí)行時長進行統(tǒng)計,剔除了CPU因執(zhí)行中斷例程而導(dǎo)致的執(zhí)行時長誤差,并進一步基于統(tǒng)計的實際執(zhí)行時長以及檢測周期,計算所述預(yù)設(shè)任務(wù)在CPU的執(zhí)行占用率。相較于現(xiàn)有技術(shù),本發(fā)明能夠提高檢測CPU占用率的精確度。
進一步地,基于第一實施例,提出本發(fā)明CPU占用率檢測裝置的第二實施例,在本實施例中,所述獲取模塊10還用于在當前檢測周期內(nèi),基于所述預(yù)設(shè)任務(wù)每次切入所述CPU以及每次切出所述CPU的時間點計算所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長,將當前檢測周期內(nèi)所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一執(zhí)行時長;以及基于所述預(yù)設(shè)任務(wù)每次到中斷例程的入口以及每次中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點計算中斷例程的每次執(zhí)行時長,將當前檢測周期內(nèi)中斷例程的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一中斷時長。
需要說明的是,在本實施例中,各時間點的記錄是通過讀取所述CPU的時間戳計數(shù)器(Time Stamp Counter,TSC)記錄的。其中,TSC是CPU中的一個計數(shù)器,它記錄自CPU啟動以來消耗的時鐘周期數(shù)。TSC提供了非常高的計時精度,TSC記錄的時鐘周期數(shù)可以被轉(zhuǎn)化為秒,方法是將其除以CPU的主頻。例如,目前主流CPU的主頻為1.5-3.5GHz,其TSC的精度可達納秒級。
具體地,在當前檢測周期內(nèi),獲取模塊10偵測到預(yù)設(shè)任務(wù)切入到CPU執(zhí)行時,記錄切入時間點,偵測到所述預(yù)設(shè)任務(wù)切出所述CPU時,記錄切出時間點,相鄰的所述切入時間點和所述切出時間點的差值即為所述預(yù)設(shè)任務(wù)的一次執(zhí)行時長,將所述預(yù)設(shè)任務(wù)的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一執(zhí)行時長,即所述預(yù)設(shè)任務(wù)在當前檢測周期內(nèi),切入CPU的總執(zhí)行時長。本領(lǐng)域技術(shù)人員可以理解的是,在CPU執(zhí)行任務(wù)的過程中,當中斷到達時,CPU會暫停正在執(zhí)行的任務(wù),而跳轉(zhuǎn)去執(zhí)行相應(yīng)的中斷例程,在中斷例程執(zhí)行完成后,再跳轉(zhuǎn)至任務(wù)繼續(xù)執(zhí)行,導(dǎo)致任務(wù)的執(zhí)行時長中疊加了中斷例程的執(zhí)行時長。有鑒于此,在本實施例中,獲取模塊10同時還基于所述預(yù)設(shè)任務(wù)每次到中斷例程的入口以及每次中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點計算中斷例程的每次執(zhí)行時長,將當前檢測周期內(nèi)中斷例程的每次執(zhí)行時長進行累加,并將累加的結(jié)果作為所述第一中斷時長,即當前檢測周期內(nèi),所述CPU因執(zhí)行中斷例程而暫停執(zhí)行所述預(yù)設(shè)任務(wù)的時間長度。
需要說明的是,前述獲取模塊10統(tǒng)計所述第一中斷時長時,在所有中斷例程的共同入口的開始處和結(jié)束處讀取TSC的計數(shù)值,以記錄中斷例程的開始時間點和結(jié)束時間點,相鄰的所述開始時間點和所述結(jié)束時間點的差值即 為中斷例程的一次執(zhí)行時長,這個執(zhí)行時長可能包含了該中斷例程嵌套了其它中斷例程的情況,本實施例獲取模塊10只記錄所述預(yù)設(shè)任務(wù)到中斷例程的入口以及該中斷例程到所述預(yù)設(shè)任務(wù)的出口的時間點,而不區(qū)分該時長是哪個中斷例程的執(zhí)行時長。
進一步地,由于任務(wù)在CPU的執(zhí)行是以進程的形式體現(xiàn)的,而進程包括至少一個線程,CPU在某一時刻只能執(zhí)行一個線程。本實施例中,在統(tǒng)計任務(wù)的實際執(zhí)行時長時,獲取模塊10需要遍歷任務(wù)對應(yīng)進程(線程組)中各線程進行時間統(tǒng)計。具體地,當線程調(diào)度運行時,獲取模塊10將線程此次調(diào)度期間的運行時間累加至對應(yīng)進程的總執(zhí)行時長中,以及將線程此次調(diào)度期間的中斷時長累加至對應(yīng)進程的總中斷時長中;將累加的總執(zhí)行時長減去累加的總中斷時長,即進程(任務(wù))的實際執(zhí)行時長。
本實施例獲取模塊10基于CPU的TSC進行計時統(tǒng)計,能夠進一步地提升檢測CPU占用率的精確度。
進一步地,基于第一或第二實施例,提出本發(fā)明CPU占用率檢測裝置的第三實施例,在本實施例中,所述獲取模塊10還用于獲取上一檢測周期內(nèi)所述預(yù)設(shè)任務(wù)在所述CPU的第二執(zhí)行時長以及第二中斷時長;
所述計算模塊20還用于基于所述第一中斷時長、第二中斷時長以及所述檢測周期,計算所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率。
本實施例中,在獲取模塊10獲取到所述第一中斷時長以及所述第二中斷時長之后,計算模塊20將所述第一中斷時長和所述第二中斷時長的差值(取絕對值)作為所述預(yù)設(shè)任務(wù)在當前檢測周期內(nèi)在所述CPU的中斷時長,并將所述中斷時長與檢測周期的比值作為所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率。
進一步地,基于第三實施例,提出本發(fā)明CPU占用率檢測裝置的第四實施例,在本實施例中,所述計算模塊20還用于累加各所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率,并將累加的結(jié)果作為中斷例程在所述CPU的執(zhí)行占用率。
本實施例中,所述預(yù)設(shè)任務(wù)包括所述CPU執(zhí)行的所有工作任務(wù)和空閑任 務(wù),計算模塊20通過累加各所述預(yù)設(shè)任務(wù)在所述CPU的中斷占用率,即累加所述CPU在執(zhí)行任務(wù)過程中,執(zhí)行的各中斷例程在所述CPU的執(zhí)行占用率,將累加的結(jié)果作為中斷例程在所述CPU的執(zhí)行占用率,實現(xiàn)系統(tǒng)級CPU占用率檢測。
需要說明的是,在本實施例中,獲取模塊10統(tǒng)計的中斷時長包括硬中斷時長和軟中斷時長之和?;诒緦嵤├岢龅募夹g(shù)方案,本領(lǐng)域技術(shù)人員可以理解的是,獲取模塊10還可僅對CPU執(zhí)行的硬中斷進行統(tǒng)計,以實現(xiàn)硬中斷在CPU的執(zhí)行占用率的檢測。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。