專利名稱:對虛擬化環(huán)境中的中斷結束消息的懶惰處理的制作方法
對虛擬化環(huán)境中的中斷結束消息的懶惰處理背景計算機行業(yè)正趨向于硬件層面的越來越多的虛擬化。在這些環(huán)境中,操作系統(tǒng)運 行在虛擬機監(jiān)控程序或管理程序之上,訪客操作系統(tǒng)與計算機硬件的交互由虛擬化層來仲 裁。這允許多個訪客操作系統(tǒng)(0 在單個計算機上同時運行,使得有可能在同一物理機器 上運行多個工作負荷。每個工作負荷可以在一個不同的訪客操作系統(tǒng)上執(zhí)行,在訪客操作 系統(tǒng)之間具有強有力的隔離。這對于信息技術(IT)部門或者需要運行多個工作負荷或多 個服務器應用的任何運算來說特別有利。允許多個訪客操作系統(tǒng)在單個計算機上運行可以通過以安全但有效的方式向每 個訪客操作系統(tǒng)分配硬件資源來實現(xiàn)。傳統(tǒng)上,管理程序通過把硬件設備作為虛擬硬件設 備暴露給每個訪客操作系統(tǒng)個來分配硬件資源。一些物理硬件設備是通過仲裁對物理硬件 設備的直接訪問來虛擬化的。其他物理硬件設備通過攔截對底層設備的請求、并且經(jīng)由相 關方式使用底層硬件設備來實現(xiàn)所請求的功能來虛擬化。仍然有其他物理硬件設備被完全 地仿真。根據(jù)實現(xiàn)虛擬硬件設備所需的干預和仿真量,在虛擬硬件設備上執(zhí)行功能的增加 的成本會顯著的變化。盡管仲裁對物理硬件設備的訪問會將計算成本提高一個適當?shù)陌俜?比,對物理硬件設備進行軟件仿真將會非常昂貴。例如,當一訪客操作系統(tǒng)訪問一虛擬硬盤以讀取數(shù)據(jù)塊時,管理程序會攔截功能 調用。管理程序可以通過允許對硬盤的直接訪問,或者通過從包含虛擬化硬盤的內容的文 件中讀取數(shù)據(jù)塊從而實現(xiàn)該功能。這兩種程度的管理程序干預會適度地增加完成功能調用 所需的系統(tǒng)資源。另一方面,對諸如高級可編程中斷控制器(APIC)這樣的硬件設備進行虛 擬化會要求訪問物理APIC所需的許多倍的系統(tǒng)資源。概述本發(fā)明描述了能夠把來自訪客操作系統(tǒng)的中斷結束(EOI)消息懶惰地傳送至管 理程序中執(zhí)行的輸入/輸出高級可編程中斷控制器(I/O APIC)虛擬化模塊的技術。懶惰 傳送EOI需要對存儲器進行寫操作以指示EOI出現(xiàn),允許I/0APIC虛擬化模塊稍后讀取存 儲器。一些實現(xiàn)采用了在管理程序和訪客操作系統(tǒng)間共享的存儲器頁以便在運行訪客操作 系統(tǒng)的虛擬化CPU上發(fā)生EOI時進行懶惰傳送。一些實現(xiàn)還可以采用共享存儲器頁以便使 管理程序在可以懶惰傳送EOI時傳送至訪客操作系統(tǒng)。一些實現(xiàn)使用在受啟發(fā)的EOI處理 機上執(zhí)行的受啟發(fā)的訪客操作系統(tǒng),根據(jù)管理程序所給予的指示來處理EOI消息。因此,這 些技術使管理程序能處理許多EOI消息,而無須產(chǎn)生管理程序攔截和仿真訪客操作系統(tǒng)所 產(chǎn)生的EOI消息的不必要代價。附圖簡述參考附圖來描述具體實施方式
。在附圖中,附圖標記中最左邊的數(shù)字標識該附圖 標記首次出現(xiàn)的附圖。在不同附圖中使用相同的附圖標記指示相似或相同的項。
圖1描述了說明性的環(huán)境,其中可由管理程序所仿真的虛擬I/O APIC來懶惰地評 估虛擬CPU所生成的EOI。圖2描述了用于接收中斷請求并且把中斷請求轉發(fā)至CPU的說明性的虛擬I/OAPICo圖3描述了用于確定何時產(chǎn)生攔截以處理Ε0Ι、以及何時懶惰地處理EOI的說明性 的過程。圖4-5描述了用于在APIC處接收中斷請求、把請求發(fā)送至CPU、從CPU接收與中斷 相對應的Ε0Ι、以及處理EOI的說明性的過程。圖6-8描述了用于確定管理程序何時能確定EOI必需立即被發(fā)送至I/0APIC虛擬 化模塊的附加說明性過程。圖9描述了說明性的邊緣觸發(fā)的和電平觸發(fā)的中斷。圖10描述了用于確定EOI消息是否應被發(fā)送至虛擬應用程序編程接口(API)的 說明性的過程。詳細描述概覽本發(fā)明針對能夠把來自訪客操作系統(tǒng)的中斷結束(EOI)消息懶惰地傳送至輸入/ 輸出高級可編程中斷控制器(I/O APIC)虛擬化模塊的技術。這些技術使訪客操作系統(tǒng)能 夠準確地且更有效地處理中斷請求,而無須不必要地使管理程序俘獲和攔截EOI通信。這 些技術可以使用共享存儲器頁來便于管理程序和訪客操作系統(tǒng)間的通信。通過使用共享存 儲器頁,管理程序能夠在EOI必需被立即發(fā)送至管理程序時、或者在EOI可以被管理程序懶 惰地檢取時傳送至訪客操作系統(tǒng)。并且,當管理程序指示EOI可以被懶惰地處理時,以及當 執(zhí)行訪客操作系統(tǒng)的虛擬化CPU發(fā)布一 EOI時,訪客操作系統(tǒng)可以使用共享存儲器來指示 已經(jīng)出現(xiàn)了 Ε0Ι。管理程序可以在為其他原因執(zhí)行時檢驗此指示,節(jié)省了俘獲和攔截EOI的 立即傳輸?shù)拇鷥r。題為“說明性虛擬化操作環(huán)境”的第一節(jié)闡述了可啟用這些和其他動作的環(huán)境。 接著是“說明性的虛擬化I/O APIC環(huán)境和中斷處理過程”一節(jié),描述了可怎樣處理虛擬I/ 0 APIC所接收到的中斷。題為“中斷的說明性處理”的第三節(jié)描述了在處理中斷時虛擬I/ 0 APIC可采用的說明性步驟。題為“確定何時把EOI立即傳送至管理程序”的第四節(jié)描述 了管理程序向訪客操作系統(tǒng)指示EOI消息應當被立即發(fā)送至管理程序的條件。題為“圖形 中斷表示”的第五節(jié)描述了兩種常見類型的中斷。該簡要介紹是為方便讀者理解而提供的,且并不旨在限制權利要求以及以上各節(jié) 的范圍。 說明性虛擬化操作環(huán)境以下討論描述了說明性虛擬操作環(huán)境以幫助讀者理解可采用各種技術的各方面 的某些方式。以下描述的環(huán)境僅構成一個示例且并非旨在將這些技術的應用限于任一個特 定操作環(huán)境??墒褂闷渌h(huán)境而不背離所要求保護的主題的精神和范圍。圖1描述了包括用戶104所操作的計算機設備102在內的一種這樣的虛擬化環(huán)境 100。盡管描述為服務器計算機,計算設備102也可以是臺式機、便攜式計算機或者任何其 他的計算設備。在一種實現(xiàn)中,計算設備102可以在管理程序112(也稱為虛擬機管理器) 上同時執(zhí)行根操作系統(tǒng)106、訪客操作系統(tǒng)108和訪客操作系統(tǒng)110。這些操作系統(tǒng)可以是 Microsoft Windows 、Linux 、Sun Solaris 或其他任何操作系統(tǒng)中的任何版本。此外 或者可替代的,訪客操作系統(tǒng)可以單獨在計算設備102上執(zhí)行。
在一種實現(xiàn)中,管理程序112在與計算設備102耦合的物理硬件設備上直接執(zhí) 行,管理和分配這些物理硬件設備。此外或者可替代的,根操作系統(tǒng)106可以擁有與計算 設備102耦合的物理硬件設備。在一種實現(xiàn)中,計算設備102包括與物理存儲器118耦合 的物理中央處理單元(CPU) 114。物理CPU 114可以包括物理本地高級可編程中斷控制器 (APIC) 116,并且可以耦合至物理輸入/輸出高級可編程中斷控制器(I/O APIC)122。硬件設備可以請求CPU 114中斷其當前的執(zhí)行以便為中斷硬件設備提供服務。傳 統(tǒng)上,有兩種類型的中斷電平觸發(fā)的中斷和邊緣觸發(fā)的中斷。邊緣觸發(fā)的中斷是所謂的 “激發(fā)和遺忘中斷”,其中中斷設備通過在其線路上斷言正電壓來把邊緣觸發(fā)的中斷發(fā)送至 I/O APIC,然后立即去除線路上的斷言。該電壓變化產(chǎn)生了一個邊緣,APIC將其解釋為中 斷。一旦發(fā)送了中斷,從設備到APIC的線路就保持去除斷言。電平觸發(fā)的中斷也通過在把 中斷設備連接至APIC的線路上斷言正電壓來發(fā)起。不像邊緣觸發(fā)的中斷,當發(fā)送電平觸發(fā) 的中斷時,中斷設備并不去除線路上的斷言,直到中斷設備接收到始發(fā)自CPU的表示中斷 已被處理的指示。這樣,令CPU發(fā)送EOI的一個目的在于向中斷設備發(fā)信號通知中斷已完 成,因此斷言設備可以去除其線路上的斷言。電平觸發(fā)的中斷用在一些總線上,例如PCI總 線,使得在處理期間不會丟失中斷。如果第一邊緣與第二邊緣重疊,則邊緣觸發(fā)的中斷可能 丟失,在這種情況下,第二邊緣不會被接收I/O APIC所見。物理I/O APIC 122可以從諸如硬盤驅動器IM或串行端口 124、1沈這樣的硬件設 備接收中斷信號。例如,硬盤驅動器1 可以使用中斷來向物理CPU114指示異步DMA轉移 已完成。在該情況下,硬盤驅動器124向物理I/O APIC122發(fā)送中斷,以請求物理CPU 114 執(zhí)行與硬盤驅動器1 相關聯(lián)的中斷請求處理機。物理I/O APIC 122然后可以中斷物理 CPU 114,使物理CPU 114保存當前的執(zhí)行上下文,并且開始執(zhí)行與硬盤驅動器1 相關聯(lián) 的中斷請求處理機。物理I/O APIC 122可以有許多引腳,在其上接收到中斷請求信號。在一種實現(xiàn) 中,物理I/O APIC 122可以有255個引腳,每個引腳對應于從0到255的一個向量,然而可 以構想具有不同引腳數(shù)的I/O APIC。在一種實現(xiàn)中,操作系統(tǒng)向每個硬件設備分配一個向 量,和具有較低優(yōu)先級的設備相比,具有較高優(yōu)先級的設備被分配到較大編號的向量。在一 種實現(xiàn)中,來自硬件設備的中斷請求由被分配至該硬件設備的向量來識別。I/O APIC的操 作在以下圖2中更詳細地描述。此外或者可替代的,I/O APIC提供了處理器間的中斷(IPI)。物理I/O APIC122 可以為物理CPU 114提供把中斷發(fā)送至另一 CPU的機制,也許作為多處理器系統(tǒng)的一部分。 為了執(zhí)行IPI,CPU對中斷控制寄存器(ICR)進行寫操作,后者轉而把中斷發(fā)送至目標處理 器。此外或者可替代的,物理CPU 114可以經(jīng)由ICR為其自己請求中斷。在一種實現(xiàn)中,物理CPU 114可以包含物理本地APIC 116。物理本地APICl 16可 以包含255個引腳,每個引腳對應于0-255間的一個向量。在其他實施例中,可以構想不同 數(shù)量的引腳,一般與物理I/O APIC 122所包含的引腳數(shù)相對應。物理本地APIC 116可以 從物理I/O APIC 122接收消息以及把消息發(fā)送至物理I/O APIC 122。在一種實現(xiàn)中,管理程序112可以對與計算設備102耦合的物理設備進行虛擬化, 把虛擬硬件設備呈現(xiàn)給管理程序112之上執(zhí)行的每個訪客操作系統(tǒng)。在一種實現(xiàn)中,虛擬 硬件設備提供與它們的非虛擬對應物相同或幾乎相同的功能。在一種實現(xiàn)中,根操作系統(tǒng)106擁有計算設備102內包含的全部物理硬件設備,例如物理CPU 114、物理存儲器118、物 理I/O APIC 122、硬盤驅動器IM和串行端口 124、126。在該實施例中,根操作系統(tǒng)106向 其他訪客操作系統(tǒng)提供虛擬硬件設備。此外或者可替代的,管理程序112可以擁有計算設 備102內包含的全部物理硬件設備,并且向訪客操作系統(tǒng)108和110提供虛擬硬件設備。在一種實現(xiàn)中,根操作系統(tǒng)106把虛擬CPU 128提供給訪客操作系統(tǒng)108,把虛擬 CPU 134提供給訪客操作系統(tǒng)110。虛擬CPU 1 和虛擬CPU 134可以分別包括虛擬本地 APIC 130和虛擬本地APIC 123。在一個實施例中,虛擬CPU 1 和虛擬CPU 134是薄型包 裝的虛擬設備,使訪客操作系統(tǒng)能直接訪問底層的物理CPU 114。在一種實施例中,虛擬本 地APIC 130和虛擬本地APIC123可以在根操作系統(tǒng)106中用軟件來仿真。由于仿真性質, 和由物理本地APICl 16執(zhí)行時相比,在虛擬本地APIC 130和123處接收和處理中斷會顯著 地增加代價。此外或者可替代的,存儲器虛擬化模塊136可以向每個訪客操作系統(tǒng)提供一虛擬 存儲器,比如與訪客操作系統(tǒng)108相關聯(lián)的虛擬存儲器138以及和訪客操作系統(tǒng)110相關 聯(lián)的虛擬存儲器140。虛擬CPU 1 和虛擬CPU 134的每一個可以分別耦合至虛擬APIC 142和虛擬APIC 144。與虛擬本地APIC類似,虛擬I/O APIC可由I/O APIC虛擬化模塊 154在根操作系統(tǒng)106中或管理程序112中仿真。在一種實現(xiàn)中,硬件設備所產(chǎn)生的中斷被虛擬I/O APIC 142接收,被轉發(fā)至虛擬 本地APIC 130、并由虛擬CPU 1 處理。在接收到中斷后,虛擬CPU 1 將其執(zhí)行上下文改 變?yōu)榕c中斷相關聯(lián)的服務例程。在一種實現(xiàn)中,該服務例程可以通過與發(fā)送該中斷的設備 進行通信來負責處理中斷。一旦虛擬CPU 1 已經(jīng)完成執(zhí)行服務例程,虛擬CPU 1 就用 中斷結束確認(EOI)來通知虛擬I/O APIC 1 它已完成中斷。在傳統(tǒng)的計算機上,像物理CPU 114這樣的CPU經(jīng)由存儲器映射的I/O頁120來 把EOI消息發(fā)送至物理I/O APIC 122。在傳統(tǒng)的計算機上,存儲器映射的I/O頁120通過 向看似存儲器頁但實際上是與物理I/O APIC 122通信的手段的部分進行寫操作,從而允許 物理CPU 114與物理I/O APIC 118通信。在虛擬化的環(huán)境中,多個虛擬CPU的每一個可以 訪問不同的虛擬存儲器,每個虛擬存儲器都以單個物理存儲器118為支持。如果允許多個 虛擬CPU同時訪問物理I/O APIC 122,那么物理I/O APIC 122并因此整個計算設備102將 會崩潰。為了防止這一點,I/O APIC虛擬化模塊IM在存儲器映射的I/O頁148和存儲器 映射的I/O頁150上安裝存儲器攔截模塊146,使得虛擬CPU與物理I/0APIC 120通信的任 何企圖都會被俘獲至I/O APIC虛擬化模塊154。然后,APIC虛擬化軟件巧4可以在根操作 系統(tǒng)106或者管理程序的上下文中執(zhí)行,用軟件來仿真物理APIC。例如,虛擬CPU 1 可以通過向存儲器映射的I/O頁148進行寫操作來發(fā)出自中 斷。虛擬CPU 1 可以被編程以預期向該頁存儲器的寫操作會傳送至物理I/O APIC 122。 相反,要被物理I/O APIC 122所接收的存儲器操作被根操作系統(tǒng)106中執(zhí)行的I/O APIC 虛擬化模塊巧4俘獲。于是,I/O APIC虛擬化模塊巧4可以仿真物理I/O APIC 122。在自 中斷的情況下,I/O APIC虛擬化模塊巧4可以直接調用至管理程序112內,以便向虛擬本 地APIC 130發(fā)出中斷,虛擬本地APIC 130也是用軟件仿真的。在該情況下,無須使用物理 I/O中斷122或物理本地中斷116,就能處理虛擬CPU 1 所發(fā)出的自中斷。在另一個實施例中,虛擬CPU 1 可以向諸如虛擬CPU 134這樣的多處理器(MP)系統(tǒng)中的一個或所有處理器發(fā)出處理器間中斷(IPI)。在該情況下,根操作系統(tǒng)106中的存 儲器攔截模塊146俘獲了指向物理I/O APIC 122的指令。與上述自中斷的處理類似,I/O APIC虛擬化模塊巧4可以調用至管理程序內,以便向虛擬本地APIC 123發(fā)出中斷。在一種實現(xiàn)中,虛擬I/O APIC 142所接收到的中斷可以觸發(fā)存儲器攔截模塊146 中的攔截。然后,I/O APIC虛擬化模塊巧4可以處理接收到的中斷,仿真虛擬I/O APIC 142。這些攔截可經(jīng)常發(fā)生,有時每秒幾萬次。虛擬I/O APIC142所接收和處理的每一個中 斷可以跟隨一個EOI,所述EOI從虛擬CPU 1 被發(fā)送至虛擬I/O APIC 142。在本機系統(tǒng) 上,EOI并不昂貴——物理CPU 144僅與物理I/O APIC 122對話。然而,在虛擬化環(huán)境中, 除了執(zhí)行攔截所需的CPU周期之外,可能還需要幾千個物理CPU周期來在I/O APIC虛擬化 模塊154中仿真EOI。在一種實現(xiàn)中,管理程序112將一片信息放入共享頁152,指示訪客操作系統(tǒng)108 是應該還是不應該向虛擬I/O APIC 142發(fā)送Ε0Ι。如果管理程序112告知訪客操作系統(tǒng) 108發(fā)送Ε0Ι,訪客操作系統(tǒng)108就會通過向存儲器映射的I/O頁148進行寫操作而同時試 圖與虛擬I/O APIC 142通信,從而產(chǎn)生攔截。另一方面,如果管理程序112經(jīng)由共享存儲 器152告知訪客操作系統(tǒng)108要懶惰地處理EOI,那么訪客操作系統(tǒng)108可不產(chǎn)生攔截,而 是可向共享頁152進行寫操作,指示EOI出現(xiàn)。一旦訪客操作系統(tǒng)108通過在共享存儲器152中設置一標記來指示已出現(xiàn)Ε0Ι,管 理程序112就會稍后讀取共享存儲器152以確定是否生成過EOI。如果管理程序112確定 虛擬CPU 128已生成EOI,它就通知I/O APIC虛擬化模塊154,后者會如圖2所述地更新其 狀態(tài)。在該實施例中,EOI已出現(xiàn)的事實被發(fā)送至I/O APIC虛擬化模塊154,后者實現(xiàn)虛擬 I/O APIC 142而無須不必要地產(chǎn)生潛在的耗時的攔截。說明性的虛擬化I/O APIC環(huán)境和中斷處理過程圖2描述了說明性的I/O APIC環(huán)境200。管理程序202運行在物理計算機硬件 之上,使訪客操作系統(tǒng)204能夠在虛擬CPU 206上執(zhí)行。虛擬I/O APIC 208顯示出多個引 腳210 (a)、210 (b)、... 210 (η),這些引腳可以連接至像虛擬串行端口 232和虛擬網(wǎng)絡卡234 這樣的硬件設備。訪客操作系統(tǒng)204可以向每個硬件設備分配優(yōu)先級,或向量。在一種實 現(xiàn)中,虛擬I/O APIC 208有255個引腳,訪客操作系統(tǒng)可以向硬件設備分配從0(最低優(yōu)先 級)到255(最高優(yōu)先級)的優(yōu)先級。在一個實施例中,虛擬串行端口 232被分配到優(yōu)先級 0,而虛擬網(wǎng)絡卡234被分配到優(yōu)先級3。虛擬I/O APIC 208可以與包含虛擬本地APIC 214的虛擬CPU 202耦合。在一種 實現(xiàn)中,虛擬CPU 202可以連接至虛擬存儲器216,后者包含共享頁218和存儲器映射的I/ 0頁214。此外,虛擬存儲器216可以包括虛擬串行端口中斷服務例程218、222(a)以及虛 擬網(wǎng)絡卡中斷服務例程218、222(b)。虛擬I/O APIC 208可以包括兩個寄存器,每個寄存器為每一個引腳210包含一個 位。在一種實現(xiàn)中,兩個寄存器的每一個均包含256位。一個寄存器可以是中斷請求寄存 器(IRR) 224,它包含位2282 (a)、...2^228(n)。另一個寄存器可以是中斷服務寄存器 (ISR) 226,它包含位230 (a)、...230 (η)。在一種實現(xiàn)中,可以在引腳210 (a)上由虛擬I/O APIC 208從虛擬串行端口 232接收到中斷。在一種實現(xiàn)中,把和接收到中斷的引腳210 (a) 相對應的位2282^(a)設為1,指示中斷已被接收。然后可把中斷轉發(fā)至位于虛擬CPU 206上的虛擬本地APIC 214,虛擬本地APIC 214于是可“中斷”虛擬CPU 206的執(zhí)行。一旦虛擬本地APIC 214已“中斷” 了虛擬CPU 206,虛擬CPU 206就可向虛擬I/O APIC 208確認它已接收到中斷,使虛擬I/O APIC 208通過將位2282 (b)的值設為0來清 除該位。虛擬I/O APIC 208也可以在和接收到中斷的引腳相對應的ISR 230中設置該位。 在該情況下,位230(a)可以被設置為1。一旦清除了位228 228 (a)并設置了位230 (a),虛 擬CPU 206就處在處理中斷的過程中。在虛擬CPU 206處理中斷時,第二中斷可由虛擬I/ 0 APIC 208在引腳210 (a)上接收到。在接收到中斷后,虛擬CPU 206可以保存其當前的執(zhí)行環(huán)境,即其寄存器的當前 狀態(tài),然后調用與中斷相關聯(lián)的虛擬串行端口中斷服務例程218 222(a)。一旦虛擬CPU 206已完成執(zhí)行虛擬串行端口中斷服務例程218222(a),虛擬CPU 206就通過向存儲器映射 的I/O頁148進行寫操作來通知虛擬I/0APIC 208,使得由管理程序202進行攔截。在一種 實現(xiàn)中,該通知包括中斷結束確認,即Ε0Ι。EOI通知虛擬I/O APIC 208:虛擬CPU 206已完 成處理最高優(yōu)先級,因此已完成最近完成的待處理的中斷。響應于Ε0Ι,虛擬I/O APIC 208 清除ISR中的最高優(yōu)先級位。在上面的例子中,虛擬I/O APIC 208可以清除位230(b)。在一個實施例中,訪客操作系統(tǒng)204可以從管理程序202設置的標記中推斷是要 立即發(fā)送EOI還是要懶惰地評估EOI。管理程序202可以根據(jù)虛擬I/0APIC 203的狀態(tài)來 確定是否必需要立即發(fā)送Ε0Ι。下面描述了必需立即發(fā)送EOI的三種說明性的情況。在一種情況中,兩個設備可以向虛擬I/O APIC 203發(fā)送中斷。例如,網(wǎng)絡卡234和 串行端口 232可以在同一個時鐘周期期間分別發(fā)送中斷向量X和中斷向量Y。在一種實現(xiàn) 中,中斷向量Y的優(yōu)先級大于中斷向量X的優(yōu)先級。在一種實現(xiàn)中,虛擬I/O APIC 208可 以在IRR 224中把和中斷X相對應的位設置為1,并且還在IRR 224中把和中斷Y相對應的 位設置為1。然后,在每一個時鐘周期,虛擬I/O APIC 208可以確定IRR 2M寄存器中設置 的最高數(shù)字的位。然后,虛擬I/O APIC 208經(jīng)由虛擬本地APIC 214,用最高優(yōu)先級中斷Y 來中斷CPU。一旦虛擬CPU 206確認了對中斷Y的接收后,虛擬I/O APIC 208就把和Y相 對應的ISR位設置為1,并且把和Y相對應的IRR位設置為0,表示Y正在被虛擬CPU 203 處理。繼續(xù)該情況,中斷向量X持續(xù)等待較高優(yōu)先級的中斷Y結束,并且會繼續(xù)等待,直 到虛擬CPU 206向虛擬I/O APIC 208表示Y已完成。如果中斷Y是虛擬I/O APIC 203中 待處理的唯一中斷,那么管理程序202就會經(jīng)由共享頁218表示訪客操作系統(tǒng)可以懶惰地 評估Ε0Ι。然而,由于中斷X正在等待被處理,因此懶惰地更新EOI會延遲中斷X被處理的 時間,使系統(tǒng)性能降級。因此,當管理程序202經(jīng)由I/O APIC虛擬化模塊巧4檢測到虛擬 I/O APIC 203處存在待處理的第二個、較低優(yōu)先級的中斷時,管理程序202會經(jīng)由共享頁 218表示虛擬CPU 206所生成的任何EOI必須被立即發(fā)送。當?shù)谝粋€中斷正在被虛擬CPU 206處理并且第二個、較高優(yōu)先級的中斷被虛擬I/ 0 APIC 203接收到時,會出現(xiàn)另一種常見的情況。在該情況中,虛擬I/O APIC 208使用ISR 寄存器2 來維持虛擬CPU 206上執(zhí)行的嵌套中斷處理機的棧。例如,如果中斷X正在被 虛擬CPU 206處理,并且虛擬I/O APIC 208接收到中斷Y,Y的優(yōu)先級高于X的優(yōu)先級,那 么虛擬I/O APIC 208就會用中斷Y來中斷CPU。在虛擬CPU 206完成執(zhí)行X的服務請求處理機之前,中斷Y會完全地中斷X的服務請求處理機的執(zhí)行。X的服務請求處理機位于服務請求處理機的棧上。一旦兩個中斷請 求X和Y都已被發(fā)送至虛擬CPU 206,那么與這些中斷相關聯(lián)的IRR位就會被設為0,而與 中斷相關聯(lián)的ISR位會被設為1,指示兩個中斷都已被發(fā)送至虛擬CPU 206。在一個實施例 中,共享頁206可以包含單個位來指示EOI是否已出現(xiàn)。由于有兩個待處理的中斷,并且僅 有一位信息,管理程序202將不可能確定是一個還是兩個中斷生成了 Ε0Ι。因此,訪客操作 系統(tǒng)204被配置成在兩個中斷中的第一個完成時發(fā)送Ε0Ι。繼續(xù)該例,一旦中斷Y的服務請求處理機完成,由于ISR 226中設置了至少兩個 位,因此虛擬CPU 206就會將EOI返回至虛擬化的I/O APIC 208。虛擬化的I/O APIC 208 會清除與中斷Y相關聯(lián)的ISR位,CPU會繼續(xù)處理中斷X的服務請求處理機。在處理了中 斷Y的EOI后,虛擬I/O APIC 208會重新區(qū)分優(yōu)先級,并且確定在虛擬CPU 206處僅有一 個中斷待處理。相應地,管理程序會設置共享頁218中的位,表示訪客操作系統(tǒng)可以懶惰地 評估EOI。電平觸發(fā)的中斷包括第三種情況,其中要求訪客操作系統(tǒng)立即把EOI發(fā)送至管理 程序供處理。由于觸發(fā)中斷的硬件設備會比必要時間更長地繼續(xù)斷言其線路,因此就被阻 止發(fā)出下一個中斷,所以電平觸發(fā)的中斷可不被懶惰地評估。結果,管理程序202會要求立 即發(fā)送與電平觸發(fā)的中斷相關聯(lián)的Ε0Ι,在管理程序中產(chǎn)生攔截,因此使中斷設備能去除其 線路上的斷言。中斷的說明性處理圖3描述了用于確定何時產(chǎn)生攔截以處理Ε0Ι、以及何時懶惰地處理EOI的說明性 的過程。過程300從步驟302開始,其中從諸如虛擬網(wǎng)絡卡234這樣的虛擬硬件設備接收 中斷請求。與此同時,在步驟304,把中斷發(fā)送至虛擬CPU206待處理。在一個實施例中,所 接收到的中斷是目前在虛擬I/O APIC 203處待處理的唯一中斷,而目前沒有中斷正在被虛 擬CPU 206處理。然后,在步驟306,虛擬CPU 206產(chǎn)生EOI并將EOI發(fā)送至訪客操作系統(tǒng) 204。在步驟308,訪客操作系統(tǒng)204通過讀取共享頁218來確定NoEOIRequired位是否被 設為1。如果是,訪客操作系統(tǒng)就通過設置共享頁218中的EOIOccurred位來進行響應。稍 后,當管理程序202因某些原因而執(zhí)行時,管理程序202可以讀取共享頁218并且確定EOI 出現(xiàn)。在一個實現(xiàn)中,I/O APIC虛擬化模塊巧4通過清除與在步驟302中從虛擬I/O APIC 203的ISR寄存器接收到的中斷相關聯(lián)的位,從而對EOI的出現(xiàn)進行處理。另一方面,如果 清除了 NoECHRequired位,或者未設置,那么訪客操作系統(tǒng)204會產(chǎn)生Ε0Ι,使管理程序202 攔截EOI并立即對其進行處理。圖4描述了用于確定傳統(tǒng)的、物理I/O APIC如何對中斷的接收進行響應的說明性 過程400。過程400在步驟402開始,從諸如串行端口 1241 這樣的物理硬件設備接收中 斷請求。中斷可以是邊緣觸發(fā)的中斷或電平觸發(fā)的中斷。然后在步驟404,把和接收到中斷 的引腳相關聯(lián)的中斷請求寄存器(IRR)位設為1。如果中斷是邊緣觸發(fā)的中斷,串行端口 124 1 就會去除發(fā)送中斷的線路上的斷言。另一方面,如果中斷是電平觸發(fā)的中斷,串行 端口 1 就會繼續(xù)斷言該線路,直到向串行端口 1241 通知CPU已經(jīng)完成了中斷的處理。 在步驟406,APIC確定被設為1的最高優(yōu)先級IRR位是否具有比被設為1的最高優(yōu)先級ISR 位更高的優(yōu)先級。在許多情況下,不會設置ISR中的任何位,因此目標CPU —般很快地處理 中斷,減少了在處理另一個中斷時接收到一個中斷的可能性。在另一情況中,已經(jīng)在處理的
11中斷具有比剛剛接收到的中斷更高的優(yōu)先級。在該情況下,接收到的中斷必需等待較高優(yōu) 先級的中斷完成,如步驟408所示。在步驟410,最高優(yōu)先級IRR位的優(yōu)先級高于最高優(yōu)先級ISR位的優(yōu)先級,使I/O APIC把接收到的中斷發(fā)送至CPU。在步驟412,APIC更新與接收到的中斷相關聯(lián)的IRR和 ISR寄存器,把IRR中的位設為0,把ISR中的位設為1。這些位表示中斷在APIC中不再待 處理(IRR位=0),中斷正在被CPU執(zhí)行(ISR位=1)。圖5描述了用于確定傳統(tǒng)的、物理APIC如何對從物理CPU接收到EOI進行響應的 說明性過程500。過程500從步驟502開始,從CPU接收大到EOI。EOI可以指示由CPU處 理的最高優(yōu)先級中斷已經(jīng)完成。然后在步驟504,通過把與接收到的EOI相關聯(lián)的位設置為 0來清除該位。在一種實現(xiàn)中,由于CPU將總是以中斷的優(yōu)先級順序來執(zhí)行中斷,因此I/O APIC清除最高優(yōu)先級位。在一種實現(xiàn)中,I/O APIC然后會對任何待處理的中斷重新區(qū)分優(yōu) 先級,把次高優(yōu)先級的中斷發(fā)送至CPU供處理。然后在步驟506,確定對其接收到EOI的中斷是邊緣觸發(fā)的中斷還是電平觸發(fā)的 中斷。在步驟508,當EOI所響應于的中斷是邊緣觸發(fā)的中斷時,APIC完成對EOI的處理。 然而,當中斷是電平觸發(fā)的中斷時,執(zhí)行步驟510,I/O APIC向斷言中斷的設備通知中斷請 求已經(jīng)完成,并且設備可以向I/O APIC去除其線路斷言。確定何時把EOI立即傳送至管理程序圖6描述了一說明性過程600,它示出虛擬CPU 128所產(chǎn)生的EOI可被直接傳送至 管理程序112并且不被懶惰更新的一種條件。過程600在步驟602開始,在虛擬I/0APIC 142處接收到具有第一優(yōu)先級的第一中斷。應當注意,虛擬I/O APIC 142可以用管理程 序112或根操作系統(tǒng)106以軟件進行仿真,并且僅暴露給訪客操作系統(tǒng)108供執(zhí)行。在步 驟604,第一中斷可被注入到虛擬化的CPU 1 內。然后在步驟606,虛擬I/O APIC 142可 以接收優(yōu)先級比第一中斷的優(yōu)先級低的第二中斷,第二中斷是在第一中斷正在被虛擬CPU 128處理時被接收到的。然后在步驟608,管理程序112可以清除存儲在共享頁152中的 NoEOIRequired標志。清除NoECHRequired標志向訪客操作系統(tǒng)108表示,一旦虛擬CPU 128完成了對中斷的處理,訪客操作系統(tǒng)108就應當把EOI發(fā)送至管理程序,產(chǎn)生攔截。由 于較低優(yōu)先級的中斷僅僅會在I/O APIC虛擬化模塊IM處接收到EOI時被注入,因此應 當立即發(fā)送Ε0Ι。在該情況下,懶惰地更新虛擬I/O APIC 142會不必要地延遲對較低優(yōu)先 級中斷的處理。然后在步驟610,I/O APIC虛擬化模塊IM接收在第一中斷完成時產(chǎn)生的 E0L·在一種實現(xiàn)中,虛擬I/O APIC 142可以清除與第一中斷相關聯(lián)的ISR位,記錄該中斷 已完成處理。然后在步驟612,虛擬I/O APIC 142可響應于接收到EOI而把第二中斷注入 到虛擬化的CPU 128內。然后在步驟614,由于不再有待處理的中斷,因此管理程序112可 以把NoEOIRequired位設為1。圖7描述了一說明性過程700,它示出虛擬CPU 128所產(chǎn)生的EOI可被直接傳送 至管理程序112并且不被懶惰更新的另一種條件。過程700在步驟702開始,在虛擬I/O APIC 142處接收到具有第一優(yōu)先級的第一中斷。在步驟704,第一中斷被注入到虛擬化的 CPU 1 內。然后在步驟706,虛擬I/O APIC 142可以接收優(yōu)先級比第一中斷的優(yōu)先級高 的第二中斷,第二中斷是在第一中斷正在被虛擬CPU 1 處理時被接收到的。然后在步驟 708,管理程序112可以通過把存儲在共享頁152中的NoECHRequired標志設為0,從而清除該標志。清除NoECHRequired標志向訪客操作系統(tǒng)108表示一旦虛擬CPU 128完成了對中 斷的處理,訪客操作系統(tǒng)108就應當把EOI發(fā)送至管理程序,產(chǎn)生攔截。由于虛擬CPU 128 會有兩個待處理中斷完成,因此EOI應當被立即發(fā)送,但是共享頁152可能僅能在一個位中 存儲EOI是否被處理。因此,為了確保EOI對于每個中斷都被虛擬I/O APIC 142處理,訪客 操作系統(tǒng)必須把所產(chǎn)生的第一個EOI發(fā)送至管理程序112,產(chǎn)生攔截。然后在步驟710,虛 擬I/O APIC 142可以把第二個、較高優(yōu)先級的中斷注入到虛擬CPU 1 內。虛擬CPU 128 可以立即處理第二中斷,延遲第一中斷的完成,直到第二中斷自身已經(jīng)完成。在步驟712,虛 擬CPU 1 可以在完成第二中斷時發(fā)送Ε0Ι。該EOI可以被立即發(fā)送至管理程序,觸發(fā)攔 截。然后在步驟714,由于現(xiàn)在只有一個待處理的中斷,因此I/O APIC虛擬化模塊IM可以 通過把NoECHRequired位設為1從而響應接收到的EOI,并且它可以被懶惰地評估。圖8描述了一說明性過程800,它示出虛擬CPU 104所產(chǎn)生的EOI可被直接傳送 至管理程序112并且不被懶惰更新的另一種條件。過程800在步驟802開始,在虛擬I/O APIC 142接收電平觸發(fā)的中斷。在步驟804,管理程序112可以把NoECHRequired位設為 0,指示訪客操作系統(tǒng)108必須為該電平觸發(fā)的中斷發(fā)送Ε0Ι。然后在步驟806,管理程序 112內的I/O APIC虛擬化模塊巧4可以經(jīng)由攔截從訪客操作系統(tǒng)108接收Ε0Ι。然后,管 理程序可以把NoECHRequired位設為1,指示隨后的電平觸發(fā)的EOI可以被懶惰地評估。圖形中斷表示圖9描述了說明性的邊緣觸發(fā)的和電平觸發(fā)的中斷900。在一種實現(xiàn)中,邊緣觸發(fā) 的中斷902從諸如硬盤驅動器IM這樣的硬件設備被發(fā)送至諸如虛擬I/O APIC 142這樣 的虛擬I/O APIC。在一種實現(xiàn)中,另一個邊緣觸發(fā)的中斷904可以在同一線路上被發(fā)送,造 成邊緣重疊906。由于對于到虛擬I/O APIC 142,線路被一致地斷言,虛擬I/O APIC 142 會將重疊的邊緣觸發(fā)的中斷902和904視為單個邊緣觸發(fā)的中斷。通過在線路上進行斷言直到硬盤驅動器IM接收到中斷完成的指示,電平觸發(fā)的 中斷908可以從硬盤驅動器IM被傳送至虛擬I/O APIC 142。圖10描述了用于確定是否要懶惰地處理EOI的說明性過程1000。過程1000從 步驟1002開始,接收具有第一優(yōu)先級的第一中斷服務請求。在一個實施例中,中斷在虛擬 I/O APIC 142處被接收到。在步驟1004,接收到的中斷可以被發(fā)送至CPU。在一個實施例 中,CPU是虛擬CPU 128。然后在步驟1006,從CPU接收到中斷結束(EOI)確認。CPU可以 在對接收到的中斷處理完成時發(fā)送Ε0Ι。然后在步驟1008,訪客操作系統(tǒng)確定是否要懶惰 地發(fā)送EOI,或者是否要立即發(fā)送EOI,使管理程序攔截EOI確認。在一個實施例中,立即發(fā) 送EOI會使管理程序攔截和處理EOI。然后在步驟1010,當EOI要被懶惰地處理時,訪客操 作系統(tǒng)可以對共享存儲器頁進行寫操作。在步驟1012,當EOI不要被懶惰地處理時,訪客操 作系統(tǒng)可以調用管理程序來直接發(fā)送Ε0Ι。此外,以上所述的任何方法的任何動作都可由處理器或其它計算設備基于存儲在 一個或多個計算機可讀介質上的指令來實現(xiàn)。計算機可讀介質可以是能適當由管理程序、 訪客操作系統(tǒng)和/或I/O APIC虛擬化模塊任何可用的介質。計算機可讀介質包括以用于 儲存諸如計算機可讀指令、數(shù)據(jù)結構、程序模塊或其它數(shù)據(jù)等信息的任一方法或技術實現(xiàn) 的易失性和非易失性,可移動和不可移動的介質。計算機可讀介質包括但不限于,RAM、R0M、 EEPR0M、閃存或其它存儲器技術、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲、磁盒、磁帶、磁盤存儲或其它磁存儲設備、或可以用來儲存所期望的信息并可由管理程序、訪客操作 系統(tǒng)和/或I/O APIC虛擬化模塊訪問的任何其它介質。上述中的任意組合也應包括在計 算機可讀介質的范圍之內。Mlt盡管用結構特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權 利要求書中定義的主題不必限于上述具體特征或動作。相反,上述具體特征和動作是作為 實現(xiàn)權利要求的示例形式公開的。
權利要求
1.一個或多個存儲計算機可執(zhí)行指令的計算機可讀介質,所述計算機可執(zhí)行指令當在 一個或多個處理器上執(zhí)行時執(zhí)行以下動作,包括從管理程序接收中斷服務請求; 把所述中斷服務請求發(fā)送至中央處理單元(CPU); 從所述CPU接收中斷結束(EOI)確認; 確定是否滿足處理標準;如果滿足所述標準則把一值寫入與所述管理程序共享的存儲器;以及 如果不滿足所述標準則把所述EOI發(fā)送至所述管理程序。
2.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,被寫入所述存儲器 的值包括一位。
3.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,把所述EOI發(fā)送至所 述管理程序包括對存儲器映射的頁的寫操作,其中,運行在所述管理程序內的存儲器攔截 模塊俘獲所述對存儲器映射的頁的寫操作。
4.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,與所述管理程序共 享的存儲器包括被同步地映射到訪客操作系統(tǒng)虛擬存儲器頁和管理程序虛擬存儲器頁的 物理存儲器頁。
5.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,把所述值寫入所述 存儲器能夠延遲處理所述EOI,直到所述管理程序因為除處理EOI以外的原因開始執(zhí)行。
6.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,所述確定是否滿足 處理標準的動作還包括 從共享存儲器讀取指示是否能夠懶惰地處理EOI的值。
7.如權利要求6所述的一個或多個計算機可讀介質,其特征在于,所述共享存儲器與 管理程序共享,所述管理程序在共享存儲器內表示在接收到的中斷包括電平觸發(fā)的中斷時 EOI不能被懶惰地評估。
8.如權利要求6所述的一個或多個計算機可讀介質,其特征在于,所述共享存儲器與 管理程序共享,所述管理程序在共享存儲器內表示在以下情況時EOI不能被懶惰地評估在接收到第一中斷以后接收到的第二中斷包括比第一中斷的優(yōu)先級低的優(yōu)先級;以及 所述CPU正在處理所述第一中斷。
9.如權利要求6所述的一個或多個計算機可讀介質,其特征在于,所述共享存儲器與 管理程序共享,所述管理程序在共享存儲器內表示在以下情況時EOI不能被懶惰地評估在接收到第一中斷以后接收到的第二中斷包括比第一中斷的優(yōu)先級高的優(yōu)先級;以及 所述CPU正在處理所述第一中斷。
10.一種方法,包括 接收中斷;分析與虛擬CPU相關聯(lián)的虛擬高級可編程中斷控制器(APIC)以確定是否滿足標準; 當訪客操作系統(tǒng)能懶惰地處理EOI確認時,把與訪客操作系統(tǒng)共享的存儲器的值設置 成指示訪客操作性能懶惰地處理EOI ;以及否則把與所述訪客操作系統(tǒng)共享的存儲器的值設置成指示訪客操作系統(tǒng)不能懶惰地 處理EOI。
11.如權利要求10所述的方法,其特征在于,當所述中斷包括邊緣觸發(fā)的中斷時,所述 訪客操作系統(tǒng)能懶惰地處理所述EOI。
12.如權利要求10所述的方法,其特征在于,所述中斷包括第一中斷,其中所述訪客操 作系統(tǒng)被被配置成在以下情況時不懶惰地處理EOI確認在接收到第一中斷以后接收到的第二中斷包括比第一中斷的優(yōu)先級低的優(yōu)先級;以及 所述虛擬CPU正在處理所述第一中斷。
13.如權利要求10所述的方法,其特征在于,所述中斷包括第一中斷,其中所述訪客操 作系統(tǒng)被被配置成在以下情況時不懶惰地處理EOI確認在接收到第一中斷以后接收到的第二中斷包括比第一中斷的優(yōu)先級高的優(yōu)先級;以及 所述虛擬CPU正在處理所述第二中斷。
14.如權利要求10所述的方法,其特征在于,當所述中斷包括邊緣觸發(fā)的中斷并且所 述中斷是唯一被處理的中斷時,所述訪客操作系統(tǒng)能懶惰地處理EOI確認。
15.如權利要求10所述的方法,其特征在于,還包括 從所述訪客操作系統(tǒng)直接接收EOI。
16.如權利要求10所述的方法,其特征在于,還包括檢取存儲在與訪客操作系統(tǒng)共享的存儲器中的表示是否出現(xiàn)EOI的值,該值是以響應 于EOI以外的方式被檢取的。
17.如權利要求10所述的方法,其特征在于,一存儲器攔截模塊被安裝在存儲器的頁 上,所述存儲器的頁包括由所述虛擬CPU用來與物理APIC通信的存儲器映射的I/O頁。
18.一種計算機系統(tǒng),包括 一個或多個處理器;能由所述一個或多個處理器訪問的存儲器;存儲在存儲器中并且能夠在所述一個或多個處理器上執(zhí)行的管理程序,用于接收中斷服務請求,確定是否滿足第一處理標準;當滿足所述第一處理標準時在共享存儲器中設置表示所述EOI能被懶惰地評估的值, 如果不滿足所述第一處理標準則在共享存儲器中設置表示所述EOI必須在中斷完成 時被傳送至所述管理程序的值,以及把所述中斷服務請求發(fā)送至執(zhí)行訪客操作系統(tǒng)的虛擬CPU ;以及 存儲在存儲器中并且能夠在所述一個或多個處理器上執(zhí)行的訪客操作系統(tǒng)的懶惰中 斷結束(EOI)處理模塊,用于從所述虛擬CPU接收表示所述中斷服務請求已經(jīng)執(zhí)行的Ε0Ι, 確定是否滿足第二處理標準,如果不滿足所述第二處理標準則把所述EOI發(fā)送至所述管理程序, 在所述共享存儲器中設置表示所述EOI已出現(xiàn)的值,以便在不滿足所述第二處理標準 時所述管理程序能稍后響應于所述EOI。
19.如權利要求18所述的計算機系統(tǒng),其特征在于,對所述中斷服務請求的中斷結束 (EOI)確認能在以下情況時被懶惰地評估所述中斷不是電平觸發(fā)的中斷,以及所述中斷是唯一的活動中斷。
20.如權利要求18所述的計算機系統(tǒng),其特征在于,所述中斷是自中斷,使得所述管理 程序把所述自中斷傳送至與所述虛擬CPU相關聯(lián)的虛擬本地APIC。
全文摘要
本發(fā)明的技術能夠通過減少從虛擬中央處理單元(CPU)被發(fā)送至虛擬高級可編程中斷控制器(APIC)的中斷結束(EOI)消息數(shù)量,減少管理程序所執(zhí)行的攔截數(shù)量。運行在虛擬CPU上的訪客操作系統(tǒng)的EOI路徑被改變,留下表示EOI已出現(xiàn)的標記。稍后,管理程序檢查該標記并且懶惰地更新虛擬APIC狀態(tài)。
文檔編號G06F9/44GK102067083SQ200980123600
公開日2011年5月18日 申請日期2009年6月25日 優(yōu)先權日2008年6月27日
發(fā)明者S·甘吉利 申請人:微軟公司