本發(fā)明涉及網絡虛擬化領域,尤其涉及一種基于numa和硬件輔助技術的高效網絡io處理方法。
背景技術:
在當前云計算基礎設施架構下,集成在虛擬機中的虛擬網絡功能的處理效率對于高效網絡i/o處理的效率至關重要,現有的dma技術和零拷貝內存共享機制大大消除了網絡i/o數據流層面的負載,目前的主要性能瓶頸集中在網絡i/o控制流層面。numa(non-uniformmemoryaccessarchitecture)架構是一種較為成熟的多核處理器架構解決方案,它將多核服務器硬件資源分為多個節(jié)點(node),每個節(jié)點擁有自己的處理器及內存資源,其中處理器訪問同一結點的內存速度比訪問不同節(jié)點內存的速度快。中斷作為numa系統(tǒng)中事件控制機制的重要組成部分,其處理效率也成為了業(yè)界研究的重要熱點。
目前最新的中斷觸發(fā)機制是高效的msi(messagesignaledinterrupt)和它的擴展msi-x機制,中斷請求由i/o設備使用預先分配好的msi地址和msi數據通過一個特定的寫操作產生。每個物理cpu維護著一個本地高級可編程中斷控制器(advancedprogrammableinterruptcontroller)用來將中斷遞交至本cpu進行處理。在lapic內部包括中斷請求寄存器(interruptrequestregister),服務中寄存器(interruptserviceregister)和中斷完成寄存器(endofinterrupt)。intelvt-x處理器硬件技術增加了虛擬機管理軟件所處的根(vmxroot)模式和虛擬機操作系統(tǒng)所處的非根(vmxnon-root)模式。考慮到虛擬機管理軟件對資源的抽象和隔離,多個虛擬cpu可以分時復用一個物理cpu,在xapic模式下虛擬機管理軟件為各個物理apic寄存器維護一個apic-access頁并由各個虛擬cpu分時共享,這就導致了虛擬cpu對該頁的訪問會不可避免的造成“陷入-模擬”的vm-exit操作。
sriov設備和半虛擬化設備產生的msi/msi-x中斷需要先被虛擬機管理軟件截獲并轉換成虛擬中斷,然后注入到虛擬機中才能被處理,這一過程虛擬機會發(fā)生一次耗時的vmexit,虛擬機管理軟件通過修改為該虛擬機維護的vmcs數據結構并在下次vmentry時將虛擬中斷注入到該虛擬機中。當虛擬機處理完虛擬中斷時,虛擬機需要一次對eoi(endofinterrupt)寄存器的寫操作通知虛擬機管理軟件,該特權操作會引起第二次vmexit。值得注意的是,每次vmexit涉及的控制流的轉移都會帶來巨大的上下文切換開銷,從而造成中斷處理效率的下降和網絡延遲的增加。
為了消除vmexit帶來的性能開銷,intelapicv硬件技術和posted-interrupt機制通過對apic寄存器的虛擬化,允許在虛擬機運行時修改為其維護的模擬apic寄存器。通過在每個虛擬cpu的vmcs數據結構中加入虛擬apic頁(virtual-apicpage)和遞交中斷描述符(posted-interruptdescriptor),虛擬中斷到來時,硬件根據中斷向量直接修改遞交中斷描述符中的對應位,然后由虛擬機管理軟件所在的物理cpu向虛擬中斷目的虛擬cpu所在的物理cpu發(fā)出一個特殊的通知中斷,最后目的物理cpu接到通知,取出遞交中斷描述符中所記錄的中斷進行處理。intelapicv允許虛擬中斷直接遞交至虛擬機而無需引起頻繁的vm-exit,對于高性能網絡i/o處理效率有著顯著提升。然而,intelapicv技術在硬件層面遞交中斷時并沒有考慮當前服務器的底層numa架構以及網卡,虛擬機管理軟件所在的cpu和中斷目的cpu的numa親和性,并且原生的linuxcfs調度器只保證各個虛擬cpu的負載均衡,與posted-interrupt中斷遞交機制沒有統(tǒng)一的相互配合的機制,這就造成posted-interrupt機制在多核服務器中的通知中斷有以下兩種情況的發(fā)生:
1、當虛擬機管理軟件所在的cpu與虛擬機所在的cpu不在同一numa結點時,通知中斷非常耗時;
2、中斷信息被寫入目的虛擬cpu的遞交中斷描述符并且通知中斷發(fā)出后,虛擬cpu被cfs調度器調離或調度至另外的物理cpu上,中斷信息會被延遲處理。
并且上述兩種情況會互相影響,即通知中斷所涉及的兩個cpu的numa“距離”越遠,親和性越差,虛擬cpu越有可能被調度器調離。所以這種對于底層numa架構和虛擬cpu的運行狀態(tài)的不可知性,制約了intelapicv硬件技術的對網絡i/o處理效率的提升。
因此,本領域的技術人員致力于開發(fā)一種基于numa和硬件輔助技術的高效網絡i/o處理方法,針對現有的intelapicv硬件技術和posted-interrupt機制對于當前服務器的底層numa架構的不可知性,結合對虛擬cpu運行信息與調度信息的分析,優(yōu)化intelapicv硬件技術和posted-interrupt機制將中斷遞交至與處理物理中斷的cpu和網卡親和性最好的虛擬cpu上,同時考慮各個虛擬cpu的中斷處理負載均衡,有效的降低了從中斷產生到被虛擬機處理之間的延時,提高虛擬化環(huán)境下的i/o處理效率。
技術實現要素:
有鑒于現有技術的上述缺陷,本發(fā)明所要解決的技術問題是開發(fā)一種基于numa和硬件輔助技術的高效網絡i/o處理方法,針對現有的intelapicv硬件技術和posted-interrupt機制對于當前服務器的底層numa架構的不可知性,結合對虛擬cpu運行信息與調度信息的分析,優(yōu)化intelapicv硬件技術和posted-interrupt機制將中斷遞交至與處理物理中斷的cpu和網卡親和性最好的虛擬cpu上,同時考慮各個虛擬cpu的中斷處理負載均衡,有效的降低了從中斷產生到被虛擬機處理之間的延時,提高虛擬化環(huán)境下的i/o處理效率。
為實現上述目的,本發(fā)明提供了一種基于numa和硬件輔助技術的高效網絡i/o處理方法,包括以下步驟:
步驟1、中斷計數器統(tǒng)計各個虛擬cpu的中斷數量;
步驟2、當虛擬cpu的中斷數量超過設定的閾值時,中斷調節(jié)器分析當前服務器底層numa架構、中斷數量超過設定的閾值的虛擬cpu、處理物理中斷的cpu以及網卡所在的numa結點親和性,將中斷數量超過設定的閾值的虛擬cpu調度至處理物理中斷的cpu和網卡的numa親和性最優(yōu)的物理cpu上;如果選中的物理cpu利用率超過設定的閾值,則選擇在次優(yōu)的物理cpu上運行;
步驟3、當sriov直接分配設備或半虛擬化設備產生一個目的地址為步驟2中的虛擬cpu的中斷后,中斷首先被虛擬機管理軟件截獲并轉換成虛擬中斷,然后通過硬件直接修改中斷目的虛擬cpu的pid結構對應位將中斷遞交至中斷目的虛擬cpu;
步驟4、處理物理中斷的cpu使用特定的中斷向量向中斷目的虛擬cpu所在的物理cpu發(fā)出通知中斷,告知中斷的到來;
步驟5、中斷目的虛擬cpu所在的物理cpu收到通知并從中斷目的虛擬cpu的pid結構里取出中斷信息進行處理。
進一步地,虛擬機管理軟件被設置為虛擬機維護一系列的模擬設備,其中,模擬設備的前端運行在虛擬機內部,模擬設備的后端運行在虛擬機管理軟件中,模擬設備的后端通過虛擬網橋與真實的物理設備通信。
進一步地,虛擬機包括收取數據包,收取數據包的流程為:虛擬機管理軟件從物理網卡接收到新的數據包,虛擬網橋對數據包進行劃分,從而識別出數據包所屬的虛擬機,然后轉發(fā)至虛擬機的模擬設備的前端與模擬設備后端的共享內存中,觸發(fā)中斷通知前端設備處理數據包。
進一步地,sriov被設置為繞過虛擬機管理軟件直接發(fā)送和接收數。
進一步地,sriov設備包括1個物理設備和多個虛擬設備,虛擬設備直接分配給一個虛擬機進行數據包的收發(fā)功能。
技術效果
(1)基于最新的硬件輔助技術,將虛擬中斷信息由硬件直接遞交至各個虛擬cpu的虛擬apic頁中,再由虛擬機管理軟件所在的物理cpu利用特殊的中斷向量號向中斷目的虛擬cpu所在的物理cpu發(fā)送通知中斷,減少了傳統(tǒng)中斷處理過程中頻繁的vm-exit操作,大大降低中斷遞交延時;
(2)對intelapicv硬件技術和posted-interrupt機制在多核服務器中的中斷處理效率進行優(yōu)化,結合服務器的底層numa架構,改進posted-interrupt機制將中斷遞交至與網卡和虛擬機管理軟件所在物理cpu的numa親和性最優(yōu)的cpu上,提高了多核服務器中的網絡i/o處理性能;
(3)由于本發(fā)明的方案只需要修改虛擬cpu調度器和虛擬機管理軟件中的intelapicv模塊,對虛擬機完全透明,無需虛擬機作出任何修改。
以下將結合附圖對本發(fā)明的構思、具體結構及產生的技術效果作進一步說明,以充分地了解本發(fā)明的目的、特征和效果。
附圖說明
圖1是本發(fā)明基于的半虛擬化i/o架構圖。
圖2是本發(fā)明基于的sriov體系結構圖。
圖3是本發(fā)明的一個較佳實施例的一種基于numa和硬件輔助技術的高效網絡i/o處理方法的中斷處理流程示意圖。
具體實施方式
如圖1所示,虛擬機軟件為各個虛擬機維護一系列的模擬設備,其中設備前端運行在虛擬機內部,設備后端運行在虛擬機管理軟件中。設備后端通過虛擬網橋與真是的物理設備通信,圖中的箭頭方向為虛擬機收取數據包的流程,虛擬機管理軟件從物理網卡接收到新的數據包,由虛擬網橋對數據包進行劃分,從而識別出數據包所屬的虛擬機,然后轉發(fā)至虛擬機的后端設備與前端設備的共享內存中,然后觸發(fā)中斷通知前端設備處理數據包,由于虛擬機后端驅動運行在與虛擬機不同的cpu上,這一通知中斷往往是處理期間中斷(inter-processorinterrupt);
如圖2所示,是sriov體系結構。sriov是一種直接i/o技術,繞過虛擬機管理軟件直接發(fā)送和接收數據。另外,sriov依賴iommu(i/o內存管理單元)完成高效的地址轉換和安全的數據隔離。一個sriov設備包括一個pf(物理設備)和多個vf(虛擬設備),每個vf可以直接分配給一個虛擬機進行數據包的收發(fā)功能。為了使vf正常運作,虛擬機管理軟件和虛擬機必須分別安裝pf驅動和vf驅動。
如圖3所示,本發(fā)明提供了一種基于numa和硬件輔助技術的高效網絡i/o處理方法,包括以下步驟:
步驟1、中斷計數器統(tǒng)計各個虛擬cpu的中斷數量;
步驟2、當虛擬cpu的中斷數量超過設定的閾值時,中斷調節(jié)器分析當前服務器底層numa架構、中斷數量超過設定的閾值的虛擬cpu、處理物理中斷的cpu以及網卡所在的numa結點親和性,將中斷數量超過設定的閾值的虛擬cpu調度至處理物理中斷的cpu和網卡的numa親和性最優(yōu)的物理cpu上;如果選中的物理cpu利用率超過設定的閾值,則選擇在次優(yōu)的物理cpu上運行;
步驟3、當sriov直接分配設備或半虛擬化設備產生一個目的地址為步驟2中的虛擬cpu的中斷后,中斷首先被虛擬機管理軟件截獲并轉換成虛擬中斷,然后通過硬件直接修改中斷目的虛擬cpu的pid結構對應位將中斷遞交至中斷目的虛擬cpu;
步驟4、處理物理中斷的cpu使用特定的中斷向量向中斷目的虛擬cpu所在的物理cpu發(fā)出通知中斷,告知中斷的到來;
步驟5、中斷目的虛擬cpu所在的物理cpu收到通知并從中斷目的虛擬cpu的pid結構里取出中斷信息進行處理。
與現有的intelapicv硬件技術和posted-interrupt機制相比,本發(fā)明的一較佳實施例的中斷處理過程中,充分考慮了多核服務器的numa架構,結合中斷目的cpu,處理物理中斷的cpu,以及網卡的numa(non-uniformmemoryaccessarchitecture)結點親和性,優(yōu)化posted-interrupt機制,消除其通知中斷中的上述兩個問題,并在硬件層面與虛擬機之間增加了中斷計數器和終端處理器。
現有的intelapicv硬件技術和posted-interrupt機制的中斷處理流程大致是為了消除各個虛擬cpu共享物理apic寄存器帶來的vmexit的開銷,intelapicv技術在硬件層面為每個虛擬cpu維護了一個虛擬apic頁和中斷遞交描述符,當sriov直接分配設備或者半虛擬設備通過msi/msi-x機制產生一個物理中斷后,由硬件根據該中斷的中斷向量號將其遞交至目的虛擬cpu的中斷遞交描述符(pid)上,同時由虛擬機管理軟件向目的虛擬cpu所在的物理cpu發(fā)出一個特殊的事件通知,最后虛擬機從虛擬apic頁中取出中斷信息并處理。
本發(fā)明的一種基于numa和硬件輔助技術的高效網絡i/o處理方法在虛擬化環(huán)境下,當sriov(single-rooti/ovirtualization)直接分配設備或半虛擬化設備產生一個物理中斷后,通過分析處理物理中斷的cpu,中斷目的cpu以及底層網卡所在的numa(non-uniformmemoryaccessarchitecture)結點親和性,結合虛擬cpu的運行信息,對intelapicv硬件技術和posted-interrupt機制在多核服務器上的中斷處理效率進行優(yōu)化,在充分減少vm-exit引起的上下文切換負載的情況下,有效消除從中斷產生到被虛擬機處理之間的所有遞交延時和調用延時,使得虛擬機的i/o響應速率得到很大提高,極大優(yōu)化數據中心網絡的數據包處理效率。
以上詳細描述了本發(fā)明的較佳具體實施例。應當理解,本領域的普通技術人員無需創(chuàng)造性勞動就可以根據本發(fā)明的構思作出諸多修改和變化。因此,凡本技術領域中技術人員依本發(fā)明的構思在現有技術的基礎上通過邏輯分析、推理或者有限的實驗可以得到的技術方案,皆應在由權利要求書所確定的保護范圍內。