確定處理器在執行一個代碼部分中消耗的實際時間量的製作方法
2023-08-02 17:52:06 1
專利名稱:確定處理器在執行一個代碼部分中消耗的實際時間量的製作方法
背景技術:
通常,在軟體應用程式的開發期間,要對應用程式的一個或多個部分執行性能測試。這一測試常常涉及測量處理器執行軟體應用程式的代碼的一個或多個部分(例如,函數、過程或其它邏輯組件)所花費(即,消耗)的時間量。例如,可通過記錄代碼部分執行開始的時間和代碼部分執行結束的時間來確定這一時間量。這些時間常常是通過在軟體應用程式內的位置(例如,代碼部分的開始和結束)包括探針來記錄的,執行這些探針導致這些時間值被記錄。
只基於代碼部分執行開始和結束的時間來確定執行時間量不是處理器在執行該代碼部分中所消耗的實際時間量的準確表示。記錄時間值本身也消耗時間,包括讀時間值所需的時間以及將時間值寫(即,記錄)到諸如易失性存儲器或非易失性存儲介質等記錄介質中所需的時間。獲得(包括讀和記錄)時間值所消耗的時間在本文中稱為「額外開銷」或「額外開銷時間」。
例如,開始和結束時間測量可能指示一代碼部分消耗了800個處理器周期。但是,記錄開始時間可能花了三個處理器周期。由此,處理器在執行該代碼部分中所消耗的實際時間量(假定沒有其它諸如以下將討論的上下文切換等變數)是800-3=797個處理器周期。應當認識到,獲得結束時間中所消耗的處理器周期不影響所測量的代碼部分執行時間的準確性。這是因為結束時間的獲得時間是在被記錄的結束時間本身之後才發生的。
另一個問題在多任務作業系統(OS)中出現。多任務OS通過交替或交織不同線程的執行,在處理器(例如,中央處理單元(CPU)或微處理器)上模擬不同處理線程的並發操作。在一個線程執行了相對很短的一段時間(常被稱為「時間片」)以後,OS中斷處理器並將其上下文調整到一不同的線程。將處理器的上下文從一個線程調整或切換到另一個是在本文中被稱為「上下文切換」的事件。為代碼部分執行的開始和結束時間記錄的時間值並沒有將其中在開始時間和結束時間之間是否發生了一次或數次上下文切換納入考慮範圍。如果在此時間間隔期間發生了一次或多次上下文切換,則該時間間隔就不是處理器執行該代碼部分花費了多少時間的準確表示。即,該時間間隔所反映的時間段將比處理器在執行該代碼部分本身中實際消耗的時間段長。
發明內容
申請人認識到需要一種用於確定處理器在執行代碼部分、特別是當在多任務作業系統上執行時所消耗的實際時間量的可靠系統和方法。
由此,本文中描述了確定處理器在執行代碼部分中消耗的實際時間量的系統和方法。如在本文中所使用,代碼部分的「活動時間」是指處理器在執行該代碼部分中所消耗的實際時間量。代碼部分的活動時間可通過將對應於該代碼部分的上下文切換和/或額外開銷時間納入考慮範圍來準確地確定。
如在本文中所使用,代碼部分的「經過時間」是指在該代碼部分執行的開始和結束時間之間經過的絕對時間(即,由所記錄的該代碼的執行開始和結束時間所定義的時間間隔)。代碼部分的經過時間可包括處理器在換出間隔期間所消耗的時間。如本文中所使用,「換出間隔」是指在經過時間間隔期間發生的時間間隔,在該時間間隔期間,處理器執行不同於對應於正被測量的代碼部分的處理線程的另一處理線程。經過時間還可包括獲得代碼部分的開始和結束時間值所導致的額外開銷時間。此外,應當理解,代碼部分可包括除導致記錄開始和結束時間以外的其它探針。例如,可能有其它探針被放置在正被測量的代碼部分內的其它代碼部分(例如,函數、過程或其它邏輯組件)的開始和結束處。執行這些其它探針產生經過時間內的其它額外開銷時間。
確定代碼部分的活動時間可包括記錄在該代碼部分的執行期間所發生的上下文切換和時間值。此信息以及額外開銷測量可被用來生成代碼部分的活動時間,如將在以下更加詳細地描述。例如,可從經過時間減去上下文切換所導致的換出時間間隔以及與時間測量相關聯的額外開銷時間來得到代碼部分的活動時間。
在本發明的一個實施例中,多任務作業系統的處理器在執行第一處理線程的一個代碼部分中所消耗的實際時間量被確定。指示定義該代碼部分的執行開始和結束時間的第一時間間隔的第一信息被接收。指示在第一時間間隔內所發生的、期間處理器執行不同於第一處理線程的處理線程的一個或多個第二時間間隔的第二信息被接收。基於第一和第二信息,執行該代碼部分中所消耗的實際時間量被確定。
在此實施例的一個方面,從第一時間間隔減去了這一個或多個第二時間間隔的總合時間。
在此實施例的另一個方面,指示在第一時間間隔期間獲得第一信息中所消耗的額外開銷時間的第三信息被接收。確定實際時間量包括從第一時間間隔減去該額外開銷時間以及這一個或多個第二時間間隔的總合時間。
在此實施例的另一個方面,第二信息包括多個信息元素。每個第一信息元素指定一特定時間、在該特定時間處理器從其切換上下文的舊線程、以及在該特定時間處理器將上下文切換到的新線程。確定實際時間量包括基於這些信息元素,為這一個或多個第二時間間隔中的每一個確定該第二時間間隔的開始和結束時間。
在此實施例的又一個方面,第一信息包括多個第一信息元素,每個第一信息元素指定一時間、處理線程及事件類型。確定實際時間量包括基於這多個第一信息元素確定第一時間間隔的開始和結束時間的動作。
在此實施例的另一個方面,第二信息包括多個第二信息元素。每個第二信息元素指定一特定時間、在該特定時間處理器從其切換上下文的舊線程、以及在該特定時間處理器將上下文切換到的新線程。包括一個或多個第三信息元素的第三信息被接收,其中每個第三信息元素指定在執行一種類型的事件中所消耗的時間。確定實際時間量包括基於這些第二信息元素,為這一個或多個第二時間間隔中的每一個確定該第二時間間隔的開始時間和結束時間。確定實際時間量還包括從第一和第二信息元素確定處理器在獲得第一信息中所消耗的總的額外開銷時間,以及確定執行該代碼部分中所消耗的實際時間量。
在另一個方面,在計算機系統上執行上述實施例的一個或多個上述動作和/或方面。
在本發明的另一個實施例中,提供了一種電腦程式產品。該產品包括計算機可讀介質以及存儲在該計算機可讀介質上的計算機可讀信號,這些信號定義了在由計算機執行時將指示計算機執行在以上段落中所描述的本發明的實施例的方法和/或在以上段落中所描述的本發明的一個或多個方面的指令。
在本發明的另一個實施例中,提供一種用於確定多任務作業系統的處理器在執行第一處理線程的一個代碼部分中所消耗的實際處理器時間量的系統。該系統包括實際時間生成器,用於接收指示定義代碼部分執行開始時間和結束時間的第一時間間隔的第一信息,接收指示在第一時間間隔內發生的、期間處理器執行不同於第一處理線程的另一處理線程的一個或多個第二時間間隔的第二信息,以及基於第一和第二信息,生成執行該代碼部分中所消耗的實際處理器時間量。
在此實施例的一個方面,實際時間生成器用於從第一時間間隔減去這一個或多個第二時間間隔的總合時間。
在此實施例的另一個方面,實際時間生成器用於接收指示在第一時間間隔期間獲得第一信息中所消耗的額外開銷時間的第三信息,以及從第一時間間隔減去該額外開銷時間以及這一個或多個第二時間間隔的總合時間。
在此實施例的另一個方面,第二信息包括多個信息元素。每個第一信息元素指定一特定時間、在該特定時間處理器從其切換上下文的舊線程、以及在該特定時間處理器將上下文切換到的新線程。實際時間生成器用於基於這些信息元素,為這一個或多個第二時間間隔中的每一個確定該第二時間間隔的開始和結束時間。
在此實施例的又一個方面,第一信息包括多個第一信息元素,每個第一信息元素指定一時間、處理線程及事件類型。實際時間生成器用於基於這多個第一信息元素確定第一時間間隔的開始和結束時間。
在此實施例的另一個方面,第二信息包括多個第二信息元素。每個第二信息元素指定一特定時間、在該特定時間處理器從其切換上下文的舊線程、以及在該特定時間處理器將上下文切換到的新線程。實際時間生成器用於接收包括一個或多個第三信息元素的第三信息,其中每個第三信息元素指定在執行一種類型的事件中所消耗的時間。實際時間生成器用於基於這些第二信息元素,為這一個或多個第二時間間隔中的每一個確定該第二時間間隔的開始時間和結束時間,從第一和第二信息元素確定處理器在獲得第一信息中所消耗的總的額外開銷時間,以及基於在動作(C)(1)-(C)(3)中所作的確定,來確定執行該代碼部分中所消耗的實際時間量。
當結合附圖考慮以下對本發明、包括對本發明的各方面和實施例的詳細描述,本發明的其它優點、新穎特徵和目的將會明確,其中附圖是示意性的,而並不旨在按比例繪製。在附圖中,不同的圖中所示出的每個完全相同或幾乎相同的組件由單個附圖標記表示。為清楚起見,在不必說明即可允許本領域普通技術人員理解本發明的地方,每個圖中的每個組件並不是都被標記,本發明的每個實施例或方面的每個組件也不是都被示出。
圖1是根據本發明的一些實施例示出一代碼部分的執行的經過時間和活動時間的示例的時序圖;圖2是根據本發明的一些實施例示出一種用於確定處理器在執行代碼部分期間所消耗的實際時間的方法的示例的流程圖。
圖3是根據本發明的一些實施例表示代碼的線程的示例的偽碼;圖4是根據本發明的一些實施例示出表示計時器測量的信息元素表的示例的框圖;圖5是根據本發明的一些實施例示出表示上下文切換事件的信息元素表的示例的框圖;圖6是根據本發明的一些實施例示出包括多個表示額外開銷測量的信息元素的表的示例的框圖;圖7是根據本發明的一些實施例示出一種基於計時器測量、上下文切換事件和額外開銷測量確定處理器在執行代碼部分中消耗的實際時間的方法的示例的流程圖;圖8是根據本發明的一些實施例示出一種用於確定處理器在執行一代碼部分中所消耗的實際時間的系統的示例的框圖;圖9是根據本發明的一些實施例示出可在其上實現本發明的一些實施例的計算機系統的示例的框圖;以及圖10是根據本發明的一些實施例示出可作為實現本發明的一些實施例的計算機系統的部件使用的存儲系統的示例的框圖。
具體實施例方式
本發明的實施例的功能和優點將從下述示例中更加充分地理解。以下示例旨在便於更好地理解本發明的益處及說明本發明的益處,但並不例示本發明的完整範圍。
如本文中所使用,無論是在書面描述還是在所附權利要求書中,術語「包含」、「包括」、「攜帶」、「具有」、「含有」、「涉及」等都應被理解為是開放式的,即,意味著包括而非限於。只有過渡語「由……組成」和「本質上由……組成」才應當是封閉式或半封閉式的過渡語,如美國專利局專利審查過程手冊(第八版,修訂2,2004年5月)第2111.03節中就權利要求書所闡述。
示例圖1是示出代碼部分的執行的經過時間和活動時間的示例的時序圖100。圖100純粹是一代碼部分的時序圖的示例性實施例,而並不試圖限制本發明的範圍。例如圖100的變體等這樣的圖的許多其它實現中的任何一種都是可能的,並旨在落入本發明的範圍之內。
時間軸112示出時序圖100表示從0到12毫秒(ms)的一段時間。應當認識到,可使用例如處理器周期等其它時間單位來示出這一時序圖。圖形102示出處理器在執行線程1的時間,從1.5-3ms,以及從6-9ms。圖形104示出從0.5-1.5ms及從9-10ms獲得的指示代碼部分的開始和結束執行時間的計時器讀。因此,圖形104表示為該代碼部分獲得時間值中的額外開銷。
圖形106示出期間處理器在執行不同於線程1的一個或多個線程的換出時間間隔。
基於圖形102、104和106,經過時間間隔(圖形108)在0.5ms開始並在9.0ms結束,這產生了8.5ms的經過時間。時序圖100示出,基於圖形102-108,代碼部分的活動時間(圖形110)是(3-1.5)+(9-6)=4.5ms。現在將參考圖2-8描述用於確定圖100中所示的代碼部分的活動時間的本發明的實施例。
圖2是示出確定處理器在執行代碼部分中消耗的實際時間的方法200的示例的流程圖。方法200純粹是確定代碼部分的實際執行時間的方法的一個示例性實施例,而並不試圖限制本發明的範圍。例如方法200的變體等這一方法的許多其它實現的任何一種都是可能的,並且旨在落入本發明的範圍之內。
在動作202,為代碼部分記錄計時器測量。例如,該代碼部分所屬的線程可在一個或多個位置包括探針,這些位置包括標記該代碼部分的開始和結束的位置,還可能包括該代碼部分內的位置(例如,其它邏輯組件的開始和結束)。在該代碼部分的執行期間,可在每個探針位置處進行計時器測量。這些測量可被記錄在記錄介質上,諸如本地(例如,易失性)存儲器中的臨時緩衝區內或諸如磁碟等非易失性存儲介質上。表示計時器測量的信息單位的示例在以下參考圖4描述。
暫時離開圖2,圖3是表示代碼的線程300的示例的偽碼。代碼300純粹是代碼線程的示例,而並不試圖限制本發明的範圍。例如線程300的變體等代碼線程的許多其它的實現中的任何一種都是可能的,並且旨在落入本發明的範圍之內。
圖3和即將討論的圖4-6在整個說明書中將作為可從其確定代碼部分的活動時間的信息的非限制性示例而被參考。應當認識到,提供這些示例是出於說明目的,且它們並不試圖限制本發明的範圍。其它信息也可被使用。
線程300包括代碼部分302,它包括函數F,其中F包括函數G。用於記錄函數F的開始和結束(也是代碼部分302的開始和結束)的探針可被放在代碼部分302內的位置304和306處。此外,指示函數G執行開始和結束的探針可被放在位置308和310處。
圖4是示出表示計時器測量的信息元素表400的示例的框圖。圖4純粹是表示計時器測量的信息元素表的示例性實施例,而並不試圖限制本發明的範圍。例如表400的變體等這樣的表的許多其它實現中的任何一種都是可能的,並且旨在落入本發明的範圍之內。例如,表400可包括多於或少於圖4中所示的條目和列,並且各條目和列可按不同順序排列。
每個信息元素可包括時間值欄位402、線程ID欄位404和事件欄位406。欄位402(及表500的欄位502和表600的欄位604)中所使用的時間單位是處理器(例如,CPU)周期。但是,應當認識到,這些欄位中所使用的時間單位可以是諸如毫秒等許多其它類型的單位中的任何一種。例如,信息元素408指定在線程1中,在900個處理器周期處進入函數F。執行在以上參考圖3所描述的代碼部分302的位置304處的探針可產生信息元素408。應當認識到,儘管在本文中所描述的多個示例中,處理器周期是時間單位,但是也可使用其它時間單位。
又如,信息元素410指定在線程2中,在1010ms進入函數S。此外,代碼部分302的位置308、310和306處的探針分別可產生信息元素516、520和522。
回到圖2,在動作204,上下文切換事件可被記錄。即,從一個線程到另一個的處理器上下文的切換可被記錄。上下文被切換到的線程或者從其切換上下文的線程中的一個可以是包括該代碼部分的線程,而上下文切換到其中或從其切換上下文的一個或多個線程可以是不同於包括該代碼部分的線程的另一線程。在一些作業系統上(例如,可從Microsoft公司購買的WindowsXP),可提供使上下文切換事件能被捕捉的應用程式編程接口(API)。
如本文中所使用,「應用程式編程接口」或「API」是一個或多個計算機可讀指令的指令集,它提供對一個或多個其它定義函數的計算機可讀指令的指令集的訪問,以使這些函數可被配置成結合應用程式在計算機上被執行。API可被視為應用程式和特定計算機環境或平臺(例如,以下所討論的任何一個)之間的「膠合物」,並可使程式設計師能夠編出在一個或多個特定計算機平臺上或在一個或多個特定計算機環境中運行的應用程式。
例如,MicrosoftXP OS包括Windows事件跟蹤(ETW)API,它提供用於記錄上下文切換事件的特徵。此特徵可被啟用(即,開啟)以使其記錄上下文切換事件(例如,記錄到本地存儲器緩衝中或磁碟上)。因此,在OS上多個線程的並行執行期間,上下文切換事件、包括在代碼部分執行期間的上下文切換事件可被記錄。現在將參考圖5描述表示上下文切換事件的信息元素的示例。
暫時離開方法200,圖5是示出表示上下文切換事件的信息元素表500的示例的框圖。表500純粹是表示上下文切換事件的信息元素表的示例性實施例,而並不試圖限制本發明的範圍。諸如表500的變體等這樣的表的許多其它實現中的任何一種都是可能的,並且旨在落入本發明的範圍之內。例如,表500可包括其它條目和/或列,並且各條目和列可按不同方式來組織。
每個信息元素可在欄位502中指定一特定時間值,在舊線程ID欄位504中指定從其切換上下文的線程的線程ID,並在新線程ID欄位506中指定上下文被切換到的線程的線程ID。例如,信息元素508指示,在1000個處理器周期(例如,從預定的開始時間起)處,上下文被從線程1切換到線程2,而信息元素610指示在1028個處理器周期處,上下文被從線程2切換到線程3。
在一些實施例中,不是使用欄位504和506,而是每個條目可包括單個指定線程ID的欄位,以及另一指定指示該線程ID所標識的線程是被切換到其中(即,換入)還是從其切換(即,換出)的值(例如,標誌)的欄位。條目的其它實施例也可被使用。
回到圖2,在動作206,特定類型的事件(例如,函數進入、函數退出及其它類型的事件)的額外開銷測量可被獲得。這些測量可從較早時在例如受控的測試環境中對不同事件類型所作的先前的測量獲得。或者,額外開銷測量可在代碼部分的執行被測量期間被測量和記錄。現在將參考圖6描述表示額外開銷測量的信息元素的示例。
圖6是示出包括多個表示額外開銷測量的信息元素的表600的示例的框圖。表600純粹是表示額外開銷測量的信息元素表的示例性實施例,而並不試圖限制本發明的範圍。諸如表600的變體等這樣的表的許多其它實現中的任何一種都是可能的,並且旨在落入本發明的範圍之內。例如,表600可包括其它條目和/或列,並且各條目和列可按不同方式來組織。
表600可包括信息元素606和608,其中每個信息元素具有指定事件類型的事件類型欄位602以及指定與事件類型相關聯的額外開銷時間的額外開銷時間欄位604。例如,信息元素606指示函數進入事件類型有3個處理器周期的額外開銷時間,而信息元素608指示函數退出事件類型具有2個處理器周期的額外開銷。條目606和608假定每次進入或退出函數時分別消耗相同的時間量(分別是3個和2個處理器周期)。但是,在一些實施例中,額外開銷可在每次進入或退出函數時被測量和記錄,並且此信息可用不同於表600中所示的格式來記錄。
回到圖2,在動作208,可基於計時器測量、上下文切換事件和額外開銷測量,以例如以下參考圖7所描述的方式來確定代碼部分的實際時間。方法200或其部分可使用以下參考圖8所描述的系統800來實現。
方法200可包括其它動作。此外,作為方法200的一部分所執行的動作的順序並不局限於圖2中所示的順序,因為這些動作可按其它順序來執行和/或其中一個或多個動作可串行或至少部分地並行執行。例如,可與作為動作202的一部分記錄一個或多個計時器測量並行地或在其之前記錄一個或多個上下文切換事件作為動作204的一部分。
圖7是示出例如作為執行方法200的動作208的一部分,基於計時器測量、上下文切換事件和額外開銷測量確定處理器執行代碼部分中所消耗的實際時間的方法700的示例的流程圖。方法700純粹是確定處理器在執行代碼部分中消耗的實際時間的方法的一個示例性實施例,而並不試圖限制本發明的範圍。諸如方法700的變體等這樣的方法的許多其它實現中的任何一種都是可能的,並且旨在落入本發明的範圍之內。方法700及其動作可使用以下參考圖8所描述的系統800的一個或多個元件來實現。
在動作702,可從計時器測量確定表示代碼部分的經過時間的時間間隔。例如,給定一組計時器測量(例如,在動作202所記錄的那些測量)和線程標識符,即可確定表示所標識的線程的代碼部分的經過時間的時間間隔。
例如,使用表400中所提供的信息,線程ID為1的線程表示圖3中所示的線程300。動作702可包括以下。表400中不對應於線程1的信息元素可被移除(例如,信息元素410、412、414和418),而其餘信息元素可按時間值欄位402排序。選擇已排序的信息元素所表示的最早時間值和最晚時間值來分別定義經過時間間隔的開始時間和結束時間。例如,對表400的信息元素應用動作702可導致(900,1550)的經過時間間隔。動作702可由以下參考圖8所描述的經過時間間隔生成器830執行。
在動作704,可從計時器測量和額外開銷測量(例如,分別在動作202和206記錄與獲得的計時器測量和額外開銷測量)確定表示計時器測量的額外開銷的一組時間間隔。即,與正被討論的線程對應的每個計時器測量相關聯的額外開銷時間可被確定和表示為時間間隔。使用圖3、4和6的示例,動作704可包括首先移除表500中不對應於線程1的信息元素,然後其餘信息元素可按時間值欄位502排序。對於每個對應於線程1的信息元素,與事件欄位406中所標識的事件相關聯的額外開銷可從表600確定。例如,信息元素508對應於進入函數F事件,該事件是函數進入事件類型。表600的信息元素606指示與函數進入事件類型相關聯的額外開銷是三個處理器周期。額外開銷時間間隔隨即可被定義如下(時間值,時間值加上額外開銷時間)。因此,對於信息元素408,可得到額外開銷時間間隔(900,903)。
又如,信息元素520指定退出函數G事件,該事件具有函數退出的事件類型。表600的信息元素608指示函數退出事件類型具有兩個處理器周期的額外開銷。由此,動作702可包括從信息元素420得到額外開銷時間間隔(1500,1502)。應當認識到,動作704可不包括為指定由已排序信息元素(即,對應於正被討論的線程的信息元素)所指定的時間的最後時間的時間測量信息元素指定額外開銷時間間隔。此信息元素可被排除在動作704以外是因為與這一測量時間相關聯的額外開銷時間不會對處理器在執行代碼部分中消耗的實際時間添加任何額外開銷。即,這一最後時間測量指示經過時間的結束,因此獲得這一結束時間測量中的額外開銷發生在被記錄的結束時間本身以後,因此不會影響活動時間。
因此,對表400和600的信息元素執行動作704可導致一組額外開銷時間間隔{(900,903),(1200,1203),(1500,1502)}。
在動作706,可從諸如在動作204記錄的上下文切換事件等上下文切換事件確定一組換出時間間隔。換出時間間隔表示在經過時間期間的時間間隔,期間處理器正在執行不同於該代碼部分的線程的另一線程。例如,在圖1的時序圖100中,圖形106指示從3ms到6ms的換出時間間隔。
使用圖5的表500的示例來確定線程1的一組換出時間間隔,表500中不在欄位604或606中引用線程1的信息元素被移除。其餘上下文切換信息元素可按時間欄位602排序。對應於從線程1切換到另一線程的每個上下文切換事件(即,「換出事件」)可被標識(例如,由信息元素608和616表示的上下文切換事件)。對於其中每一個換出事件,切換回線程1的對應的上下文切換事件(即,換入事件)可被標識。對於由信息元素608和616所表示的換出事件,對應的換入事件可被標識為由信息元素614和618所表示的事件。每個換出事件/換入事件對可定義一換出時間間隔。因此,對表500中所表示的上下文切換事件執行動作706可導致一組換出時間間隔{(1000,1190),(1225,1411)}。
在動作708,處理器在執行代碼部分中所消耗的實際時間量可從經過時間、額外開銷時間間隔集與換出時間間隔集來確定。例如,可從經過時間減去所有額外開銷時間間隔和所有換出時間間隔所定義的累計時間來得到代碼部分的活動時間。即,活動時間等於經過時間減去(額外開銷時間間隔加上換出時間間隔)。
使用來自上述動作702、704和706的示例性結果,線程300的代碼部分302的活動時間=650-[(900,903)+(1200,1223)+(1500,1502)+(1000,1190)+(1225,1411)]=650-(3+3+2+190+186)=650-384=266。
因此,對圖3-6中所提供的信息應用方法700得到266個處理器周期的值作為處理器在執行代碼部分302中消耗的實際時間。
方法700可包括其它動作。此外,作為方法700的一部分所執行的動作的順序並不局限於圖7中所示的順序,因為這些動作可按其它順序來執行和/或其中一個或多個動作可被串行或至少部分地並行執行。例如,動作702-706中的任何一個可在另一個以前、以後或與之並行執行。
方法200和700及其動作、以及這些方法和這些動作的各種實施例及變體可由在諸如非易失性記錄介質、集成電路存儲器元件等一個或多個計算機可讀介質或其組合上有形地具體化的計算機可讀信號個別或結合地定義。計算機可讀介質可以是可由計算機訪問的任何可用介質。作為示例,而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算機存儲介質包括以用於存儲諸如計算機可讀指令、數據結構、程序模塊或其它數據等信息的任何方法或技術實現的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括,但不限於,RAM、ROM、EEPROM、快閃記憶體或其它存儲器技術,CD-ROM、數字多功能盤(DVD)或其它光存儲,磁帶盒、磁帶、磁碟存儲或其它磁存儲設備,其它類型的易失性和非易失性存儲器,任何其它可被用來存儲所需信息並可由計算機訪問的介質,以及前述的任何適當組合。
通信介質通常具體化為諸如載波或其它傳輸機制等已調製數據信號中的計算機可讀指令、數據結構、程序模塊或其它數據,並包括任何信息傳遞介質。術語「已調製數據信號」是指以在信號中將信息編碼的方式設置或改變其一個或多個特性的信號。作為示例,而非限制,通信介質包括諸如有線網絡或直接連線連接等有線介質,諸如聲學、RF、紅外和其它無線介質等無線介質,其它類型的通信介質,以及前述的任何適當組合。
一個或多個計算機可讀介質上所包含的計算機可讀信號可定義指令為一個或多個程序的部分,當計算機執行這些指令時,指示計算機執行本文中所描述的一個或多個功能(例如,方法500、方法700或前述的任何動作)和/或其各種實施例、變體和組合。此類指令可用多種程式語言中的任何一種來編寫,例如,Java、J#、Graphical Basic、C、C#或C++、Fortran、Pascal、Eiffel、Basic、COBOL、其它程式語言,或上述的各種組合中的任何一種。其上包含此類指令的計算機可讀介質可駐留在本文中所描述的任一系統800、900和1000的一個或多個組件上,可被分布在一個或多個此類組件上,並可在其間轉移。
計算機可讀介質可以是可攜式的,從而存儲在其上的指令可被加載到任何計算機系統資源上以實現本文中所討論的本發明的諸方面。此外,應當認識到,上述存儲在計算機可讀介質上的指令並不局限於被具體化為在主計算機上運行的應用程式的一部分的指令。相反,這些指令可被具體化為可被使用以將處理器編程為實現以上所討論的本發明的諸方面的任何類型的計算機代碼(例如,軟體或微碼)。
應當認識到,例如參考圖9和10所描述的執行本文中所描述的功能的計算機系統等計算機系統的任何單個組件或多個組件的集合一般可被視為控制這些功能的一個或多個控制器。這一個或多個控制器能用許多方式來實現,諸如用專用硬體和/或固件、使用被編程為使用微碼或軟體來執行上述功能的處理器,或前述的任何適當組合。
圖8是示出一種用於確定處理器在執行一個代碼部分中消耗的實際時間的系統800的示例的框圖。系統800可實現方法200和/或方法700或其部分。系統800純粹是用於確定處理器在執行代碼部分中消耗的實際時間的系統的一個示例性實施例,而並不試圖限制本發明的範圍。例如系統800的變體等這樣的系統的許多其它實現中的任何一種都是可能的,並且旨在落入本發明的範圍之內。
系統800可包括以下任何元件處理器816、記錄介質818、活動時間生成器828以及其它組件。處理器816可以是能夠進行多線程執行的,並可被配置成並行接收一個或多個線程802、806和810。每個線程802、806和810分別可包括一個或多個探針805、808和812。線程802可包括代碼部分804,該代碼部分804可包括一個或多個探針805,可用來確定執行的活動時間。
處理器816可被配置成執行探針805、808和812,並且響應於此,如以上參考圖2的動作202所描述地記錄時間測量820。此外,處理器816可被配置成生成表示包括任何線程802、806和810在內的多個線程之間的上下文切換的上下文切換事件822。處理器816可響應於處理一個或多個API調用814,如以上參考圖2中的動作204所描述地記錄上下文切換事件822。例如,處理器816可由WindowsNT作業系統控制,它通過使用如上所述的ETW API來記錄上下文切換事件。記錄介質818上還可記錄額外開銷測量824。
活動時間生成器828可基於計時器測量820、上下文切換事件822和額外開銷測量824生成給定線程的活動時間844。活動時間生成器828可包括以下任何組件經過時間間隔生成器830、換出時間間隔生成器834、額外開銷時間間隔生成器838、活動時間引擎842以及其它組件。
經過時間間隔生成器830可被配置成接收計時器測量820和線程ID 826,並如以上參考動作702所述地生成經過時間間隔832。
換出時間間隔生成器834可被配置成接收線程ID 826和上下文切換事件822,並如以上參考圖7的動作704所述地生成換出時間間隔836。
額外開銷時間間隔生成器838可被配置成接收線程ID 826、計時器測量820和額外開銷測量824並如以上參考動作706所述地生成額外開銷時間間隔840。
活動時間引擎842可被配置成接收經過時間間隔832、換出時間間隔836和額外開銷時間間隔840並生成表示處理器816在執行代碼部分804中消耗的實際時間的活動時間844。活動時間引擎842可被配置成如以上參考動作708所述地生成活動時間844。
系統800及其組件可使用各種技術中的任何一種來實現,包括軟體(例如,C、C#、C++、Java或其組合)、硬體(例如,一個或多個專用集成電路)、固件(例如,電可編程存儲器)或其任意組合。系統800的一個或多個組件可駐留在單個設備上(例如,計算機),或者其中一個或多個組件可駐留在若干單獨的、離散的設備上。此外,每個組件可被分布在多個設備上,並且其中一個或多個設備可被互相連接。
此外,在包括系統800的一個或多個組件的一個或多個設備中的每一個設備上,每一個組件可駐留在系統的一個或多個位置。例如,這些系統的組件的不同部分可駐留在設備上的存儲器(例如,RAM、ROM、磁碟等)的不同區域。這一個或多個設備中的每一個設備可包括諸如一個或多個處理器、存儲器系統、磁碟存儲系統、一個或多個網絡接口、以及將各組件相互連接的一個或多個總線或其它內部通信鏈路等多個公知組件等等。系統100及其組件可使用諸如以下參考圖9和10所描述的計算機系統等來實現。
根據本發明的各實施例可被實現在一個或多個計算機系統上。這些計算機系統可以是諸如基於Intel PENTIUM類型處理器、Motorola PowerPC、SunUltraSPARC、Hewlett-Packard PA-RISC處理器、可從Advanced Micro Device(AMD)購買的各種處理器中的任何一種、或任何其它類型的處理器等的通用計算機。應當認識到,一個或多個任意類型的計算機系統可被用來實現本發明的各實施例。
根據本發明的一個實施例的通用計算機系統被配置成執行上述一個或多個功能。應當認識到,該系統可執行其它功能,並且本發明並不局限於具有任何一個或一組特定功能。
例如,本發明的各個方面可被實現為在諸如圖9中所示的通用計算機系統900中執行的專用軟體。計算機系統900可包括連接到諸如磁碟驅動器、存儲器或其它用於存儲數據的設備等一個或多個存儲器設備904的處理器903。存儲器904通常被用來在計算機系統900的操作期間存儲程序和數據。計算機系統900的組件可由互連機制905耦合,該機制可包括一個或多個總線(例如,在被集成在同一機器內的組件之間)和/或網絡(例如,在駐留在若干單獨的離散機器上的組件之間)。互連機制905使通信(例如,數據、指令)能在系統900的系統組件之間被交換。計算機系統900還包括例如鍵盤、滑鼠、跟蹤球、話筒、觸控螢幕等一個或多個輸入設備902,以及例如列印設備、顯示屏、揚聲器等一個或多個輸出設備901。此外,計算機系統900可包含將計算機系統900連接到通信網絡的一個或多個接口(未示出)(除互連機制905以外,或作為其替換方案)。
在圖10中更加詳細地示出的存儲系統906通常包括計算機可讀並可寫的非易失性記錄介質1001,其中存儲了定義要由處理器執行的程序的信號或存儲在介質1001之上或之中要由程序處理的信息。該介質可以是例如磁碟或快閃記憶體。通常,在操作中,處理器使數據從非易失性存儲介質1001中被讀入允許由處理器以比訪問介質1001的速度更快的速度訪問的另一存儲器1002中。此存儲器1002通常是諸如動態隨機存取存儲器(DRAM)或靜態存儲器(SRAM)等易失性的隨機存取存儲器。它可位於存儲系統906中(如圖所示)或可位於系統存儲器904中(未示出)。處理器903一般在集成電路存儲器904、1002內操縱數據,然後在處理完成以後將數據複製到介質1001中。有各種公知技術用於管理介質1001和集成電路存儲器元件904、1002之間的數據移動,並且本發明不限於此。本發明不局限於特定的存儲器系統904或存儲系統1006。
本發明的諸方面可用軟體、硬體或固件、或其任意組合來實現。此外,本發明的這些方法、動作、系統、系統元件和組件可被實現為上述計算機系統的一個部分,或可被實現為獨立組件。
儘管是以例示為可在其上實施本發明的各個方面的一類計算機系統的方式示出計算機系統900,但是應當認識到,本發明的諸方面不局限於被實現於如圖9中所示的計算機系統上。本發明的各個方面可在具有不同於圖9中所示的體系結構或組件的一個或多個計算機上實施。
計算機系統900可以是能使用高級計算機程式語言編程的通用計算機系統。計算機系統900還可使用專門編程的、專用的硬體來實現。在計算機系統900中,處理器903通常是諸如可從Intel公司購買的公知的Pentium類處理器等可購買的處理器。還有許多其它處理器可用。此類處理器通常在可以是例如可從Microsoft公司購買的Windows95、Windows98、Windows NT、Windows2000(WindowsME)或WindowsXP作業系統,可從Apple Computer購買的MACOS系統X,可從Sun Microsystems購買的Solaris作業系統,可從各種來源得到的Linux以及可從各種來源得到的UNIX等作業系統上執行。各種其它作業系統中的任何一種可被使用。
處理器和作業系統一起定義了為其用高級程式語言編寫應用程式的計算機平臺。應當理解,本發明並不局限於特定計算機系統平臺、處理器、作業系統或網絡。同樣,本領域技術人員應當明確,本發明並不局限於特定程式語言或計算機系統,並且其它適當的程式語言及其它適當的計算機系統也可被使用。
該計算機系統的一個或多個部分可被分布在耦合到一通信網絡的一個或多個計算機系統(未示出)上。這些計算機系統也可以是通用計算機系統。例如,本發明的各個方面可被分布在配置成向一個或多個客戶計算機提供服務的(例如,伺服器)或作為分布式系統的一個部分執行總的任務的一個或多個計算機系統中間。例如,本發明的各個方面可在包括分布在執行根據本發明的各個實施例的各種功能的一個或多個伺服器系統中間的組件的客戶機-伺服器系統上實施。這些組件可以是可執行的、中間的(例如,IL)或解釋的(例如,Java)代碼,它們使用通信協議(例如,TCP/IP)通過通信網絡(例如,網際網路)通信。
應當認識到,本發明並不局限於在任何一個或一組特定系統上執行,並且本發明並不局限於任何特定的分布式體系結構、網絡、或通信協議。
本發明的各個實施例可使用諸如SmallTalk、Java、J#(J-Sharp)、C++、Ada或C#(C-Sharp)等面向對象的程式語言來編程。其它面向對象的程式語言也可被使用。或者可使用功能的、腳本的和/或邏輯程式語言。本發明的各個方面可在非編程環境(例如,以HTML、XML或其它格式創建的文檔,當在瀏覽器程序的窗口中查看這些文檔時,它們呈現圖形用戶界面(GUI)的方面或執行其它功能)中實現。本發明的各個方面可被實現為編程的或非編程的元素,或其任何適當的組合。此外,本發明的各個實施例可使用可從Microsoft公司獲得的Microsoft.NET技術實現。
在已描述了本發明的一些示例性實施例以後,本領域技術人員應當明確,前述純粹是示例性而不是限制性的,它們僅是作為示例而給出的。許多修改和其它示例性實施例是在本領域普通技術人員範圍之內的,並且構想它們落入本發明的範圍之內。特別地,儘管本文中所給出的許多示例涉及方法動作或系統元件的特定組合,但是應當理解,那些動作和那些元件能以其它方式組合來實現相同的目的。僅結合一個實施例討論的動作、元件和特徵並不旨在被排除在其它實施例中的類似角色之外。此外,對於所附權利要求書中所述的一個或多個手段加功能限制,這些手段並不旨在被局限於本文中所解釋的用於執行所述功能的手段,而是旨在將任何已知或有待開發的、用於執行所述功能的等效手段覆蓋在範圍之內。
在所附權利要求書中使用序數項「第一」、「第二」、「第三」等等來修飾權項元素本身並不意味著任何優先級、優先權、或是一個權項元素排在另一個之前、或者執行方法的動作的時間順序,而是純粹被用作標記以將具有特定名稱的一個權項元素與另一具有相同名稱(除了使用了序數項以外)的元素區別開來,以區別各權項元素。
權利要求
1.一種確定多任務作業系統的處理器在執行第一處理線程的一個代碼部分中消耗的實際時間量的方法,所述方法包括以下動作(A)接收指示定義所述代碼部分的執行開始時間和結束時間的第一時間間隔的第一信息;(B)接收指示在所述第一時間間隔內所發生的、期間所述處理器執行不同於所述第一處理線程的處理線程的一個或多個第二時間間隔的第二信息;以及(C)基於所述第一和第二信息,確定執行所述代碼部分中所消耗的實際時間量。
2.如權利要求1所述的方法,其特徵在於,動作(C)包括從所述第一時間間隔減去所述一個或多個第二時間間隔的總合時間。
3.如權利要求1所述的方法,其特徵在於,還包括以下動作(D)接收指示在所述第一時間間隔期間獲得所述第一信息所消耗的額外開銷時間的第三信息,其中動作(C)包括從所述第一時間間隔減去所述額外開銷時間以及所述一個或多個第二時間間隔的總合時間。
4.如權利要求1所述的方法,其特徵在於,所述第二信息包括多個信息元素,每個第一信息元素指定一特定時間、在所述特定時間所述處理器從其切換上下文的舊線程、以及在所述特定時間所述處理器將上下文切換到的新線程,其中動作(C)包括基於所述信息元素,為所述一個或多個第二時間間隔的每一個確定所述第二時間間隔的開始時間和結束時間的動作(1)。
5.如權利要求1所述的方法,其特徵在於,所述第一信息包括多個第一信息元素,每個所述第一信息元素指定一時間、一處理線程及一事件類型,其中動作(C)包括基於所述多個第一信息元素確定所述第一時間間隔的開始時間和結束時間的動作(1)。
6.如權利要求5所述的方法,其特徵在於,所述第二信息包括多個第二信息元素,每個所述第二信息元素指定一特定時間、在所述特定時間所述處理器從其切換上下文的舊線程、以及在所述特定時間所述處理器將上下文切換到的新線程,其中所述方法還包括接收包括一個或多個第三信息元素的第三信息的動作(D),每個所述第三信息元素指定在執行一類事件中所消耗的時間,其中動作(C)還包括以下動作(2)基於所述第二信息元素,為所述一個或多個第二時間間隔中的每一個確定所述第二時間間隔的開始時間和結束時間,(3)從所述第一和第二信息元素確定所述處理器在獲得所述第一信息中消耗的總的額外開銷時間,以及(4)基於在動作(C)(1)-(C)(3)中所作的確定,確定在執行所述代碼部分中所消耗的實際時間量。
7.如權利要求1所述的方法,其特徵在於,動作(A)-(C)是在計算機系統上執行的。
8.一種用於確定多任務作業系統的處理器在執行第一處理線程的一個代碼部分中消耗的實際處理器時間量的系統,所述系統包括實際時間生成器,用於接收指示定義所述代碼部分的執行開始時間和結束時間的第一時間間隔的第一信息,接收指示在所述第一時間間隔內發生的、期間所述處理器執行不同於所述第一處理線程的處理線程的一個或多個第二時間間隔的第二信息,以及基於所述第一和第二信息,生成在執行所述代碼部分中所消耗的實際處理器時間量。
9.如權利要求8所述的系統,其特徵在於,所述實際時間生成器用於從所述第一時間間隔減去所述一個或多個第二時間間隔的總合時間。
10.如權利要求8所述的系統,其特徵在於,所述實際時間生成器用於接收指示在所述第一時間間隔期間獲得所述第一信息所消耗的額外開銷時間的第三信息,並從所述第一時間間隔減去所述額外開銷時間以及所述一個或多個第二時間間隔的總合時間。
11.如權利要求8所述的系統,其特徵在於,所述第二信息包括多個信息元素,每個第一信息元素指定一特定時間、在所述特定時間所述處理器從其切換上下文的舊線程、以及在所述特定時間所述處理器將上下文切換到的新線程,並且其中所述實際時間生成器用於基於所述信息元素,為所述一個或多個第二時間間隔中的每一個確定所述第二時間間隔的開始時間和結束時間。
12.如權利要求8所述的系統,其特徵在於,所述第一信息包括多個第一信息元素,每個所述第一信息元素指定一時間、一處理線程及一事件類型,並且其中所述實際時間生成器用於基於所述多個第一信息元素確定所述第一時間間隔的開始時間和結束時間。
13.如權利要求12所述的系統,其特徵在於,所述第二信息包括多個第二信息元素,每個所述第二信息元素指定一特定時間、在所述特定時間所述處理器從其切換上下文的舊線程、以及在所述特定時間所述處理器將上下文切換到的新線程,並且其中所述實際時間生成器用於接收包括一個或多個第三信息元素的第三信息,每個第三信息元素指定在執行一類事件中所消耗的時間,並且其中所述實際時間生成器用於基於所述第二信息元素為所述一個或多個第二時間間隔中的每一個確定所述第二時間間隔的開始時間和結束時間,從所述第一和第二信息元素確定所述處理器在獲得所述第一信息中消耗的總的額外開銷時間,以及基於在動作(C)(1)-(C)(3)中所作的確定來確定在執行所述代碼部分中所消耗的實際時間量。
14.如權利要求8所述的系統,其特徵在於,所述實際時間生成器包括用於生成在執行所述代碼部分中所消耗的實際處理器時間量的裝置。
15.一種電腦程式產品,包括計算機可讀介質;以及存儲在所述計算機可讀介質上的計算機可讀信號,所述計算機可讀信號定義作為由計算機執行的結果控制所述計算機執行確定多任務作業系統的處理器在執行第一處理線程的一個代碼部分中消耗的實際時間量的過程,所述過程包括以下動作(A)接收指示定義所述代碼部分的執行開始時間和結束時間的第一時間間隔的第一信息;(B)接收指示在所述第一時間間隔內所發生的、期間所述處理器執行不同於所述第一處理線程的處理線程的一個或多個第二時間間隔的第二信息;以及(C)基於所述第一和第二信息,確定執行所述代碼部分中所消耗的實際時間量。
16.如權利要求15所述的電腦程式產品,其特徵在於,動作(C)包括從所述第一時間間隔減去所述一個或多個第二時間間隔的總合時間。
17.如權利要求15所述的電腦程式產品,其特徵在於,所述過程還包括以下動作(D)接收指示在所述第一時間間隔期間獲得所述第一信息所消耗的額外開銷時間的第三信息,其中動作(C)包括從所述第一時間間隔減去所述額外開銷時間以及所述一個或多個第二時間間隔的總合時間。
18.如權利要求15所述的電腦程式產品,其特徵在於,所述第二信息包括多個信息元素,每個第一信息元素指定一特定時間、在所述特定時間所述處理器從其切換上下文的舊線程、以及在所述特定時間所述處理器將上下文切換到的新線程,其中動作(C)包括基於所述信息元素,為所述一個或多個第二時間間隔確定所述第二時間間隔的開始時間和結束時間的動作(1)。
19.如權利要求15所述的電腦程式產品,其特徵在於,所述第一信息包括多個第一信息元素,每個所述第一信息元素指定一時間、一處理線程及一事件類型,其中動作(C)包括基於所述多個第一信息元素確定所述第一時間間隔的開始時間和結束時間的動作(1)。
20.如權利要求15所述的電腦程式產品,其特徵在於,所述第二信息包括多個第二信息元素,每個所述第二信息元素指定一特定時間、在所述特定時間所述處理器從其切換上下文的舊線程、以及在所述特定時間所述處理器將上下文切換到的新線程,其中所述過程還包括接收包括一個或多個第三信息元素的第三信息的動作(D),每個所述第三信息元素指定在執行一類事件中所消耗的時間,其中動作(C)還包括以下動作(2)基於所述第二信息元素,為所述一個或多個第二時間間隔中的每一個確定所述第二時間間隔的開始時間和結束時間,(3)從所述第一和第二信息元素確定所述處理器在獲得所述第一信息中消耗的總的額外開銷時間,以及(4)基於在動作(C)(1)-(C)(3)中所作的確定,確定在執行所述代碼部分中所消耗的實際時間量。
全文摘要
本發明提供確定處理器在執行代碼部分中消耗的實際時間量的系統和方法。代碼部分的實際執行時間可通過將對應於代碼部分的上下文切換和/或額外開銷時間納入考慮範圍來準確地確定。確定代碼部分的實際執行時間可包括記錄在代碼部分的執行期間所發生的上下文切換和時間值。此信息以及額外開銷測量可被用來生成代碼部分的實際執行時間,如將在以下更加詳細地討論。例如,可從經過時間減去上下文切換所導致的換出時間間隔和與時間測量相關聯的額外開銷時間來得到代碼部分的實際執行時間。
文檔編號G06F9/46GK1834904SQ200610004500
公開日2006年9月20日 申請日期2006年2月15日 優先權日2005年3月17日
發明者B·M·諾爾特, M·D·菲爾茲, R·T·沃戴克, S·M·卡洛爾 申請人:微軟公司