TWI705375B - 中斷請求的處理方法、裝置、虛擬化設備及可讀存儲介質 - Google Patents
中斷請求的處理方法、裝置、虛擬化設備及可讀存儲介質 Download PDFInfo
- Publication number
- TWI705375B TWI705375B TW107120853A TW107120853A TWI705375B TW I705375 B TWI705375 B TW I705375B TW 107120853 A TW107120853 A TW 107120853A TW 107120853 A TW107120853 A TW 107120853A TW I705375 B TWI705375 B TW I705375B
- Authority
- TW
- Taiwan
- Prior art keywords
- processor
- virtual
- interrupt request
- interrupt
- virtual processor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4818—Priority circuits therefor
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Stored Programmes (AREA)
- Multi Processors (AREA)
- Bus Control (AREA)
Abstract
一種中斷請求的處理方法、裝置、虛擬化設備及可讀存儲介質。該方法包括:處理器在客戶模式時執行如下操作:所述處理器從硬體接收中斷請求;所述處理器根據所述中斷請求與處理主體的對應關係確定所述接收到的中斷請求的處理主體;當所述接收到的中斷請求的處理主體包括所述處理器上當前運行的所述虛擬處理器時,所述處理器根據所述中斷請求與中斷服務程式的對應關係確定與所述接收到的中斷請求對應的中斷服務程式,並調用所述中斷服務程式以處理所述中斷請求。採用這種方式,可避免處理器的陷入陷出,從而減少應用中斷請求的處理時延。
Description
本發明是有關於一種電腦技術,且特別是有關於一種電腦內中斷請求的處理方法、裝置及虛擬化設備以及可讀存儲介質。
虛擬化技術通過將一台物理電腦增加特定的軟體層次,包括宿主機層和虛擬電腦層,以實現對該物理電腦硬體的“虛擬”和“隔離”。每個軟體層次包括不同的運行狀態,例如使用者態和內核態。軟體層次和運行狀態的多樣化使得該物理電腦內部針對某些需求的處理環節增加,從而增加了這些需求的處理時延。
中斷處理是虛擬化設備的關鍵需求,現有虛擬化設備的中斷處理過程(指的是物理中斷處理過程)是將硬體(比如網卡、鍵盤或滑鼠等)產生的中斷請求發送到處理器,然後處理器調用宿主機中的中斷處理模組分發中斷請求,當該中斷請求需要某個
虛擬電腦內的中斷服務程式處理時,該中斷處理模組將該中斷請求再分發到該虛擬電腦,這種軟體層次的跨越以及其中可能涉及的不同運行狀態的切換增加了這種中斷請求的處理時延。特別是,當虛擬電腦內部部署有實現業務的各種應用時,這些應用的中斷服務程式均部署在虛擬電腦內,中斷處理過程實際上是業務處理過程的一部分,因此這種時延的增加會導致業務處理時延的增加。
本申請提供一種中斷請求的處理方法、裝置及虛擬化設備等,用以減少虛擬化設備中應用中斷請求的處理時延,進而提升業務處理速度。
第一方面,本申請提供一種虛擬化設備,所述虛擬化設備包括硬體層、運行在硬體層上的宿主機和運行在宿主機上的虛擬電腦,所述虛擬電腦內包含有服務於該虛擬電腦的一個或多個虛擬處理器。
所述宿主機用於配置所述虛擬電腦的虛擬處理器能夠從所述硬體層接收中斷請求,通過修改暫存器位元實現。具體的,所述宿主機通過修改暫存器中用於指示所述虛擬處理器的中斷接收模式的暫存器位元來實現所述虛擬處理器在客戶模式下直接從所述硬體層接收所有中斷請求。其中,虛擬處理器的中斷接收模式用一個或多個暫存器位元指示,該暫存器是與該虛擬處理器運
行的物理處理器關聯的物理暫存器,所以該配置步驟最終需要修改的是物理暫存器。
所述虛擬電腦(也可以說是下述的“當前虛擬處理器”)用於從所述硬體層接收中斷請求;根據所述中斷請求確定所述接收到的中斷請求的處理主體;當所述接收到的中斷請求的處理主體包括所述虛擬電腦的當前虛擬處理器時,所述虛擬電腦根據所述中斷請求確定與所述接收到的中斷請求對應的中斷服務程式(具體是中斷服務程式的位址),並調用所述中斷服務程式以處理所述中斷請求。具體的,接收到的中斷請求中可以攜帶所述中斷請求的標識,例如IRQ ID,後續根據標識確定處理主體和中斷服務程式。
需要說明的是,在虛擬化設備中,虛擬電腦(例如虛擬機器或libOS)執行動作可以理解為是服務於該虛擬電腦的一個虛擬處理器執行動作,所以“虛擬電腦的當前虛擬處理器”可以理解為是當上述配置被運行起來之後,正在執行上述配置的虛擬處理器。另外,本申請中中斷請求的“處理主體”可能是一個或多個虛擬處理器,也可能是宿主機,當然這兩種處理主體的本質都是物理處理器,是物理處理器的不同模式。
具體的,所述虛擬電腦根據一些資訊和所述中斷請求確定所述中斷請求的處理主體和中斷服務程式。這些資訊包括中斷請求(標識)、處理主體以及中斷服務程式(位址)的對應關係。該資訊儲存在用它的虛擬處理器可以訪問的儲存區域,例如客戶
位址空間,這樣虛擬處理器可以直接訪問該資訊,不需要陷出。該對應關係可以被宿主機更新。為了方便資訊的管理和節省儲存空間,這些資訊中可以儲存在多個VM的所有虛擬處理器均可以訪問的儲存區域中,以便於任意一個虛擬處理器訪問。進一步的,宿主機也可訪問該資訊,因為宿主機可以更新這些資訊。
可見,在這種虛擬化設備中,虛擬電腦可以直接從硬體層接收所有中斷請求並進行中斷請求的分發。當該中斷請求的處理主體包括該虛擬電腦的當前虛擬處理器,那麼該中斷請求就可以直接被該虛擬電腦處理。如果一個中斷請求是應用中斷請求,且該中斷請求的處理主體包括該虛擬電腦的當前虛擬處理器,那虛擬電腦就可以直接處理該中斷請求,避免了虛擬電腦的陷入和陷出,避免了中斷處理過程跨虛擬化設備的多個層次,從而降低了應用中斷請求的處理時延。當然也降低了客戶作業系統中斷請求的處理時延。
結合第一方面,在第一種實現方式下,當所述虛擬電腦確定所述接收到的中斷請求的處理主體為不包括所述虛擬電腦的當前虛擬處理器的其他虛擬處理器時,所述虛擬電腦判斷所述其他虛擬處理器是否在位,若在位,則操作物理的中斷控制器向所述其他虛擬處理器中在位的一個或多個虛擬處理器發送IPI中斷請求,該IPI中斷請求中攜帶所述接收到的中斷請求的標識。這個操作的執行前提是宿主機配置所述虛擬處理器的中斷控制器操作模式,使得該虛擬處理器能夠操作物理的中斷控制器,且是在
不陷出的情況下操作。在位的虛擬處理器接收到該IPI之後,執行該IPI對應的中斷服務程式,該中斷服務程式的具體實現就調用IPI中攜帶的中斷請求的標識對應的中斷服務程式。
這裡的“其他虛擬處理器”可以是為所述虛擬電腦服務的虛擬處理器,也可以是為其它虛擬電腦服務的虛擬處理器。與中斷接收模式類似,虛擬處理器的中斷控制器操作模式與該虛擬處理器所運行的物理處理器關聯的暫存器的一個或多個位元指示。
為了方便管理和節省空間,所有有關虛擬處理器在位或不在位的狀態的資訊可以儲存在所有虛擬處理器均可訪問的儲存區域中,以供任意一個虛擬處理器訪問。進一步的,該資訊還可以被宿主機訪問,因為宿主機可以在換入/換出虛擬處理器時修改虛擬處理器的狀態。一個虛擬處理器向另一個虛擬處理器發送IPI中斷請求時需要知道另一個虛擬處理器所運行的物理處理器,虛擬處理器所運行的物理處理器(例如下述實施例CORE ID)的資訊也可以如前述狀態資訊類似的儲存方式。下述利用虛擬處理器在位或不在位的方案或發送IPI的方案也可以利用這些資訊。
可見,虛擬電腦的當前虛擬處理器接收到一個中斷請求,但卻不是該中斷請求的處理主體,且可處理該中斷請求的虛擬處理器是在位的,這種情況下,當前虛擬處理器在不陷出的前提下直接通過IPI中斷將該不能處理的中斷請求發送給在位的可處理該中斷請求的虛擬處理器,避免了當前虛擬處理器陷出,然後由
宿主機中轉該中斷請求的時間,使得其他虛擬處理器可以儘快收到並處理該中斷請求,進一步縮短了應用中斷請求的處理時延。更多具體實現方法可參考第六方面及其實現方式。
結合第一方面或第一方面的第一種實現方式,在第二種實現方式下,所述虛擬電腦還用於當所述接收到的中斷請求的處理主體為不包括所述虛擬電腦的當前虛擬處理器的其他虛擬處理器且經過判斷確定所述其他虛擬處理器均不在位時,從所述其他虛擬處理器中確定目標虛擬處理器,在所述當前虛擬處理器和所述宿主機都可以訪問的儲存區域內記錄所述接收到的中斷請求的標識。當然這裡記錄標識的時候需要將該標識與該目標虛擬處理器建立關係,以便於指示這是目標虛擬處理器待處理的中斷請求。
本申請中提到的A和B都可以訪問的儲存區域,具體可以是A和B都可以訪問的共用記憶體,也可以是其他類型的可以被A和B訪問的儲存空間。
相應的,所述宿主機還用於在換入所述目標虛擬處理器之後根據所述儲存區域內記錄的標識向所述目標虛擬處理器發送中斷請求,以便於所述目標虛擬處理器在陷入之後處理所述中斷請求。具體的,處理主體中的任意一個虛擬處理器被宿主機換入之後且該虛擬處理器陷入之前,宿主機查看所述儲存區域發現該虛擬處理器有未處理的中斷請求,因此發送一個與接收到的中斷請求具有相同特徵的中斷請求給該被換入的虛擬處理器(實際上
是發送給該虛擬處理器調度到的物理處理器),該被換入的虛擬處理器陷入之後接收並處理所述中斷請求。
所謂相同特徵的中斷請求,可以是一個和最初接收到的那個中斷請求標識相同的中斷請求,也可以是一個攜帶了最初接收到的那個中斷請求的標識的IPI中斷。
這裡的“目標虛擬處理器”可以是中斷請求的所有處理主體,因此,可以理解的是,這裡的確定目標虛擬處理器然後記錄標識包括這樣一種具體實現:即直接為中斷請求的所有處理主體記錄該中斷請求的標識。
可見,虛擬電腦的當前虛擬處理器接收到一個中斷請求,但卻不是該中斷請求的處理主體,同時可處理該中斷請求的目標虛擬處理器又不在位,這種情況下,虛擬電腦通過在當前虛擬處理器和宿主機都可以訪問的儲存區域內記錄下所述中斷請求的標識,使得宿主機在換入該目標虛擬處理器後通過訪問該儲存區域能夠發送一個相同的中斷請求給該目標虛擬處理器處理,該目標虛擬處理器陷入之後就可以處理該中斷請求,從而實現了當前虛擬處理器不陷出的前提下多個虛擬處理器之間的中斷請求的共用,進一步縮短了中斷請求的處理時延。
進一步的,對於僅需一個虛擬處理器處理就可以的中斷請求,宿主機發送完一次中斷請求之後可以將其他處理主體的相應記錄清除掉,這樣可避免該中斷請求被多個虛擬處理器重複處理。
結合第一方面的第二種實現方式,在第三種實現方式下,所述宿主機還用於設置中斷請求的優先順序,並將所述優先順序記錄在所述宿主機和所述虛擬電腦均可以訪問的儲存區域;所述虛擬電腦在從所述其他虛擬處理器中確定目標虛擬處理器方面具體用於:根據所述接收到的中斷請求的優先順序和虛擬處理器的優先順序確定所述目標虛擬處理器,其中,所有虛擬處理器的狀態和優先順序儲存在所有虛擬電腦均可以訪問的儲存區域。
虛擬處理器的優先順序指的是虛擬處理器上當前任務的優先順序。虛擬處理器不在位時,當前任務沒有運行,在位時當前任務正在運行。
為了方便資訊管理,中斷請求的優先順序可以和前述實現方式中提到的中斷服務程式等資訊儲存在同一塊儲存區域;虛擬處理器的優先順序則可以和前述實現方式中提到的虛擬處理器的狀態儲存在同一塊儲存區域。
通過引入中斷優先順序,然後將中斷優先順序於虛擬處理器上當前任務的優先順序進行比較來選擇一個合適的目標虛擬處理器,從而避免對虛擬處理器上的當前任務產生較大的影響。
結合第一方面的第三種實現方式,在第四種實現方式下,所述虛擬電腦根據所述接收到的中斷請求的標識在所述宿主機和所述虛擬電腦均可以訪問的所述儲存區域內查找以獲取所述接收到的中斷請求的優先順序,比較所述接收到的中斷請求的優先順序與在位的所有虛擬處理器的優先順序;若所述所有在位的虛擬
處理器的優先順序均高於(或等於)所述接收到的中斷請求的優先順序,則確定所述接收到的中斷請求的處理主體包括的所有虛擬處理器為所述目標虛擬處理器;若存在一個或多個在位的虛擬處理器的優先順序低於所述接收到的中斷請求的優先順序,則確定所述接收到的中斷請求的處理主體包括的所有虛擬處理器中優先順序最高的虛擬處理器為所述目標虛擬處理器。
結合第一方面的第四種實現方式,在第五種實現方式下,若存在一個或多個在位的虛擬處理器的優先順序低於所述接收到的中斷請求的優先順序,所述虛擬電腦還用於:確定所述在位的所有虛擬處理器中優先順序最低的虛擬處理器為中轉虛擬處理器,並發送IPI中斷請求給所述中轉虛擬處理器,所述IPI中斷請求中攜帶所述目標虛擬處理器的標識,以便於所述中轉虛擬處理器根據所述IPI中斷請求陷出;所述宿主機還用於在所述中轉虛擬處理器陷出之後換入所述目標虛擬處理器。更多具體實現方法可參考第六方面及其實現方式。
若當前虛擬處理器即為優先順序最低的虛擬處理器,那麼當前虛擬處理器將所述目標虛擬處理器的標識發送給宿主機,然後陷出。也就是說,不需要發送IPI中斷請求,自己就是那個要被換出的“中轉虛擬處理器”。
換句話說,若中斷請求的優先順序最低,那麼記錄下中斷請求的標識即可,不需要主動觸發目標虛擬處理器的換入;若存在在位的虛擬處理器的優先順序比中斷請求的優先順序要低,
則說明該中斷請求可以優先於該虛擬處理器的當前任務處理,那麼該虛擬處理器可以被換出。從這些可以被換出的虛擬處理器裡確定一個優先順序最低的作為中轉處理器,在中斷請求的處理主體中確定出一個優先順序最高的作為目標虛擬處理器,然後將該目標虛擬處理器換入,將該中轉虛擬處理器換出。這樣儘量避免了對虛擬處理器當前任務的影響。這裡的“最低”或“最高”也僅是本申請的一種實現方式,例如,如果系統允許也可以分別選擇對應的第二名次的虛擬處理器。
結合第一方面的第二種實現方式,在第六種實現方式下,當所述接收到的中斷請求的處理主體為不包括所述虛擬電腦的當前虛擬處理器的其他虛擬處理器且確定所述其他虛擬處理器均不在位時,所述虛擬電腦還用於:將所述目標虛擬處理器的標識發送給宿主機並陷出,所述目標虛擬處理器為所述處理主體中的任意一個虛擬處理器或優先順序最高的虛擬處理器;所述宿主機還用於:根據所述目標虛擬處理器的標識換入所述目標虛擬處理器並將所述虛擬電腦的所述當前虛擬處理器換出。
例如,有時中斷請求本身很緊急或有優先順序的情況下優先順序很高,需要立刻被處理,所以不需要再確定中轉虛擬處理器,直接將當前虛擬處理器換出,將任意一個處理主體或優先順序最高的處理主體換入,以便儘快處理該中斷請求。
在其他一些實現方式中,當採用主動換入目標虛擬處理器的方式時,也可以事先不記錄中斷請求的標識,而是在用於觸
發該目標虛擬處理器換入的事件或消息中攜帶中斷請求的標識。例如,前述第五種實現方式的IPI中斷請求中除所述目標虛擬處理器的標識之外還攜帶中斷請求的標識,所述中轉虛擬處理器陷出時將該中斷請求的標識發送給宿主機,宿主機換入目標虛擬化處理器後根據該標識向目標虛擬處理器發送一個相同的中斷請求。
結合第一方面的以上任意一種實現方式,在一些實現方式下,該虛擬化設備將虛擬處理器在位還是不在位的狀態資訊儲存在所有虛擬處理器(亦即所有虛擬機器)均可以訪問的儲存區域內,具體可以通過一個或多個表來記錄。為了方便描述,該記錄在本申請的一些實施例稱之為“運行實體表”,但本申請對該表名稱不做限定。同樣的,下述實現方式中將會出現的“中斷向量表”或“中斷映射表”也是如此。
結合第一方面的以上任意一種實現方式,在一些實現方式下,虛擬處理器的調度是由宿主機執行,具體可以是宿主機中的虛擬機器監控裝置執行的,所以運行實體表的更新由宿主機來執行,這就意味運行實體表的儲存區域宿主機也能訪問。具體的,當宿主機換入一個虛擬處理器之後且虛擬處理器陷入之前將該虛擬處理器在運行實體表的相應狀態更新為在位,然後虛擬處理器陷入。一個虛擬處理器陷出但宿主機換出該虛擬處理器之前將該虛擬處理器在運行實體表的相應狀態更新為不在位,然後宿主機換出該虛擬處理器。
通過所有虛擬處理器和宿主機均可訪問的運行實體表,
能夠及時獲取虛擬處理器的最新狀態。若中斷請求的處理主體在位,當前虛擬處理器可以在不陷出的情況下直接發送該中斷請求給該在位的虛擬處理器;若中斷請求的處理主體均不在位,當前虛擬處理器也可以在不陷出的情況下在運行實體表內記錄下該中斷請求或進一步觸發目標虛擬處理器的陷入等,這樣目標虛擬處理器陷入之後就可以處理該中斷請求,避免虛擬處理器陷入陷出造成的時延,提高了中斷請求的處理效率。
結合第一方面或第一方面的以上任意一種實現方式,在第七種實現方式下,為了儘量避免出現收到中斷請求的虛擬處理器並不是該中斷請求的處理主體,以期進一步降低中斷處理的時延,需要修改一下中斷控制器的中斷親緣性,中斷親緣性是中斷控制器的一個屬性。該中斷親緣性包含中斷請求的標識和物理處理器的標識(本申請可簡稱為處理器)的對應關係。中斷控制器是一個硬體,用於接收其他硬體產生的中斷請求並根據中斷親緣性發送中斷請求給對應的物理處理器。相應的,所述宿主機還用於配置所述中斷控制器中的中斷親緣性,使得一個中斷請求能夠被發送到該中斷請求的處理主體包括的虛擬處理器上。由於虛擬處理器運行在物理處理器上,所以要保證中斷請求被發送的對的虛擬處理器上,實際上就是保證中斷請求被發送到該對的虛擬處理器所運行的物理處理器上。
結合第一方面的第七種實現方式,在第八種實現方式下,所述宿主機在換入一個虛擬處理器之後且該虛擬處理器陷入之前,
將將要運行所述被換入的虛擬處理器的物理處理器與處理主體包括該被換入的虛擬處理器的所有中斷請求在所述中斷親緣性中建立對應關係,之後該虛擬處理器就陷入運行。
這樣,中斷控制器就能夠根據該修改後的中斷親緣性將中斷請求發送給該虛擬處理器所運行的物理處理器,亦即發送給該虛擬處理器,而該中斷請求的處理主體正好包括該虛擬處理器,那該虛擬處理器就可以直接處理該中斷請求,有效避免了中斷請求在虛擬處理器之間的分發。
相應的,宿主機在換出一個虛擬處理器之前,(除了更新運行實體表之外)從中斷親緣性中刪除該將要被換出的虛擬處理器與處理主體包括該虛擬處理器的所有中斷請求之間的對應關係。
配置中斷控制器的中斷親緣性之後,中斷請求會被最大可能地發送給能夠處理該中斷請求且當前在位的虛擬處理器,極大地避免了虛擬處理器之間的中斷請求分發,進一步提高了中斷請求的處理效率。
結合第一方面的第七或第八種實現方式,在第九種實現方式下,即便配置了中斷親緣性,一個虛擬處理器還是有可能收到自己不可處理的中斷請求,這個時候,由於配置了中斷親緣性,那麼可以確定該中斷請求的處理主體所包括的所有虛擬處理器均不在位,所以此時不需要判斷中斷請求的處理主體是否在位。其他的實現方式可參考前述第二種、第三種、第四種、第五種或第
六種實現方式,相應的效果也可參考。例如,從中斷請求的處理主體中確定待處理該中斷請求的目標虛擬處理器(可以包括全部處理主體),然後針對該目標虛擬處理器僅記錄下中斷請求的標識;進一步的,還可以根據中斷請求的優先順序合理選擇目標虛擬處理器;更進一步的,還可以主動觸發該目標虛擬處理器的換入,使得該中斷請求儘快被處理。
結合第一方面或第一方面的以上任意一種實現方式,在一些實現方式下,所述虛擬電腦還用於當所述接收到的中斷請求的處理主體為所述宿主機時,所述虛擬電腦將所述接收到的中斷請求注入所述宿主機;所述宿主機還用於接收並處理所述虛擬電腦注入的所述中斷請求。
結合第一方面或第一方面的以上任意一種實現方式,在一些實現方式下,所述虛擬電腦具體用於根據中斷向量表和所述接收到的中斷請求的標識確定所述中斷請求的處理主體和所述中斷請求對應的中斷服務程式,所述中斷向量表中包含中斷請求的標識、所述中斷請求的處理主體以及所述中斷請求的中斷服務程式之間的對應關係,所述中斷向量表儲存在所述虛擬電腦和所述宿主機均可以訪問的儲存區域內;所述宿主機還用於(在所述虛擬電腦的觸發下)修改所述中斷向量表以增加中斷請求的標識、所述中斷請求的處理主體和中斷服務程式的對應關係。
通過跨層共用(即虛擬處理器和宿主機可以共用)的中斷向量表儲存中斷請求、中斷請求的處理主體以及中斷服務程式
之間的對應關係等資訊,能夠使得一個虛擬處理器在需要這些資訊處理中斷請求時直接訪問儲存區域即可,不需要陷出,避免了因陷出帶來的中斷時延。這些資訊這樣儲存可節省儲存空間,進一步的,可以由宿主機修改這些資訊,這樣設計更加合理和安全。
第二方面,本申請提供一種中斷請求的處理方法,該方法應用於虛擬化設備,虛擬化設備中包括處理器以及宿主模式和客戶模式兩種不同的運行模式。
處理器在宿主模式時配置暫存器以使所述處理器在運行有虛擬處理器且所述虛擬處理器運行于客戶模式時能夠從所述虛擬化設備的其他硬體接收中斷請求;
所述處理器在客戶模式時執行如下操作:所述處理器從所述其他硬體接收中斷請求,所述處理器根據所述中斷請求確定所述接收到的中斷請求的處理主體;當所述接收到的中斷請求的處理主體包括所述處理器上當前運行的虛擬處理器時,所述處理器根據所述中斷請求確定與所述接收到的中斷請求對應的中斷服務程式,並調用所述中斷服務程式以處理所述中斷請求。具體的,接收到的中斷請求中可以攜帶所述中斷請求的標識,例如IRQ ID,後續根據標識確定處理主體和中斷服務程式。
進一步的,虛擬電腦根據一些資訊和所述中斷請求確定所述中斷請求的處理主體和中斷服務程式。這些資訊包括中斷請求(標識)、處理主體以及中斷服務程式的對應關係。
這裡的“處理器”可以理解為一個最小的物理處理單元,
比如物理核。
結合第二方面,在第一種實現方式下,所述處理器在宿主模式時配置所述將在所述處理器上運行的虛擬處理器能夠操作所述虛擬化設備的物理的中斷控制器;所述處理器在客戶模式時還執行如下操作:當所述接收到的中斷請求的處理主體為不包括所述處理器上當前運行的所述虛擬處理器的其他虛擬處理器且確定所述其他虛擬處理器中至少有一個在位時,操作所述物理的中斷控制器向所述其他虛擬處理器中在位的一個或多個虛擬處理器發送IPI中斷請求,所述IPI中斷請求中攜帶所述接收到的中斷請求的標識。
結合第二方面,在第二種實現方式下,所述處理器在宿主模式時配置所述虛擬化設備的中斷控制器的中斷親緣性,使得一個中斷請求能夠被發送到該中斷請求的處理主體所包括的虛擬處理器上,所述中斷親緣性包含中斷請求的標識和處理器的標識的對應關係。相應的,所述處理器接收所述中斷控制器根據所述中斷親緣性向所述處理器發送的所述中斷請求。
結合第二方面的第二種實現方式,在第三種實現方式下,所述處理器在宿主模式換入一個虛擬處理器之後將所述處理器與處理主體包括所述換入的虛擬處理器的所有中斷請求在所述中斷親緣性中建立對應關係。相應的,所述處理器在宿主模式換出一個虛擬處理器之前,從中斷親緣性中刪除該將要被換出的虛擬處理器與處理主體包括該虛擬處理器的所有中斷請求之間的對應關
係。
結合第二方面的第二種或第三種實現方式,在第四種實現方式下,當所述接收到的中斷請求的處理主體為不包括所述處理器上當前運行的所述虛擬處理器的其他虛擬處理器時,所述處理器在客戶模式從所述其他虛擬處理器中確定目標虛擬處理器,並在所述處理器在客戶模式和和宿主模式都可以訪問的儲存區域內記錄所述中斷請求的標識;所述處理器在宿主模式在換入所述目標虛擬處理器之後根據所述儲存區域內記錄的標識向所述目標虛擬處理器發送中斷請求,以便於所述目標虛擬處理器陷入之後處理所述中斷請求。
具體的,所述處理器在宿主模式在換入所述目標虛擬處理器且所述目標虛擬處理器沒有陷入之前,關閉該宿主模式的中斷回應,然後根據所述儲存區域內記錄的標識向自己發送一個相同特徵的中斷請求(因為目標虛擬化處理器當前被調度到的處理器就是自己)。目標虛擬處理器陷入之後(也就是該處理器在客戶模式)就可以接收和處理該中斷請求了。
結合第二方面的第四種實現方式,在第五種實現方式下,所述處理器在宿主模式時設置所述中斷請求的優先順序,並將所述優先順序記錄在所述處理器在宿主模式和客戶模式均可以訪問的儲存區域;所述處理器在客戶模式根據所述接收到的中斷請求的優先順序和虛擬處理器的優先順序確定所述目標虛擬處理器,其中,所述虛擬處理器的優先順序儲存在所有虛擬處理器均可以
訪問的儲存區域。
結合第二方面的第四種實現方式,在第六種實現方式下,當所述接收到的中斷請求的處理主體為不包括所述處理器上當前運行的所述虛擬處理器的其他虛擬處理器時,所述方法還包括:所述處理器在客戶模式時將所述目標虛擬處理器的標識反向注入(到宿主機或宿主模式),之後所述處理器離開客戶模式進入宿主模式,其中所述目標虛擬處理器為所述其他虛擬處理器中的任意一個虛擬處理器或優先順序最高的虛擬處理器;所述處理器在宿主模式根據所述目標虛擬處理器的標識換入所述目標虛擬處理器並將所述處理器上的當前虛擬處理器換出。
第二方面提供的方法應用於虛擬化設備中,該虛擬化設備包括硬體層、運行在硬體層上的宿主機和運行在宿主機上的虛擬電腦,所述虛擬電腦內包含有服務於該虛擬電腦的虛擬處理器,一個虛擬處理器可以在一個所述處理器上運行。處理器在客戶模式下執行的動作可以理解為虛擬處理器(在客戶模式下)執行動作,進而也可以理解為該虛擬處理器服務的虛擬電腦執行動作;處理器在宿主模式下執行動作可以理解為宿主機執行動作。
更多第二方面的實現方式可參考前述第一方面。
第三方面,本申請提供一種中斷請求的處理裝置,該處理裝置應用於虛擬化設備中,所述虛擬化設備包括硬體層、宿主機和虛擬電腦;所述處理裝置包括部署在所述宿主機內的宿主機中斷管理單元和部署在所述虛擬電腦內的客戶中斷管理單元;
所述宿主機中斷管理單元用於配置所述虛擬電腦的虛擬處理器能夠從所述硬體層接收中斷請求;所述客戶中斷管理單元用於從所述硬體層接收中斷請求,所述接收到的中斷請求中攜帶所述中斷請求的標識;根據所述標識確定所述接收到的中斷請求的處理主體;當所述接收到的中斷請求的處理主體包括所述虛擬電腦的當前虛擬處理器時,所述虛擬電腦根據所述標識確定與所述接收到的中斷請求對應的中斷服務程式,並調用所述中斷服務程式以處理所述中斷請求。
更多具體實現可參考前述第一方面或第二方面。
第四方面,本申請提供一種虛擬化設備,該虛擬化設備包括處理器和記憶體,所述記憶體用於儲存電腦可讀指令,所述處理器用於讀取所述電腦可讀指令並實現前述提供的任意一種方法。
第五方面,本申請提供一種電腦存儲介質,用於儲存電腦可讀指令,當所述電腦可讀指令被處理器讀取時促使所述處理器實現前述提供的任意一種方法。另外,還提供一種電腦程式或電腦程式產品,該電腦程式或電腦程式產品中包含電腦可讀指令,當該電腦可讀指令被處理器讀取時促使所述處理器實現前述方面提供的任意一種方法。
第六方面,本申請提供一種處理器間中斷(IPI)的處理方法。該方法可以應用於前述方面或任意實現方式提供的方法或裝置中。
宿主機配置源虛擬處理器的中斷控制器操作模式,使得所述源虛擬處理器可以在不陷出的前提下操作中斷控制器向所述目的虛擬處理器所運行的所述物理處理器發送所述IPI中斷請求。源虛擬處理器根據資訊確定目的虛擬處理器所運行的物理處理器,其中所述資訊記錄在所述源虛擬處理器可以訪問的儲存區域內,所述資訊中包括指示所述目的虛擬處理器所運行的物理處理器的資訊;然後所述源虛擬處理器操作所述中斷控制器向所述目的虛擬處理器所運行的所述物理處理器發送IPI中斷請求。
這樣,通過中斷控制器操作模式的配置和可直接訪問的資訊,源虛擬化處理器可以在不陷出的情況下發送IPI中斷請求給目的虛擬化處理器。
結合第六方面,在第一種實現方式下,源虛擬處理器向所述目的虛擬處理器發送IPI中斷請求,所述IPI中斷請求中攜帶其他中斷請求的標識或者所述IPI中斷請求中攜帶其他中斷請求的標識和虛擬處理器的標識;所述目的虛擬處理器確定所述IPI中斷請求中沒有攜帶虛擬處理器的標識或確定所述IPI中斷請求中攜帶的所述虛擬處理器的標識與所述目的虛擬處理器的標識一致,則調用所述其他中斷請求的標識對應的中斷服務程式,以處理所述其他中斷請求。
這樣,通過虛擬處理器之間發送IPI中斷請求,就可以實現普通中斷請求在虛擬處理器之間的分發,這些虛擬處理器可以是同一個虛擬電腦內的,也可以是不同的虛擬電腦內的。
結合第六方面或第六方面的第一種實現方式,在第二種實現方式下,所述IPI中斷請求中攜帶虛擬處理器的標識(其他中斷請求的標識可以不攜帶)時,該方法還包括:所述目的虛擬處理器確定所述IPI中斷請求中攜帶的所述虛擬處理器的標識與所述目的虛擬處理器的標識不一致,則向宿主機發送所述虛擬處理器的標識並陷出,以便於所述宿主機將所述虛擬處理器的標識所指示的虛擬處理器換入。
這樣,通過虛擬處理器之間發送IPI中斷請求,就可以實現宿主機對目標虛擬處理器的換入,以便於目標虛擬處理器儘快處理IPI中斷請求中攜帶的那個中斷請求。
結合第六方面或第六方面的任意一種實現方式,在第三種實現方式下,所述源虛擬處理器在確定所述目的虛擬處理器在位時才發送所述IPI中斷請求。具體的,所述源虛擬處理器查詢所述資訊以確定所述目的虛擬處理器是否在位,所述資訊中還包括指示所述目的虛擬處理器是否在位的資訊。具體的,所述資訊可以記錄在虛擬處理器和宿主機均可以訪問的儲存區域內,所述宿主機用於在換入和換出虛擬處理器時修改所述資訊。
第七方面,本申請還提供一種對應第六方面的IPI中斷處理裝置,包括一個或多個模組用以實現第六方面或其任意一種實現方式提供的方法。另外,還提供一種虛擬化設備,該虛擬化設備中的虛擬處理器被配置為實現如第六方面或其任意一種實現方式所描述的方法。另外,還提供一種電腦存儲介質、一種電腦程
式以及電腦程式產品,具體參考前述方面。
第八方面,本申請還提供一種中斷處理的方法,用於處理需要多個虛擬處理器處理的中斷請求,例如時鐘中斷等。該方法包括:宿主機為每個物理處理器創建對應的資訊,該資訊中包含上一次在該物理處理器運行的虛擬處理器的資訊。虛擬處理器接收到一個中斷請求並確定該中斷請求需要多個虛擬處理器處理,然後確定所述資訊集合中的虛擬處理器包含在所述中斷請求的處理主體中,之後在所述宿主機和所述虛擬處理器均可以訪問的區域中與所述虛擬處理器對應的位置記錄所述中斷請求,以便於觸發所述虛擬處理器的換入,使得所述虛擬處理器可以儘快處理該中斷請求。更多處理方法可參考前述方面及其實施例。另外還提供與該方面相應的裝置以及可讀存儲介質。通過這樣的方法,類似時鐘中斷這樣的中斷請求的時延也得到有效降低。
第九方面,本申請還提供一種中斷處理的方法,宿主機接收到應用中斷請求,並通過訪問資訊確定能夠處理該中斷請求的虛擬處理器是否在位,若存在任意一個在位,則通過IPI中斷將該中斷請求發送給該在位的虛擬處理器;若均不在位,則在所述宿主機和所述虛擬處理器均可以訪問的區域中記錄該中斷請求。是否主動觸發換入,如何換入,可參考前述方面及其具體實施例。另外還提供與該方面相應的裝置以及可讀存儲介質。通過這樣的方法,使得本申請可應用在宿主機不能關閉中斷回應的場景下,應用範圍更廣。
為讓本發明的上述特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明如下。
110:處理器
120:記憶體
130:網路介面
140:匯流排
122:虛擬化軟體程式
121:中斷處理軟體程式
123:其他程式模組
190:客戶作業系統、libOS
191:客戶中斷管理單元
110-v:虛擬處理器
170:宿主機作業系統
180:虛擬機器監視器(VMM)
181:宿主機中斷管理單元
160:中斷控制器
0:核
1:核
29-1:虛擬機器
29-2:虛擬機器
290:客戶作業系統
291:客戶中斷管理單元
292:中斷服務程式
2911:中斷調度單元
2912:中斷分發單元
2913:中斷觸發單元
281:宿主機中斷管理單元
2811:中斷配置單元
2812:執行調度單元
2813:中斷接收單元
2814:VMM中斷服務程式
282:宿主機中斷分發單元
283:中斷服務程式
284:中斷映射表
210:CPU
230:網路介面
260:APIC
31:中斷向量表
32:運行實體表
33:配置通道
34:注入通道
35:vCPU佇列
S401:虛擬處理器首先確定該中斷請求的處理主體。
S402:若確定該中斷請求的處理主體為自己,則該虛擬處理器處理該中斷請求。
S403:若確定該中斷請求的處理主體為宿主機,則該虛擬處理器將該中斷請求發送到宿主機。
S404:若確定該中斷請求的處理主體為其它虛擬處理器,則該虛擬處理器將該中斷請求記錄下來或將該中斷請求發送給其他虛擬處理器。
S501:初始化中斷配置單元
S502:初始化執行調度單元
S503:初始化中斷接收單元
S5011:準備配置通道
S5012:準備中斷向量表
S5021:準備運行實體表
S5031:準備中斷注入通道
S601:VMM創建並初始化VM對象
S602:創建主vCPU
S602-d:創建從vCPU
S603:配置vCPU記憶體對象中的中斷接收模式和APIC操作模式的值
S604:主vCPU得到調度
S604-d:從vCPU得到調度
S605:更新運行實體表
S606:主vCPU陷入客戶模式,設置中斷接收模式和APIC操作模式的物理暫存器
S606-d:從vCPU陷入客戶模式,設置中斷接收模式和APIC操作模式的物理暫存器
S607:客戶作業系統初始化前階段(包括主vCPU初始化)
S607-d:從vCPU的初始化前階段
S608:客戶中斷管理單元初始化(主vCPU)
S608-d:客戶中斷管理單元初始化(從vCPU)
S609:獲取中斷向量表位址資訊
S610:獲取VM ID
S611:獲取vCPU ID
S612:中斷入口函數接管
S613:客戶作業系統初始化後階段
S613-d:從vCPU初始化後階段
S614:應用註冊ISR
S614-d:應用註冊ISR
S615:訪問配置通道(陷出到宿主狀態)
S616:修改跨層的中斷向量表,之後馬上陷入
S701a:硬體產生中斷請求並將該中斷請求發送給APIC260
S702a:APIC將該中斷事件發送給某一個物理核,則該物理核上當前運行的vCPU的執行被打斷(vCPU在陷入狀態)
S703a:該vCPU跳轉執行暫存器中儲存的中斷分發單元2912的入口函數
S701b:中斷分發單元識別該中斷請求的IRQ ID,並將該IRQ ID發
送給中斷調度單元
S702b:中斷調度單元查詢中斷向量表獲取該中斷請求對應的的
vCPU list和ISR ADDR
S703b:存在ISR
S704b:中斷調度單元將該查詢結果返回給中斷分發單元
S705b:中斷分發單元將該中斷請求發送到宿主機
S706b:當前vCPU在上述vCPU list中?
S707b:中斷調度單元將查詢獲得的ISR ADDR返回給中斷分發單元
S708b:中斷分發單元通知中斷觸發單元調用該ISR ADDR所指示的中斷服務程式
S709b:vCPU LIST中存不存在在位的vCPU?
S710b:向在位的vCPU發送IPI中斷
S711b:更新運行實體表以記錄該中斷請求
S712b:觸發中斷處理主體的換入
S801a:關閉VMM的中斷回應
S802a:獲取該vCPU運行的物理核的CORE ID
S803a:更新運行實體表:記錄CORE ID
S804a:配置中斷親緣性:將該vCPU可以處理的所有中斷請求的親緣性增加該CORE ID
S801b:獲取該vCPU運行的物理核的CORE ID
S802b:更新運行實體表:更新該CORE ID的值為-1
S803b:更新中斷親緣性:將該vCPU可以處理的所有中斷請求的親緣性減去該CORE ID
S901:接收到一個中斷請求並查詢中斷向量表中與該中斷請求對應的TYPE
S902:TYPE=1?
S903:查找該中斷請求中斷向量表和vCPU佇列35
S904:依次判斷該vCPU佇列中的每個vCPU是否在vCPU LIST中
S905:記錄該vCPU對應的PENDING位元,並發送IPI中斷的方式使得該vCPU被換入然後處理該中斷請求
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例應用的網路架構示意圖;圖2為本發明實施例提供的虛擬化網路設備的硬體結構示意圖;圖3A為本發明實施例提供的一種虛擬化網路設備的配置示意圖;圖3B為本發明實施例提供的另一種虛擬化網路設備的配置示意圖;圖4為本發明實施例提供的中斷處理方法的流程示意圖;圖5為本發明實施例提供的虛擬化網路設備中各個功能單元模組的示例圖一;圖6為本發明實施例提供的宿主機中斷管理單元初始化的流程示意圖;圖7為本發明實施例提供的客戶中斷管理單元初始化的流程
示意圖;圖8A和圖8B為本發明實施例提供的中斷處理方法的流程示意圖;圖9A和圖9B為本發明實施例提供的中斷親緣性配置的流程示意圖;圖10為本發明實施例提供的虛擬化網路設備中各個功能單元模組的示例圖二;圖11為本發明實施例提供的複製中斷的處理方法的流程示意圖;圖12為本發明實施例提供的虛擬化網路設備中各個功能單元模組的示例圖三。
為了方便理解本發明實施例,首先在此介紹本發明實施例描述中會引入的幾個要素。
虛擬電腦:所有類型的虛擬化設備中軟體虛擬出來的運行環境的統稱。該概念包括虛擬機器、容器、以及輕量級虛擬化libOS等。
虛擬機器(virtual machine,VM):通過軟體在一台物理電腦上類比出的一台或者多台虛擬電腦。這些虛擬機器運行在完全隔離的環境中,就像真正的電腦那樣進行工作。虛擬機器上可以安裝客戶作業系統(guest operating system,guest OS),客戶作
業系統上運行有一個或多個應用。虛擬機器還可訪問網路資源。對於在虛擬機器中運行的應用而言,就像是在真正的電腦中工作。
宿主機(host)層:作為管理層,用以完成硬體資源的管理、分配;為虛擬機器呈現虛擬硬體平臺;實現虛擬機器的調度和隔離等。在一些實現方式下,宿主機層包括宿主機作業系統和虛擬監控裝置,例如虛擬機器監視器(virtual machine monitor,VMM)或hypervisor,其中虛擬監控裝置可部署在宿主機作業系統之內,也可以部署在宿主機作業系統之外。在另一些實現方式下,“宿主機層”還可以包括1個特權虛擬機器(例如虛擬化架構Xen)。其中,虛擬硬體平臺對其上運行的各個虛擬電腦提供各種硬體資源,如虛擬處理器、虛擬記憶體、虛擬磁片、虛擬網卡等。虛擬電腦則運行在宿主機層為其準備的虛擬硬體平臺上。本申請中有時將宿主機層簡稱為宿主機。
硬體層:虛擬化環境運行的硬體平臺。其中,硬體層可包括多種硬體,例如某物理電腦的硬體層可包括處理器和記憶體,還可以包括中斷控制器、網卡(network interface card,NIC)、輸入/輸出(input/outputI/O)設備等。
中斷請求(interrupt request)、中斷號:中斷請求指的是硬體產生的一種事件,硬體將該事件發送到處理器,當處理器接收到該事件時,暫時停止當前程式的執行轉而執行該事件對應的程式。硬體產生中斷請求可能是硬體自己觸發的,也可能是軟體
觸發硬體產生的。中斷請求有時也簡稱為中斷。電腦中的某些硬體(例如網卡、音效卡、滑鼠、硬碟等)能在沒有處理器介入的情況下完成一定的工作,但是這些硬體還是需要定期中斷處理器,讓處理器為其做一些特定的工作。中斷號為一個中斷請求的標識,本申請中用英文IRQ ID表示。
中斷控制器:設置在觸發中斷請求的硬體和處理器之間,主要用於收集各個硬體產生的中斷請求,並按照一定的優先順序或其他規則發送給處理器。例如高級可程式設計中斷控制器(advanced programmable interrupt controller,APIC)。本申請中斷控制器是一個總稱,其中可能包含不同的功能部件,例如X86系統中中斷控制器包括一個io-APIC和多個local-APIC,進一步的還可以包括若干個其他中斷控制部件;一個local-APIC對應一個物理核。
中斷親緣性:指的是中斷請求與處理該中斷請求的處理主體(通常是物理處理主體,例如物理核)的對應關係。中斷控制器可根據該中斷親緣性將一個中斷請求發送到該中斷請求對應的一個或多個物理處理主體上。
中斷服務程式(interrupt service routine,ISR):用於處理中斷請求的程式。當處理器接收到中斷請求時,暫時停止當前程式的執行轉而執行該中斷請求對應的中斷服務程式。
應用中斷請求:該應用指的是部署在虛擬機器內的應用(或稱業務軟體),虛擬機器內的應用會將自己的中斷服務程式部署
到它所運行的客戶作業系統內,如果一個中斷請求的中斷服務程式位於客戶作業系統內部且是某個應用部署的(即需要該應用處理),則該中斷請求稱之為應用中斷請求。在大多數虛擬化網路設備中,虛擬機器中部署的應用通常是用來完成各種實際的業務需求的,所以應用中斷請求有時也可以稱之為業務中斷請求。
客戶作業系統中斷請求:這種中斷請求對應的中斷服務程式是虛擬機器內的客戶作業系統提供的,而非虛擬機器內的應用部署的。與應用中斷請求一樣,這種中斷請求的中斷服務程式也部署在虛擬機器的客戶作業系統內。
libOS(library operating system):輕量級虛擬化技術提供的一種作業系統,libOS是一種運行庫,能夠提供類作業系統的功能且與應用連結在一起運行,從而使得應用運行所必須的全部的資源由應用自身而不是作業系統管理。比如unikernel、OSv、dune等。libOS可以認為是一種輕量級的虛擬電腦。
物理處理器:有時簡稱為“處理器”,在本申請中指物理的處理單元,具體可以是一個最小處理單元,即本申請中的物理核,在某些實施例中也可以指包含多個物理核的處理單元。
虛擬處理器:在虛擬化技術下,以共用或者分片方式提供給虛擬電腦使用的物理處理單元的表示,例如虛擬CPU(virtual central processing unit,vCPU)。一台虛擬電腦可以有一個或多個虛擬處理器為其服務,當存在多個虛擬處理器時,通常有一個虛擬處理器為主虛擬處理器,其他為從虛擬處理器。
應理解,虛擬電腦相當於一台獨立的電腦,所以虛擬電腦執行動作也可以認為是虛擬處理器執行該動作,而虛擬處理器是軟體實現的,所以虛擬處理器執行動作實際上是虛擬處理器所運行的物理處理器或物理核執行該動作。在本發明的多個實施例中,為遵循當下場景的技術表達習慣,會有選擇地使用以上表述方式。
虛擬處理器陷入和虛擬處理器陷出:虛擬化系統包括兩種模式:宿主模式(host mode)與客戶模式(guest mode)。當一個虛擬處理器進入客戶模式,叫做陷入(虛擬);當該虛擬處理器離開客戶模式,叫陷出(虛擬)。虛擬處理器陷出後物理處理器將暫時不執行該虛擬處理器的代碼,所以此時可以理解為虛擬處理器沒有運行。在本申請的多數實施例中以vCPU這種虛擬處理器為例介紹方法或裝置,所以這些實施例中具體為vCPU陷入或陷出。針對一個物理處理器而言,其上運行的虛擬處理器陷入,則可以認為該物理處理器處於客戶模式,運行虛擬處理器的代碼,當其上運行的虛擬處理器陷出到宿主模式,則可以認為該物理處理器處於宿主模式,運行宿主機相關的代碼,比如VMM。
虛擬處理器在位或不在位:虛擬處理器陷入之後的狀態稱之為在位,沒有陷入的狀態稱之為不在位。一個虛擬處理器在位可以理解為該虛擬處理器正在運行,即存在一個物理處理器執行了該虛擬處理器的代碼;一個虛擬處理器不在位即沒有物理處理器執行該虛擬處理器的代碼。在本申請的多數實施例中以vCPU
這種虛擬處理器為例介紹方法或裝置,所以這些實施例中具體為vCPU在位或不在位。
IPI:inter-processor interrupt,即處理器間的中斷,是一種特別的中斷,是一個處理器發送給另一個處理器的中斷請求。例如,APIC的中斷命令暫存器(interrupt command register,ICR),該ICR就允許處理器上運行的軟體向其他處理器發送IPI中斷。有些IPI是由客戶作業系統觸發的,用來實現系統維護,可以視作客戶作業系統中斷請求;有些則是由業務觸發的,所以可以視作應用中斷請求。本申請在不同的場景下讓IPI中斷攜帶不同的參數,並新增相應的中斷服務程式,從而在一些實施例中實現技術效果。
另外,在本發明的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。本申請中的術語“和/或”或字元“/”,僅僅是一種描述關聯物件的關聯關係,表示可以存在三種關係,例如,A和/或B,或A/B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚地描述。
圖1示意性地示出了網路系統的一個實施例。該網路系統包括使用者設備、演進型基地台(eNodeB)100、移動性管理實體(mobility management entity,MME)以及服務閘道器等網路設備。該網路系統還可以是符合5G通信標準的網路系統。使用者設備包
括手機、臺式電腦、筆記本電腦、車載設備等。該網路系統另外還可以包括使用者歸屬伺服器、PDN閘道等其他網路設備,在此不一一列舉。
圖2為以上實施例中eNodeB 100的硬體結構示意圖,具體可以認為是演進型基地台的業務處理板的硬體結構示意圖。該eNodeB 100包括處理器110、記憶體120以及網路介面130(也被稱為網卡或網路介面卡等)等組件。其中,處理器110可以為單核處理器,也可以為多核處理器。當處理器110為多核處理器時,本申請提供的方法可以運行在一個核上,也可以分佈運行在不同的核上。處理器110可以為一個,也可以為多個,多個處理器的類型可以相同或不相同。處理器的類型有中央處理器(central processing unit,CPU)、圖形處理器、微處理器或輔助處理器等。網路介面130用於連接其他網路設備,包括無線連接和有線連接。記憶體120包括易失性和非易失性記憶體,通常非易失性記憶體上儲存有虛擬化軟體程式122、本申請提供的中斷處理軟體程式121以及其他程式模組123。虛擬化軟體程式122被處理器110讀取和運行之後實現eNodeB 100的虛擬化,包括創建宿主機層以及多個虛擬電腦等;本申請提供的中斷處理軟體程式121在被處理器110讀取和運行之後實現本申請各個實施例提供的各種中斷請求處理方法。本申請提供的軟體程式121可以結合在虛擬化軟體程式122中。
以上元件通過匯流排140連接。匯流排140可以是一條,
也可以是多條。匯流排140包括高級微控制器匯流排(advance microcontroller bus architecture,AMBA)工業標準結構(industry standard architecture,ISA)匯流排,微通道結構(micro channel architecture,MCA)匯流排,擴展ISA(extended-ISA)匯流排,影片電子標準協會(video electronics standards association,VESA)局域匯流排,以及外設元件互連(peripheral component interconnect,PCI)匯流排等。
圖3A示出了以上實施例中eNodeB 100虛擬化之後的一種配置的示意圖。該虛擬化設備100包括硬體層、宿主機層和虛擬化層,虛擬化層包含兩台虛擬機器。硬體層包括兩個處理器110、記憶體120、網路介面130、中斷控制器160等硬體。在其他實施例中,處理器110的個數和虛擬機器的個數還可以更多或更少。
在其他一些實施例中,虛擬機器內可以包含容器(container),容器相當於應用。在其他一些實施例中,參考圖3B,虛擬化層由輕量級虛擬化技術實現,例如libOS190。一個libOS內通常包含一個應用,整個libOS是一個或多個庫,和該應用連結成一個單位址空間鏡像。libOS190內部包含有本申請提出的客戶中斷管理單元191。本申請實施例通常以傳統虛擬化技術實現的虛擬機器為例,其他類型的虛擬化架構可參考虛擬機器的實現。
需要說明的是,本實施例以該eNodeB 110為例,但本申請提供的方法並不局限於該設備,所有類型的虛擬化設備均可以應用。
中斷控制器160負責收集網路介面130等硬體設備產生的中斷請求,並根據一定的規則將這些中斷請求發送給各個處理器110。處理器110可以包括一個或多個物理核(本申請中有時將物理核簡稱為核)。
“物理核”在本申請中代表最小處理單元。如圖3A或圖3B所示,本實施例中每個處理器具有兩個物理核:核0和核1,以及多個暫存器。在其他一些實施例中,處理器包含的核的數量可以更多或更少,各個處理器包含的核的個數也可以不同。
宿主機內部署有宿主機作業系統170和虛擬機器監視器(VMM)180,VMM180在其他虛擬化架構中相當於hypervisor或其他類型的虛擬監控裝置。VMM180可以部署在宿主機作業系統170內部,也可以和宿主機作業系統170分開部署。VMM180負責管理在其上運行的一台或多台虛擬機器。
虛擬機器(VM)包括虛擬硬體層、客戶作業系統190以及多種應用。虛擬硬體層包含虛擬記憶體(未在圖中示出)、虛擬處理器110-v等虛擬硬體。如圖3A或圖3B所示,本實施例包含兩個虛擬機器,每個虛擬機器包含三個虛擬處理器110-v。虛擬處理器110-v是軟硬體結合實現的,它的運行實際是物理核讀取並運行軟體程式實現的,例如一個物理核讀取軟體程式並在該物理核的硬體輔助虛擬化的特定模式(例如x86的non-Root模式)下運行該軟體程式以實現一個虛擬處理器110-v。也因此,虛擬處理器110-v需要被調度到某一個物理核上。
虛擬處理器110-v和物理核可以是綁定的關係,即一個虛擬處理器110-v固定在某個物理核上運行,不能被調度到其他物理核上運行,則該虛擬處理器為綁核;一個虛擬處理器110-v可以根據需要被調度到不同的物理核上運行,則該虛擬處理器為非綁核。
在本實施例中,虛擬處理器110-v的總個數為6,大於物理核的數量4,這種場景稱之為物理處理器超分配。在物理處理器超分配的情況下,會存在多個虛擬處理器以時間分片方式或其他方式共用同一個物理核的情況,這種物理核叫做非獨占核。當然非超分配的情況下也可能出現非獨占核。一個物理核與一個虛擬處理器綁核且不被其他虛擬處理器共用,則該物理核是獨佔核。
VMM180作為虛擬監控裝置,負責調度各個VM的虛擬處理器110-v。例如,基於內核的虛擬機器(kernel-based virtual machine,KVM)就是一種典型的VMM。VMM180對虛擬處理器110-v的調度包括換入虛擬處理器和換出虛擬處理器。首先,VMM180創建並初始化一個VM的物件,然後為該VM創建三個虛擬處理器110-v。當一個VM包含多個虛擬處理器110-v時,一般會有一個為主虛擬處理器,其他為從屬虛擬處理器。虛擬處理器110-v被創建之初還沒有與某個物理核關聯。VMM180會依據策略將某個虛擬處理器110-v調度到某個物理核上,這稱為該虛擬處理器被換入;VMM180將該虛擬處理器110-v掛起或從該物理核上遷移出去,稱為該虛擬出處理器被換出。在綁核的場景下,
一個虛擬處理器每次被換入時都被調度到相同的核上。在非綁核的場景下,VMM180可以在調度之前根據系統當前的運行狀況和/或調度演算法確定將該虛擬處理器110-v調度到哪個核上。
需要說明的是,一個虛擬處理器110-v被換入之後可以不立即陷入運行,在虛擬處理器110-v被換入且還沒有陷入之前,宿主機(具體為VMM)還可以實現一些對該虛擬處理器110-v的配置,然後該虛擬處理器110-v再陷入客戶模式。
基於圖3A或圖3B的配置,現有的中斷請求處理方案通常是基於系統中斷優先的原則進行設計的,將硬體產生的中斷請求全部直通到宿主機層,因此宿主機層的中斷請求處理過程較快。但是,在這種方案下,應用中斷請求需要宿主機識別然後再發送到虛擬機器,因此整個處理過程涉及宿主機和虛擬機器(也可以認為是虛擬處理器)兩種處理主體,因而涉及虛擬處理器的陷入和陷出,所以處理過程變長,延時增大,這明顯無法滿足業務處理超低時延的要求。因此,本申請提出一種有效降低應用中斷請求處理時延的方法,且在該方法的基礎上逐步擴展了更多的功能。
為解決上述應用中斷請求處理時延長的問題,本實施例提供的設備100中包括宿主機中斷管理單元181和客戶中斷管理單元191。這兩個單元可以認為是圖2中斷處理軟體程式121的兩個功能模組。
宿主機中斷管理單元181部署在宿主機層。當VMM180
部署在宿主機作業系統170之上時,宿主機中斷管理單元181可以部署在宿主機作業系統170內,也可以部署在VMM180內,也可以部分部署在宿主機作業系統170內,部分部署在VMM180內。當VMM180部署在宿主機作業系統170內部時,宿主機中斷管理單元181可以部署在VMM180內,也可以部署在除VMM180之外的宿主機作業系統170內部,也可以部分部署在VMM180內,部分部署在除VMM180之外的宿主機作業系統170內部。
客戶中斷管理單元191可以部署在每個虛擬機器的客戶作業系統190內部。當虛擬化電腦設備的虛擬層為libOS時,客戶中斷管理單元191可以部署在libOS的運行庫中。客戶中斷管理單元191被配置為可以直接從硬體層接收中斷請求。
客戶中斷管理單元191用於從中斷控制器160或其他中斷收集裝置直接接收中斷請求,並確定該中斷請求的處理主體。若中斷請求的處理主體為當前虛擬機器的當前虛擬處理器,則直接調用中斷服務程式。進一步的,若中斷請求的處理主體為宿主機,則將該中斷請求發送給宿主機。更進一步的,若中斷請求的處理主體不為當前的虛擬處理器而為其它虛擬處理器,則將該中斷請求調配到其它虛擬處理器處理。若其他虛擬處理器在位,那可以通過發送IPI的方式進行中斷請求的調配,若其他虛擬處理器不在位,那可以將該中斷請求記錄下來以便於其他虛擬處理器在位之後再處理。需要說明的是,“當前虛擬機器”為該客戶中斷管理單元191所屬的虛擬機器,“當前虛擬處理器”為當前讀取
並運行該客戶中斷管理單元191的虛擬處理器。
宿主機中斷管理單元181用於配置虛擬處理器110-v的中斷接收模式,使得虛擬處理器110-v可以在客戶模式下從硬體層接收中斷請求。在一些實現方式下,宿主機中斷管理單元181還用於配置虛擬處理器110-v操作中斷控制器160的模式,使得虛擬處理器110-v能夠在客戶模式下直接操作物理的中斷控制器160(一般是該虛擬處理器所運行物理核的本地中斷控制器)。進一步的,宿主機中斷管理單元181還用於管理處理中斷請求所需的資訊(可參考下述實施例中的表1和表2),包括應用註冊中斷請求時提供的資訊,並將這些資訊儲存到虛擬機器和宿主機可以共用的儲存區域中,以便虛擬機器和宿主機可以訪問/修改該資訊。更進一步的,宿主機中斷管理單元181還用於接收從虛擬機器發送過來的中斷請求,並將該中斷請求發送給宿主機中現有的中斷處理模組,由該模組調用部署在宿主機中的中斷服務程式,從而處理該中斷請求。
參考圖4,從虛擬處理器110-v的角度,客戶中斷管理單元191執行的動作可以認為是當前虛擬機器的當前虛擬處理器在客戶模式(亦即陷入狀態)下執行的動作。
具體的,虛擬處理器110-v首先確定接收到的中斷請求的處理主體(S401)。若確定該中斷請求的處理主體為自己,則該虛擬處理器110-v處理該中斷請求(S402);若確定該中斷請求的處理主體為宿主機,則該虛擬處理器110-v將該中斷請求發送到宿主
機(S403);若確定該中斷請求的處理主體為其它虛擬處理器,則該虛擬處理器110-v將該中斷請求記錄所有虛擬處理器均可以共用的儲存區域或將該中斷請求發送給其他虛擬處理器,例如通過IPI的方式(S404),以便於其它虛擬處理器訪問該儲存區域並處理該中斷請求或收到該IPI後處理該中斷請求。如果宿主機中斷管理單元181配置該虛擬處理器110-v使得該虛擬處理器110-v能夠在客戶模式下直接操作物理的中斷控制器160,那麼該虛擬處理器110-v可以在客戶模式下直接操作中斷控制器160發送一個IPI給其他虛擬處理器,該IPI中攜帶該未被處理的中斷請求的資訊。
進一步的,步驟S404的實現方式如下:若確定該中斷請求的處理主體為其它虛擬處理器,在一些實現方式下,該虛擬處理器僅在所有虛擬處理器均可以共用的儲存區域內記錄該中斷請求,該中斷請求的處理主體根據自己的運行情況適時訪問該儲存區域並處理該中斷請求;在另一些實現方式下,該虛擬處理器可以先判斷該處理主體在不在位,若該處理主體在位,則通過發送IPI的方式把該中斷請求發送給該在位的處理主體,以便於它儘快處理該中斷請求;若該處理主體不在位,該虛擬處理器不僅在所有虛擬處理器均可以共用的儲存區域內記錄該中斷請求,還可以確定一個中轉虛擬處理器(可能是自己),並向該中轉虛擬處理器發送一個IPI中斷,該中轉虛擬處理器收到該IPI中斷後陷出到宿主機,然後宿主機將該處理主體換入,換入之後處理該中斷請求。如果中轉虛擬處理器是自己,那自己向宿主機發送該處理主體的
標識並陷出,以便於宿主機將該處理主體換入。
對於步驟S404還有另一些實現方式:按照本申請提出的方法配置了中斷控制器的中端親緣性屬性之後,若確定該中斷請求的處理主體為其它虛擬處理器,則不需要判定該處理主體是否在位,因為該處理主體一定不在位,所以可以僅在所有虛擬處理器均可以共用的儲存區域內記錄該中斷請求,也可以似上段介紹的方式一樣,主動去觸發處理主體被宿主機換入,從而確保該中斷請求被儘快處理。
由以上實施例可以看出,本發明實施例提供的中斷請求處理方法使得虛擬處理器(或者說該虛擬處理器所服務的虛擬機器)能夠直接接收硬體產生的中斷請求,對於其中的應用中斷請求,虛擬處理器可以直接調用虛擬機器內的中斷服務程式進行處理,不再需要宿主機中轉和虛擬處理器的陷入和陷出,從而極大的提升了應用中斷請求的處理效率,降低了應用中斷請求的處理時延。當然,對於客戶作業系統中斷請求,也有同樣的效果。
進一步的,針對非當前虛擬處理器處理的中斷請求,能夠將該中斷請求在當前虛擬處理器不需要陷出的前提下記錄下來或在當前虛擬處理器不需要陷出的前提下發送給其他虛擬處理器,使得其他虛擬處理器可以儘快處理該中斷請求,進一步提升了中斷請求的處理效率。
進一步的,針對宿主機需要處理器的中斷請求,能夠反向發送到宿主機,實現該中斷請求的及時處理,這樣本發明實施
例提供的方法就可以應用在必然存在宿主機需要處理的中斷請求的複雜的系統中,使得本發明實施例的應用更廣泛。
圖5展示了一個更具體的實施例,在該實施例中,處理器為中央處理單元(central processing unit,CPU)210,虛擬處理器為vCPU,中斷控制器為進階可程式中斷控制卡((Advanced Programmable Interrupt Controller,APIC))260。兩個虛擬機器分別為虛擬機器29-1和虛擬機器29-2。APIC260一般包括一個io-apic和4個分別於4個物理核對應的local-apic。
宿主機中斷管理單元281包括中斷配置單元2811、執行調度單元2812和中斷接收單元2813。客戶中斷管理單元291包括中斷調度單元2911、中斷分發單元2912和中斷觸發單元2913。中斷向量表31和運行實體表32中儲存有處理中斷請求所需的資訊。為了方便資訊管理,本實施例這兩個表均位於所有虛擬機器(所有虛擬處理器)和宿主機均可以訪問的儲存區域內,這樣也方便實現下述所有實施例提供的方法。在其他一些實施例中,這兩個表的形式和內容允許根據情況做些調整。
中斷向量表31主要用來記錄應用中斷請求的標識以及該應用中斷請求對應的處理主體和中斷服務程式。進一步的,還可以記錄IPI中斷請求和/或客戶作業系統中斷請求的資訊。
中斷向量表31中還可以包括客戶作業系統中斷請求的標識,例如IPI中斷,以及相應的處理主體和中斷服務程式。
運行實體表32主要用來記錄各個VM包含的所有vCPU
當前的狀態,比如是否在位,以及記錄待各個vCPU處理的中斷請求。
表1和表2分別為中斷向量表31和運行實體表32的示例。
表1僅儲存應用中斷請求的IRQ ID以及該應用中斷請求對應的處理主體和中斷服務程式等資訊。若一個中斷請求的IRQ ID不在該表中,則預設該中斷請求需要宿主機處理,該中斷請求將會被發送給(或稱注入)宿主機以便於宿主機處理該中斷請求。
在其他一些實施例中,表1中也可以儲存所有中斷請求的標識,處理主體則記錄為虛擬機器或宿主機;或者儲存所有中斷請求的標識,但VM ID為空則表示處理主體為宿主機等。資訊儲存的各種變形方式本領域技術人員均容易想到,在此不在一一
贅述。
vCPU LIST在本發明實施例中的具體資料結構可以實現為點陣圖,該點陣圖中的每個位元(bit)代表一個vCPU。
表1中的PRIORITY記錄的是中斷請求的優先順序,中斷請求的優先順序設置方式需要和VMM中vCPU的優先順序(參考表2)的設置方式相似,以便於後續兩種優先順序可以進行比較。一個中斷請求的優先順序可以與處理該中斷請求的vCPU的優先順序不相同。兩種優先順序的比較結果可作為一些實施例中中斷請求到來後搶佔哪個vCPU運行的判斷依據。
PRIORITY在相關的VM啟動之前進行配置。具體的,使用者可以通過中斷配置單元(2811)的統一配置介面(sysfs介面或proc介面)進行配置。中斷類型TYPE也可以通過類似的方式配置。
在本申請的一些實施例中,中斷向量表31和運行實體表32中儲存的內容可以比表1和表2的示例更少或更多,例如兩個表中的VM ID也可以不儲存,但儲存起來有些場景會方便一些,比如某中斷請求可以被某個VM的所有vCPU處理,這時只判斷VM ID就行;有些實施例可以不儲存PRIORITY和/或TYPE資訊。
每個虛擬機器(29-1和29-2)和宿主機之間均具有配置通道33和注入通道34,配置通道33主要被客戶中斷管理單元291用來填寫中斷向量表31,注入通道34主要被客戶中斷管理單元291用來將待宿主機處理的中斷請求注入到宿主機中,以便於宿主機中斷管理單元281處理該中斷請求。
虛擬機器和宿主機中分別包含多個中斷服務程式(292和283),用於被調用後處理中斷請求。虛擬機器中的中斷服務程式292通常是安裝在其上的應用部署的,用來處理應用中斷請求。當然也有一些中斷服務程式292是客戶作業系統290部署的,用來處理客戶作業系統中斷請求。
宿主機中還包含宿主機中斷分發單元282,用於接收宿主機中斷管理單元281(具體是中斷接收單元2813)從客戶中斷管理單元291接收到的中斷請求,並調用該中斷請求對應的中斷服務程式283。該宿主機中斷分發單元282在一些現有的虛擬化架構中也存在,在本實施例中用於從宿主機中斷管理單元281接收中斷請求,而非直接從APIC260接收。圖5的其他模組與圖4類似,在此不再贅述。
基於圖5,下面介紹詳細的方法實現過程。
(一)宿主機中斷管理單元的初始化
本實施例以宿主機中斷管理單元281位於VMM內為例。圖6為宿主機中斷管理單元281的初始化過程的示意圖。宿主機中斷管理單元281伴隨著VMM的初始化執行初始化。
中斷配置單元2811的初始化(S501)包括準備配置通道33(S5011)和準備中斷向量表31(S5012)。準備配置通道33(S5011)包括將用作配置通道33的hypercall函數掛接到VMM的hypercall框架中,這樣虛擬機器(29-1和29-2)就可以通過hypercall調用該函數以使用該配置通道33。準備中斷向量表31(S5012)包括確定共用記憶體區,劃分中斷向量表31的表項等(參考表1)。該共用記憶體區用來儲存中斷向量表的內容。執行調度單元2812的初始化(S502)包括準備運行實體表32(S5021)。準備運行實體表32(S5021)包括確定另一個共用記憶體區,劃分運行實體表32的表項等(參考表2)。該共用記憶體區用來儲存運行實體表32的內容。
本實施例提供的“共用記憶體區”是所有虛擬機器(29-1和29-2)和宿主機都可以訪問的一段儲存區域。
中斷接收單元2813的初始化(S503)包括準備中斷注入通道34(S5031),具體包括將用於中斷注入的hypercall函數掛接到VMM的hypercall框架中,這樣虛擬機器(29-1和29-2)就可以通過hypercall調用該函數。
以上三個單元的初始化可以在VMM的核心模組的初始化完成之前或之後進行,也可以在VMM的核心模組的初始化完成部分後執行,然後VMM的核心模組再繼續完成剩餘的初始化。以上三個單元的初始化可以並存執行,也可以串列執行,執行順序本發明實施例不做限定。
(二)客戶中斷管理單元的初始化
VMM初始化完成並啟動之後,宿主機中斷管理單元281也初始化完成。之後,VMM將會創建並啟動兩台虛擬機器(29-1和29-2)。在虛擬機器(29-1和29-2)的創建和啟動過程中,客戶中斷管理單元291完成初始化。
參考圖7,一台虛擬機器的整個啟動過程分為兩個部分:vCPU陷入之前和vCPU陷入之後。
S601:VMM180創建並初始化VM對象。
S602和S602-d:VMM180為該VM對象創建主vCPU和從vCPU。
圖5中一台虛擬機器有三個vCPU,其他一個為主vCPU,另兩個為從vCPU,本實施例以主vCPU和其中一個從vCPU為例介紹,另一個從vCPU的初始化過程與該介紹的從vCPU類似。
S603:根據自訂的參數,VMM180配置主vCPU和從vCPU的中斷接收模式和APIC260操作模式。配置的目的是使得vCPU在客戶模式下(即陷入之後)可以接收APIC發送的中斷請求,以及vCPU在客戶模式下可以操作APIC260。這裡自訂的參數是本
申請定義的,這些參數用於通知VMM按照以上配置該VM。vCPU的這兩個模式分別用該vCPU對應的暫存器上的不同位元指示。
具體的,ARM64平臺上關閉物理CPU的HCR_EL2(hypervisor configuration register EL2)暫存器的FMO和IMO兩個bit位元之後,vCPU即可在不陷出的前提下接收中斷請求和操作物理APIC。X86平臺上,將VMCS(virtual machine control structure)的Pin-Based VM-Execution Controls控制位的bit 0(external-interrupt exiting)置0,可以在不陷出的前提下接收中斷請求;將VMCS的Pin-Based VM-Execution Controls控制位的bit 7(process posted interrupts)置0、VMCS的Primary Processor-Based VM-Execution Controls控制位的bit 21(Use TPR Shadow)置0、VMCS的Secondary Processor-Based VM-Execution Controls控制位的bit 8(APCI-register virtualization)和bit 9(Virtual-interrupt delivery)置0、VMCS的VM-execution control的MSR-Bitmap中涉及LAPIC的相關bit置0之後,vCPU可以直接操作物理APIC。
但該步驟S603中配置的是中斷接收模式和APIC260操作模式所涉及到的記憶體對象的值(實質是將值記錄在了記憶體中),還沒有真正修改物理的暫存器。
該步驟S603可以由宿主機中斷管理單元281中的中斷配置單元2811實現。
S604和S604-d:VMM180將主vCPU和從vCPU分別調
度到物理核上,但此時主vCPU和從vCPU還沒有陷入。
S605:VMM180更新運行實體表32。
VMM180將當前的vCPU的VM ID、vCPU ID,vCPU對應的物理核的CORE ID、以及vCPU的優先順序記錄到運行實體表32中。vCPU的優先順序通常設置在VMM中,因此VMM可以獲取到。多個vCPU的情況下,這多個vCPU各自在陷入之前更新運行實體表32。
由於經過步驟S604和S604-d,vCPU已經被換入,所以在運行實體表32中記錄該vCPU運行的物理核的實際CORE ID。此時vCPU雖然還沒有陷入,即vCPU還不在位,但是本實施例在更新運行實體表之後會設置vCPU馬上陷入,所以在此時記錄CORE ID和之前描述的表2的意義還是相符的。
該步驟S605可以由宿主機中斷管理單元281中的執行調度單元2812實現。不僅初始化階段,以後每次vCPU被換入之後,陷入客戶模式之前,以及vCPU被換出之前執行調度單元2812都需要更新運行實體表32,保證運行實體表32中記錄的vCPU在位或不在位的狀態是準確的。
S606和S606-d:主vCPU和從vCPU陷入客戶模式。主vCPU和從vCPU陷入時從各自對應的記憶體中讀取步驟S603設置的中斷接收模式和APIC操作模式所對應的屬性的值,據此修改各自的暫存器。這裡所修改的暫存器是vCPU所運行的物理核所對應的物理暫存器。
主vCPU和從vCPU陷入客戶模式之後,分別進行不同的初始化。主vCPU這邊執行客戶作業系統(guest OS)初始化,而從vCPU僅執行從vCPU的初始化。
在客戶作業系統和從vCPU的初始化前階段(S607和S607-d)完成後,客戶中斷管理單元291開始執行初始化(S608和S608-d)。客戶中斷管理單元291的初始化包括:
S609:中斷分發單元2912通過中斷配置單元2811提供的配置通道33獲取中斷向量表31的位址資訊(僅需主vCPU執行)。位址資訊具體可以是中斷向量表31在記憶體中的起始位址和結束位址。
S610:中斷分發單元2912通過中斷配置單元2811提供的配置通道33獲取VM ID存在變數中(僅需主vCPU執行)。VMID在其他一些實施例中也可以不獲取。
S611:中斷分發單元2912獲取當前vCPU ID保存在變數中。主從vCPU均需執行,將vCPU ID保存在各自的變數中。
S612:中斷分發單元2912將客戶中斷管理單元291的入口函數的位址配置於各個vCPU的相應暫存器,這樣各個vCPU在接收到中斷請求時就可以直接通過讀取暫存器中的入口函數的位址獲取並執行客戶中斷管理單元291的功能。因為本實施例中首先發揮作用的是中斷分發單元2912,所以客戶中斷管理單元291的入口函數在本實施例中是中斷分發單元2912的入口函數。
不同處理器對於利用哪一個暫存器儲存中斷處理的入口
函數的規定不一樣。對於X86系統,可以通過lidt指令修改中斷描述符表暫存器(interrupt descriptor table register,IDTR)實現,具體的,通過lidt指令載入一個中斷描述符表(interrupt descriptor table,IDT)到IDTR中,該IDT表中的關於中斷處理的入口函數位址填為中斷分發單元2912的入口函數。對於ARM64系統,通過msr指令修改暫存器vbar_el1(vector base address register el1)實現。
需要說明的是,一段程式(一個功能單元或模組)的“入口函數”就是指該程式(或該功能單元或模組)運行時候最開始調用的函數。“中斷處理的入口函數”指的是vCPU被中斷請求打斷後執行的第一條指令所在的函數。例如,vCPU被中斷請求打斷後,需要執行的第一條指令是中斷分發單元2912的指令,那麼中斷處理的入口函數就應該設置為中斷分發單元2912的入口函數。
在完成客戶中斷管理單元291的初始化後,客戶作業系統進入後一階段的初始化過程(S613和S613-d),直到客戶作業系統的初始化全部完成,進而客戶作業系統進入到應用(或業務)可運行的狀態。之後,應用可以在客戶作業系統上部署,並且應用可以通過中斷分發單元2912提供的介面進行ISR的註冊(S614和S614-d)。ISR註冊時,中斷分發單元2912通過配置通道33通知中斷配置單元2811,此後vCPU陷出(S615),然後中斷配置單元2811修改中斷向量表31,從而將註冊資訊填寫到中斷向量表
31中,之後vCPU馬上再陷入(S616)。
本領域技術人員應理解的是,在虛擬化設備中,虛擬機器中各個單元的功能可以理解為vCPU讀取並執行該單元的程式或指令後實現的。例如,中斷分發單元2912通過配置通道33通知中斷配置單元2811,可以認為是vCPU讀取中斷分發單元2912的程式,從而根據該程式調用配置通道33的hypcrcall函數(此後vCPU陷出到宿主模式),然後宿主機(vCPU對應的host執行緒)讀取中斷配置單元2811的程式,從而根據該程式修改中斷向量表,修改完成後vCPU再馬上陷入客戶模式。另外,本實施例中宿主機中斷管理單元281位於VMM內,所以宿主機中斷管理單元281執行的動作也可以理解為是VMM執行的動作。不論是虛擬機器中各個單元或vCPU執行,還是VMM或宿主機中各個單元執行,歸根到底都是物理處理器運行軟體程式執行。
由於中斷配置單元2811已經將配置寫入了VMM創建的vCPU物件中(參考步驟S603),後續每次vCPU陷入時,均可以根據該配置設置vCPU對應的物理暫存器的值,從而達到vCPU在陷入之後直接從APIC接收所有中斷請求而不需要陷出,以及vCPU可以直接操作物理APIC的效果。
(三)中斷請求處理流程
經過以上步驟之後,虛擬化設備已經進入運行狀態,其上部署的虛擬機器以及虛擬機器上的應用正在運行。下面詳細介紹本實施例提出的虛擬化設備在運行過程中對中斷請求的處理過
程。
如圖8A所示,首先,某一個硬體產生中斷請求並將該中斷請求發送給APIC260(S701a),例如硬體網卡產生一個中斷請求,並將該中斷請求發送給APIC260。APIC260根據特定的規則將該中斷請求發送給某一個物理核,則該物理核上正在客戶模式運行的vCPU的執行被打斷(S702a)。該vCPU的執行被打斷後,由於之前已經配置了vCPU可以在客戶模式接收中斷,無需陷出,所以vCPU直接跳轉到執行暫存器中儲存的中斷分發單元2912的入口函數,將中斷請求發送給中斷分發單元2912(S703a),這樣客戶中斷管理單元291的功能就陸續開始發揮作用了。有的中斷請求會被APIC260發送到多個物理核上,每個物理核的處理方式均類似前述,不再一一贅述。
需要說明的是,中斷請求的發送過程在不同的電腦架構中可能有所不同,例如在x86系統中,APIC260包括io-APIC和local-apic,其中,io-apic負責收集所有硬體產生的中斷請求,並相應發送該一個local-apic,然後loca-apic再轉發給對應的物理核。本實施例中為簡化表述將此過程概括描述為APIC260發送中斷請求給某一個物理核。
需要說明的是,在本實施例中,如果該中斷請求被發送到的一個物理核上,但該物理核的vCPU不在位,即該物理核正在宿主模式,正在運行宿主機上的功能單元,該功能單元通常是VMM,那麼該物理核(即該VMM)將不處理該中斷請求,因為
宿主模式的中斷回應位元被關閉了。後面會有實施例提供一種補償方法,介紹在不關閉宿主模式的中斷回應位元的情況下,VMM如何處理該中斷請求。
承接前述步驟S703a,如圖8B所示,中斷分發單元2912識別該中斷請求的IRQ ID,並將該IRQ ID發送給中斷調度單元2911(S701b)。中斷調度單元2911根據該IRQ ID查詢中斷向量表中該中斷請求的處理主體以及該中斷請求對應的ISR的位址,即前述表1中該IRQ ID對應的vCPU list和ISR ADDR(S702b)。中斷調度單元2911判斷是否能查詢到ISR ADDR(S703b)。
若不存在ISR ADDR,則說明該中斷請求不是應用中斷請求或客戶作業系統中斷請求,其處理主體不是虛擬機器,所以中斷調度單元2911將該查詢結果返回給中斷分發單元2912(S704b),然後中斷分發單元2912將該中斷請求通過注入通道34注入宿主機(S705b)。具體的,中斷分發單元2912可以將該中斷請求通過注入通道34發送給宿主機中的中斷接收單元2813,由中斷接收單元2813將該中斷請求發給宿主機中斷分發單元282,然後宿主機中斷分發單元282調用宿主機中與該中斷請求對應的ISR。宿主機中斷分發單元282的處理為現有技術,在此不詳述。
若存在ISR ADDR,則中斷調度單元2911判斷當前vCPU(即前述被打斷執行的vCPU)是否包含在查詢到的vCPU list中,即判斷當前vCPU是否為該中斷請求的處理主體之一(S706b)。
需要說明的是,在本實施例中,中斷向量表31中儲存了
應用中斷請求和客戶作業系統中斷請求,所以在判斷處理主體時有以上判斷方法,在其他實施例中,若中斷向量表31的內容有變化,其判定處理主體的方法也可以適應性改變。
若當前vCPU包含在查詢到的vCPU list中,則中斷調度單元2911將查詢獲得的ISR ADDR返回給中斷分發單元2912(S707b),然後中斷分發單元2912通知中斷觸發單元2913調用該ISR ADDR所指示的中斷服務程式(S708b),由該中斷服務程式處理該中斷請求。至此該中斷請求處理完畢,vCPU將返回之前被打斷的位置繼續執行。
若當前vCPU沒有包含在查詢到的vCPU LIST中,則可以查詢運行實體表32以確定vCPU LIST中存不存在在位的vCPU(S709b)。
若當前vCPU沒有包含在查詢到的vCPU LIST中且vCPULIST中存在至少一個vCPU在位,那麼中斷調度單元2911從在位的vCPU中選擇一個vCPU,然後發送一個IPI中斷給該選擇的vCPU(S710b)。該IPI中斷中攜帶中斷請求的標識(IRQ ID),以便於該選擇的vCPU對該中斷請求進行處理。這裡的選擇可以是任意選擇,也可以是根據vCPU LIST中所有vCPU的優先順序選擇一個優先順序最低的。
若當前vCPU沒有包含在查詢到的vCPU LIST中且vCPULIST中的vCPU均不在位,那麼中斷調度單元2911從該vCPULIST中選擇目標vCPU,並更新運行實體表32(S711b)。具體的,
更新運行實體表32包括在運行實體表32中記錄與該目標vCPU對應的PENDING位元,記錄該位元的值為該中斷請求的IRQ ID,以便於該目標vCPU處理該中斷請求。“目標vCPU”可以包括vCPU LIST中的所有vCPU,也可以是任意選擇的一個vCPU。進一步的,除了更新運行實體表32之外,中斷調度單元2911還可以主動觸發該目標vCPU的換入(S712b),以便於該中斷請求儘快被處理。選擇什麼vCPU作為目標vCPU以及是否主動觸發該vCPU的換入可根據中斷請求的優先順序和vCPU的優先順序確定,具體方法在下述實施例中會有詳細介紹。
“目標vCPU”處理該中斷請求的過程具體包括:該目標vCPU在被宿主機換入之後且陷入客戶模式之前,宿主機中的執行調度單元2812讀取運行實體表32中的該PENDING位元,並給該目標vCPU發送一個與該中斷請求的IRQ ID相同的中斷請求,從而該目標vCPU可以在陷入客戶模式之後處理該中斷請求。該“目標vCPU”的數量可以是一個,也可以是多個。如果是該中斷請求僅需一個vCPU處理即可,則在向第一個目標vCPU執行中斷發送之後,清除掉其它vCPU對應的PENDING位元,以避免其它vCPU陷入時再次對中斷進行處理。
需要說明的是,一個vCPU接收到中斷請求之後,該vCPU還需要保存被打斷的任務的狀態以及執行其他一些操作,以便於中斷請求處理完成之後該vCPU能夠返回繼續執行被打斷的任務,這些屬於中斷處理的慣常流程,本實施例在此不詳述。
在其他一些實施例中,中斷調度單元2911在確定當前vCPU沒有包含在查詢到的vCPU LIST中,也可以直接更新運行實體表32,以將vCPU LIST中包含的所有vCPU的PENDING位置為該中斷請求的IRQ ID。
通過以上實施例可以看出,通過配置vCPU的中斷接收模式,使得vCPU可以在客戶模式下直接接收APIC發送的幾乎所有中斷請求,亦即中斷可以直通到虛擬機器的客戶中斷管理單元291,從而使得vCPU在處理應用中斷請求時不需要陷入/陷出等切換,使得應用中斷請求這種業務層面的中斷請求具有更短的回應與處理路徑,從而減小了應用中斷請求的處理時延。本申請提供的方法可以保證高業務容量與高併發執行環境下業務中斷請求在回應與處理上的超低時延要求,進而可以應用到5G(5th-Generation)等需要以超低時延作支撐的業務場景。
進一步的,對於非業務層面的中斷請求通過注入通道34注入到宿主機層,然後由宿主機內的宿主機中斷管理單元281和/或宿主機中斷分發單元282作處理或再次分發,在保證應用中斷請求高效處理的情況下,也保證了其他中斷請求的及時處理。
進一步的,當接收到中斷請求的vCPU並不是該中斷請求的處理主體時,通過多個vCPU間共用的運行實體表32記錄該中斷請求,而且目標vCPU可以在換入之後查看並處理該中斷請求,避免了VMM對中斷請求的中轉過程,進一步提高了中斷請求的處理效率。並且讓暫時不在位的vCPU可以延遲接收和處理
中斷請求,在多vCPU共核,vCPU非獨占核的場景下,有效避免了中斷請求的去失。
進一步的,當接收到中斷請求的vCPU並不是該中斷請求的處理主體時,不僅更新運行實體表,還可以主動觸發中斷請求的處理主體的換入,從而進一步提高中斷中斷請求的處理效率。
如前述實施例中步驟S702a所示,APIC接收到一個中斷請求後,將該中斷請求根據特定的規則發送給某一個(或多個)物理核,由該物理核上正在運行的vCPU進行處理。如果不設置特別的規則,比如APIC隨機發送或根據現有技術發送,那麼在超分配(多vCPU共核)的場景下,中斷請求很有可能被發送到一個不能處理該中斷請求的vCPU中,所以下面介紹的實施例提供一種中斷親緣性的配置方法,能夠使得中斷請求最大概率地被發送給可以處理該中斷且當前在位的vCPU,從而不需要執行前述步驟S709b和S710b等步驟,進而進一步提高中斷的處理效率。
中斷親緣性作為中斷控制器的屬性,儲存在中斷控制器中,表示的是中斷請求與物理核的親緣性。中斷請求將會被中斷控制器發送給與該中斷請求具有親緣性的物理核上。具體的,一個中斷請求的親緣性可以實現為與該中斷對應的一個親緣性列表,該親緣性列表中包含所有可以接收該中斷請求的物理核的COREID。例如,X86系統中,當有一個io-APIC時,即所有產生中斷請求的硬體均連接io-APIC,那麼所有中斷請求的中斷親緣性儲
存在io-APIC中;而當存在多個外設的中斷控制部件時,不同硬體產生的中斷請求的中斷親緣性儲存在不同的中斷控制部件中,可根據如下實施例介紹的方式分別進行更新。
本實施例提出的中斷親緣性的配置在一個vCPU被VMM換入之後,陷入客戶模式之前執行,以及該vCPU被VMM換出時執行。該配置可以由宿主機中斷管理單元281中的執行調度單元2812實現。圖9A和圖9B介紹了中斷親緣性的配置過程。
參考圖9A,在一個vCPU被換入但陷入客戶模式之前,執行調度單元2812關閉VMM外部中斷回應(S801a),具體的,將該vCPU在宿主模式的暫存器位元修改為指示關閉外部中斷,使得VMM不能接收和處理中斷請求。然後通過調用函數獲取該vCPU運行的物理核的CORE ID(S802a),例如在linux系統中,通過調用smp_processor_id()函數獲取CORE ID。這裡暫存器位元在ARM64架構是程式狀態暫存器(current program status register,cprs)的i bit位元,在X64架構是cli指令實現。
當然因為vCPU被換入,所以此時也要更新運行實體表,具體的,將該vCPU所屬的VM ID和vCPU ID,以及CORE ID記錄到運行實體表中(S803a)。
除了更新運行實體表之外,為了實現中斷親緣性配置,執行調度單元2812先根據該vCPU ID從中斷向量表中獲取該vCPU可以處理的所有中斷請求(IPI不需要設置),然後訪問APIC,將這些中斷請求在APIC中的親緣性加上該vCPU所運行的物理核
(即前面獲取的CORE ID)(S804a),使得APIC在收到這些中斷請求時,可以將這些中斷請求發送給該物理核。
需要說明的是,對於vCPU綁核的場景,該親緣性配置的操作S804a可以在VM啟動時vCPU初次被換入後做一次,不需要每次vCPU換入時都修改中斷控制器,因為vCPU運行的物理核是不變的。
在該vCPU陷入之前,執行調度單元2812還需要查詢運行實體表32,如果發現有PENDING位元的值不為-1,說明有中斷請求未處理,則根據該PENDING位元的IRQ ID,主動給該vCPU發送一個相同特徵的中斷請求。因為關閉了宿主模式(或者說宿主機)的中斷接收,所以該vCPU只有在陷入之後才能接收並處理該中斷請求。
圖9A和以上描述為vCPU將要陷入時需要更新中斷親緣性,相應的,vCPU將要被換出時也要更新中斷親緣性。參考圖9B,在一個vCPU陷出但被VMM換出之前,執行調度單元2812獲取該vCPU運行的物理核的CORE ID(S801b)),然後將運行實體表32中該vCPU的vCPU ID對應的CORE ID的表項更新為-1(S802b)。除了更新運行實體表32之外,中斷親緣性也需要更新配置(S803b)。具體的,執行調度單元2812先根據該vCPUID從中斷向量表31中獲取該vCPU可以處理的所有中斷請求(IPI不需要設置),然後訪問APIC,將這些中斷請求在APIC中的親緣性減去該vCPU所運行的物理核。如果一個中斷請求的親緣性列表
為空,則填充為-1,意思是所有物理核均可以接收該中斷請求。在其他實施例中,S801b步驟也可以不執行,採用一些方式用vCPUID也可以保證查找到需要修改的CORE ID。
需要說明的是,對於vCPU綁核的場景,該操作S803b可以在VM退出後只做一次。
採用上述方法配置親緣性之後,去除了某些中斷請求在vCPU間分發的必要性,使在vCPU非綁核場景下,中斷請求能夠以最大的概率命中目標vCPU,從而進一步縮短中斷請求的處理時間,減少中斷時延。
結合前述圖8B的實施例,在設置了中斷親緣性之後,若中斷調度單元2911在確定當前vCPU沒有包含在vCPULIST(S706b)之後,不需要執行S709b這個步驟,因為所有vCPU均不在位。步驟S710也不需要執行。中斷調度單元2911可以直接按照vCPU LIST中所有vCPU均不在位的情況繼續進行處理。
前述實施例中當接收到中斷請求的vCPU並不是該中斷請求的處理主體時,且處理主體均不在位時,需要從該中斷請求的處理主體中確定將來處理該中斷請求的目標vCPU。下面一個實施例將詳細介紹該目標vCPU如何確定,以及確定出來之後如何處理中斷請求。該實施例提供的方法可以用於沒有配置中斷親緣性的實施例,也可以用於配置了中斷親緣性的實施例。
表1的和表2分別記錄了中斷請求的優先順序和vCPU的優先順序。當確定接收到中斷請求的vCPU並不是該中斷請求
的處理主體時,中斷調度單元2911查詢表1獲得該中斷請求的優先順序。
本實施例中,當中斷請求的優先順序的數值大於或等於0時,需要與在位的vCPU的優先順序進行比較,以確定是否搶佔在位的vCPU。當數值為負數則不需要與在位的vCPU的優先順序進行比較,具體的,當為-1,則永遠不搶佔在位的vCPU;當為-2,則直接搶佔當前接收中斷請求的當前vCPU。中斷優先順序默認為-2。優先順序的設置和判斷方式有很多種,本申請不一一列舉,僅以此方式為例介紹下面的方法。
另外,這裡所說的vCPU的優先順序是指該vCPU上當前任務的優先順序。中斷調度單元2911在初始化時,註冊客戶作業系統的任務切換的HOOK,在客戶作業系統任務切換時執行該HOOK。該HOOK的工作就是將客戶作業系統的正準備換入的任務的優先順序更新到表2中的PRIORITY中。
方法詳細描述如下:當該中斷請求的優先順序為-1時,說明該中斷請求的優先順序極低,不與在位的vCPU的優先順序比較,直接如上段所述記錄PENDING位元即可。
當該中斷請求的優先順序大於或等於0且確定在位的所有vCPU的優先順序均高於或等於該中斷請求的優先順序時,中斷調度單元2911根據表1將該中斷請求對應的vCPU LIST中的所有vCPU作為目標vCPU,然後將該目標vCPU在表2的相應的
PENDING位元修改為該中斷請求的IRQ ID。這樣vCPU LIST中的任何一個vCPU陷入之前,執行調度單元2812都能夠查詢到相應的PENDING位元有中斷請求未處理,然後發送一個相同的中斷請求給該vCPU,而該vCPU在陷入之後可以接收並處理該中斷請求。除非該中斷請求是需要多核處理的中斷請求,否則有一個vCPU被發送了該中斷請求之後,其他vCPU的PENDING位元需要被清除掉,這樣就不會所有的vCPU都處理一遍該中斷請求了。
當該中斷請求的優先順序大於或等於0且確定存在任意一個vCPU的優先順序低於該中斷請求的優先順序時,中斷調度單元2911選擇優先順序最低的vCPU作為“中轉vCPU”,在該中斷請求對應的vCPU LIST中選擇優先順序最高的vCPU作為目標vCPU,將該目標vCPU在表2的相應的PENDING位元修改為該中斷請求的IRQ ID。然後,中斷調度單元2911通知中斷分發單元2912發送一個IPI中斷給中轉vCPU(即當前vCPU向中轉vCPU發一個IPI中斷),該IPI中斷中攜帶目標vCPU的vCPU ID。該IPI中斷中還可以攜帶待處理的中斷請求的IRQ ID,但不是必須的,因為待處理的IRQ ID在前面步驟中已經記錄在目標vCPU的PENDING位元了。如果在方法前面沒有記錄IRQ ID,那這裡需要攜帶,以便於被換入的目標vCPU知道自己要處理這個中斷請求。
中轉vCPU因為是從在位的vCPU中選擇出來的,所以中轉vCPU當前在位。中轉vCPU收到該IPI中斷之後,執行該IPI中斷對應的ISR(這個ISR也註冊在表1中,可以由中斷觸發單
元2913來註冊)。該IPI中斷對應的ISR的實現是:當確定該IPI中斷中攜帶的目標vCPU的vCPU ID與中轉vCPU的vCPU ID不同時(本實施例就是如此),則通過注入通道32向宿主機的中斷接收單元2813執行反向注入,參數是目標vCPU的vCPU ID(可選的,還可以包括IRQ ID),注入之後該中轉vCPU就陷出。中斷接收單元2813收到該注入之後,確定其中攜帶有目標vCPU的vCPU ID(說明中斷請求的處理主體不是宿主機),因此將該目標vCPU的vCPU ID發送給VMM中用於執行vCPU調度的調度器,以使得該VMM將該目標vCPU換入並將中轉vCPU換出。
需要說明的是,這裡之所以換出的是中轉vCPU是因為中轉vCPU在本實施例中是優先順序最低的vCPU,換出它能夠將中斷請求對當前任務的影響降到最低。在其他實施例中,可以根據情況換出其他的vCPU,本申請對此不做限定。
目標vCPU換入之後,陷入客戶模式之前,執行調度單元2812查詢運行實體表32的PENDING位元,確定該目標vCPU有中斷請求未處理,則主動給該目標vCPU發送一個與未處理的中斷請求同樣的中斷請求,以便於該目標vCPU在陷入客戶模式之後處理。
當該中斷請求的優先順序為-2時,說明該中斷請求非常緊急,也不需要和vCPU的優先順序比較,中斷調度單元2911立刻從vCPU LIST中選擇優先順序最高的vCPU作為目標vCPU(或任意選擇一個),然後調用表1中IPI對應的ISR(攜帶目標vCPU
的vCPU ID)。該ISR的具體實現是:判斷目標vCPU的vCPU ID與本vCPU不同,則通過注入通道32向宿主機的中斷接收單元2813執行反向注入,參數目標vCPU ID。注入之後當前vCPU馬上陷出。中斷接收單元2813收到該反向注入之後,確定該注入中攜帶有目標vCPU的vCPU ID(說明該中斷請求的處理主體不是宿主機),將該目標vCPU的vCPU ID發送給VMM中用於執行vCPU調度的調度器,以使得該VMM將該目標vCPU換入並將當前vCPU換出。與前述方法類似,IRQ ID可以攜帶,也可以不攜帶。
可見,當在位的所有vCPU上的當前任務的優先順序比該中斷請求的優先順序要高或相等時,這些vCPU暫時都不能被換出,所以為不影響當前任務的運行,不能主動觸發vCPU的換出和換入,因此先記錄下該中斷請求,等待目標vCPU中的一個在恰當的時機被換入之後再處理。當該中斷請求的優先順序比較大或非常大時,可以主動搶佔某個優先順序低的vCPU的運行。這樣,在儘量避免對vCPU當前任務影響的前提下,加快中斷請求的處理。在實施該方法的過程中,通過運行實體表32獲知的是整個系統的所有vCPU的狀態和優先順序,所以這種管理是系統級的,能夠一定程度上保證系統的正常運行。
前述實施例中提到了一個vCPU向另一個vCPU發送IPI中斷。下面一個實施例詳細介紹一個vCPU如何向另一個vCPU發送IPI中斷。這兩個vCPU可以位於同一個VM內,也可以位於不
同的VM內。為方便描述,下面實施例中將兩個vCPU分別稱為vCPU A和vCPU B。前面實施例使用IPI中斷的地方可以相應參考該實施例。
vCPU A在客戶模式且確定要向vCPU B發送IPI中斷之後,vCPU A調用其所屬的VM內的中斷分發單元2912中的IPI發送函數,中斷分發單元2912通知中斷調度單元2911進行調度,中斷調度單元2911在運行實體表32中查找vCPU B對應的CORE ID表項用以確認vCPU B是否在位。
如果確定vCPU B在位,則中斷調度單元2911直接操作APIC向vCPU B所運行的物理核發送IPI中斷。前述實施例中提到的中轉vCPU是從在位的vCPU中選擇出的vCPU,所以適用於該步驟。例如在x86系統中,中斷調度單元2911直接操作vCPU A所運行的物理核對應的local-apic向vCPU B所運行的物理核對應的local-apic發送IPI中斷。
如果確定vCPU B不在位,則在運行實體表32中與vCPU B相關的PENDING位元上記錄該IPI中斷,以便於vCPU B被換入之後處理該IPI中斷。具體的,vCPU B被換入之後,陷入之前,查詢PENDING位元,然後向自己發送一個相同的IPI中斷,陷入之後處理該IPI中斷。
需要說明的是,IPI中斷請求雖是一個特別的中斷,但是其處理過程有些和前述實施例中的中斷請求類似,所以可參考前述實施例,在此不再贅述。
通過不同vCPU間共用運行實體表以及前述實施例初始化時對vCPU的配置,使得vCPU可以在不陷出的情況下直接操作中斷控制器發送IPI中斷,提高了IPI中斷的處理速度。
以上步驟可以應用於任意一種IPI中斷請求。
進一步的,如果發送的IPI是前述實施例中用到的那種IPI的話,該IPI攜帶IRQ ID,也可以同時攜帶IRQ ID和vCPU ID。攜帶的vCPU ID不一定是vCPU B的ID。IRQ ID意味著該IPI的作用是通知別的vCPU處理IRQ ID指示的這個中斷請求。vCPU ID指示的是需要處理這個中斷請求的vCPU(即前述實施例中的目標vCPU)。
相應的,vCPU B收到該IPI中斷後查詢表1以調用該IPI中斷對應的ISR來處理該IPI中斷。該ISR的具體實現是,如果確定攜帶的vCPU ID與vCPU B相同或沒有vCPU ID(說明vCPU B就是這個中斷請求的處理主體),則查詢表1以調用攜帶的IRQ ID對應的ISR以處理該中斷請求;如果確定攜帶的vCPU ID與vCPU B不同,則通過注入通道34向宿主機發送目標vCPU的vCPU ID。之後該vCPU B就陷出。宿主機將該vCPU ID發送給VMM中用於執行vCPU調度的調度器,以使得該VMM將該vCPU ID指示的vCPU換入。具體過程可參考前述涉及優先順序配置的實施例。
一個vCPU要想在不陷出的前提下向另一個vCPU發送IPI中斷,則需要宿主機配置該vCPU的中斷控制器操作模式,使
得該vCPU可以在不陷出的前提下操作中斷控制器向另一個vCPU發送IPI中斷。具體配置方法可參考前述實施例。
有一類中斷請求需要多個vCPU處理,具體可以用表1中TYPE=1表示。典型的如時鐘中斷、ARM64架構下的N2N外設中斷,這類型的中斷在物理CPU超分配的情況下,有可能無法到達每個需要處理該中斷請求的vCPU,因為這些vCPU可能沒有同時在位。這種情況下,需要將這個中斷以“複製”的方式作再轉發。下面的這個實施例將介紹本申請提出的一種“中斷複製”的方法。
如圖10所示,為每個物理核引入一個宿主機和虛擬機器共用的vCPU佇列35。一個物理核的vCPU佇列35中包含有上一次在該物理核運行的vCPU。如果一個vCPU從該物理核上被VMM換出,執行調度單元2812將該vCPU加入該vCPU佇列35。如果該vCPU被VMM調度到別的物理核上運行,那麼執行調度單元2812將該vCPU從該vCPU佇列35中刪除。
首先進行初始化。具體的,在宿主機中斷管理單元281初始化階段為每個物理核創建對應的vCPU佇列35,這些佇列儲存在宿主機和虛擬機器可共用的儲存區域內。每個vCPU將自己希望處理的TYPE=1的中斷請求註冊到中斷向量表31中,註冊的詳細過程可參考前述實施例應用註冊中斷請求的過程。
對於已經處於客戶模式的一個vCPU,在收到一個需要自己處理的中斷請求之後,可以直接處理(包括直接在此操作物理
中斷控制器重新發起新的超時等待),處理方法可參考前述實施例。除此之外,參考圖11,在本實施例中,中斷調度單元2911還需根據該中斷請求的IRQ ID查詢中斷向量表的TYPE項(S901),判斷TYPE項的值是否為1(S902)。當確定該中斷請求需要多個vCPU處理時,查找中斷向量表31和該vCPU所運行的物理核的vCPU佇列35(S903),依次判斷該vCPU佇列35中的vCPU是否在與該IRQ ID對應的vCPU LIST中(S904),如果是,則在運行實體表32中記錄該vCPU對應的PENDING位元,並確定中轉vCPU,通過發送IPI中斷給中轉vCPU以最終實現VMM對該vCPU的調度,該vCPU被調度換入後處理該中斷請求(S905)。關於觸發vCPU換入的的更多詳細內容可參考前述實施例。
通過為每個物理CPU設置跨層共用的vCPU佇列,能夠降低需要多個vCPU處理的中斷請求的中斷處理時延。以時鐘中斷為例,時鐘中斷對於一個作業系統來說是個既特殊又十分重要的中斷。如果時鐘中斷能夠被vCPU在客戶模式直接接收到話,就可以極大的縮短時鐘中斷的回應時間,同時也能極大的提升它的精度。例如,目前在通常情況下,接收一個中斷請求vCPU需要陷出和陷入,那麼中斷時延在10us+。這就意味著,設置一個5us的時鐘中斷(以5us的頻率來做一個輕量級的事情,比如只耗費300ns的事情)是不可能的。採用本發明實施例提供的方法,時鐘中斷可以直通客戶模式,且多個vCPU都可以定時接收和處理時鐘中斷,那時鐘中斷的時延就大大降低,這種設置就存在可
能性了。
前述一些實施例在vCPU每次被換入時都關閉了VMM的中斷回應,但是有些複雜的虛擬化電腦系統中是不允許關閉該中斷回應的,下面的實施例針對此種系統提供一種補償機制來加快應用中斷請求的處理。
請參考圖12,宿主機層新增了中斷映射表284和VMM中斷服務程式2814,VMM中斷服務程式2814被註冊到中斷映射表284中,從而使得VMM收到應用中斷請求後可以通過該中斷映射表284查找到該VMM中斷服務程式2814。
在宿主模式時(比如vCPU因異常而陷出),VMM或Host的其它代碼接收到應用中斷請求,然後進入宿主機中斷分發單元282。宿主機中斷分發單元282查詢中斷映射表284以調用該應用中斷請求對應的處理函數,即VMM中斷服務程式2814。然後VMM中斷服務程式2814根據中斷向量表31和運行實體表32執行如下動作:若該應用中斷請求對應的vCPU LIST中的vCPU均不在位,那麼可以參考前述實施例中修改PENDING位元的處理方式,可以全部vCPU的PENDING位元均修改,也可以根據中斷優先順序參考前述實施例進行處理。這樣,vCPU被換入之後就可以處理該中斷請求。如果存在有相關的vCPU在位,則可以根據前述實施例發送IPI給在位的vCPU進行中斷處理。
本領域技術人員可以理解的是,VMM中斷服務程式2814
的功能和前述實施例中客戶中斷管理單元291的部分功能類似,所以更多具體實現可參考前述實施例。中斷向量表和中斷映射表的結構和類型可以相同,本申請為了區分二者所以為二者起了不同的名字,其中“向量”和“映射”無意限定什麼。
通過在宿主機的中斷映射表284中註冊VMM中斷服務程式2814並在接收到應用中斷請求時實現該VMM中斷服務程式2814的功能,使得即使在宿主模式接收到應用中斷請求,vCPU不必陷入就可以利用與其它實施例類似的發明機制,將應用中斷請求引導到相應的vCPU進行處理,這樣可以讓本申請提供的方案可應用在宿主模式一定要開中斷處理的複雜的電腦系統中。當然客戶作業系統中斷請求的處理也可以達到同樣的效果。
隨著網路技術的發展,5G將來會成為主流,在5G場景下,對網路設備的業務中斷時延也有更加嚴苛的要求。採用本申請提供的方法,可以保證高業務容量與高併發執行環境下,業務中斷請求在回應與處理上的超低時延,進而可以應用到5G等需要以超低時延作系統支撐的業務場景。
需要說明的是,前述實施例中提出單元或模組的劃分僅作為一種示例性的示出,所描述的各個單元的功能僅是舉例說明,本申請並不以此為限。程式設計人員可以根據需求合併其中兩個或更多單元的功能,或者將一個單元的功能拆分從而獲得更多更細細微性的單元,以及其他變形方式。
以上描述的各個實施例之間相同或相似的部分可相互參
考。
以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分佈到多個網路單元上。可以根據實際的需要選擇其中的部分或者全部模組來實現本實施例方案的目的。另外,本發明提供的裝置實施例附圖中,模組之間的連接關係表示它們之間具有通信連接,具體可以實現為一條或多條通信匯流排或信號線。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解並實施。
通過以上的實施方式的描述,所屬領域的技術人員可以清楚地瞭解到本發明實施例所述的繪圖裝置可借助軟體加必需的通用硬體的方式來實現,當然也可以通過專用硬體包括專用積體電路、專用CPU、專用記憶體、專用元器件等來實現。一般情況下,凡由電腦程式完成的功能都可以很容易地用相應的硬體來實現,而且,用來實現同一功能的具體硬體結構也可以是多種多樣的,例如類比電路、數位電路或專用電路等。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
S401‧‧‧虛擬處理器首先確定該中斷請求的處理主體
S402‧‧‧若確定該中斷請求的處理主體為自己,則該虛擬處理器處理該中斷請求
S403‧‧‧若確定該中斷請求的處理主體為宿主機,則該虛擬處理器將該中斷請求發送到宿主機
S404‧‧‧若確定該中斷請求的處理主體為其它虛擬處理器,則該虛擬處理器將該中斷請求記錄下來或將該中斷請求發送給其他虛擬處理器
Claims (30)
- 一種虛擬化設備,所述虛擬化設備包括一硬體層、一宿主機和一虛擬電腦,所述虛擬電腦內包含有服務於該虛擬電腦的一虛擬處理器,其中,所述宿主機用於配置所述虛擬電腦的虛擬處理器能夠從所述硬體層接收一中斷請求;所述虛擬電腦用於從所述硬體層接收中斷請求,根據一資訊確定所述接收到的中斷請求的一處理主體;當所述接收到的中斷請求的處理主體包括所述虛擬電腦的當前虛擬處理器時,所述虛擬電腦根據所述資訊調用與所述接收到的中斷請求對應的一中斷服務程式以處理所述中斷請求,所述資訊中包括所述中斷請求、所述處理主體以及所述中斷服務程式的對應關係。
- 如申請專利範圍第1項所述的虛擬化設備,其中,所述宿主機還用於配置所述虛擬電腦的虛擬處理器能夠操作一物理的中斷控制器;所述虛擬電腦還用於當所述接收到的中斷請求的處理主體為其他虛擬處理器且確定所述其他虛擬處理器中至少有一個在位時,操作所述物理的中斷控制器向所述其他虛擬處理器中在位的一個或多個虛擬處理器發送一IPI中斷請求,所述IPI中斷請求中攜帶所述接收到的中斷請求的一標識,所述其他虛擬處理器不包括所述虛擬電腦的所述當前虛擬處理器。
- 如申請專利範圍第1項或第2項所述的虛擬化設備,其中,所述虛擬電腦還用於當所述接收到的中斷請求的處理主體為其他虛擬處理器且確定所述其他虛擬處理器均不在位時,從所述其他虛擬處理器中確定一目標虛擬處理器,在所述當前虛擬處理器和所述宿主機都可以訪問的一儲存區域內記錄所述接收到的中斷請求的標識,所述其他虛擬處理器不包括所述虛擬電腦的所述當前虛擬處理器;所述宿主機還用於在換入所述目標虛擬處理器之後且所述目標虛擬處理器陷入之前根據所述儲存區域內記錄的標識向所述目標虛擬處理器發送所述中斷請求,以便於所述目標虛擬處理器在陷入之後處理所述中斷請求。
- 如申請專利範圍第3項所述的虛擬化設備,其中,所述宿主機還用於設置所述中斷請求的一優先順序,並將所述優先順序記錄在所述宿主機和所述虛擬電腦均可以訪問的所述儲存區域;所述虛擬電腦在從所述其他虛擬處理器中確定所述目標虛擬處理器方面具體用於:根據所述接收到的中斷請求的優先順序和一虛擬處理器的優先順序確定所述目標虛擬處理器,其中,所述虛擬處理器的優先順序儲存在所有虛擬電腦均可以訪問的儲存區域。
- 如申請專利範圍第4項所述的虛擬化設備,其中, 所述虛擬電腦在根據接收到的所述中斷請求的優先順序和所述虛擬處理器的優先順序確定所述目標虛擬處理器方面具體用於:根據所述接收到的中斷請求的標識在所述宿主機和所述虛擬電腦均可以訪問的所述儲存區域內查找以獲取所述接收到的中斷請求的優先順序,比較所述接收到的中斷請求的優先順序與在位的所有虛擬處理器的優先順序;若所述所有在位的虛擬處理器的優先順序均高於或等於所述接收到的中斷請求的優先順序,則確定可以處理所述接收到的中斷請求的所有虛擬處理器為所述目標虛擬處理器;若存在一個或多個在位的虛擬處理器的優先順序低於所述接收到的中斷請求的優先順序,則確定可以處理所述接收到的中斷請求的所有虛擬處理器中優先順序最高的虛擬處理器為所述目標虛擬處理器。
- 如申請專利範圍第5項所述的虛擬化設備,其中,若存在一個或多個在位的虛擬處理器的優先順序低於所述接收到的中斷請求的優先順序,所述虛擬電腦還用於確定所述在位的所有虛擬處理器中優先順序最低的虛擬處理器為一中轉虛擬處理器,並發送所述IPI中斷請求給所述中轉虛擬處理器,所述IPI中斷請求中攜帶所述目標虛擬處理器的標識,以便於所述中轉虛擬處理器根據所述IPI中斷請求陷出; 所述宿主機還用於換出所述中轉虛擬處理器並換入所述目標虛擬處理器。
- 如申請專利範圍第3項所述的虛擬化設備,其中,當所述接收到的中斷請求的處理主體為所述其他虛擬處理器且確定所述其他虛擬處理器均不在位時,所述虛擬電腦還用於:將所述目標虛擬處理器的標識發送給所述宿主機並陷出,所述目標虛擬處理器為所述處理主體中的任意一個虛擬處理器或優先順序最高的虛擬處理器;所述宿主機還用於:將所述虛擬電腦的所述當前虛擬處理器換出並根據所述目標虛擬處理器的標識換入所述目標虛擬處理器。
- 如申請專利範圍第1項所述的虛擬化設備,其中,所述硬體層包括一中斷控制器,所述中斷控制器用於根據一中斷親緣性發送所述中斷請求給一對應的物理處理器,其中,所述中斷親緣性包含所述中斷請求和所述物理處理器的對應關係;所述虛擬電腦在從所述硬體層接收所述中斷請求方面具體用於從所述中斷控制器接收所述中斷請求;所述宿主機還用於配置所述中斷控制器中的所述中斷親緣性,使得一個中斷請求能夠被發送到該中斷請求的所述處理主體所包括的所述虛擬處理器上。
- 如申請專利範圍第8項所述的虛擬化設備,其中,所述宿主機在配置所述中斷控制器中的中斷親緣性方面具體用於:在換入一個虛擬處理器之後且該虛擬處理器陷入之前,將將要運行所述被換入的虛擬處理器的物理處理器與所述處理主體包括該虛擬處理器的所有中斷請求在所述中斷親緣性中建立對應關係。
- 如申請專利範圍第8項或第9項所述虛擬化設備,其中,所述虛擬電腦還用於當所述接收到的中斷請求的處理主體為其他虛擬處理器時,從所述其他虛擬處理器中確定一目標虛擬處理器,並在所述當前虛擬處理器和所述宿主機都可以訪問的一儲存區域內記錄所述中斷請求的一標識,所述其他虛擬處理器不包括所述虛擬電腦的所述當前虛擬處理器;所述宿主機還用於在換入所述目標虛擬處理器之後根據所述儲存區域內記錄的標識向所述目標虛擬處理器發送所述中斷請求,以便於所述目標虛擬處理器陷入之後處理所述中斷請求。
- 如申請專利範圍第10項所述的虛擬化設備,其中,所述宿主機還用於設置所述中斷請求的一優先順序,並將所述優先順序記錄在所述宿主機和所述虛擬電腦均可以訪問的儲存區域;所述虛擬電腦在從所述其他虛擬處理器中確定所述目標虛擬處理器方面具體用於:根據所述接收到的中斷請求的優先順序和一虛擬處理器的優先順序確定所述目標虛擬處理器,其中,所述 虛擬處理器的優先順序儲存在所有虛擬處理器均可以訪問的儲存區域。
- 如申請專利範圍第11項所述的虛擬化設備,其中,所述虛擬電腦在根據所述接收到的中斷請求的優先順序和所述虛擬處理器的優先順序確定所述目標虛擬處理器方面具體用於:根據所述接收到的中斷請求的標識在所述宿主機和所述虛擬電腦均可以訪問的所述儲存區域內查找以獲取所述接收到的中斷請求的優先順序,比較所述接收到的中斷請求的優先順序與在位的所有虛擬處理器的優先順序;若所述所有在位的虛擬處理器的優先順序均高於或等於所述接收到的中斷請求的優先順序,則確定可以處理所述接收到的中斷請求的所有虛擬處理器為所述目標虛擬處理器;若存在一個或多個在位的虛擬處理器的優先順序低於所述接收到的中斷請求的優先順序,則確定可以處理所述接收到的中斷請求的所有虛擬處理器中優先順序最高的虛擬處理器為所述目標虛擬處理器。
- 如申請專利範圍第12項所述的虛擬化設備,其中,若存在一個或多個在位的虛擬處理器的優先順序低於所述接收到的中斷請求的優先順序,所述虛擬電腦還用於:確定所述在位的所有虛擬處理器中優先順序最低的虛擬處理器為一中轉虛擬處理器,並發送一IPI中斷 請求給所述中轉虛擬處理器,所述IPI中斷請求中攜帶所述目標虛擬處理器的標識,以便於所述中轉虛擬處理器根據所述IPI中斷請求陷出;所述宿主機還用於在所述中轉虛擬處理器陷出之後換入所述目標虛擬處理器。
- 如申請專利範圍第10項所述的虛擬化設備,其中,當所述接收到的中斷請求的處理主體為所述其他虛擬處理器時,所述虛擬電腦還用於:將所述目標虛擬處理器的標識發送給所述宿主機並陷出,所述目標虛擬處理器為所述處理主體中的任意一個虛擬處理器或優先順序最高的虛擬處理器;所述宿主機還用於:將所述虛擬電腦的所述當前虛擬處理器換出並根據所述目標虛擬處理器的標識換入所述目標虛擬處理器。
- 一種中斷請求的處理方法,所述方法應用於一虛擬化設備,所述方法包括:一處理器在一宿主模式時配置一暫存器以使所述處理器在運行有一虛擬處理器且所述虛擬處理器運行於一客戶模式時能夠從所述虛擬化設備的其他硬體接收一中斷請求;所述處理器在所述客戶模式時執行如下操作:所述處理器從所述其他硬體接收所述中斷請求;所述處理器根據一資訊確定所述接收到的中斷請求的一處理主體; 當所述接收到的中斷請求的處理主體包括所述處理器上當前運行的虛擬處理器時,所述處理器根據所述資訊調用與所述接收到的中斷請求對應的一中斷服務程式以處理所述中斷請求,所述資訊中包括所述中斷請求、所述處理主體以及所述中斷服務程式的對應關係。
- 如申請專利範圍第15項所述的方法,其中,還包括:所述處理器在所述宿主模式時配置所述將在所述處理器上運行的虛擬處理器能夠操作所述虛擬化設備的一物理的中斷控制器;所述處理器在所述客戶模式時還執行如下操作:當所述接收到的中斷請求的處理主體為其他虛擬處理器且確定所述其他虛擬處理器中至少有一個在位時,操作所述物理的中斷控制器向所述其他虛擬處理器中在位的一個或多個虛擬處理器發送一IPI中斷請求,所述IPI中斷請求中攜帶所述接收到的中斷請求的一標識,所述其他虛擬處理器不包括所述處理器上當前運行的虛擬處理器。
- 如申請專利範圍第15項所述的方法,其中,還包括:所述處理器在所述宿主模式時配置所述虛擬化設備的一中斷控制器的一中斷親緣性,使得一個中斷請求能夠被發送到該中斷請求的處理主體所包括的虛擬處理器上,所述中斷親緣性包含所述中斷請求的一標識和所述處理器的一標識的對應關係; 相應的,所述處理器從硬體接收所述中斷請求包括:所述處理器接收所述中斷控制器根據所述中斷親緣性向所述處理器發送的所述中斷請求。
- 如申請專利範圍第17項所述的方法,其中,所述處理器在所述宿主模式配置所述中斷控制器的中斷親緣性包括:所述處理器在所述宿主模式換入一個虛擬處理器之後將所述處理器與所述處理主體包括所述換入的虛擬處理器的所有中斷請求在所述中斷親緣性中建立對應關係。
- 如申請專利範圍第17項所述的方法,其中,還包括:當所述接收到的中斷請求的處理主體為其他虛擬處理器時,所述處理器在所述客戶模式從所述其他虛擬處理器中確定一目標虛擬處理器,並在所述處理器在所述客戶模式和所述宿主模式都可以訪問的一儲存區域內記錄所述中斷請求的標識,所述其他虛擬處理器不包括所述處理器上當前運行的虛擬處理器;所述處理器在所述宿主模式時在換入所述目標虛擬處理器之後且所述目標虛擬處理器陷入之前根據所述儲存區域內記錄的標識向所述目標虛擬處理器發送所述中斷請求,以便於所述目標虛擬處理器陷入之後處理所述中斷請求。
- 如申請專利範圍第19項所述的方法,其中,還包括:所述處理器在所述宿主模式時設置所述中斷請求的一優先順序,並將所述優先順序記錄在所述處理器在所述宿主模式和所述客戶模式時均可以訪問的所述儲存區域; 所述處理器在所述客戶模式時從所述其他虛擬處理器中確定所述目標虛擬處理器包括:所述處理器根據所述接收到的中斷請求的優先順序和一虛擬處理器的優先順序確定所述目標虛擬處理器,其中,所述虛擬處理器的優先順序儲存在所有虛擬處理器均可以訪問的儲存區域。
- 如申請專利範圍第19項所述的方法,其中,當所述接收到的中斷請求的處理主體為所述其他虛擬處理器時,所述方法還包括:所述處理器在所述客戶模式將所述目標虛擬處理器的標識反向注入,之後所述處理器離開所述客戶模式進入所述宿主模式,其中所述目標虛擬處理器為所述其他虛擬處理器中的任意一個虛擬處理器或優先順序最高的虛擬處理器;所述處理器在所述宿主模式將所述處理器上的虛擬處理器換出並根據所述目標虛擬處理器的標識換入所述目標虛擬處理器。
- 如申請專利範圍第15項至第21項任一項所述的方法,其中,還包括:所述處理器在所述宿主模式修改所述資訊以增加所述中斷請求的標識、所述中斷請求的處理主體和所述中斷服務程式的對應關係,其中,所述資訊儲存在所述處理器在所述宿主模式和所述客戶模式時均可以訪問的儲存區域內;所述處理器在所述客戶模式根據所述資訊確定所述接收到的中斷請求的處理主體以及所述中斷服務程式,包括: 所述處理器訪問所述資訊,根據所述接收到的中斷請求中攜帶的標識確定所述中斷請求的處理主體和所述中斷請求對應的中斷服務程式。
- 一種中斷請求的處理裝置,所述處理裝置應用於一虛擬化設備中,所述虛擬化設備包括一硬體層、一宿主機和一虛擬電腦;所述處理裝置包括部署在所述宿主機內的一宿主機中斷管理單元和部署在所述虛擬電腦內的一客戶中斷管理單元;所述宿主機中斷管理單元用於配置所述虛擬電腦的一虛擬處理器能夠從所述硬體層接收一中斷請求;所述客戶中斷管理單元用於從所述硬體層接收所述中斷請求,根據一資訊確定所述接收到的中斷請求的一處理主體;當所述接收到的中斷請求的處理主體包括所述虛擬電腦的當前虛擬處理器時,所述虛擬電腦根據所述資訊調用與所述接收到的中斷請求對應的一中斷服務程式以處理所述中斷請求,所述資訊中包括所述中斷請求、所述處理主體以及所述中斷服務程式的對應關係。
- 一種虛擬化設備,包括一處理器和一記憶體,所述記憶體用於儲存一電腦可讀指令,所述處理器用於讀取所述電腦可讀指令並實現如申請專利範圍第15項至第22項任意一項所述的方法。
- 一種電腦可讀取儲存媒體,用於存儲一電腦可讀指令,當所述電腦可讀指令被一處理器讀取時促使所述處理器實現如申請專利範圍第15項至第22項任意一項所述的方法。
- 一種IPI中斷請求的處理方法,包括:一源虛擬處理器根據一資訊確定一目的虛擬處理器所運行的一物理處理器,其中所述資訊記錄在所述源虛擬處理器可以訪問的一儲存區域內,所述資訊中包括指示所述目的虛擬處理器所運行的所述物理處理器的資訊;所述源虛擬處理器操作一中斷控制器向所述目的虛擬處理器所運行的所述物理處理器發送一IPI中斷請求;其中,所述源虛擬處理器由一宿主機配置一中斷控制器操作模式,使得所述源虛擬處理器可以在不陷出的前提下操作所述中斷控制器向所述目的虛擬處理器所運行的所述物理處理器發送所述IPI中斷請求。
- 如申請專利範圍第26項所述的方法,其中,所述IPI中斷請求中攜帶其他中斷請求的標識或者所述IPI中斷請求中攜帶其他中斷請求的標識和虛擬處理器的標識,所述方法還包括:所述目的虛擬處理器確定所述IPI中斷請求中沒有攜帶所述虛擬處理器的所述標識或確定所述IPI中斷請求中攜帶的所述虛擬處理器的所述標識與所述目的虛擬處理器的所述標識一致,則調用所述其他中斷請求的所述標識對應的一中斷服務程式,以處理所述其他中斷請求。
- 如申請專利範圍第26項所述的方法,其中,所述IPI中斷請求中攜帶一虛擬處理器的標識,所述方法還包括: 所述目的虛擬處理器確定所述IPI中斷請求中攜帶的所述虛擬處理器的標識與所述目的虛擬處理器的標識不一致,則向所述宿主機發送所述虛擬處理器的標識並陷出,以便於所述宿主機將所述虛擬處理器的標識所指示的虛擬處理器換入。
- 如申請專利範圍第26項至第28項任意一項所述的方法,其中,所述源虛擬處理器在確定所述目的虛擬處理器在位時才發送所述IPI中斷請求,其中,所述源虛擬處理器確定所述目的虛擬處理器在位包括:所述源虛擬處理器查詢所述資訊以確定所述目的虛擬處理器是否在位,所述資訊中還包括指示所述目的虛擬處理器是否在位的資訊。
- 一種虛擬化設備,所述虛擬化設備包括一源虛擬處理器和一目的虛擬處理器,所述源虛擬處理器和所述目的虛擬處理器服務於同一個或不同的虛擬電腦,其中,所述源虛擬處理器根據一資訊確定所述目的虛擬處理器所運行的一物理處理器,其中所述資訊記錄在所述源虛擬處理器可以訪問的一儲存區域內,所述資訊中包括指示所述目的虛擬處理器所運行的物理處理器的資訊;所述源虛擬處理器操作一中斷控制器向所述目的虛擬處理器所運行的所述物理處理器發送一IPI中斷請求;其中,所述源虛擬處理器由一宿主機配置一中斷控制器操作模式,使得所述源虛擬處理器可以在不陷出的前提下操作所述中 斷控制器向所述目的虛擬處理器所運行的所述物理處理器發送所述IPI中斷請求。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710497931.0A CN109144679B (zh) | 2017-06-27 | 2017-06-27 | 中断请求的处理方法、装置及虚拟化设备 |
| ??201710497931.0 | 2017-06-27 | ||
| CN201710497931.0 | 2017-06-27 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW201905686A TW201905686A (zh) | 2019-02-01 |
| TWI705375B true TWI705375B (zh) | 2020-09-21 |
Family
ID=64742803
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW107120853A TWI705375B (zh) | 2017-06-27 | 2018-06-15 | 中斷請求的處理方法、裝置、虛擬化設備及可讀存儲介質 |
Country Status (6)
| Country | Link |
|---|---|
| US (1) | US11972285B2 (zh) |
| EP (2) | EP4235420A3 (zh) |
| KR (1) | KR102339095B1 (zh) |
| CN (1) | CN109144679B (zh) |
| TW (1) | TWI705375B (zh) |
| WO (1) | WO2019001434A1 (zh) |
Families Citing this family (33)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11487574B2 (en) | 2017-09-19 | 2022-11-01 | Microsoft Technology Licensing, Llc | Targeted interrupts for virtual processors |
| CN110633127A (zh) | 2018-06-25 | 2019-12-31 | 华为技术有限公司 | 一种数据处理方法及相关设备 |
| JP7196439B2 (ja) * | 2018-07-03 | 2022-12-27 | 株式会社デンソー | 仮想化環境におけるデバイスへのアクセス方法 |
| CN111459623B (zh) * | 2019-01-18 | 2024-04-12 | 华为技术有限公司 | 应用程序恢复运行的方法、装置及计算机 |
| CN113454589B (zh) | 2019-02-14 | 2025-04-25 | 国际商业机器公司 | 用于多级虚拟化的定向中断 |
| TWI759677B (zh) | 2019-02-14 | 2022-04-01 | 美商萬國商業機器公司 | 用於具有回退之經引導中斷虛擬化之方法、電腦系統及電腦程式產品 |
| WO2020164935A1 (en) | 2019-02-14 | 2020-08-20 | International Business Machines Corporation | Directed interrupt virtualization with running indicator |
| US11113216B2 (en) * | 2019-03-20 | 2021-09-07 | Mediatek Inc. | Dispatching interrupts in a multi-processor system based on power and performance factors |
| US11003484B2 (en) * | 2019-06-28 | 2021-05-11 | Intel Corporation | Inter-processor interrupt virtualization with pass-through of local interrupt controller |
| DE102019126897B4 (de) * | 2019-10-07 | 2021-10-28 | Infineon Technologies Ag | Datenverarbeitungsvorrichtung und verfahren zum verarbeiten eines interrupts |
| US12344269B2 (en) * | 2020-03-27 | 2025-07-01 | Intel Corporation | Computing system for mitigating execution drift |
| CN112783600B (zh) * | 2020-07-01 | 2025-01-24 | 中兴通讯股份有限公司 | 中断处理方法、中断管理器、电子设备、计算机可读介质 |
| CN113918272B (zh) * | 2020-07-10 | 2024-07-02 | 上海交通大学 | 分离式虚拟机及其虚拟机架构、构建方法和优化方法 |
| CN114064227B (zh) * | 2020-08-10 | 2025-05-30 | 阿里巴巴集团控股有限公司 | 应用于微内核的中断处理方法、装置、设备和存储介质 |
| CN114077379B (zh) * | 2020-08-19 | 2024-03-26 | 华为技术有限公司 | 一种计算机设备、异常处理的方法以及中断处理的方法 |
| US12333305B2 (en) | 2020-09-26 | 2025-06-17 | Intel Corporation | Delayed cache writeback instructions for improved data sharing in manycore processors |
| CN114371907B (zh) * | 2020-10-15 | 2025-07-08 | 华为技术有限公司 | 一种芯片系统、处理虚拟中断的方法及相应装置 |
| US11748141B2 (en) * | 2020-10-30 | 2023-09-05 | Red Hat, Inc. | Providing virtual devices direct access to clock times in memory locations managed by a hypervisor |
| CN114640579A (zh) * | 2020-11-30 | 2022-06-17 | 华为技术有限公司 | 管理网络设备的方法、设备和系统 |
| CN112817690B (zh) * | 2021-01-22 | 2022-03-18 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 一种面向arm架构虚拟化领域的中断虚拟化处理方法及系统 |
| CN116762061A (zh) * | 2021-01-28 | 2023-09-15 | 华为技术有限公司 | 一种中断上报装置、方法及虚拟化系统 |
| US11755512B2 (en) | 2021-08-17 | 2023-09-12 | Red Hat, Inc. | Managing inter-processor interrupts in virtualized computer systems |
| CN113986456B (zh) * | 2021-10-14 | 2024-10-18 | 中汽创智科技有限公司 | 中断虚拟化实时处理方法、装置、存储介质和终端 |
| CN114003363B (zh) | 2021-11-01 | 2022-07-22 | 支付宝(杭州)信息技术有限公司 | 线程间中断信号发送方法及装置 |
| CN114327814B (zh) * | 2021-12-09 | 2024-11-22 | 阿里巴巴(中国)有限公司 | 任务调度方法、虚拟机、物理主机和存储介质 |
| CN116795557B (zh) * | 2022-03-15 | 2024-07-23 | 华为技术有限公司 | 通信方法、电子设备及可读存储介质 |
| CN116932234A (zh) * | 2022-03-29 | 2023-10-24 | 华为技术有限公司 | 应用程序间通信方法、装置、存储介质及程序产品 |
| CN114880658A (zh) * | 2022-04-21 | 2022-08-09 | 华为技术有限公司 | 一种车辆中数据的处理方法以及相关设备 |
| KR20240015952A (ko) * | 2022-07-28 | 2024-02-06 | 삼성전자주식회사 | 컴퓨팅 장치 및 그 동작 방법 |
| TWI816498B (zh) * | 2022-08-03 | 2023-09-21 | 新唐科技股份有限公司 | 匯流排直接中斷服務裝置 |
| US20260017086A1 (en) * | 2022-09-30 | 2026-01-15 | Intel Corporation | User Interrupt Moderation for User Inter-Processor-Interrupts |
| CN115801531B (zh) * | 2023-02-03 | 2023-05-12 | 广州世炬网络科技有限公司 | 部署于Linux物理机的基站系统 |
| CN117891573B (zh) * | 2024-01-03 | 2025-06-13 | 北京火山引擎科技有限公司 | 中断信息的处理方法、装置、设备及存储介质 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101135997A (zh) * | 2006-08-29 | 2008-03-05 | 联想(北京)有限公司 | 一种虚拟机系统及其硬件设备中断处理方法 |
| CN102792272A (zh) * | 2010-02-05 | 2012-11-21 | 超威半导体公司 | 配置成虚拟化客户本地中断控制器的处理器 |
| TWI540510B (zh) * | 2012-01-18 | 2016-07-01 | 萬國商業機器公司 | 用於藉由程式對警告追蹤中斷設備之使用之電腦程式產品、電腦系統及其方法 |
| CN106095578A (zh) * | 2016-06-14 | 2016-11-09 | 上海交通大学 | 基于硬件辅助技术和虚拟cpu运行状态的直接中断递交方法 |
| US20160364260A1 (en) * | 2015-06-09 | 2016-12-15 | Electronics And Telecommunications Research Institute | Event router and routing method for symmetric multiprocessor virtual machine using queue |
Family Cites Families (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7237051B2 (en) * | 2003-09-30 | 2007-06-26 | Intel Corporation | Mechanism to control hardware interrupt acknowledgement in a virtual machine system |
| US8286162B2 (en) * | 2005-12-30 | 2012-10-09 | Intel Corporation | Delivering interrupts directly to a virtual processor |
| CN100570587C (zh) * | 2007-03-19 | 2009-12-16 | 联想(北京)有限公司 | 虚拟机系统及其高级可编程中断控制器的访问处理方法 |
| CN101436966B (zh) * | 2008-12-23 | 2011-06-01 | 北京航空航天大学 | 虚拟机环境下的网络监控与分析系统 |
| US8055827B2 (en) * | 2009-01-26 | 2011-11-08 | Advanced Micro Devices, Inc. | Guest interrupt controllers for each processor to aid interrupt virtualization |
| CN101620551B (zh) * | 2009-05-07 | 2013-03-06 | 曙光信息产业(北京)有限公司 | 一种面向多虚拟机应用的网卡中断控制方法 |
| CN101561764B (zh) * | 2009-05-18 | 2012-05-23 | 华为技术有限公司 | 一种多核环境下的补丁方法与补丁装置 |
| US8949498B2 (en) * | 2011-08-11 | 2015-02-03 | Mellanox Technologies Ltd. | Interrupt handling in a virtual machine environment |
| US9003094B2 (en) * | 2011-08-30 | 2015-04-07 | Red Hat Israel, Ltd. | Optimistic interrupt affinity for devices |
| US9298504B1 (en) * | 2012-06-11 | 2016-03-29 | Amazon Technologies, Inc. | Systems, devices, and techniques for preempting and reassigning tasks within a multiprocessor system |
| CN103744716B (zh) * | 2014-01-15 | 2016-09-07 | 上海交通大学 | 一种基于当前vcpu调度状态的动态中断均衡映射方法 |
| US9734326B2 (en) * | 2014-02-04 | 2017-08-15 | Nxp Usa, Inc. | Dynamic interrupt stack protection |
| JP2017518589A (ja) * | 2014-06-20 | 2017-07-06 | 華為技術有限公司Huawei Technologies Co.,Ltd. | 仮想化プラットホームによって割込みを処理する方法および関連デバイス |
| US9772868B2 (en) * | 2014-09-16 | 2017-09-26 | Industrial Technology Research Institute | Method and system for handling interrupts in a virtualized environment |
| US9910699B2 (en) * | 2014-10-28 | 2018-03-06 | Intel Corporation | Virtual processor direct interrupt delivery mechanism |
| US10713195B2 (en) * | 2016-01-15 | 2020-07-14 | Intel Corporation | Interrupts between virtual machines |
-
2017
- 2017-06-27 CN CN201710497931.0A patent/CN109144679B/zh active Active
-
2018
- 2018-06-15 TW TW107120853A patent/TWI705375B/zh active
- 2018-06-26 EP EP23165232.2A patent/EP4235420A3/en active Pending
- 2018-06-26 KR KR1020207000394A patent/KR102339095B1/ko active Active
- 2018-06-26 WO PCT/CN2018/092933 patent/WO2019001434A1/zh not_active Ceased
- 2018-06-26 EP EP18822992.6A patent/EP3627330B1/en active Active
-
2019
- 2019-12-18 US US16/719,282 patent/US11972285B2/en active Active
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101135997A (zh) * | 2006-08-29 | 2008-03-05 | 联想(北京)有限公司 | 一种虚拟机系统及其硬件设备中断处理方法 |
| CN102792272A (zh) * | 2010-02-05 | 2012-11-21 | 超威半导体公司 | 配置成虚拟化客户本地中断控制器的处理器 |
| TWI540510B (zh) * | 2012-01-18 | 2016-07-01 | 萬國商業機器公司 | 用於藉由程式對警告追蹤中斷設備之使用之電腦程式產品、電腦系統及其方法 |
| US20160364260A1 (en) * | 2015-06-09 | 2016-12-15 | Electronics And Telecommunications Research Institute | Event router and routing method for symmetric multiprocessor virtual machine using queue |
| CN106095578A (zh) * | 2016-06-14 | 2016-11-09 | 上海交通大学 | 基于硬件辅助技术和虚拟cpu运行状态的直接中断递交方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| US20200125397A1 (en) | 2020-04-23 |
| TW201905686A (zh) | 2019-02-01 |
| EP4235420A3 (en) | 2023-11-08 |
| CN109144679A (zh) | 2019-01-04 |
| EP4235420A2 (en) | 2023-08-30 |
| KR102339095B1 (ko) | 2021-12-15 |
| US11972285B2 (en) | 2024-04-30 |
| EP3627330A1 (en) | 2020-03-25 |
| KR20200015721A (ko) | 2020-02-12 |
| EP3627330A4 (en) | 2020-10-21 |
| WO2019001434A1 (zh) | 2019-01-03 |
| EP3627330B1 (en) | 2023-04-26 |
| CN109144679B (zh) | 2022-03-29 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI705375B (zh) | 中斷請求的處理方法、裝置、虛擬化設備及可讀存儲介質 | |
| US10846145B2 (en) | Enabling live migration of virtual machines with passthrough PCI devices | |
| CN114816664B (zh) | Gpu虚拟化 | |
| AU2008302393B2 (en) | Reducing the latency of virtual interrupt delivery in virtual machines | |
| JP5042848B2 (ja) | 仮想マシン・モニタの構成部分を特権化解除するためのシステム及び方法 | |
| US10176007B2 (en) | Guest code emulation by virtual machine function | |
| US20160085568A1 (en) | Hybrid virtualization method for interrupt controller in nested virtualization environment | |
| US10409633B2 (en) | Hypervisor-visible guest thread management | |
| US8635615B2 (en) | Apparatus and method for managing hypercalls in a hypervisor and the hypervisor thereof | |
| US10162657B2 (en) | Device and method for address translation setting in nested virtualization environment | |
| NO340567B1 (no) | Hierarkisk virtualisering med en flernivå virtualiseringsmekanisme | |
| Rossier | EmbeddedXEN: A Revisited Architecture of the XEN hypervisor to support ARM-based embedded virtualization | |
| WO2015088374A1 (en) | Systems and methods for cross-architecture container virtualization | |
| US11176053B2 (en) | Routing traffic of a logical unit to multiple backend data objects based on metadata mapping | |
| CN106250217A (zh) | 一种多虚拟处理器间的同步调度方法及其调度系统 | |
| US20180321963A1 (en) | Safe execution of virtual machine callbacks in a hypervisor | |
| US20200073826A1 (en) | Efficient userspace driver isolation by cpu page table switching | |
| US9038075B2 (en) | Batch execution of system calls in an operating system | |
| US11748136B2 (en) | Event notification support for nested virtual machines | |
| JP5584811B2 (ja) | 仮想計算機の制御方法、仮想化プログラム及び仮想計算機システム | |
| US8424013B1 (en) | Methods and systems for handling interrupts across software instances and context switching between instances having interrupt service routine registered to handle the interrupt | |
| WO2026007725A1 (zh) | 数据处理方法及系统、计算设备、计算机可读存储介质、计算机程序产品 | |
| Crutcher et al. | Operating System |