專利名稱:系統(tǒng)管理程序調(diào)度器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng),尤其涉及計(jì)算機(jī)系統(tǒng)中的虛擬高速緩存拓?fù)浣Y(jié)構(gòu)。
背景技術(shù):
虛擬機(jī)可具有作為單核處理器展示給客操作系統(tǒng)的一個(gè)或多個(gè)虛擬處理器。當(dāng)客操作系統(tǒng)運(yùn)行工作負(fù)載時(shí),它將線程調(diào)度到虛擬處理器上。系統(tǒng)管理程序運(yùn)行表示虛擬處理器的線程并將其調(diào)度到主存VM(虛擬機(jī))的物理機(jī)的邏輯處理器上。運(yùn)行線程中的工作負(fù)載,并且執(zhí)行某些有希望有用的工作。系統(tǒng)管理程序隨后在相同或不同的邏輯處理器上運(yùn)行另一線程。系統(tǒng)管理程序調(diào)度器因此必須確定要調(diào)度特定虛擬處理器的時(shí)間和地點(diǎn)兩者。虛擬處理器的正確布置是維持高水平性能的關(guān)鍵。當(dāng)前,系統(tǒng)管理程序相同地對(duì)待各邏輯處理器。例如,系統(tǒng)管理程序可調(diào)度虛擬處理器在第一 NUMA節(jié)點(diǎn)(非均勻存儲(chǔ)器體系結(jié)構(gòu)節(jié)點(diǎn))中運(yùn)行,然后將其移動(dòng)至另一 NUMA 節(jié)點(diǎn)。該技術(shù)確保了盡可能快地運(yùn)行工作負(fù)載并且容忍由于高速緩存未中而導(dǎo)致的任何開銷。作出將虛擬處理器作為單核處理器來展示的決策以使主機(jī)的物理體系結(jié)構(gòu)的虛擬化變得更容易。例如,客操作系統(tǒng)被這樣編寫以使得在引導(dǎo)時(shí)檢查拓?fù)浣Y(jié)構(gòu)。如果客機(jī)被移動(dòng)至帶有不同拓?fù)浣Y(jié)構(gòu)的另一主機(jī),則它可能低效地運(yùn)作,因?yàn)樗A(yù)期的資源不再存在。由于包括共享各種不同高速緩存的邏輯處理器的系統(tǒng)變得越來越常見,將系統(tǒng)管理程序配置成充分利用這些高速緩存將是有益的。此外,將某種高速緩存拓?fù)浣Y(jié)構(gòu)展示給客操作系統(tǒng)從而使得客操作系統(tǒng)中的調(diào)度器也可以作出明智的調(diào)度決策將是有益的。
發(fā)明內(nèi)容
公開了用于配置系統(tǒng)管理程序以利用主計(jì)算機(jī)系統(tǒng)的物理高速緩存拓?fù)浣Y(jié)構(gòu)的技術(shù)。在一示例性實(shí)施例中,系統(tǒng)管理程序被配置成利用處理器拓?fù)浣Y(jié)構(gòu)、高速緩存分層結(jié)構(gòu)和存儲(chǔ)器之間的距離。例如,在一示例性實(shí)施例中,一種方法包括用于使得響應(yīng)于接收到要調(diào)度指示虛擬機(jī)的虛擬處理器的線程的請(qǐng)求來生成空閑邏輯處理器列表的操作;以及用于使得指示虛擬處理器的線程被調(diào)度在列表中與種子邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上的操作。在另一示例性實(shí)施例中,一種方法包括用于將多個(gè)單核虛擬處理器展示給虛擬機(jī)的操作;用于響應(yīng)于接收到要執(zhí)行指示單核虛擬處理器的線程的請(qǐng)求來生成空閑邏輯處理器列表的操作;用于標(biāo)識(shí)當(dāng)前正在執(zhí)行指示虛擬機(jī)的單核虛擬處理器的線程的邏輯處理器的操作;以及用于將指示虛擬處理器的線程調(diào)度在一邏輯處理器上的操作,其中該邏輯處理器是列表中與當(dāng)前正在執(zhí)行指示虛擬機(jī)的單核虛擬處理器的線程的最大數(shù)量的邏輯處理器共享高速緩存。又一示例性實(shí)施例,一種方法包括用于使得指示虛擬機(jī)的虛擬處理器的線程被分配要在其上執(zhí)行的獨(dú)特邏輯處理器的操作;用于使得響應(yīng)于接收到要執(zhí)行指示虛擬處理器的線程的請(qǐng)求來生成空閑邏輯處理器列表的操作;以及用于使得指示虛擬處理器的線程被調(diào)度在與被分配來執(zhí)行指示虛擬處理器的線程的獨(dú)特邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上的操作。除前述的之外,在構(gòu)成所公開的主題的一部分的權(quán)利要求書、 附圖,以及文本中描述了其他方面。本領(lǐng)域技術(shù)人員將理解,此處所描述的一個(gè)或多個(gè)方面可包括但不限于用于實(shí)現(xiàn)此處所描述的本文所述方面的電路和/或編程;該電路和/或編程實(shí)質(zhì)上可以是配置成實(shí)現(xiàn)本文所述方面的硬件、軟件和/或固件的任何組合,這取決于系統(tǒng)設(shè)計(jì)者的設(shè)計(jì)選擇。以上是概述,并且因此必然包含細(xì)節(jié)的簡(jiǎn)化、一般化及省略。本領(lǐng)域技術(shù)人員將明白,本概述只是說明性的并且決不旨在是限制性的。
圖1描繪了其中可實(shí)現(xiàn)此處所描述的主題的示例計(jì)算機(jī)系統(tǒng)
圖2描繪了其中可實(shí)現(xiàn)此處所描述的主題的操作環(huán)境。
圖3描繪了其中可實(shí)現(xiàn)此處所描述的主題的操作環(huán)境。
圖4描繪了其中可實(shí)現(xiàn)此處所描述的主題的數(shù)據(jù)中心。
圖5描繪了其中可實(shí)現(xiàn)此處所描述的主題的操作環(huán)境。
圖6描繪了一操作過程。
圖7描繪了圖6的操作過程的替換實(shí)施例。
圖8描繪了一操作過程。
圖9描繪了圖8的操作過程的替換實(shí)施例。
圖10描繪了一操作過程。
圖11描繪了圖10的操作過程的替換實(shí)施例。
圖12描繪了圖11的操作過程的替換實(shí)施例。
圖13描繪了圖12的操作過程的替換實(shí)施例。
具體實(shí)施例方式各實(shí)施例可在一個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng)上執(zhí)行。圖1及以下討論旨在提供可在其中實(shí)現(xiàn)所公開的主題的合適計(jì)算環(huán)境的簡(jiǎn)要概括描述。貫穿本說明書使用的術(shù)語“電路”可包括諸如硬件中斷控制器、硬盤驅(qū)動(dòng)器、網(wǎng)絡(luò)適配器、圖形處理器、基于硬件的視頻/音頻編解碼器等硬件組件,以及用于操作這些硬件的固件。術(shù)語“電路”還可包括微處理器、專用集成電路、和/或一個(gè)或多個(gè)邏輯處理器,例如由從固件和/或軟件中讀取的指令配置的多核通用處理單元的一個(gè)或多個(gè)核。邏輯處理器可由指令來配置,指令具體化可用于執(zhí)行從例如RAM、R0M、固件和/或大容量存儲(chǔ)等存儲(chǔ)器加載的功能的邏輯。在其中電路包括硬件和軟件的組合的示例實(shí)施例中,實(shí)現(xiàn)者可以編寫具體化邏輯的源代碼,該源代碼隨后被編譯成可由邏輯處理器執(zhí)行的機(jī)器可讀代碼。因?yàn)楸绢I(lǐng)域技術(shù)人員可以明白現(xiàn)有技術(shù)已經(jīng)進(jìn)化到硬件實(shí)現(xiàn)的功能或軟件實(shí)現(xiàn)的功能之間幾乎沒有差別的地步,因而選擇硬件還是軟件來實(shí)現(xiàn)此處描述的功能只是一個(gè)設(shè)計(jì)選擇。 換言之,由于本領(lǐng)域的技術(shù)人員可以理解軟件進(jìn)程可被變換成等效的硬件結(jié)構(gòu),且硬件結(jié)構(gòu)本身可被變換成等效的軟件進(jìn)程,因此選擇硬件實(shí)現(xiàn)或是軟件實(shí)現(xiàn)留給了實(shí)現(xiàn)者。
現(xiàn)在參考圖1,描繪了示例性計(jì)算系統(tǒng)100。計(jì)算機(jī)系統(tǒng)100可包括邏輯處理器 102,例如,執(zhí)行核。盡管示出了一個(gè)邏輯處理器102,但在其他實(shí)施例中,計(jì)算機(jī)系統(tǒng)100可具有多個(gè)邏輯處理器,例如每一處理器基板有多個(gè)執(zhí)行核,和/或各自可具有多個(gè)執(zhí)行核的多個(gè)處理器基板。如圖所示,各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)110可由一個(gè)或多個(gè)系統(tǒng)總線互聯(lián),系統(tǒng)總線將各種系統(tǒng)組件耦合到邏輯處理器102。系統(tǒng)總線可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。在示例實(shí)施例中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)110可以包括例如隨機(jī)存取存儲(chǔ)器(RAM) 104、存儲(chǔ)設(shè)備106(例如電機(jī)硬盤驅(qū)動(dòng)器、固態(tài)硬盤驅(qū)動(dòng)器等)、固件108(例如閃速RAM或ROM)、以及可移動(dòng)存儲(chǔ)設(shè)備118 (例如⑶-ROM、軟盤、DVD、閃速驅(qū)動(dòng)器、外部存儲(chǔ)設(shè)備等)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可使用其他類型的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),如磁帶盒、閃存卡、和/或數(shù)字視頻盤。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)110可以為計(jì)算機(jī)100提供對(duì)可執(zhí)行指令122、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的非易失性和易失性存儲(chǔ),實(shí)現(xiàn)管理器250的可執(zhí)行指令在以下附圖中描述?;据斎?輸出系統(tǒng)(BIOS) 120可被存儲(chǔ)在固件108中,它包含幫助在諸如啟動(dòng)期間在計(jì)算機(jī)系統(tǒng)100內(nèi)的各元件之間傳遞信息的基本例程。包括操作系統(tǒng)和/或應(yīng)用程序的多個(gè)程序可被存儲(chǔ)在固件108、存儲(chǔ)設(shè)備106、RAM 104和/或可移動(dòng)存儲(chǔ)設(shè)備118上,并且可由邏輯處理器102來執(zhí)行。命令和信息可由計(jì)算機(jī)100通過輸入設(shè)備116來接收,輸入設(shè)備可包括但不限于鍵盤和定點(diǎn)設(shè)備。其它輸入設(shè)備可以包括話筒、操縱桿、游戲手柄、掃描儀等等。這些和其它輸入設(shè)備常通過耦合到系統(tǒng)總線的串行端口接口連接到邏輯處理器102,但也可通過其它接口連接,如并行端口、游戲端口或通用串行總線(USB)。顯示器或其他類型的顯示設(shè)備也可經(jīng)由諸如視頻適配器等可以是圖形處理器112的一部分或可連接到圖形處理器單元 112的接口來連接到系統(tǒng)總線。除了顯示器之外,計(jì)算機(jī)通常包括其他外圍輸出設(shè)備(未示出),如揚(yáng)聲器和打印機(jī)。圖1的示例性系統(tǒng)還包括主適配器、小型計(jì)算機(jī)系統(tǒng)接口(SCSI) 總線和連接到SCSI總線的外部存儲(chǔ)設(shè)備。計(jì)算機(jī)系統(tǒng)100可使用至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),如遠(yuǎn)程計(jì)算機(jī)的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)可以是另一計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括上面關(guān)于計(jì)算機(jī)系統(tǒng)100所述的許多或全部元件。當(dāng)在LAN或WAN聯(lián)網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)系統(tǒng)100可通過網(wǎng)絡(luò)接口卡114連接至LAN或WAN。NIC 114可以是內(nèi)置或外置的,其可以連接到系統(tǒng)總線。在聯(lián)網(wǎng)環(huán)境中,相對(duì)于計(jì)算機(jī)系統(tǒng)100所描述的程序模塊或其部分可被儲(chǔ)存在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中??梢岳斫?,所描述的網(wǎng)絡(luò)連接是示例性的,且可以使用在計(jì)算機(jī)之間建立通信鏈路的其他手段。 此外,盡管可想到的是所公開的主題的許多實(shí)施例尤其適用于計(jì)算機(jī)化的系統(tǒng),但是在本說明中不意味著將所公開的主題限于那些實(shí)施例。 轉(zhuǎn)向圖2,系統(tǒng)管理程序微內(nèi)核202可被配置成控制并仲裁對(duì)計(jì)算機(jī)系統(tǒng)200的硬件的訪問。廣泛而言,系統(tǒng)管理程序微內(nèi)核202可以生成稱為分區(qū)的執(zhí)行環(huán)境,如子分區(qū)1 到子分區(qū)N(其中N是大于1的整數(shù))。在各實(shí)施例中,子分區(qū)是系統(tǒng)管理程序微內(nèi)核202 支持的基本隔離單元。即,每一子分區(qū)可被映射到一組在系統(tǒng)管理程序微內(nèi)核202的控制下的硬件資源,例如存儲(chǔ)器、設(shè)備、邏輯處理器周期等,并且系統(tǒng)管理程序微內(nèi)核202可隔離一個(gè)分區(qū)中的進(jìn)程不使其訪問另一分區(qū)的資源,例如,一個(gè)分區(qū)中的客操作系統(tǒng)可與另一分區(qū)的存儲(chǔ)器隔離,且因此不能檢測(cè)到其分區(qū)外部的存儲(chǔ)器地址。在各實(shí)施例中,系統(tǒng)管理程序微內(nèi)核202可以是獨(dú)立的軟件產(chǎn)品、操作系統(tǒng)的一部分、嵌入在主板的固件中、一個(gè)或多個(gè)專用集成電路、或其組合。系統(tǒng)管理程序微內(nèi)核202可以通過限制客操作系統(tǒng)的系統(tǒng)存儲(chǔ)器視圖來實(shí)施分區(qū)??痛鎯?chǔ)器是由系統(tǒng)管理程序控制的分區(qū)的存儲(chǔ)器視圖。客物理地址能由系統(tǒng)物理地址 (SPA)來支持,即,由系統(tǒng)管理程序管理的、物理計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器。在一實(shí)施例中,GPA 和SPA可被安排成存儲(chǔ)器塊,即,一個(gè)或多個(gè)存儲(chǔ)器頁。當(dāng)客機(jī)使用其頁表向一個(gè)塊寫入時(shí),數(shù)據(jù)實(shí)際被存儲(chǔ)在根據(jù)系統(tǒng)管理程序使用的系統(tǒng)級(jí)頁表而具有不同系統(tǒng)地址的塊中。在所描繪的示例中,父分區(qū)組件204也可被認(rèn)為是類似于Xen的開源系統(tǒng)管理程序的域0,可以與系統(tǒng)管理程序微內(nèi)核202交互來提供虛擬化層。該操作環(huán)境中的父分區(qū) 204可被配置成通過使用虛擬化服務(wù)提供者228 (VSP)來向在子分區(qū)I-N中執(zhí)行的客操作系統(tǒng)提供資源,虛擬化服務(wù)提供者在開源社區(qū)中通常被稱為后端驅(qū)動(dòng)程序。廣泛而言,VSP 2 可用于通過虛擬化服務(wù)客戶端(VSC)(開源社區(qū)中通常稱為前端驅(qū)動(dòng)程序)復(fù)用到硬件資源的接口,并經(jīng)由通信協(xié)議與虛擬化服務(wù)客戶端進(jìn)行通信。如圖所示,虛擬化服務(wù)客戶端可以在客操作系統(tǒng)的上下文中執(zhí)行。這些驅(qū)動(dòng)程序不同于客機(jī)中的其余驅(qū)動(dòng)程序,因?yàn)橄蛩鼈兲峁┝讼到y(tǒng)管理程序而非客機(jī)。如附圖仿真器234所示,例如虛擬化集成驅(qū)動(dòng)電子設(shè)備(IDE設(shè)備)、虛擬化視頻適配器、虛擬化NIC等可被配置成在父分區(qū)204中運(yùn)行并被附連到可供客操作系統(tǒng)220和222 使用的資源。例如,當(dāng)客操作系統(tǒng)觸摸虛擬設(shè)備的寄存器或映射到虛擬設(shè)備202的存儲(chǔ)器時(shí),微內(nèi)核系統(tǒng)管理程序可截取請(qǐng)求并傳遞客機(jī)試圖寫入相關(guān)聯(lián)的仿真器的值。每一子分區(qū)可包括一個(gè)或多個(gè)虛擬處理器Q30和23 ,客操作系統(tǒng)Q20和222) 可管理并調(diào)度線程以便在這些虛擬處理器上執(zhí)行。一般而言,虛擬處理器是提供具有特定架構(gòu)的物理處理器的表示的可執(zhí)行指令以及相關(guān)聯(lián)的狀態(tài)信息。例如,一個(gè)虛擬機(jī)可具有帶有英特爾x86處理器特性的虛擬處理器,而另一虛擬處理器可具有PowerPC處理器的特性。本例中的虛擬處理器可被映射到計(jì)算機(jī)系統(tǒng)的邏輯處理器,使得實(shí)現(xiàn)虛擬處理器的指令將受到邏輯處理器的支持。由此,在包括多個(gè)邏輯處理器的實(shí)施例中,虛擬處理器可以由邏輯處理器同時(shí)執(zhí)行,同時(shí)例如其他邏輯處理器執(zhí)行系統(tǒng)管理程序指令。分區(qū)中虛擬處理器和存儲(chǔ)器的組合可被認(rèn)為是虛擬機(jī)。客操作系統(tǒng)可包括任何操作系統(tǒng),如來自微軟 、蘋果 、開源社區(qū)等的操作系統(tǒng)。 客操作系統(tǒng)可包括用戶/內(nèi)核操作模式,并且可具有能包括調(diào)度器、存儲(chǔ)器管理器等的內(nèi)核。一般而言,內(nèi)核模式可包括邏輯處理器中的執(zhí)行模式,該執(zhí)行模式授予至少對(duì)特權(quán)處理器指令的訪問。每一客操作系統(tǒng)可具有相關(guān)聯(lián)的文件系統(tǒng),該文件系統(tǒng)上存儲(chǔ)有諸如終端服務(wù)器、電子商務(wù)服務(wù)器、電子郵件服務(wù)器等應(yīng)用以及客操作系統(tǒng)本身。客操作系統(tǒng)可調(diào)度線程來在虛擬處理器上執(zhí)行,并且可實(shí)現(xiàn)此類應(yīng)用的實(shí)例?,F(xiàn)在參考圖3,示出了對(duì)上述圖2的替換體系結(jié)構(gòu)。圖3描繪了與圖2的組件相類似的組件;然而,在該示例實(shí)施例中,系統(tǒng)管理程序304可包括微內(nèi)核組件和來自圖2的父分區(qū)204的組件,如虛擬化服務(wù)提供者2 和設(shè)備驅(qū)動(dòng)程序224,而管理操作系統(tǒng)302可包含例如用于配置系統(tǒng)管理程序304的配置實(shí)用程序。在該體系結(jié)構(gòu)中,系統(tǒng)管理程序304可以執(zhí)行與圖2的系統(tǒng)管理程序微內(nèi)核202相同或相似的功能;然而,在該體系結(jié)構(gòu)中,系統(tǒng)管理程序304可被配置成向在子分區(qū)中執(zhí)行的客操作系統(tǒng)提供資源。圖3的系統(tǒng)管理程序304可以是獨(dú)立的軟件產(chǎn)品、操作系統(tǒng)的一部分、嵌入在主板的固件內(nèi),或者系統(tǒng)管理程序304的一部分可以由專用集成電路來實(shí)現(xiàn)。簡(jiǎn)言之,圖4描繪了用于實(shí)現(xiàn)所公開的主題的操作環(huán)境。例如,多個(gè)計(jì)算機(jī)系統(tǒng) 404-410可在數(shù)據(jù)中心400中被耦合在一起(雖然描繪了四個(gè)計(jì)算機(jī)系統(tǒng),但本領(lǐng)域技術(shù)人員可以理解數(shù)據(jù)中心400可包括更多或更少的計(jì)算機(jī)系統(tǒng))。所描繪的計(jì)算機(jī)系統(tǒng)可具有不同的拓?fù)浣Y(jié)構(gòu),并且此外,它們可具有不同的特征,例如,不同數(shù)量的RAM、不同的RAM速度、不同量的邏輯處理器、和/或具有不同速度或指令集的邏輯處理器。如圖所示,計(jì)算機(jī)系統(tǒng)406具有對(duì)稱多處理拓?fù)浣Y(jié)構(gòu)(SMP)或‘扁平的’拓?fù)浣Y(jié)構(gòu)。 一般而言,SMP是包括連接到單個(gè)共享存儲(chǔ)器的多個(gè)處理器的計(jì)算機(jī)體系結(jié)構(gòu)。在該安排中,存儲(chǔ)器控制器可管理去往和來自存儲(chǔ)器的數(shù)據(jù)流。存儲(chǔ)器存取對(duì)于每一邏輯處理器可以是統(tǒng)一的,并且每一邏輯處理器可以存取整個(gè)范圍的存儲(chǔ)器,即,整個(gè)系統(tǒng)物理地址。該拓?fù)浣Y(jié)構(gòu)對(duì)于具有相對(duì)較少數(shù)量的處理器的計(jì)算機(jī)系統(tǒng)工作良好,但當(dāng)計(jì)算機(jī)系統(tǒng)包括許多處理器時(shí),所有的處理器都對(duì)共享存儲(chǔ)器總線的訪問展開競(jìng)爭(zhēng),系統(tǒng)的性能可能降低。此外,計(jì)算機(jī)系統(tǒng)的復(fù)雜性極大地增加了,這進(jìn)而驅(qū)動(dòng)了每一處理器的價(jià)格上升。計(jì)算機(jī)系統(tǒng)404、408和410具有NUMA節(jié)點(diǎn)。基于NUMA的計(jì)算機(jī)系統(tǒng)一般可被認(rèn)為是由較小的計(jì)算機(jī)系統(tǒng)組成的計(jì)算機(jī)。在該示例中,每一 NUMA節(jié)點(diǎn)可包括一個(gè)或多個(gè)邏輯處理器和本地存儲(chǔ)器。NUMA節(jié)點(diǎn)內(nèi)部的存儲(chǔ)器被認(rèn)為是本地存儲(chǔ)器,而在其他NUMA節(jié)點(diǎn)中的存儲(chǔ)器被認(rèn)為是遠(yuǎn)程存儲(chǔ)器,因?yàn)橹挥泄?jié)點(diǎn)內(nèi)部的處理器才被連接到同一存儲(chǔ)器總線。NUMA節(jié)點(diǎn)通過高速緩存一致性域互連來互連,這允許一個(gè)NUMA節(jié)點(diǎn)中的處理器用一致的方式來存取其他NUMA節(jié)點(diǎn)中的存儲(chǔ)器。因此,系統(tǒng)物理地址對(duì)于每一處理器是統(tǒng)一的。 或者換言之,系統(tǒng)物理地址20000對(duì)于計(jì)算機(jī)系統(tǒng)中的每一處理器是相同的。區(qū)別在于,對(duì)于某些處理器,存儲(chǔ)器地址20000是本地存儲(chǔ)器地址,例如在它們NUMA節(jié)點(diǎn)內(nèi)部,而對(duì)于其他處理器,存儲(chǔ)器地址20000是遠(yuǎn)程的,例如在它們NUMA節(jié)點(diǎn)外部。一般而言,本地存儲(chǔ)器可比遠(yuǎn)程存儲(chǔ)器更快地存取,而本地對(duì)遠(yuǎn)程存取時(shí)間之間的關(guān)系被稱為NUMA比率。NUMA比率為1比2意味著與本地系統(tǒng)物理地址相比要花費(fèi)兩倍多的處理器周期來訪問特定遠(yuǎn)程系統(tǒng)物理地址。NUMA減輕了 SMP系統(tǒng)通過限制任何一個(gè)存儲(chǔ)器總線上的處理器數(shù)量而引起的瓶頸,并且一般地比具有相同量的邏輯處理器的SMP計(jì)算機(jī)系統(tǒng)便宜。轉(zhuǎn)向圖5,圖5示出了可在其中實(shí)現(xiàn)所公開的主題的操作環(huán)境。如本領(lǐng)域技術(shù)人員可以理解的,所公開的主題不必在具有所示體系結(jié)構(gòu)的計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。相反,所示體系結(jié)構(gòu)只是用來解釋概念的一個(gè)示例。因此,所公開的主題可被結(jié)合到包括不同量的NUMA節(jié)點(diǎn)、虛擬機(jī)、高速緩存拓?fù)浣Y(jié)構(gòu)、邏輯處理器等的不同環(huán)境中。圖5示出通過高速緩存一致性域互連來連接的兩個(gè)示例NUMA節(jié)點(diǎn)(500和502)。 所示NUMA節(jié)點(diǎn)具有不同的高速緩存拓?fù)浣Y(jié)構(gòu)。例如,NUMA節(jié)點(diǎn)500中的每一處理器共享3 級(jí)(“L3”)高速緩存,而兩組處理器共享2級(jí)(“L2”)高速緩存。每一處理器(506-516) 被示為帶有其自己的1級(jí)(“Li”)高速緩存。NUMA節(jié)點(diǎn)502中的邏輯處理器(518-524) 共享3級(jí)高速緩存并具有它們自己的1級(jí)高速緩存。本領(lǐng)域技術(shù)人員可以理解,所示高速緩存拓?fù)浣Y(jié)構(gòu)只是出于說明的目的,并且所公開的主題不限于在具有任何特定高速緩存拓?fù)浣Y(jié)構(gòu)的系統(tǒng)中實(shí)現(xiàn)。每一 NUMA節(jié)點(diǎn)(500和502)也被示為包括其自己的隨機(jī)存取存儲(chǔ)器(526 和 528)。處理器高速緩存通常用于指令以及此處稱為信息的數(shù)據(jù)的臨時(shí)存儲(chǔ)。在作出請(qǐng)求時(shí),邏輯處理器要求用于執(zhí)行該請(qǐng)求的指令以及要對(duì)其執(zhí)行該指令的數(shù)據(jù)。因?yàn)檫壿嬏幚砥靼创笥赗AM的速度操作,所以將高速度的高速緩存添加到處理器并且構(gòu)想算法來預(yù)期邏輯處理器將需要什么信息并試圖將該信息存儲(chǔ)在高速緩存中。通常,1級(jí)高速緩存是非常小的,這允許它變得非??焖伲哂欣?個(gè)周期的等待時(shí)間,即,訪問存儲(chǔ)器和檢索信息所需的處理器周期數(shù)。如果信息未出現(xiàn)在Ll高速緩存中,則發(fā)生高速緩存未中并且邏輯處理器檢查其L2高速緩存,L2高速緩存是帶有稍長(zhǎng)的例如9個(gè)周期左右的等待時(shí)間的稍大的存儲(chǔ)器池。如果數(shù)據(jù)不在L2或Ll中,則邏輯處理器檢查其L3高速緩存。L3高速緩存遠(yuǎn)大于Ll和L2,并且其等待時(shí)間是例如23個(gè)周期。伴隨著每一次高速緩存未中,邏輯處理器查看它的下一個(gè)級(jí)別的高速緩存直到它需要從RAM或大容量存儲(chǔ)設(shè)備中取回信息。系統(tǒng)管理程序550,即圖2的微內(nèi)核系統(tǒng)管理程序202或圖3的系統(tǒng)管理程序304, 可包括調(diào)度器552,調(diào)度器552可被配置成將指示虛擬處理器的線程調(diào)度為在邏輯處理器 (506-516或518-524)中的一個(gè)上運(yùn)行。為了確定如何調(diào)度傳入線程,系統(tǒng)管理程序調(diào)度器 552可以訪問在下文中更詳細(xì)地描述的各種信息(554-562)。線程表560可以是存儲(chǔ)在存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu),并且可存儲(chǔ)關(guān)于不同虛擬處理器線程的信息。在接收到要運(yùn)行虛擬處理器的請(qǐng)求時(shí),調(diào)度器552可訪問線程表560并檢索關(guān)于虛擬處理器的信息以便確定要將虛擬處理器調(diào)度到哪里以及怎樣調(diào)度。對(duì)于每一虛擬處理器,線程表560可存儲(chǔ),例如,標(biāo)識(shí)線程最后運(yùn)行時(shí)間的時(shí)間戳、線程是否已經(jīng)被標(biāo)識(shí)為等待時(shí)間敏感的線程、線程最后在其上運(yùn)行的邏輯處理器、對(duì)線程理想的處理器的身份、 線程最后在其中運(yùn)行的NUMA節(jié)點(diǎn)、描述相關(guān)虛擬處理器線程的身份的信息,等等。在一示例性實(shí)施例中,線程表560可由調(diào)度器552使用來調(diào)度虛擬處理器線程。例如,調(diào)度器552可被配置成選擇一空閑處理器以便運(yùn)行位于種子NUMA節(jié)點(diǎn)(例如理想NUMA 節(jié)點(diǎn))或最后運(yùn)行線程的節(jié)點(diǎn)中的傳入線程。在該示例實(shí)施例中,調(diào)度器552可以檢查線程表560來確定傳入線程請(qǐng)求的種子NUMA節(jié)點(diǎn)并將該線程調(diào)度到該種子NUMA節(jié)點(diǎn)上。在一具體示例中,每一 NUMA節(jié)點(diǎn)可保存每一 NUMA節(jié)點(diǎn)的空閑處理器圖(5M和 562)。例如,空閑處理器圖可以是其中每一位表示邏輯處理器的位圖。當(dāng)邏輯處理器運(yùn)行線程時(shí),可以設(shè)置位,并且當(dāng)它完成運(yùn)行線程時(shí),可以重置該位??臻e處理器圖可由調(diào)度器 552使用來確定哪些邏輯處理器是空閑的。在一示例性實(shí)施例中,位圖可被分成多個(gè)圖計(jì)算機(jī)系統(tǒng)中的每一 NUMA節(jié)點(diǎn)有一個(gè)存儲(chǔ)在該NUMA節(jié)點(diǎn)中的圖。該實(shí)施例減少了圖上的沖突,因?yàn)樗鼫p少了試圖訪問同一存儲(chǔ)器來設(shè)置和重置位的處理器的數(shù)量。此外,通過為每一 NUMA節(jié)點(diǎn)維護(hù)一個(gè)圖,調(diào)度器552可以通過檢查與特定NUMA節(jié)點(diǎn)相關(guān)聯(lián)的空閑處理器圖來快速地從候選列表中移除邏輯處理器。例如,傳入線程可在線程表560中將其種子NUMA節(jié)點(diǎn)設(shè)為NUMA節(jié)點(diǎn)500,即,該線程可能最后在該節(jié)點(diǎn)上運(yùn)行或該節(jié)點(diǎn)中的處理器被設(shè)為理想處理器。調(diào)度器552可接收該信息并搜索空閑處理器的空閑處理器圖554。在該示例中,調(diào)度器552從候選列表中排除邏輯處理器518-5 而不必訪問空閑處理器圖562或處理其中的任何信息。在種子NUMA節(jié)點(diǎn)不具有空閑處理器的情況下,調(diào)度器552可被配置成通過訪問NUMA節(jié)點(diǎn)表558中的信息來從下一最接近的NUMA節(jié)點(diǎn)中搜索空閑處理器,該NUMA節(jié)點(diǎn)表 558可能是存儲(chǔ)在存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)。例如,NUMA節(jié)點(diǎn)表558可包括對(duì)于計(jì)算機(jī)系統(tǒng)中的每一 NUMA節(jié)點(diǎn)的節(jié)點(diǎn)距離圖。系統(tǒng)管理程序550可生成根據(jù)存儲(chǔ)器距離來對(duì)NUMA節(jié)點(diǎn)進(jìn)行排序的陣列。例如,NUMA節(jié)點(diǎn)500的圖將顯示NUMA節(jié)點(diǎn)502是靠近的。系統(tǒng)管理程序550可在主系統(tǒng)引導(dǎo)時(shí)生成每一節(jié)點(diǎn)的圖。例如,系統(tǒng)管理程序550可指引NUMA節(jié)點(diǎn)中的每一邏輯處理器訪問來自主機(jī)中所有其他節(jié)點(diǎn)的MM ;記錄往返時(shí)間并從好到差對(duì)時(shí)間進(jìn)行排序;最佳的時(shí)間指示最近的節(jié)點(diǎn)而最差的時(shí)間指示最遠(yuǎn)的節(jié)點(diǎn)。一旦調(diào)度器552選擇了 NUMA節(jié)點(diǎn),可以使用各種算法來選擇具體的邏輯處理器。 在其中虛擬機(jī)具有一個(gè)虛擬處理器的一個(gè)簡(jiǎn)單示例中,調(diào)度器552可確定線程的種子邏輯處理器,并且如果該線程不可用,則調(diào)度器552可訪問高速緩存分層表556來確定將線程調(diào)度到哪里。高速緩存分層表556可包括對(duì)于每一邏輯處理器的位圖陣列,它描述了每一邏輯處理器如何與其NUMA節(jié)點(diǎn)中的其他邏輯處理器共享高速緩存。例如,邏輯處理器506可具有3個(gè)陣列(Li、L2和L3高速緩存各一個(gè)),Ll陣列具有為邏輯處理器506設(shè)置的位以及對(duì)于508-516的空值,L2陣列具有為邏輯處理器506-510設(shè)置的位,而L3陣列示出為邏輯處理器506-516設(shè)置的位。在一個(gè)示例中,調(diào)度器552可被配置成選擇與種子共享最高級(jí)別的高速緩存的空閑邏輯處理器。例如,如果種子是邏輯處理器506,則調(diào)度器552可以選擇邏輯處理器508、邏輯處理器510或邏輯處理器512 (如果任一個(gè)空閑的話),因?yàn)長(zhǎng)2 是這些處理器共享的最高級(jí)別的高速緩存。在一示例性實(shí)施例中,種子邏輯處理器可被設(shè)為最后運(yùn)行線程的處理器。例如,如果虛擬機(jī)包括一個(gè)邏輯處理器,它最高效地在其最后運(yùn)行的邏輯處理器上運(yùn)行,因?yàn)樵撨壿嬏幚砥骶哂泻性撎摂M處理器在其高速緩存中需要的信息的最大幾率。在該示例實(shí)施例中,因?yàn)橐苿?dòng)了虛擬處理器,所以可將種子改為最后運(yùn)行線程的邏輯處理器。調(diào)度算法的復(fù)雜性可隨著被分配到虛擬機(jī)的虛擬處理器的數(shù)量的增加而增大。例如,當(dāng)虛擬機(jī)包括多個(gè)虛擬處理器時(shí),發(fā)明者注意到它們往往使用同一信息。因此,如果虛擬處理器被調(diào)度在共享高速緩存的邏輯處理器上,則高速緩存命中次數(shù)增加,這使得客機(jī)更高效地運(yùn)行。在該示例中,調(diào)度器552可按照虛擬處理器共享物理高速緩存的方式來選擇要運(yùn)行虛擬機(jī)的虛擬處理器的邏輯處理器。該技術(shù)降低了高速緩存未中發(fā)生的幾率,并且在高速緩存未中確實(shí)發(fā)生的情況下,其他虛擬處理器可以使用為一個(gè)虛擬處理器取回的信息。該技術(shù)還降低了一致性未中成本。例如,如果虛擬處理器需要對(duì)高速緩存行的獨(dú)占訪問,則將高速緩存行從運(yùn)行虛擬處理器的邏輯處理器轉(zhuǎn)移至另一邏輯處理器的成本降低了,因?yàn)樾畔⒖梢栽谒鼈児蚕淼母咚倬彺嬷幸苿?dòng)而不必被一路重寫回存儲(chǔ)器中或通過套接字之間的總線來發(fā)送。在多個(gè)虛擬處理器在虛擬機(jī)中執(zhí)行的一示例性實(shí)施例中,每一虛擬處理器可被分配由管理員設(shè)置或由配置程序自動(dòng)設(shè)置的種子邏輯處理器。例如,虛擬處理器534可將邏輯處理器506設(shè)為其理想邏輯處理器而虛擬處理器536可將其理想邏輯處理器設(shè)為邏輯處理器508。當(dāng)調(diào)度器552試圖調(diào)度虛擬處理器534時(shí),調(diào)度器552將確定其理想邏輯處理器是邏輯處理器506并試圖將其調(diào)度到邏輯處理器506上。因?yàn)檎{(diào)度器552試圖將線程保持在它們的理想邏輯處理器上,這將增加高速緩存命中的次數(shù)。在另一示例實(shí)施例中,調(diào)度器552可以不使用種子。相反,系統(tǒng)管理程序調(diào)度器552可以基于諸如虛擬機(jī)530之類的虛擬機(jī)中的其他虛擬處理器的線程的位置來選擇空閑邏輯處理器。在該示例中,調(diào)度器552可被配置成選擇它估計(jì)將具有最小估計(jì)未中成本的邏輯處理器。當(dāng)邏輯處理器試圖從高速緩存中存取信息而該信息不在高速緩存中時(shí)會(huì)發(fā)生高速緩存未中。未中成本是如果信息不在高速緩存中時(shí)將浪費(fèi)的周期量。在該示例實(shí)施例中,調(diào)度器552可以選擇具有最低估計(jì)未中成本的邏輯處理器。例如,調(diào)度器552可被配置成選擇與當(dāng)前正在運(yùn)行虛擬機(jī)的虛擬處理器的最大數(shù)量的邏輯處理器共享高速緩存的空閑處理器。在相同或另一示例中,調(diào)度器552可被配置成選擇與當(dāng)前正在運(yùn)行虛擬機(jī)的虛擬處理器的最大數(shù)量的邏輯處理器共享最大數(shù)量的高速緩存的空閑處理器。在又一示例性實(shí)施例中,調(diào)度器552可被配置成選擇與當(dāng)前正在運(yùn)行虛擬機(jī)的虛擬處理器的最多邏輯處理器共享最高級(jí)別的高速緩存的邏輯處理器。例如, 參考圖5,在一個(gè)實(shí)施例中,虛擬處理器534可在邏輯處理器506上運(yùn)行,虛擬處理器536可在邏輯處理器508上運(yùn)行而虛擬處理器538可在邏輯處理器514上運(yùn)行。在該示例中,調(diào)度器552可接收要運(yùn)行虛擬處理器540的請(qǐng)求。調(diào)度器552可檢查空閑處理器圖5M并確定邏輯處理器510和516是空閑的。在該示例中,調(diào)度器552可訪問高速緩存分層表556并獲得邏輯處理器510和516的陣列。調(diào)度器552可基于陣列中的信息來確定邏輯處理器510 與邏輯處理器506、邏輯處理器508和邏輯處理器514共享L3高速緩存,而邏輯處理器516 也與這些相同的邏輯處理器共享L3高速緩存。在以上的第一示例中,調(diào)度器552可選擇邏輯處理器510或514。在以上描述的替換實(shí)施例中,調(diào)度器552可選擇邏輯處理器510,因?yàn)樗c邏輯處理器506和508共享L2高速緩存并與邏輯處理器506、邏輯處理器508和邏輯處理器514共享L3高速緩存。在該示例中,邏輯處理器510與邏輯處理器510共享5個(gè)高速緩存而邏輯處理器514共享3個(gè)。在第三示例中,調(diào)度器552可選擇邏輯處理器510, 因?yàn)樗c邏輯處理器506和508共享L2高速緩存。在另一示例實(shí)施例中,調(diào)度器552可被配置成在調(diào)度時(shí)不同于常規(guī)工作負(fù)載地處理等待時(shí)間敏感的工作負(fù)載。通常,盡可能快地調(diào)度屬于等待時(shí)間敏感的客機(jī)的虛擬處理器。然而在這種情況下,如果虛擬處理器最后在其上運(yùn)行的邏輯處理器不可用,則該虛擬處理器將被遷移至別處并且將丟失具有高速緩存命中的積極效果。在一示例實(shí)施例中,調(diào)度器552可被配置成最大化局部性的同時(shí)限制等待時(shí)間而不影響非等待時(shí)間敏感的工作負(fù)載。例如,當(dāng)系統(tǒng)管理程序550接收到要調(diào)度等待時(shí)間敏感的線程的請(qǐng)求時(shí),調(diào)度器 552可確定是否存在與最后運(yùn)行該線程的邏輯處理器共享高速緩存的任何邏輯處理器并選擇一個(gè)邏輯處理器。例如,所選邏輯處理器可以是與最后運(yùn)行該線程的處理器共享最高級(jí)別的高速緩存的邏輯處理器。如果沒有共享高速緩存的邏輯處理器可用,則調(diào)度器552可確定自從虛擬處理器上一次運(yùn)行以來的時(shí)間量并將其與預(yù)定閾值進(jìn)行比較。如果自從上一次運(yùn)行以來的時(shí)間量大于閾值,則虛擬處理器可被遷移,否則它可被排隊(duì)來在最后運(yùn)行該線程的邏輯處理器上運(yùn)行。如果自從虛擬處理器上一次運(yùn)行以來的時(shí)間量大于閾值,則假定有用信息不在高速緩存中。如果自從上一次運(yùn)行以來的時(shí)間量小于閾值,則假定高速緩存仍然包含有用信息。本領(lǐng)域技術(shù)人員可以理解,預(yù)定閾值可由策略或管理員來設(shè)置,并且取決于虛擬機(jī)的物理硬件和工作負(fù)載特性。隨著時(shí)間的推移,管理員或策略可調(diào)整預(yù)定閾值并監(jiān)視效率是怎樣提高或降低的直到找到為運(yùn)行特定工作負(fù)載的特定主機(jī)找到最優(yōu)值。
繼續(xù)圖5的描述,在一實(shí)施例中,可將虛擬高速緩存拓?fù)浣Y(jié)構(gòu)展示給虛擬機(jī)。在該示例實(shí)施例中,系統(tǒng)管理程序550可生成可展示給客機(jī)的虛擬化拓?fù)浣Y(jié)構(gòu)。系統(tǒng)管理程序 550可構(gòu)造可由主計(jì)算機(jī)系統(tǒng)以及例如數(shù)據(jù)中心中的任何其他計(jì)算機(jī)系統(tǒng)合理兌現(xiàn)的拓?fù)浣Y(jié)構(gòu)。這允許客操作系統(tǒng)中的調(diào)度器在作出明智的調(diào)度決策的同時(shí)維持硬件和虛擬硬件之間的抽象。例如,在將虛擬化拓?fù)浣Y(jié)構(gòu)展示給客操作系統(tǒng)532的實(shí)施例中,系統(tǒng)管理程序550 可在引導(dǎo)期間檢測(cè)主計(jì)算機(jī)系統(tǒng)的高速緩存拓?fù)浣Y(jié)構(gòu)。在主機(jī)是其自身的一示例實(shí)施例中,系統(tǒng)管理程序550可被配置成計(jì)算可至少由計(jì)算機(jī)系統(tǒng)中的大多數(shù)邏輯處理器兌現(xiàn)的虛擬高速緩存拓?fù)浣Y(jié)構(gòu)。在數(shù)據(jù)中心中,主計(jì)算機(jī)可將高速緩存拓?fù)浣Y(jié)構(gòu)發(fā)送給管理系統(tǒng) 402以及數(shù)據(jù)中心中的所有其他計(jì)算機(jī)。管理系統(tǒng)402隨后可計(jì)算可至少由大多數(shù)計(jì)算機(jī)系統(tǒng)兌現(xiàn)的虛擬拓?fù)浣Y(jié)構(gòu)。該拓?fù)浣Y(jié)構(gòu)可由可實(shí)現(xiàn)具有該拓?fù)浣Y(jié)構(gòu)的虛擬機(jī)的系統(tǒng)管理程序550接收。在一具體示例中,系統(tǒng)管理程序550或管理系統(tǒng)402可計(jì)算虛擬拓?fù)浣Y(jié)構(gòu)。例如, 系統(tǒng)管理程序550或管理系統(tǒng)402可通過確定高速緩存共享的一定數(shù)量的邏輯處理器來計(jì)算虛擬拓?fù)浣Y(jié)構(gòu);將所確定數(shù)量的邏輯處理器展示給客操作系統(tǒng);并且展示互連所確定數(shù)量的邏輯處理器的高速緩存,該高速緩存是可兌現(xiàn)的最低類型的高速緩存。在一示例性實(shí)施例中,轉(zhuǎn)向圖5,系統(tǒng)管理程序550或管理系統(tǒng)402可通過確定高速緩存共享(共享基數(shù))的一定數(shù)量的邏輯處理器來計(jì)算虛擬高速緩存拓?fù)浣Y(jié)構(gòu);將共享基數(shù)展示給客操作系統(tǒng);并將互連所確定數(shù)量的可兌現(xiàn)的(共享級(jí)別)最高級(jí)別的高速緩存的高速緩存展示給客操作系統(tǒng)。在計(jì)算共享基數(shù)的一個(gè)方法中,共享基數(shù)被設(shè)為共享NUMA節(jié)點(diǎn)中最低級(jí)別的高速緩存的邏輯處理器的最小數(shù)量。例如,參考圖5,在所示實(shí)施例中,系統(tǒng)管理程序550可檢測(cè)到NUMA節(jié)點(diǎn)500中的6個(gè)邏輯處理器和NUMA節(jié)點(diǎn)502中的4個(gè)邏輯處理器共享最低級(jí)別的高速緩存(U)。系統(tǒng)管理程序550(或在數(shù)據(jù)中心的示例中是管理系統(tǒng)40 隨后可確定共享群集中最低級(jí)別的高速緩存的邏輯處理器的最小量是4,即,邏輯處理器518-5M共享L3。在該示例中,系統(tǒng)管理程序550可將L3選為要展示的高速緩存的類型,因?yàn)橄到y(tǒng)管理程序550 (或管理系統(tǒng)40 將共享級(jí)別確定為其上至少存在共享基數(shù)個(gè)高速緩存共享邏輯處理器的高速緩存的最高級(jí)別。因此,如圖5所示,在該示例中,系統(tǒng)管理程序550可展示共享虛擬L3高速緩存的4個(gè)虛擬處理器的組。系統(tǒng)管理程序550隨后可將信息存儲(chǔ)在高速緩存分層表陽6中。在計(jì)算共享基數(shù)的另一方法中,共享基數(shù)是每一 NUMA節(jié)點(diǎn)中共享每一群集中最低級(jí)別的高速緩存的邏輯處理器的數(shù)量的最大公約數(shù)。例如,參考圖5,在所示實(shí)施例中,系統(tǒng)管理程序550可檢測(cè)作為一個(gè)組共享群集中最低級(jí)別的高速緩存的邏輯處理器的數(shù)量。 在該示例中,NUMA節(jié)點(diǎn)500包括共享最低級(jí)別的高速緩存L3的6個(gè)邏輯處理器(邏輯處理器506-516),而在NUMA節(jié)點(diǎn)502中,4個(gè)邏輯處理器(邏輯處理器518-524)共享最低級(jí)別的高速緩存L3。系統(tǒng)管理程序550(或在數(shù)據(jù)中心的示例中是管理系統(tǒng)40 隨后確定兩組的最大公約數(shù),6個(gè)處理器和4個(gè)處理器的最大公約數(shù)是2個(gè)處理器。系統(tǒng)管理程序 550(或管理系統(tǒng)40 隨后確定每一 NUMA節(jié)點(diǎn)中其上至少存在所確定數(shù)量個(gè)處理器(在該示例中是2個(gè))的最高級(jí)別的高速緩存是L3。在該示例中,系統(tǒng)管理程序550可將L3選為要展示的高速緩存的類型。因此,如圖5所示,在該示例中,系統(tǒng)管理程序550可展示共享虛擬L3高速緩存的2個(gè)虛擬處理器的組。系統(tǒng)管理程序550隨后可將該信息存儲(chǔ)在高速緩存分層表556中。在確定了虛擬高速緩存拓?fù)浣Y(jié)構(gòu)(在數(shù)據(jù)中心的情況下,由管理系統(tǒng)402傳遞給系統(tǒng)管理程序550)之后,調(diào)度器552在調(diào)度線程時(shí)可使用該拓?fù)浣Y(jié)構(gòu)。在一個(gè)實(shí)施例中, 系統(tǒng)管理程序550可按兌現(xiàn)虛擬高速緩存拓?fù)浣Y(jié)構(gòu)的方式來為虛擬處理器設(shè)置理想邏輯處理器。例如,繼續(xù)以上的具體示例,系統(tǒng)管理程序550可將邏輯處理器506設(shè)為虛擬處理器534的理想處理器,將邏輯處理器508設(shè)為虛擬處理器536的理想處理器。系統(tǒng)管理程序550隨后將邏輯處理器506和508之間的L2高速緩存展示為虛擬L3高速緩存。在該示例實(shí)施例中,只要調(diào)度器552可將虛擬處理器534或虛擬處理器536調(diào)度到NUMA節(jié)點(diǎn)500 或NUMA節(jié)點(diǎn)502中的邏輯處理器的任意組合上,則該虛擬化拓?fù)浣Y(jié)構(gòu)可被兌現(xiàn)。此外,如果被虛擬化的物理高速緩存是L2,則客操作系統(tǒng)532可觀察到性能提升。在另一示例中,系統(tǒng)管理程序550可記住虛擬處理器執(zhí)行的位置并基于所展示的虛擬拓?fù)浣Y(jié)構(gòu)以及與可用邏輯處理器相關(guān)聯(lián)的所估計(jì)的高速緩存未中成本來選擇邏輯處理器。調(diào)度器陽2隨后可確定運(yùn)行虛擬機(jī)530的其他線程的邏輯處理器的身份,并使用該信息來選擇兌現(xiàn)虛擬高速緩存拓?fù)浣Y(jié)構(gòu)且具有最低所估計(jì)的未中成本的邏輯處理器。以下是描繪操作過程的一系列流程圖。為便于理解,流程圖被組織成使得初始流程圖通過總體“大圖”視點(diǎn)來演示各實(shí)現(xiàn),并且后續(xù)的流程圖提供進(jìn)一步的附加物和/或細(xì)節(jié)。此外,本領(lǐng)域的技術(shù)人員可以理解,虛線所描繪的操作過程被認(rèn)為是任選的。現(xiàn)在轉(zhuǎn)向圖6,它示出了包括操作600、602和604的操作過程。操作600開始操作過程,而操作602示出使得響應(yīng)于接收到要調(diào)度指示虛擬機(jī)的虛擬處理器的線程的請(qǐng)求來生成空閑邏輯處理器列表。例如,轉(zhuǎn)向圖5,系統(tǒng)管理程序550可被配置成實(shí)例化虛擬機(jī) 530并控制虛擬機(jī)530,將諸如虛擬處理器534-虛擬處理器540等一個(gè)或多個(gè)虛擬處理器展示給客操作系統(tǒng)532。例如,客操作系統(tǒng)可發(fā)出查詢虛擬拓?fù)浣Y(jié)構(gòu)的指令。該指令可由系統(tǒng)管理程序550截取和虛擬化。如虛擬L3高速緩存的虛線所示,在一示例實(shí)施例中,虛擬處理器534-540可以是單核虛擬處理器而虛擬L3高速緩存可能不存在?;蛘邠Q言之,在該示例中,可以不將虛擬化拓?fù)浣Y(jié)構(gòu)展示給客操作系統(tǒng)532。在該示例中,客操作系統(tǒng)532可將線程調(diào)度到虛擬處理器534上,而系統(tǒng)管理程序550可接收到要將虛擬處理器534調(diào)度到邏輯處理器上的請(qǐng)求。響應(yīng)于接收到該請(qǐng)求,調(diào)度器552可執(zhí)行并生成空閑邏輯處理器列表。在一示例實(shí)施例中,調(diào)度器552可檢查空閑處理器圖并確定系統(tǒng)中哪些處理器是空閑的。轉(zhuǎn)向操作604,它示出了使得指示虛擬處理器的線程被調(diào)度在列表中與種子邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上。繼續(xù)以上的示例,調(diào)度器552可執(zhí)行并將線程調(diào)度到與種子邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上。例如,在該示例實(shí)施例中,調(diào)度器552可試圖將線程調(diào)度到接近種子邏輯處理器的邏輯處理器上。在該示例中,調(diào)度器552可通過提高線程將使用在共享高速緩存中的數(shù)據(jù)或指令以及邏輯處理器可以在不必從RAM或另一 NUMA節(jié)點(diǎn)取回?cái)?shù)據(jù)或指令的情況下運(yùn)行的幾率來提升虛擬機(jī) 530的性能。繼續(xù)以上的具體示例,調(diào)度器552可確定指示虛擬處理器534的線程的種子是邏輯處理器506。在邏輯處理器506不可用的情況下,調(diào)度器552隨后可被配置成訪問高速緩存分層表556并確定哪些空閑邏輯處理器與邏輯處理器506共享高速緩存。調(diào)度器552隨后可被配置成選擇共享高速緩存的邏輯處理器中的一個(gè)來運(yùn)行指示虛擬處理器534的線程。例如,邏輯處理器508和邏輯處理器514可能是空閑的。調(diào)度器552可訪問高速緩存分層表556并確定邏輯處理器508與邏輯處理器506共享L2和L3而邏輯處理器506與邏輯處理器514共享L3。調(diào)度器552隨后可選擇邏輯處理器中的一個(gè)來運(yùn)行線程。現(xiàn)在轉(zhuǎn)向圖7,其示出圖6的操作過程的替換實(shí)施例,包括附加操作706-718。操作706示出,響應(yīng)于確定最后運(yùn)行指示虛擬處理器的線程的邏輯處理器不可用、并且自從指示虛擬處理器的線程最后一次執(zhí)行以來已經(jīng)超過預(yù)定時(shí)間量,使得指示虛擬處理器的線程被調(diào)度在與種子邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上。例如,調(diào)度器552 可確定指示虛擬處理器534的線程與等待時(shí)間敏感的工作負(fù)載相關(guān)聯(lián)。即,工作負(fù)載,即客操作系統(tǒng)532執(zhí)行的程序在客機(jī)在虛擬處理器上運(yùn)行該程序時(shí)可能需要被盡快地調(diào)度。例如,系統(tǒng)管理程序550可從客機(jī)532獲得指示其性能是緩慢的或客操作系統(tǒng)532正執(zhí)行許多基于網(wǎng)絡(luò)的輸入/輸出工作的性能信息。在另一實(shí)施例中,管理員或策略可將來自虛擬機(jī)530的線程設(shè)為等待時(shí)間敏感的。無論線程是怎樣被標(biāo)識(shí)為等待時(shí)間敏感的,在接收到要調(diào)度指示虛擬處理器534的線程的請(qǐng)求并確定如何調(diào)度它時(shí),調(diào)度器552可從線程表560 獲得信息。在一示例實(shí)施例中,調(diào)度器552可立即調(diào)度線程,或取決于線程最后運(yùn)行的時(shí)間使其排隊(duì)。例如,如果線程最近運(yùn)行過,則存在它將使用的信息仍然在高速緩存中的記錄。 在信息仍然在高速緩存中的實(shí)例中,由于排隊(duì)導(dǎo)致的性能損失可能小于由于高速緩存未中而導(dǎo)致的性能損失?;蛘?,如果線程最近未運(yùn)行過,則高速緩存可能是冷的,即,可能不具有任何有用信息,并且無法通過任何更長(zhǎng)的等待來獲得任何性能益處。在該示例中,可以使用預(yù)定閾值時(shí)間來確定該線程應(yīng)該被運(yùn)行。例如,調(diào)度器552 可接收要調(diào)度虛擬處理器534的請(qǐng)求。調(diào)度器552可運(yùn)行并訪問線程表560來獲得關(guān)于虛擬處理器534的信息,諸如描述線程是等待時(shí)間敏感的、線程最后運(yùn)行的時(shí)間、最后運(yùn)行指示虛擬處理器534的線程的邏輯處理器的信息。調(diào)度器552可訪問空閑處理器圖并檢查是否有邏輯處理器是可用的。在該具體示例中,最后運(yùn)行線程的邏輯處理器,即邏輯處理器 506可能是不可用的。在這種情況下,調(diào)度器552可將自從虛擬處理器534最后一次運(yùn)行以來的時(shí)間量與預(yù)定閾值進(jìn)行比較,并確定自從最后一次運(yùn)行以來的時(shí)間量大于預(yù)定值。調(diào)度器552可被調(diào)度來訪問高速緩存分層表556并確定哪些可用邏輯處理器與邏輯處理器 506共享高速緩存并選擇一個(gè)來運(yùn)行線程534。繼續(xù)圖7的描述,操作708示出,響應(yīng)于確定最后運(yùn)行指示虛擬處理器的線程的邏輯處理器不可用、并且自從指示虛擬處理器的線程最后一次執(zhí)行以來未超過預(yù)定時(shí)間量, 使得指示虛擬處理器的線程被排隊(duì)在最后運(yùn)行指示虛擬處理器的線程的邏輯處理器上。與操作706類似,指示虛擬處理器534的線程可以是等待時(shí)間敏感的線程。在該示例中,在邏輯處理器506不可用且未超過預(yù)定時(shí)間量的實(shí)例中,調(diào)度器552可被配置成將線程534排隊(duì)在邏輯處理器506上。在該示例中,可以作出這樣的決策要獲得高速緩存命中的節(jié)省將補(bǔ)償?shù)却龝r(shí)間敏感的線程未被盡快執(zhí)行的事實(shí)。如上所述,預(yù)定閾值可基于系統(tǒng)的性能特征來設(shè)置并且可由管理員或策略調(diào)整。
圖7的操作710示出使得最后執(zhí)行指示虛擬處理器的線程的邏輯處理器被設(shè)為種子邏輯處理器。例如,在一個(gè)實(shí)施例中,系統(tǒng)管理程序550可使用管理員或策略來為虛擬處理器設(shè)置種子邏輯處理器。在一具體示例中,最后運(yùn)行虛擬處理器534的邏輯處理器可被設(shè)為種子。因此,在該示例實(shí)施例中,如果將線程534從邏輯處理器506移動(dòng)至邏輯處理器 508,則可以改變線程表560中的種子來反映種子現(xiàn)在是邏輯處理器508。在該示例中,虛擬機(jī)530可以是單核虛擬機(jī)530,而可以從高速緩存命中中獲得的僅有效率是來自將虛擬處理器534配置成與最后運(yùn)行其的邏輯處理器共享盡可能多的高速緩存。轉(zhuǎn)向操作712,其示出使得理想邏輯處理器被設(shè)為種子邏輯處理器。例如,轉(zhuǎn)向圖 5,理想邏輯處理器可被設(shè)為種子。在該示例中,種子可以在引導(dǎo)時(shí)基于策略或由管理員靜態(tài)地分配。在該示例中,種子可以保持恒定,即使指示虛擬處理器的線程被調(diào)度器552移動(dòng)。例如,虛擬機(jī)530可被實(shí)例化。策略可由系統(tǒng)管理程序550讀取來引導(dǎo)它為虛擬處理器534-540設(shè)置理想處理器。作為響應(yīng),系統(tǒng)管理程序550可將邏輯處理器506分配為虛擬處理器534的理想處理器,將邏輯處理器508分配為虛擬處理器536的理想處理器,并以此類推。該信息隨后可被記錄在線程表560中。在虛擬處理器534在下一次運(yùn)行時(shí)被移動(dòng)的情況下,調(diào)度器552可被配置成訪問線程表560 ;確定邏輯處理器506被設(shè)為理想邏輯處理器;并檢查邏輯處理器506是否空閑。在該示例中,如果邏輯處理器506空閑,則它被調(diào)度,而不管最后運(yùn)行虛擬處理器534的邏輯處理器的身份是什么。如果它不可用,則調(diào)度器 552試圖將其定位在盡可能接近理想邏輯處理器的位置。轉(zhuǎn)向操作714,它示出了使得指示虛擬處理器的線程被調(diào)度在列表中與種子邏輯處理器共享最高級(jí)別的高速緩存的邏輯處理器上。例如,在一個(gè)示例中,調(diào)度器552可被配置成試圖分配虛擬處理器從而使得它們共享最高級(jí)別的高速緩存。在該示例中,客機(jī)532 具有見到由于高速緩存命中導(dǎo)致的性能提升的最佳幾率。如上所述,每一邏輯處理器可具有存儲(chǔ)在高速緩存分層表556中的與其相關(guān)聯(lián)的陣列。響應(yīng)于接收到要調(diào)度指示虛擬處理器(諸如虛擬處理器534)的線程的請(qǐng)求,調(diào)度器552可確定虛擬處理器534的種子并訪問高速緩存分層表556來確定與種子共享最高級(jí)別的高速緩存的可用邏輯處理器。調(diào)度器 552隨后可將線程調(diào)度到與種子共享最高級(jí)別的高速緩存的可用邏輯處理器上。轉(zhuǎn)向操作716,它示出了使得從特定NUMA節(jié)點(diǎn)中的邏輯處理器列表中生成空閑邏輯處理器列表。系統(tǒng)管理程序550可被配置成為計(jì)算機(jī)系統(tǒng)中的每一 NUMA節(jié)點(diǎn)維護(hù)空閑處理器圖。在該示例中,在啟動(dòng)虛擬機(jī)530時(shí)每一虛擬處理器可被分配理想NUMA節(jié)點(diǎn)并且該信息可被存儲(chǔ)在線程表560中。當(dāng)調(diào)度器552運(yùn)行時(shí),它可確定線程已經(jīng)被分配理想 NUMA節(jié)點(diǎn),并且調(diào)度器552可從與理想NUMA節(jié)點(diǎn)相關(guān)聯(lián)的空閑處理器圖中生成空閑處理器列表。以此方式,降低了對(duì)可能的邏輯處理器候選的初始設(shè)置。在一具體示例中,NUMA節(jié)點(diǎn)500可以是指示虛擬處理器534的線程的理想NUMA節(jié)點(diǎn)。調(diào)度器552可從線程表560 中獲得該信息;訪問空閑處理器圖陽4 ;并生成NUMA節(jié)點(diǎn)500中的空閑處理器列表。繼續(xù)圖7的描述,操作718示出使得將虛擬高速緩存拓?fù)浣Y(jié)構(gòu)展示給客操作系統(tǒng), 其中虛擬高速緩存拓?fù)浣Y(jié)構(gòu)基于多個(gè)計(jì)算機(jī)系統(tǒng)的物理高速緩存拓?fù)浣Y(jié)構(gòu)。例如,轉(zhuǎn)向圖 5,系統(tǒng)管理程序550可獲得描述如何為虛擬機(jī)530生成虛擬高速緩存拓?fù)浣Y(jié)構(gòu)的配置信息。在一個(gè)實(shí)施例中,系統(tǒng)管理程序550可生成該信息,或者在數(shù)據(jù)中心的實(shí)施例中,它可從例如圖4的管理系統(tǒng)402接收該配置信息。配置信息可描述在其引導(dǎo)時(shí)可被展示給客操作系統(tǒng)532的虛擬高速緩存拓?fù)浣Y(jié)構(gòu)??筒僮飨到y(tǒng)532隨后可檢測(cè)該拓?fù)浣Y(jié)構(gòu)并將它的調(diào)度器配置成取決于該拓?fù)浣Y(jié)構(gòu)。例如,客操作系統(tǒng)532可查詢硬件來確定拓?fù)浣Y(jié)構(gòu)。系統(tǒng)管理程序550可截取查詢并用描述了虛擬高速緩存拓?fù)浣Y(jié)構(gòu)的虛擬化信息來響應(yīng)。在該示例中,虛擬高速緩存拓?fù)浣Y(jié)構(gòu)可獨(dú)立于主計(jì)算機(jī)系統(tǒng)的物理拓?fù)浣Y(jié)構(gòu),從而使得客操作系統(tǒng)532可被容易地遷移至數(shù)據(jù)中心400中的任何計(jì)算機(jī)系統(tǒng)。現(xiàn)在轉(zhuǎn)向圖8,其示出了圖7所描繪的操作過程的替換實(shí)施例。圖8包括操作718 的細(xì)化820,其中虛擬高速緩存拓?fù)浣Y(jié)構(gòu)信息包括共享虛擬高速緩存的虛擬處理器的數(shù)量。 例如,系統(tǒng)管理程序500或數(shù)據(jù)中心400的管理系統(tǒng)402可被配置成生成展示給客操作系統(tǒng)532的虛擬高速緩存拓?fù)浣Y(jié)構(gòu)。虛擬高速緩存拓?fù)浣Y(jié)構(gòu)可包括共享虛擬高速緩存的虛擬處理器的經(jīng)計(jì)算的數(shù)量。在一個(gè)示例中,處理器的數(shù)量可通過計(jì)算共享數(shù)據(jù)中心400中的每一 NUMA節(jié)點(diǎn)的最低級(jí)別的高速緩存的邏輯處理器的最大公約數(shù)來確定。例如,每一計(jì)算機(jī)系統(tǒng)可具有與圖5所述的物理拓?fù)浣Y(jié)構(gòu)相同的拓?fù)浣Y(jié)構(gòu),并且管理系統(tǒng)402可被配置成確定每一 NUMA節(jié)點(diǎn)中的最低級(jí)別的高速緩存,例如,在該示例中是L3高速緩存,并確定每一 NUMA節(jié)點(diǎn)中共享該級(jí)高速緩存的邏輯處理器的數(shù)量,即,NUMA節(jié)點(diǎn)500中為6個(gè),NUMA 節(jié)點(diǎn)502中為4個(gè)。管理系統(tǒng)402隨后可確定6和4的最大公約數(shù)是2。該值可被設(shè)為共享虛擬高速緩存拓?fù)浣Y(jié)構(gòu)中一個(gè)級(jí)別的高速緩存的虛擬處理器的數(shù)量。在另一示例中,共享虛擬高速緩存拓?fù)浣Y(jié)構(gòu)中的一個(gè)級(jí)別的高速緩存的虛擬處理器的數(shù)量可使用不同的技術(shù)來計(jì)算。例如,管理系統(tǒng)402可確定共享每一 NUMA節(jié)點(diǎn)中最高級(jí)別的高速緩存的邏輯處理器的數(shù)量。管理系統(tǒng)402隨后可將邏輯處理器的最小數(shù)量設(shè)為共享虛擬高速緩存拓?fù)浣Y(jié)構(gòu)中的一個(gè)級(jí)別的高速緩存的虛擬處理器的數(shù)量。例如,管理402 可接收這樣的信息,該信息描述了 L2是邏輯處理器506-512共享的最高級(jí)別的高速緩存, L2是邏輯處理器514-516之間共享的最高級(jí)別的高速緩存,而L3是邏輯處理器518-5 之間共享的最高級(jí)別的高速緩存。管理系統(tǒng)402隨后可確定4個(gè)、2個(gè)和4個(gè)邏輯處理器共享計(jì)算機(jī)系統(tǒng)(例如數(shù)據(jù)中心400)中的相應(yīng)的最高級(jí)別的高速緩存。在該示例實(shí)施例中,管理系統(tǒng)402可選擇最小的數(shù)量(2)并將其設(shè)為共享虛擬高速緩存拓?fù)浣Y(jié)構(gòu)中的一個(gè)級(jí)別的高速緩存的虛擬處理器的數(shù)量?,F(xiàn)在轉(zhuǎn)向圖9,示出了操作820的細(xì)化922,其中虛擬高速緩存拓?fù)浣Y(jié)構(gòu)信息包括虛擬高速緩存的高速緩存級(jí)別,其中該高速緩存級(jí)別基于多個(gè)邏輯處理器之間共享的最低級(jí)別的高速緩存。例如,在確定了虛擬高速緩存拓?fù)浣Y(jié)構(gòu)的虛擬處理器的數(shù)量之后,可以確定共享的虛擬高速緩存的類型。在一示例實(shí)施例中,由等于或大于所確定數(shù)量的虛擬處理器的多個(gè)邏輯處理器共享的最低類型的高速緩存可用作虛擬高速緩存。例如,參考圖5,管理系統(tǒng)402可被配置成接收這樣的信息,該信息描述了 NUMA節(jié)點(diǎn)500包括由4個(gè)邏輯處理器共享的L2高速緩存,在2個(gè)邏輯處理器之間共享的L2高速緩存,以及在6個(gè)邏輯處理器之間共享的L3高速緩存。管理系統(tǒng)402還可接收描述了 NUMA節(jié)點(diǎn)502包括在4個(gè)邏輯處理器之間共享的L3高速緩存的信息。在該示例中,管理系統(tǒng)402 可確定NUMA節(jié)點(diǎn)500可支持在等于或大于為虛擬高速緩存拓?fù)浣Y(jié)構(gòu)設(shè)置的虛擬處理器的數(shù)量的多個(gè)邏輯處理器之間共享的L2和L3高速緩存。管理系統(tǒng)402還可確定NUMA節(jié)點(diǎn) 502可支持在等于或大于為虛擬高速緩存拓?fù)浣Y(jié)構(gòu)設(shè)置的虛擬處理器的數(shù)量的多個(gè)邏輯處理器之間共享的L3高速緩存。管理系統(tǒng)402可將L3設(shè)為要在虛擬高速緩存拓?fù)浣Y(jié)構(gòu)中展示的高速緩存,因?yàn)樗强捎擅恳?NUMA節(jié)點(diǎn)兌現(xiàn)的最低級(jí)別的高速緩存。現(xiàn)在轉(zhuǎn)向圖10,它示出了包括操作1000、1002、1004、1006和1008的操作過程。 操作1000開始操作過程,操作1002示出將多個(gè)單核虛擬處理器展示給虛擬機(jī)。例如,轉(zhuǎn)向圖5,計(jì)算機(jī)系統(tǒng)可執(zhí)行指示系統(tǒng)管理程序550的指令,并且可加載可用于實(shí)例化虛擬機(jī) 530的指令。系統(tǒng)管理程序550可設(shè)立虛擬機(jī)530以包括多個(gè)虛擬處理器,諸如虛擬處理器 534-540.在該示例中,虛擬處理器可以是單核虛擬處理器。換言之,虛擬處理器534-540可以不共享高速緩存??筒僮飨到y(tǒng)532可通過查詢虛擬拓?fù)浣Y(jié)構(gòu)來引導(dǎo)和檢測(cè)單核虛擬處理器。系統(tǒng)管理程序550可截取該查詢并返回包括多個(gè)單核虛擬處理器的虛擬化拓?fù)浣Y(jié)構(gòu)。繼續(xù)圖10的描述,操作1004示出響應(yīng)于接收到要執(zhí)行指示單核虛擬處理器的線程的請(qǐng)求來生成空閑邏輯處理器列表。例如,在系統(tǒng)管理程序550接收到要調(diào)度指示諸如虛擬處理器540之類的虛擬處理器的線程的請(qǐng)求的情況下,可將系統(tǒng)管理程序550的執(zhí)行實(shí)例設(shè)為生成空閑邏輯處理器列表。例如,調(diào)度器552的可執(zhí)行指令可被加載到設(shè)立計(jì)算機(jī)系統(tǒng)中邏輯處理器的空閑處理器圖的存儲(chǔ)器中,系統(tǒng)管理程序可被配置成響應(yīng)于從諸如客操作系統(tǒng)532之類的客機(jī)接收到線程來運(yùn)行調(diào)度器552,調(diào)度器522可生成空閑邏輯處理器列表?,F(xiàn)在轉(zhuǎn)向操作1006,它示出了標(biāo)識(shí)當(dāng)前正在執(zhí)行指示虛擬機(jī)的單核虛擬處理器的線程的邏輯處理器。繼續(xù)該示例,響應(yīng)于要運(yùn)行指示虛擬處理器(諸如虛擬處理器M0)的線程的請(qǐng)求,系統(tǒng)管理程序550可確定指示虛擬機(jī)的虛擬處理器的線程當(dāng)前正在執(zhí)行的位置。例如,每一次邏輯處理器運(yùn)行時(shí),它可用標(biāo)識(shí)它正在運(yùn)行的哪個(gè)虛擬處理器的信息來更新線程表560。當(dāng)系統(tǒng)管理程序550運(yùn)行時(shí),它可檢查線程表560來查看當(dāng)前什么邏輯處理器正在運(yùn)行虛擬機(jī)的虛擬處理器。例如,虛擬處理器534可能正在邏輯處理器514上執(zhí)行, 虛擬處理器536可能正在邏輯處理器516上執(zhí)行,而虛擬處理器538可能正在虛擬處理器 512上執(zhí)行?,F(xiàn)在轉(zhuǎn)向操作1008,它示出將指示虛擬處理器的線程調(diào)度到一邏輯處理器上,該邏輯處理器是列表中與當(dāng)前正在執(zhí)行指示虛擬機(jī)的單核虛擬處理器的線程的最大數(shù)量的邏輯處理器共享高速緩存的邏輯處理器。例如,調(diào)度器552可確定哪些空閑邏輯處理器與當(dāng)前正在運(yùn)行指示虛擬機(jī)中的其他虛擬處理器的線程的最大數(shù)量的邏輯處理器共享高速緩存。例如,調(diào)度器552可訪問高速緩存分層表556,該表可包括用于每一邏輯處理器的位圖陣列,并確定哪些可用處理器與最大數(shù)量的邏輯處理器共享高速緩存。繼續(xù)以上示例,調(diào)度器552可將指示虛擬處理器540的線程調(diào)度到邏輯處理器506上,因?yàn)檫壿嬏幚砥?06 與最大數(shù)量的當(dāng)前正在執(zhí)行的虛擬處理器共享高速緩存?,F(xiàn)在轉(zhuǎn)向圖11,其示出圖10的操作過程的替換實(shí)施例,包括操作1110和1112。操作1110示出從非均勻存儲(chǔ)器體系結(jié)構(gòu)(NUMA)節(jié)點(diǎn)中的邏輯處理器列表中生成空閑邏輯處理器列表,其中計(jì)算機(jī)系統(tǒng)中的每一 NUMA節(jié)點(diǎn)與NUMA節(jié)點(diǎn)中的邏輯處理器的唯一列表相關(guān)聯(lián)。例如,調(diào)度器552可被配置成將線程調(diào)度到與當(dāng)前正在運(yùn)行的最大數(shù)量的虛擬處理器共享最高級(jí)別的高速緩存的邏輯處理器上。例如,在一個(gè)實(shí)施例中,調(diào)度器552可確定存在與最大數(shù)量的邏輯處理器共享高速緩存的多個(gè)可用邏輯處理器。在該示例中,調(diào)度器552 可被配置成選擇與最多的邏輯處理器共享最高級(jí)別的高速緩存的邏輯處理器。例如,在一個(gè)實(shí)施例中,邏輯處理器508-514可正在運(yùn)行包括5個(gè)虛擬處理器的虛擬機(jī)的4個(gè)虛擬處理器。調(diào)度器552可確定邏輯處理器506和邏輯處理器516是可用的,并且各自與當(dāng)前正在運(yùn)行虛擬機(jī)的虛擬處理器共享L3高速緩存。在該示例中,調(diào)度器552可確定邏輯處理器 506與4個(gè)邏輯處理器中的3個(gè)共享L2高速緩存,而邏輯處理器516與1個(gè)邏輯處理器共享L2高速緩存。在該示例中,調(diào)度器552可選擇邏輯處理器506。繼續(xù)圖11的描述,操作1112示出,響應(yīng)于確定最后運(yùn)行指示虛擬處理器的線程的邏輯處理器不可用、且自從指示單核虛擬處理器的線程最后一次執(zhí)行以來已經(jīng)超過預(yù)定時(shí)間量,將指示虛擬處理器的線程調(diào)度到邏輯處理器上。例如,調(diào)度器552可確定線程與等待時(shí)間敏感的工作負(fù)載相關(guān)聯(lián)。即,工作負(fù)載(例如客操作系統(tǒng)532執(zhí)行的程序)可能需要在調(diào)度器552接收到該程序時(shí)被盡快地調(diào)度。在該示例中,如果自從虛擬處理器最后一次運(yùn)行以來已經(jīng)超過預(yù)定時(shí)間量,則調(diào)度器552可被調(diào)度來訪問高速緩存分層表556并確定哪些可用邏輯處理器與例如最后運(yùn)行虛擬處理器的邏輯處理器共享高速緩存,或者與當(dāng)前正在執(zhí)行虛擬機(jī)的虛擬處理器的最大數(shù)量的邏輯處理器共享高速緩存的可用邏輯處理器。現(xiàn)在轉(zhuǎn)向圖12,它示出了包括操作1200、1202、1204和1206的操作過程。操作 1200開始過程,操作1202示出使得指示虛擬機(jī)的虛擬處理器的線程被分配獨(dú)特的邏輯處理器來在其上執(zhí)行。在一個(gè)實(shí)施例中,系統(tǒng)管理程序550可對(duì)虛擬機(jī)的每一虛擬處理器分配獨(dú)特的邏輯處理器。在該示例中,在接收到要調(diào)度虛擬處理器的請(qǐng)求時(shí),系統(tǒng)管理程序 550可試圖將虛擬處理器調(diào)度到所分配的邏輯處理器上。例如,線程表560可存儲(chǔ)標(biāo)識(shí)所分配的邏輯處理器的信息。調(diào)度器552在接收到要調(diào)度線程的請(qǐng)求時(shí)可檢查線程表560。繼續(xù)圖12的描述,操作1204示出使得響應(yīng)于接收到要執(zhí)行指示虛擬處理器的線程的請(qǐng)求來生成空閑邏輯處理器列表。例如,在系統(tǒng)管理程序550接收到要調(diào)度指示諸如虛擬處理器540之類的虛擬處理器的線程的請(qǐng)求的情況下,可設(shè)置系統(tǒng)管理程序550的執(zhí)行實(shí)例以生成空閑邏輯處理器列表。例如,調(diào)度器552的可執(zhí)行指令可被加載到設(shè)立計(jì)算機(jī)系統(tǒng)中邏輯處理器的空閑處理器圖的存儲(chǔ)器中,系統(tǒng)管理程序可被配置成響應(yīng)于從諸如客操作系統(tǒng)532之類的客機(jī)接收到線程來運(yùn)行調(diào)度器552,調(diào)度器552可生成空閑邏輯處理器列表。再次轉(zhuǎn)回圖12,操作1206示出使得指示虛擬處理器的線程被調(diào)度在與被分配來執(zhí)行指示虛擬處理器的線程的獨(dú)特的邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上。例如,調(diào)度器552可確定哪些空閑邏輯處理器與所分配的邏輯處理器共享高速緩存并選擇一個(gè)。例如,調(diào)度器552可訪問高速緩存分層表556,該表可包括用于每一邏輯處理器的位圖陣列,并確定哪些可用處理器與所分配的邏輯處理器共享高速緩存?,F(xiàn)在參考圖13,其示出圖12所示的操作過程的替代實(shí)施例,包括附加的操作 1308、1310、1312、1314、1316和1318。操作1308示出使得響應(yīng)于確定獨(dú)特的邏輯處理器不可用而來選擇與獨(dú)特的邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器。例如,調(diào)度器 552可被配置成試圖將指示虛擬處理器的線程調(diào)度到所分配的邏輯處理器上。在該處理器不可用的情況下,它可將指示虛擬處理器的線程調(diào)度到與被分配來執(zhí)行指示虛擬處理器的線程的邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上。操作1310示出使得響應(yīng)于確定自從指示虛擬處理器的線程最后一次執(zhí)行以來已經(jīng)超過預(yù)定時(shí)間量而來調(diào)度指示虛擬處理器的線程。例如,在一個(gè)實(shí)施例中,調(diào)度器552可被配置成定位邏輯處理器來運(yùn)行等待時(shí)間敏感的工作負(fù)載。即,工作負(fù)載(例如客操作系統(tǒng)532執(zhí)行的程序)可能需要在調(diào)度器552接收到該程序時(shí)被盡快地調(diào)度。在該示例中, 如果自從虛擬處理器最后一次運(yùn)行以來已經(jīng)超過預(yù)定時(shí)間量,則調(diào)度器552可被調(diào)度來訪問高速緩存分層表556并確定哪些可用邏輯處理器與例如所分配的邏輯處理器共享高速緩存。圖1312示出,使得響應(yīng)于確定最后運(yùn)行指示虛擬處理器的線程的邏輯處理器不可用、并且自從指示虛擬處理器的線程最后一次執(zhí)行以來未超過預(yù)定時(shí)間量,指示虛擬處理器的線程被排隊(duì)在最后運(yùn)行指示虛擬處理器的線程的邏輯處理器上。在一個(gè)實(shí)施例中, 指示虛擬處理器534的線程可以是等待時(shí)間敏感的線程。在該示例中,在邏輯處理器506不可用且未超過預(yù)定時(shí)間量的實(shí)例中,調(diào)度器552可包括用于查詢線程的指令。在該示例中, 可以作出這樣的決策要具有高速緩存命中的節(jié)省將補(bǔ)償?shù)却龝r(shí)間敏感的線程不被盡快執(zhí)行的事實(shí)。如上所述,預(yù)定閾值可基于系統(tǒng)的性能特征來設(shè)置并且可由管理員或策略調(diào)整。操作1314示出使得為計(jì)算機(jī)系統(tǒng)中的每一非均勻存儲(chǔ)器體系結(jié)構(gòu)(NUMA)節(jié)點(diǎn)維護(hù)空閑邏輯處理器列表。例如,系統(tǒng)管理程序550可被配置成為計(jì)算機(jī)系統(tǒng)中的每一 NUMA 節(jié)點(diǎn)維護(hù)空閑處理器圖。在該示例中,響應(yīng)于接收到調(diào)度線程的請(qǐng)求,可將包括所分配的處理器的NUMA節(jié)點(diǎn)設(shè)為調(diào)度器552首先檢查的節(jié)點(diǎn)。在調(diào)度器552運(yùn)行時(shí),它可從與NUMA 節(jié)點(diǎn)相關(guān)聯(lián)的空閑處理器圖中生成空閑處理器列表。以此方式,減少了對(duì)可能的邏輯處理器候選的初始設(shè)置而不必檢查列出計(jì)算機(jī)系統(tǒng)中每一個(gè)邏輯處理器的位圖。操作1316示出使得指示虛擬處理器的線程被調(diào)度在與被分配來執(zhí)行指示虛擬處理器的線程的邏輯處理器共享最高級(jí)別的高速緩存的邏輯處理器上。例如,調(diào)度器552可被配置成試圖分配虛擬處理器從而使得它們共享最高級(jí)別的高速緩存。在該示例中,客機(jī) 532具有見到由于高速緩存命中導(dǎo)致的性能提升的最佳幾率。如上所述,每一邏輯處理器可具有存儲(chǔ)在高速緩存分層表556中的與其相關(guān)聯(lián)的陣列。響應(yīng)于接收到要調(diào)度指示虛擬處理器(諸如虛擬處理器534)的線程的請(qǐng)求,調(diào)度器552可確定虛擬處理器534的種子并訪問高速緩存分層表556來確定與所分配的邏輯處理器共享最高級(jí)別的高速緩存的可用邏輯處理器。調(diào)度器552隨后可將線程調(diào)度到與所分配的邏輯處理器共享最高級(jí)別的高速緩存的可用邏輯處理器上。操作1318示出使得將由虛擬高速緩存互連的多個(gè)虛擬處理器展示給客操作系統(tǒng)。例如,轉(zhuǎn)向圖5,系統(tǒng)管理程序550可獲得描述如何為虛擬機(jī)530生成虛擬高速緩存拓?fù)浣Y(jié)構(gòu)的配置信息。在一個(gè)實(shí)施例中,系統(tǒng)管理程序550可生成該信息,或者在數(shù)據(jù)中心的實(shí)施例中,它可從例如圖4的管理系統(tǒng)402接收該配置信息。配置信息可描述在其引導(dǎo)時(shí)可被展示給客操作系統(tǒng)532的虛擬高速緩存拓?fù)浣Y(jié)構(gòu)。客操作系統(tǒng)532隨后可檢測(cè)該拓?fù)浣Y(jié)構(gòu)并將它的調(diào)度器配置成取決于該拓?fù)浣Y(jié)構(gòu)。例如,客操作系統(tǒng)532可查詢虛擬處理器來確定拓?fù)浣Y(jié)構(gòu)。系統(tǒng)管理程序550可截取查詢并用描述了虛擬高速緩存拓?fù)浣Y(jié)構(gòu)的拓?fù)浣Y(jié)構(gòu)信息來響應(yīng)。在該示例中,虛擬高速緩存拓?fù)浣Y(jié)構(gòu)可獨(dú)立于主計(jì)算機(jī)系統(tǒng)的物理拓?fù)浣Y(jié)構(gòu),從而使得客操作系統(tǒng)532可被容易地遷移至數(shù)據(jù)中心400中的任何計(jì)算機(jī)系統(tǒng)。上述詳細(xì)描述通過示例和/或操作圖闡明了系統(tǒng)和/或過程的各種實(shí)施例。就這些框圖和/或示例包含一個(gè)或多個(gè)功能和/或操作而言,本領(lǐng)域技術(shù)人員將理解,這些框圖或示例中的每一功能和/或操作都可由各種各樣的硬件、軟件、固件、或?qū)嶋H上其任意組合來單獨(dú)地和/或共同地實(shí)現(xiàn)。
雖然已示出和描述了本文中描述的主題內(nèi)容的特定方面,但是本領(lǐng)域技術(shù)人員將明白,基于本文中的教導(dǎo),可作出改變和修改而不脫離本文中描述的主題內(nèi)容,并且其更廣方面以及因此所附權(quán)利要求的范圍旨在涵蓋落在本文中描述的主題內(nèi)容的真實(shí)精神和范圍內(nèi)的所有此類改變和修改。
權(quán)利要求
1.一種包括多個(gè)非均勻存儲(chǔ)器訪問(NUMA)節(jié)點(diǎn)(500和50 的計(jì)算機(jī)系統(tǒng)(100),每一 NUMA節(jié)點(diǎn)(500和50 包括多個(gè)邏輯處理器(506-5M),其中所述計(jì)算機(jī)系統(tǒng)(100)包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(110),所述介質(zhì)包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得響應(yīng)于接收到調(diào)度指示虛擬機(jī)(530)的虛擬處理器 (534-540)的線程的請(qǐng)求來生成空閑邏輯處理器(5M或56 列表的指令;以及在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得指示所述虛擬處理器(534-540)的線程被調(diào)度在所述列表中與種子邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上的指令。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括 在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí),使得響應(yīng)于確定最后運(yùn)行指示所述虛擬處理器的所述線程的邏輯處理器不可用、并且自從指示所述虛擬處理器的所述線程最后一次執(zhí)行以來已經(jīng)超過預(yù)定時(shí)間量,指示所述虛擬處理器的所述線程被調(diào)度在與所述種子邏輯處理器共享一個(gè)級(jí)別的高速緩存的邏輯處理器上的指令。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括 在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí),使得響應(yīng)于確定最后運(yùn)行指示所述虛擬處理器的所述線程的邏輯處理器不可用并且自從指示所述虛擬處理器的所述線程最后一次執(zhí)行以來未超過預(yù)定時(shí)間量,指示所述虛擬處理器的所述線程被排隊(duì)在最后運(yùn)行指示所述虛擬處理器的所述線程的所述邏輯處理器上的指令。
4.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括 在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得最后執(zhí)行指示所述虛擬處理器的所述線程的邏輯處理器被設(shè)為所述種子邏輯處理器的指令。
5.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括 在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得理想邏輯處理器被設(shè)為所述種子邏輯處理器的指令。
6.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,使得指示所述虛擬處理器的所述線程被調(diào)度的所述指令還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得指示所述虛擬處理器的所述線程被調(diào)度在所述列表中與所述種子邏輯處理器共享最高級(jí)別的高速緩存的邏輯處理器上的指令。
7.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,使得生成所述空閑邏輯處理器列表的所述指令還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得從特定NUMA節(jié)點(diǎn)中的邏輯處理器列表中生成所述空閑邏輯處理器列表的指令。
8.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括 在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得將虛擬高速緩存拓?fù)浣Y(jié)構(gòu)展示給客操作系統(tǒng)的指令,其中所述虛擬高速緩存拓?fù)浣Y(jié)構(gòu)基于多個(gè)計(jì)算機(jī)系統(tǒng)的物理高速緩存拓?fù)浣Y(jié)構(gòu)。
9.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(110),包括在由計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得指示虛擬機(jī)(530)的虛擬處理器(534)的線程被分配要在其上執(zhí)行的獨(dú)特邏輯處理器(506)的指令;在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得響應(yīng)于接收到要執(zhí)行指示虛擬處理器(534)的線程的請(qǐng)求來生成空閑邏輯處理器列表的指令;以及在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得指示所述虛擬處理器(534)的所述線程被調(diào)度在與被分配來執(zhí)行指示所述虛擬處理器(534)的所述線程的所述獨(dú)特邏輯處理器(508)共享一個(gè)級(jí)別的高速緩存的邏輯處理器上的指令。
10.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得響應(yīng)于確定所述獨(dú)特邏輯處理器不可用而選擇與所述獨(dú)特邏輯處理器共享所述級(jí)別的高速緩存的邏輯處理器的指令。
11.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,使得指示所述虛擬處理器的所述線程被調(diào)度的所述指令還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得響應(yīng)于確定自從指示所述虛擬處理器的所述線程最后一次執(zhí)行以來已經(jīng)超過預(yù)定時(shí)間量而調(diào)度指示所述虛擬處理器的所述線程的指令。
12.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí),使得響應(yīng)于確定最后運(yùn)行指示所述虛擬處理器的所述線程的所述邏輯處理器不可用并且自從指示所述虛擬處理器的所述線程最后一次執(zhí)行以來未超過預(yù)定時(shí)間量,指示所述虛擬處理器的所述線程被排隊(duì)在最后運(yùn)行指示所述虛擬處理器的所述線程的所述邏輯處理器上的指令。
13.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得為所述計(jì)算機(jī)系統(tǒng)中的每一非均勻存儲(chǔ)器體系結(jié)構(gòu) (NUMA)節(jié)點(diǎn)維護(hù)空閑邏輯處理器列表的指令。
14.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,使得指示所述虛擬處理器的所述線程被調(diào)度的所述指令還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得指示所述虛擬處理器的所述線程被調(diào)度在與被分配來執(zhí)行指示所述虛擬處理器的所述線程的所述邏輯處理器共享最高級(jí)別的高速緩存的邏輯處理器上的指令。
15.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在由所述計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)使得將由虛擬高速緩存互聯(lián)的多個(gè)虛擬處理器展示給客操作系統(tǒng)的指令。
全文摘要
本發(fā)明明公開了系統(tǒng)管理程序調(diào)度器。用于在作出調(diào)度決策時(shí)將系統(tǒng)管理程序調(diào)度器配置成利用處理器的高速緩存拓?fù)浣Y(jié)構(gòu)和NUMA節(jié)點(diǎn)之間的物理存儲(chǔ)器距離的技術(shù)。在相同或其他實(shí)施例中,系統(tǒng)管理程序調(diào)度器可被配置成優(yōu)化等待時(shí)間敏感的工作負(fù)載的調(diào)度。在相同或其他實(shí)施例中,系統(tǒng)管理程序可被配置成將虛擬高速緩存拓?fù)浣Y(jié)構(gòu)展示給在虛擬機(jī)中運(yùn)行的客操作系統(tǒng)。
文檔編號(hào)G06F9/455GK102289390SQ20111015898
公開日2011年12月21日 申請(qǐng)日期2011年5月31日 優(yōu)先權(quán)日2010年6月1日
發(fā)明者A·巴哈德里, D·梅舍昌尼諾夫, S·甘古利 申請(qǐng)人:微軟公司