TW201432461A - 在受控代碼中實現的高流通量低延遲使用者模式驅動程式 - Google Patents
在受控代碼中實現的高流通量低延遲使用者模式驅動程式 Download PDFInfo
- Publication number
- TW201432461A TW201432461A TW102148742A TW102148742A TW201432461A TW 201432461 A TW201432461 A TW 201432461A TW 102148742 A TW102148742 A TW 102148742A TW 102148742 A TW102148742 A TW 102148742A TW 201432461 A TW201432461 A TW 201432461A
- Authority
- TW
- Taiwan
- Prior art keywords
- driver
- hardware
- user mode
- drivers
- interrupt
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Abstract
實現可支援高流通量及低延遲裝置的安全驅動程式。該方法包含從硬體裝置接收硬體訊息。該方法進一步包含將該硬體訊息傳遞至一或更多個驅動程式程序,該等驅動程式程序使用零複製執行於使用者模式中以允許該一或更多個驅動程式程序支援高流通量及低延遲硬體裝置。
Description
本發明有關於在受控代碼中實現的高流通量低延遲使用者模式驅動程式。
電腦及計算系統影響了現代生活的幾乎每個方面。電腦通常參與在工作、休閒、醫療、交通運輸、娛樂、家務管理等。
一般用途之計算系統可藉由使用被稱為裝置驅動程式的代碼以利用數個裝置。該等裝置驅動程式作為硬體或其他裝置至系統資源的介面連接方式,該等系統資源例如CPU暫存器、系統記憶體暫存器等。裝置驅動程式通常執行於核心模式,該核心模式為特權模式。具體而言,於核心模式中,驅動程式代碼可存取任何記憶體位址並控制任何系統階層的組件。因此,損壞或惡意的驅動程式可輕易地破壞該計算系統的完整性,導致故障或資料毀損。
因此,裝置驅動程式係不安全的。雖然物件導向設
計方法、語言型別安全及靜態代碼認證被用於先進平台(例如所謂的雲端)及開發環境中,裝置驅動程式仍使用不安全的語言(例如C/C++)開發,且存取係使用無型別、非物件導向且容易出錯的介面。多數的裝置驅動程式仍在核心模式中執行,而增加了單一軟體錯誤造成系統故障的可能性。進一步地,只要任何驅動程式係實現於使用者模式,該等驅動程式此時則不能夠使用於高流通量且低延遲的裝置中,因為在某些作業系統中,硬體中斷無法傳遞至使用者模式程序。於其他作業系統中,使用者模式驅動程式的效能係明顯地劣於核心模式驅動程式。
習知的高流通量低延遲驅動程式無法實現於使用者模式中,因為當資料轉移至裝置/從裝置轉移時,需要在使用者模式及核心模式之間切換。
茲請求的申請標的不受限於解決任何缺點或僅能作業於如上述之環境的實施例。反而,此背景僅供說明茲描述之某些實施例可實行的模範科技領域。
一個於此說明之實施例係針對實行於計算環境中的方法,該方法用以實現可支援高流通量及低延遲裝置的安全驅動程式。該方法包含從硬體裝置接收硬體訊息。該方法進一步包含將該硬體訊息傳遞至一或更多個驅動程式程序,該等驅動程式程序係執行於使用者模式中且使用零複製(zero-copy)以允許該一或更多個驅動程式程序支援高流通量及低延遲的硬體裝置。
此【發明內容】之提供係以簡化的形態介紹所選擇的概念,該等概念於以下【實施方式】中做進一步的描述。此【發明內容】並非意於辨識所請求的申請標的之關鍵特徵或必要特徵,亦非意於用以輔助決定所請求的該申請標的之範疇。
額外的特徵及優點將於以下描述中闡述,且部分將顯見於該描述中,或可由茲教示的實行以得知。本發明之特徵及優點可藉由附加的請求項中所具體指出的儀器及組合以實現及取得。本發明之特徵將於以下描述及附加的請求項中變得更加顯而易見,或可於下文所闡述之發明的實行以得知。
102‧‧‧硬體裝置
102-1‧‧‧裝置
104‧‧‧計算系統
106‧‧‧暫存器
108‧‧‧中央處理器(CPU)
110‧‧‧共享記憶體
112‧‧‧系統記憶體
114‧‧‧驅動程式
114-1‧‧‧子代驅動程式
115‧‧‧硬體介面層
115-1‧‧‧硬體裝置介面層
115-2‧‧‧硬體裝置介面層
115-n‧‧‧硬體裝置介面層
116‧‧‧機器可讀取硬體規格
118‧‧‧代碼產生工具
120‧‧‧硬體-軟體介面處理器
122‧‧‧實體記憶體
202-1‧‧‧裝置
202-2‧‧‧裝置
204‧‧‧集合
204-1‧‧‧子集合
204-2‧‧‧子集合
204-n‧‧‧子集合
204-1-1 204-1‧‧‧集合之子集合
204-1-2 204-1‧‧‧集合之子集合
206‧‧‧記憶體映射暫存器
208‧‧‧I/O端口
210‧‧‧DMA緩衝器
212‧‧‧核心
214‧‧‧根匯流排驅動程式
214-1‧‧‧匯流排
214-2‧‧‧匯流排
214-n‧‧‧匯流排
302‧‧‧匯流排驅動程式
304‧‧‧程式庫
306‧‧‧隨插即用管理器程式庫
308-1‧‧‧匯流排訊槽
310-1‧‧‧匯流排訊槽介面
402‧‧‧使用者模式
404‧‧‧核心模式
406‧‧‧微核心
408-1‧‧‧領域
410-1-1‧‧‧程序
412-1-1‧‧‧執行期
414-1‧‧‧領域核心
416-1‧‧‧I/O中斷管理器
418‧‧‧中斷請求(IRQ)
500‧‧‧方法
502‧‧‧動作
504‧‧‧動作
506‧‧‧動作
600‧‧‧方法
602‧‧‧動作
604‧‧‧動作
606‧‧‧動作
700‧‧‧方法
702‧‧‧動作
704‧‧‧動作
為了描述以上陳述之優點及特徵以及其他優點及特徵能被取得之方法,以上簡要描述的申請標的之更具體描述將參考特定實施例以呈現,該等實施例繪示於附加的圖式中。應理解到,該等圖式僅描繪典型實施例,且因此不應被認為係限制範疇,實施例將透過利用附隨的圖式,以額外的明確性及細節被描述及解釋,其中:第1圖繪示裝置硬體及自動裝置硬體抽象層介面之產生;第2圖繪示分層驅動程式之產生;第3圖繪示匯流排驅動程式架構;第4圖繪示驅動程式中斷及裝置溝通;第5圖繪示自動產生代碼給裝置驅動程式的方法;第6圖繪示於硬體驅動程式上強制執行限制的方
法;及第7圖繪示實現可支援高流通量及低延遲之裝置的安全驅動程式之方法。
茲揭示的實施例可包含數個技術,該等技術促成所有裝置型別之高效能使用者模式及型別安全驅動程式之開發。該等驅動程式所提供的效能近似於存在於其他作業系統中的傳統核心模式裝置驅動程式之效能。
某些實施例可實現自動產生的裝置驅動程式硬體抽象層。如第1圖所繪示,硬體裝置102與計算系統104的介面連接係利用中央處理器(CPU)108中的暫存器106及系統記憶體112中的共享記憶體110達成。該硬體裝置通常係以靜態的方式建立,以與暫存器106之集合中的特定暫存器以及與特定記憶體互動介面連接。為了確保系統104及暫存器106及共享記憶體110能與硬體裝置102正確地介面連接,驅動程式114被使用以提供從系統硬體至裝置硬體的映射以及從裝置硬體至系統硬體的映射。驅動程式114通常係由利用製造者提供的本文規格以人為開發。
硬體製造者通常以自由形態硬體規格描述該硬體。驅動程式開發者使用該等規格以開發硬體存取層。正如所述,此層使得驅動程式能與裝置暫存器及共享記憶體互動,例如藉由利用直接記憶體存取(direct memory access,DMA)互動。開發此層係乏味且容易出錯的,因為該開發係依賴該規格的品質及開發者的經驗。大多數的情況中此層係依賴於作
業系統且不可被其他平台使用。
於此的某些實施例藉由實現硬體抽象機制以簡化驅動程式的開發,該硬體抽象機制將硬體存取層規格從該硬體存取層規格的實現中分離。機器可讀取硬體規格116可由裝置供應者提供。該機器可讀取硬體規格係由代碼產生工具118處理。代碼產生工具118具有作業系統內文以用於一或更多個不同的作業系統,也因此可藉由處理該機器可讀取硬體規格116,自動地建立硬體裝置介面層。因此,該機器可讀取硬體規格116可被重新用以建立硬體裝置介面層115-1、115-2至115-n給多個不同的作業系統,並使用各種不同的程式語言。此方案大幅地簡化了驅動程式的開發,且減少不正確的硬體存取所造成的錯誤量。機器可讀取硬體規格116可由簡單的語言撰寫,例如C#,且可透過檢查以簡單地驗證。
因此,開發者或硬體製造者可利用硬體-軟體介面語言以描述裝置102硬體暫存器及共享記憶體結構(在主機記憶體中)。為了此目的,該開發者參考本文硬體描述。應注意到,硬體工程師或該硬體供應者也可提供該機器可讀取硬體規格116的該硬體-軟體介面描述。具體而言,驅動程式開發者不需要參與硬體描述階段以利用硬體-軟體介面語言定義機器可讀取硬體規格116。在第二階段中,該硬體描述被代碼產生工具118處理,該代碼產生工具包含硬體-軟體介面處理器120。
硬體-軟體介面處理器120可產生各種軟體驅動程式模組,如以下所述。
硬體-軟體介面處理器120可產生硬體存取方法用以
讀取/寫入暫存器並解譯該等暫存器的欄位。舉例而言,基於機器可讀取硬體規格116,代碼產生工具118可決定暫存器106集合中哪些暫存器被用以與硬體裝置102溝通。方法可被產生以存取該等暫存器,且該等方法可被用以提供軟體介面給應用程式,該應用程式係希望控制硬體裝置102以指示各個暫存器之目的以及各個暫存器中的資料之解譯。
硬體-軟體介面處理器120可產生方法用以讀取/寫入共享結構欄位。舉例而言,基於機器可讀取硬體規格116,代碼產生工具118可在驅動程式軟體模組中辨識部分的共享記憶體110,該等部分的共享記憶體將被硬體裝置102使用。此舉允許了軟體應用程式使用驅動程式114以能夠與硬體裝置102所使用的部分共享記憶體110溝通。
硬體-軟體介面處理器120可產生記憶體分配器給硬體介面實體,該等硬體介面實體係在該硬體-軟體介面描述中表達。舉例而言,基於機器可讀取硬體規格116,代碼產生工具118知道哪些硬體介面被包含在硬體裝置102中。硬體介面層115可因此被自動產生以包含記憶體分配器以分配系統記憶體112中的記憶體,供硬體介面之用。
硬體-軟體介面處理器120可產生解譯並追蹤硬體介面實體的記錄模組。舉例而言,基於機器可讀取硬體規格116及硬體裝置102的硬體介面之知識,代碼產生工具118可自動產生硬體介面層115以包含模組,該等模組能夠使用該等硬體介面以收集並記錄資料,該資料記錄硬體裝置102的硬體動作。
硬體-軟體介面處理器120可產生偵錯擴充以可視化硬體介面實體。舉例而言,基於機器可讀取硬體規格116及硬體裝置102的硬體介面之知識,代碼產生工具118可自動產生硬體介面層115以包含模組,該等模組能夠使用該等硬體介面以收集並記錄資料(該資料記錄硬體裝置102之硬體動作),該等記錄資料可用於偵錯之目的。
以下說明USB EHCI控制器之能力暫存器的硬體-軟體介面樣本描述。
正如所述,該圖表顯示USB EHCI控制暫存器的樣本描述。所呈現的該暫存器係能力暫存器(capability register)。各個暫存器位於相對於該裝置記憶體之基底位址的某個偏移位址。在此範例中,該能力暫存器係位於偏移位址0xC,如「MemoryMappedRegister」屬性所指定,該屬性係硬體-軟體語法的一部分。一旦暫存器的基底位址被設定,硬體-軟體介面提供數個屬性以呈現該等不同的暫存器欄位。於此範例中,該「DataField」屬性係用於代表屬於該能力暫存器一部分的暫存器。舉例而言,HCSPARAMS為暫存器,該暫存器位於與該能力暫存器之基底位址距離0x4的偏移位址(如所述的在0xC)。各個資料欄位係由該硬體-軟體介面語法以遞迴註釋(如以下所述)。
以下說明HCCPARAMS暫存器欄位之硬體-軟體介面的描述。
此圖表顯示該HCSPARAMS暫存器係如何註釋(該暫存器為以上呈現的該能力暫存器之一部分)。硬體-軟體介面「BitField」及「ReservedBits」屬性使得開發者能夠註釋該等暫存器位元。舉例而言,位元0於此暫存器表示該裝置是否支援64位址。該開發者使用「[(BitField(0)]public bool Bit64Addressing;」以呈現該需求。該產生的代碼將使得該開發者能夠以布林(Boolean)存取該「Bit64Addressing」以查詢該數值。
以下顯示用以取得/設定HCCPARAMS欄位數值的該產生之代碼。
該產生的代碼使用作業系統特定的介面,且代碼可輕易地為其他作業系統而產生。
以下說明該產生之代碼係如何被裝置驅動程式代碼使用。
一旦該暫存器被該下層的記憶體區塊初始化後,暫存器可被輕易地讀取、操作及寫入回該裝置。
於以上所說明之該等範例中,該產生的代碼可被任何作業系統使用,且不受限於特定之供應者。附加地或替代地,該產生的代碼可以係任何開發語言,例如C#、Java、C、C++等。
正如所述,通用硬體-軟體介面語言被用以在機器可讀取硬體規格中描述該等硬體暫存器及主機記憶體資料結構(可透過DMA存取)。代碼產生器作業於該硬體-軟體介面描述。該硬體-軟體介面描述可由該硬體供應者提供、驗證及維持。硬體供應者可直接從硬體設計產生該機器可讀取硬體規格,從而消除任何人為錯誤之可能性。此舉將人為介入從軟體/硬體介面設計及實現路徑中減少或消除、減少開發時間,並提供一致性及更佳的除錯經驗。
某些實施例實現基於能力的驅動程式模型,該等驅動程式模型具備資源硬化。具體而言,大多數的驅動程式114與實際硬體介面連接。為了達成這點,驅動程式114將位於裝置102的部分實體記憶體122映射至計算系統104的虛擬
位址空間,或使用稱為I/O空間的專用位址空間。先前所說明的該等技術被實現以協助確保驅動程式代碼正確地使用該映射記憶體(或I/O端口)以存取裝置102。於許多常見的作業系統中,裝置驅動程式114可透過錯誤或惡意自由地嘗試映射及使用系統記憶體112中的任何實體位址。由於該驅動程式軟體的特權性質,該作業系統通常無法確保驅動程式114不會分配到不屬於該驅動程式的端口、中斷或其他介面,或者不是該驅動程式正常運作以控制特定硬體裝置102所需要。舉例而言,鍵盤驅動程式通常應能夠存取IRQ1,但不需要存取端口80。透過存取端口80,惡意的鍵盤驅動程式可實現按鍵記錄的功能性,該功能性包含將擊鍵經過網路傳送至竊盜網站。此舉可能危害系統安全。
於此之實施例可在受控代碼中實現驅動程式及系統程序,例如C#或Java。受控代碼為電腦程式原始碼,該受控代碼僅能在沙盒虛擬機器(sandbox virtual machine)的管理之下執行。因此,如此所實現的任何驅動程式或系統程序包括封閉的物件空間。裝置記憶體及暫存器僅能透過專用的受控物件存取,該專用的受控物件係該驅動程式初始化時提供給該驅動程式的。因此,該驅動程式將僅能存取該驅動程式正常運作以控制裝置所需要的系統資源及I/O程序。
現將參照第2圖,某些實施例實現所有I/O資源之集合204(例如記憶體映射暫存器206、I/O端口208及DMA緩衝器210)為能力的方法。該等能力係核心212所專有的,且於啟動時該等能力被分派到該系統的根匯流排驅動程式
214。該系統的根匯流排驅動程式214可分配所有I/O資源集合204之子集合204-1、204-2至204-n給其他系統匯流排214-1、214-2至214-n。子集合204-1至204-n分派的方式係使匯流排214-1至214-n僅被分派到該等匯流排所需要用於特定裝置的資源,該等特定裝置係附加至該等匯流排。
當匯流排驅動程式214-1至214-n列舉該等匯流排驅動程式的裝置時,該等匯流排驅動程式將I/O資源之集合分派至各個子代。舉例而言,匯流排214-1具有裝置202-1及202-1附加於其上。匯流排214-1可分派I/O資源之集合204-1-1至裝置202-1及分派資源之集合204-1-2至裝置202-2,其中集合204-1-1及204-1-2係集合204-1的子集合。匯流排僅能將分派給該匯流排的I/O資源進行分派。此方法提供了分層I/O資源分配手段,該分配手段可用以保證驅動程式僅能將分配給該驅動程式的資源進行使用或傳輸。此舉可大幅地改善系統可靠度,並允許該作業系統於任何時間輕易地追蹤及收回任何I/O資源。當驅動程式終止或離開時,該驅動程式的資源可輕易地被上代匯流排驅動程式取回。透過輸入/輸出記憶體管理單元(input/output memory management unit,IOMMU)硬體,此手段可於硬體階層強制執行。舉例而言,藉由非法記憶體位址嘗試將裝置編程的驅動程式開發者將無法危害該系統的安全。
第3圖說明典型匯流排驅動程式302的架構。匯流排驅動程式302(於此範例中係PCI匯流排驅動程式)係與使用者階層的程式庫連結,該程式庫提供所有的驅動程式服務(例
如在此範例中可從華盛頓州雷德蒙德微軟公司(Microsoft Corporation of Redmond Washington)取得的DriverFramework程式庫)。該驅動程式亦與隨插即用(plug and play)的管理器程式庫306連結,該管理器程式庫使得匯流排驅動程式302能夠列舉該匯流排驅動程式的子代裝置。對於各個列舉之裝置,該架構創造了稱為匯流排訊槽(例如範例匯流排訊槽308-1)的抽象(abstraction),該匯流排訊槽持有被分派之裝置的資源。各個匯流排驅動程式匯出多個匯流排訊槽介面,例如範例匯流排訊槽介面310-1(表示為IBusSlot介面),該等匯流排訊槽介面於執行期(runtime)附加至該等子代驅動程式(以範例114-1繪示)。除了該列舉裝置驅動程式外,沒有其他服務或程序能將自己附加至該匯流排訊槽介面。該匯流排訊槽介面被子代裝置驅動程式用以將分派給該等子代裝置驅動程式的I/O資源分配至裝置,如範例裝置102-1所繪示。驅動程式僅能分配在該上代驅動程式的該匯流排訊槽上所指定的I/O資源。
此機制可輕易地被實現及分發,某種意義上係因為I/O資源管理係於各個匯流排驅動程式區域(locally)執行,而並非於核心或單一系統服務中執行。
除了被當作能力的I/O資源之外,實施例可實現能夠控制各種服務之連接的作業系統。由於驅動程式被當作服務,實施例可控制驅動程式能夠使用/與之互動的服務之集合。舉例而言,不同於其他作業系統,某些實施例中,驅動程式無法傳送訊息至另一個驅動程式,這係由於該驅動程式
不具有這樣做的能力(亦即傳送訊息至該服務的介面)。某些實施例的作業系統係能夠約束、控制、觀察及理論關於驅動程式至其他該系統中之組成的連接。基於能力的模型與受控代碼之使用的組合提供了各種優點,如茲說明。
參照第4圖,繪示特別的結構。於所繪示的範例中,繪示使用者模式402(例如,x86結構之權限環中最低權限的權限環Ring 3)及核心模式404。微核心406被實現於核心模式404(有時稱為監督者模式,supervisor mode)。微核心406係提供機制的最少量軟體,該等機制例如低階層位址空間管理、執行緒管理及IPC通訊。微核心406負責讀取基本硬體表格。
使用者模式402中,位址空間被分割為領域(domain),例如範例,領域408-1(但於此通稱為408)。該領域執行各種程序(例如範例程序410-1-1,但通稱為410),該等程序包含一或更多個執行期(例如範例執行期412-1-1)上的驅動程式程序。實施例可實現於驅動程式為使用者模式402受控程序410之處(例如以受控代碼編碼該等驅動程式,該等受控代碼例如C#或Java),該等使用者模式受控程序可支援高流通量及低延遲之裝置。某些實施例中,包含裝置驅動程式的所有服務係使用受控代碼程式庫開發且係執行於使用者模式402中。此外,程序410與微核心406之間的隔離可進一步地透過該語言的靜態認證型別安全而達到。此機制使得經過程序內部溝通(inter-process communication,IPC)通道的資料交換能夠不經複製,這係因為所有程序常駐於單一位址空間或領域408。這樣的方法在非基於型別安全語言的習知系統中係
難以使得安全的。
利用受控代碼實現使用者模式驅動程式可大幅地增加系統安全並簡化驅動程式的開發。具體而言,該開發者可利用任何可從該系統取得的使用者模式程式庫(包含可延伸標示語言剖析器(XML parsers)、佇列管理等)。習知作業系統中,驅動程式必須與該核心分享該等驅動程式的位址空間,因此驅動程式開發者由於記憶體的限制及其他限制而無法使用任何存在的程式庫。此外,開發者不再需要擔心記憶體管理。管理程序記憶體的廢料收集器同樣被用於驅動程式。不適當的記憶體管理係作業系統中最大的故障源頭之一。某些實施例中,系統驅動程式記憶體相關的錯誤可被消除。
某些範例實施例中,以一或更多個程序410實現的驅動程式係單一執行緒的。因此該開發者不需要擔心同步、執行緒及中斷階層。許多該驅動程式的複雜度消失了,且該開發者係專注於該驅動程式的功能性。
驅動程式可透過標準型別安全介面存取。一般的作業系統將驅動程式的存取限制於少數預定的函數,例如Open、Close、Read、Write及一般用途介面,該一般用途介面例如DeviceIoControl(稱為「ioctl」)。雖然在先前系統中,驅動程式控制了少數大眾已知的硬體組件且該等先前系統實行的工作係受限的,但這在現代系統中係不足夠的,現代系統中至少某些硬體裝置(例如硬體加速器,該硬體加速器例如圖形加速器)將廣闊而複雜的介面暴露至該硬體裝置的主機。某些實施例作業系統所提供的解決方案係將驅動程式當作第
一類公民(first class-citizens)。
以程序410實現的驅動程式係類似任何其他系統服務地透過型別安全介面以存取。這樣的實現利用語言型別安全特徵的優點並於編譯時間抓到錯誤的方法調用(method invocations)。為了提供編譯時間的型別檢查,該編譯器需要知道該編碼中變數或公式的資料型別資訊。介面提供了該介面用戶與該介面實現之間的合約(contract)。該方法簽章可於編譯時被靜態地檢查。不同型別參數的不匹配根本不能夠於執行中的系統發生。另外,該等錯誤係於編譯時間被該應用程式開發者抓出,且不需要驅動程式開發者於核心模式404之執行期檢查。
除了開發的安全及簡易之外,實施例使得裝置驅動程式能夠達到相近於一般核心模式裝置驅動程式的高流通量及低延遲。這可以透過實現零複製I/O路徑的能力而達成。「零複製」所指之事實係進入該系統的資料僅寫入記憶體一次,且該資料不需要複製地在作業系統及應用程式代碼兩者中可接著被許多抽象層直接使用。零複製I/O路徑係CPU不行使從一記憶體位置複製到另一記憶體位置者。反而,該CPU可執行其他工作。此舉可省去本文切換,該本文切換係使得該系統於使用者模式402及核心模式404之間切換以達到該複製。以下現將說明利用零複製I/O路徑以允許受控的使用者模式裝置驅動程式達到這樣效能之技術。
實施例可經配置以行使有效的中斷調度(interrupt dispatching)。有效地傳遞硬體中斷至使用者模式驅動程式之
能力係新穎的。中斷調度係由該作業系統之微核心、該領域核心及該等驅動程式之架構程式庫之間的緊密互動而執行。
調度中斷之機制係使用3階層結構,該3階層結構包含I/O中斷管理器、驅動程式架構程式庫及有效的微核心中斷處理。
如第4圖所繪示,各領域408包含領域核心,該領域核心之範例繪示於414-1(但於此通稱為414)。範例繪示於416-1(但於此通稱為416)的I/O中斷管理器係該領域核心414之一部分,且該I/O中斷管理器將硬體裝置102與裝置驅動程式程序410之間橋接。該I/O中斷管理器負責管理中斷請求(IRQs)418上的裝置驅動程式之暫存、調度中斷至驅動程式之程序410,及當IRQ被共享於多個裝置時處理中斷共享。相較於裝置驅動程式執行於核心的習知單體作業系統核心設計,由於所有的裝置驅動程式執行於程序中,實施例可對於驅動程式強制執行更強的隔離以及錯誤抑制。
該驅動程式架構程式庫負責在領域核心414上暫存中斷處理器以接收通知。當硬體中斷於領域核心414被接收時,將觸發該中斷處理器,且調用(invoke)預先暫存的驅動程式常式(routine)。調用該方法的負擔係非常低的,因為沒有涉及從使用者模式402到核心模式404的本文切換。
實施例實現了有效的微核心中斷處理。某些實施例中,微核心406係可中斷但不可取代的。當邏輯處理器執行於微核心406的本文時,該邏輯處理器可以接收中斷但不能阻擋或切換該邏輯處理器的本文。為了將中斷調度延遲最小
化,實施例限制了處理器在微核心406中能夠花費的時間量。某些實施例實現了用於系統呼叫的連續執行手段,該系統呼叫可能會使用比預定邊界還久的時間。該邊界及連續手段使得微核心406能夠以非常低的延遲傳遞中斷至領域核心414。所有的硬體中斷(訊息驅動中斷MSI、中斷請求IRQ及虛擬Virtual)被傳遞至使用者模式程式庫,該使用者模式程式庫係該驅動程式的一部分。中斷調度延遲的最小化可由某些實施例利用零複製I/O路徑達成。
現將說明一個說明性的零複製I/O路徑範例。再次參照第1圖,繪示系統記憶體112。程序410可分配部分的系統記憶體112。微核心406(見第4圖)可允許程序410分配該記憶體,但一旦該記憶體被分配到程序410,則程序410具有控制部分系統記憶體的能力。硬體驅動程式的範例中,硬體裝置102可寫入至該部分記憶體。驅動程式程序410則將此部分的記憶體標記為不可變的。不可變的記憶體係內文及/或位址無法被變更的記憶體。由於該部分記憶體係不可變的,因此沒有存取該部分記憶體的實際約束。因此,該系統不需要切換至核心模式以允許不同的程序讀取該記憶體。因此,驅動程式程序410可不要求內文切換而存取該部分記憶體,也因此可從該硬體裝置102取得資料,該硬體裝置快速且有效地寫入該部分記憶體,使得高效率及低延遲在驅動程式實現於使用者模式時仍可被達成。
該資料可在合適的方法中藉由提供該不可變的部分記憶體之不同的觀點而傳遞至不同的程序410。因此,指向該
不可變的部分記憶體之指標可被使用,且該不可變的部分記憶體中的資料之邏輯觀點可提供合適的資料,而不是將特定程序410所需之該部分資料複製。因此,從特定程序410之的角度而言,該資料顯得係被複製並以合適的格式提供,但實際上沒有資料複製的發生。
相似的功能性可被用於驅動程式程序410以傳送資料至硬體裝置102。具體而言,驅動程式程序410可寫入資料至部分的系統記憶體112。該部分可被同樣的驅動程式程序410或另一個驅動程式程序標記為不可變的。該記憶體接著可不需要系統切換至核心模式404而被硬體裝置102讀取。
某些實施例中,該不可變的部分記憶體可具有與其相關的計數器。每次程序存取該不可變之部分記憶體時,該計數器遞增。當該程序完成讀取該不可變之部分記憶體時,該計數器遞減。因此,當所有讀取該不可變之部分記憶體的程序完成該不可變之部分記憶體後,該計數器遞減至零,此舉允許該部分記憶體被釋放給其他記憶體作業。
另一項技術係關於將直接記憶體存取(DMA)通道用於裝置控制。通道係具有剛好兩個端點的雙向訊息管道,該等端點稱為通道端點。DMA通道為橋接應用程式與裝置驅動程式之間間隙的高效能機制,該機制透過DMA交換高流量的封包化資料。DMA通道係一種特別的標準程序內部溝通(inter-process communication,IPC)通道,主要不同點在於提供可讀取DMA作業及該通道中訊息的非同步汰除。IPC訊息有兩個部分,一個係強制性的以及另一個選擇性的。該強制部
分為複製到該通道訊槽內的線內資料,且該選擇部分包含傳輸經過(或共享於)該通道的處理。DMA通道在以下態樣中係獨特的:
●DMA通道完全地執行於使用者模式(驅動程式及程序存在的地方)。
●DMA通道提供背壓。沒有記憶體分配給傳送於應用程式與網路驅動程式之間的各個訊息。進一步地,資料可保留於該通道中直到該資料完全被消耗為止,且在該資料背後的該等訊息可繼續被處理。
●DMA通道包含零複製的支援。DMA可從環狀緩衝區(ring buffer)執行。
●DMA通道包含對任意控制訊息的支援。此舉允許了軟體分段卸載之類的最佳化。
以下探討現將參照數個可行使的方法及方法動作。雖然該等方法動作可由特定的順序探討或在流程圖中以特定的發生順序繪示,但除非特別聲明,或者因為動作在該動作行使之前係取決於另一個動作的完成而要求,否則並無要求特定的順序。
現將參照第5圖,繪示方法500。方法500可在計算環境中實行。方法500包含動作以自動產生用於裝置驅動程式的代碼,以與硬體介面連接。方法500包含接收硬體裝置的機器可讀取描述(動作502)。該機器可讀取描述包含至少一個硬體暫存器或該硬體裝置的共享記憶體結構。舉例而言,第1圖繪示硬體裝置102之機器可讀取描述116的範例。
方法500進一步包含決定該硬體裝置將使用的作業系統(動作504)。舉例而言,代碼產生工具118可存取,或可具有設定硬體介面層115被創造所針對的作業系統之資訊。
方法500進一步包含在代碼產生工具上處理該機器可讀取描述以自動產生代碼給硬體驅動程式,該硬體驅動程式係用於所決定的該作業系統之特定的硬體裝置(動作506)。舉例而言,第1圖繪示代碼產生工具118執行機器可讀取硬體規格116。
可產生各種驅動程式代碼的部分。舉例而言,方法500的某些實施例可被實行於產生代碼給硬體驅動程式係包括產生硬體存取方法之處,該硬體存取方法係用以讀取及寫入至暫存器及直譯(interpret)該等暫存器的欄位。替代地或附加地,方法500的實施例可被實行於產生代碼給硬體驅動程式係包括產生方法以讀取及寫入至共享結構欄位之處。替代地或附加地,方法500的實施例可被實行於產生代碼給硬體驅動程式係包括產生記憶體分配器給硬體介面實體之處,該等硬體介面實體係以該硬體裝置的該機器可讀取描述表示。替代地或附加地,方法500的實施例可被實行於產生代碼給硬體驅動程式係包括產生記錄模組之處,該等記錄模組直譯並追蹤硬體介面實體。替代地或附加地,方法500的實施例可被實行於可視化硬體介面實體的偵錯器擴充之處。
方法500的某些實施例可被實行於硬體裝置的機器可讀取描述係被硬體供應者提供之處。
方法500的某些實施例可被實行於為了該硬體驅動
程式而產生的代碼係以受控代碼產生之處。
現將參照第6圖,繪示方法600。方法600可實行於計算環境中。方法600包含動作以強制執行硬體驅動程式上的限制。方法600包含從系統核心分派I/O資源至系統的根匯流排(動作602)。舉例而言,第2圖繪示藉由分派資源至匯流排驅動程式214以將I/O資源分派至系統的根匯流排。
從該根匯流排,方法600包含分派該等I/O資源之子集合至裝置匯流排(動作604)。分派該等I/O資源的子集合至裝置匯流排包含限制該裝置匯流排,使得該裝置匯流排僅能夠將該根匯流排分派給該裝置匯流排的I/O資源進行分派。舉例而言,第2圖中,裝置匯流排214-1至214-n具有分派給該等裝置匯流排的資源。各個該等裝置匯流排僅能夠進一步將分派給該等裝置匯流排的資源進行分配。
方法600進一步包含透過裝置介面,從該裝置匯流排分派I/O資源至裝置(動作606)。
方法600的某些實施例可被實現於限制該裝置匯流排係以受控代碼實現匯流排驅動程式而達成之處,該限制係使該裝置匯流排僅能將該根匯流排分派給該裝置匯流排的資源進行分派。
方法600可被實行於分派該I/O資源之子集合至裝置匯流排包括調用(invoke)以受控代碼實現的匯流排驅動程式之處。
方法600可被實現於分派該I/O資源至裝置包括調用以受控代碼實現的裝置驅動程式之處。
方法600可進一步包含防止其他服務及程序將自己附加至該裝置介面上。
現將參照第7圖,繪示方法700。方法700可被實行於計算環境。方法700包含動作以實現型別安全驅動程式,該型別安全驅動程式可支援高流通量及低延遲之裝置。方法700包含從硬體裝置接收資料(動作702)。方法700進一步包含傳遞該資料至一或更多個驅動程式程序,該等驅動程式程序係在使用者模式中利用零複製執行,以允許一或更多個驅動程式程序支援高流通量及低延遲硬體裝置(動作704)。
方法700可實行於傳遞該資料之行使係沒有先佔(pre-empting)該核心模式之處。替代地或附加地,方法700可進一步包含限制處理器在核心模式中所花的時間量。替代地或附加地,方法700可實行於該驅動程式程序係以受控代碼實現之處。替代地或附加地,方法700可進一步包含I/O中斷管理器,該I/O中斷管理器實現於使用者模式中以於中斷時暫存使用者模式裝置驅動程式。某些實施例中,該I/O中斷管理器將中斷調度至驅動程式程序。替代地或附加地,方法700可進一步包含以單一執行緒程序實現驅動程式。替代地或附加地,方法700可實行於一或更多個驅動程式程序之實現係不限制何種使用者模式程式庫被用以實現該一或更多個驅動程式程序之處。
進一步地,該等方法可由電腦系統實行,該電腦系統包含一或更多個處理器及例如電腦記憶體的電腦可讀取媒體。具體而言,該電腦記憶體可儲存電腦可執行指令,當該
等指令被一或更多個處理器執行時,將造成各種功能被行使,例如該等實施例中陳述的該等動作。
本發明之實施例可包括或利用特殊用途或一般用途電腦,該等電腦包含電腦硬體,如以下更詳細的探討。於本發明之範疇內的實施例也包含實體及其他電腦可讀取媒體以承載或儲存電腦可執行之指令及/或資料結構。這樣的電腦可讀取媒體可為一般用途或特殊用途電腦系統可存取的任何可用之媒體。儲存電腦可執行指令的電腦可讀取媒體係實體儲存媒體。承載電腦可執行指令的電腦可讀取媒體係傳輸媒體。因此,以範例而並非限制的方式,本發明實施例可包括至少兩個明顯不同種類的電腦可讀取媒體:實體電腦可讀取媒體及傳輸電腦可讀取媒體。
實體電腦可讀取儲存媒體包含:隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電子抹除式可複寫唯讀記憶體(EEPROM)、唯讀記憶體光碟(CD-ROM)或其他光碟儲存(例如CD、DVD等)、磁碟儲存器或其他磁碟儲存裝置,或任何其媒體,該等媒體可用電腦可執行指令或資料結構的形態儲存所需的程式碼構件,該等程式碼構件可被一般用途或特殊用途電腦存取。
「網路」係定義為一或更多個資料連結,該等資料連結使電子資料能夠傳輸於電腦系統及/或模組及/或其他電子裝置之間。當資訊被傳輸或提供於網路或連接至電腦的另一個通訊(固線、無線或固線或無線之組合當中任一)時,該電腦正確地將該連接視為傳輸媒體。傳輸媒體可包含網路及/或
資料連結,該等網路及/或資料連結可用電腦可執行指令或資料結構的形態以承載所需的程式碼構件,該等程式碼構件可被一般用途或特殊用途電腦存取。上述的組合也包含在電腦可讀取媒體的範疇內。
進一步地,在到達各種電腦系統組成時,電腦可執行指令或資料結構形態的程式碼構件可自動地從傳輸電腦可讀取媒體傳輸至實體電腦可讀取儲存媒體(或反之亦然)。舉例而言,於網路或資料連結所接收的電腦可執行指令或資料結構可於網路介面模組(例如網路介面卡「NIC」)內之RAM中緩衝,接著最終轉移至電腦系統RAM及/或電腦系統中較不具揮發性的電腦可讀取實體儲存媒體。因此,電腦可讀取實體儲存媒體可被包含於同樣(或甚至主要)利用傳輸媒體的電腦系統組成中。
電腦可執行指令包含,舉例而言,指令及資料,該等指令及資料造成一般用途電腦、特殊用途電腦或特殊用途處理裝置執行特定的功能或功能之群組。該電腦可執行指令可為,舉例而言,二進位指令、例如組合語言的中間格式指令,或甚至原始碼。雖然申請標的係以針對結構特徵及/或方法動作的語言描述,應了解到附加的請求項所定義的該申請標的並非必然限制於上述之所述特徵或動作。反而,所述之特徵及動作係以實現該等請求項的範例形態揭示。
所屬技術領域中之技藝人士將體會到本發明可實行於具有許多種類之電腦系統配置的網路計算環境,該等電腦系統配置包含:個人電腦、桌上型電腦、筆記型電腦、訊息
處理器、手持裝置、多處理器系統、基於微處理器或可程式化的消費性電子產品、網路電腦、微電腦、大型電腦、行動電話、個人數位助理(PDA)、呼叫器(pager)、路由器、切換器及類者。本發明也可實行於分散式系統環境,該分散式系統環境中,透過網路連結(該連結係藉由固線資料連結、無線資料連結,或固線與無線資料連結之組合任一)的區域及遠端電腦系統兩者皆可行使工作。分散式系統環境中,程式模組可位於區域及遠端記憶體儲存裝置兩者。
本發明可在不背離發明的精神或特性之情況下體現於其他特定的形態。所描述的實施例在所有態樣中僅應理解為說明性的,而非限制性的。因此,本發明之範疇係由附隨的請求項所指示,而非由前述之描述所指示。屬於該等請求項之等同物的意涵及範圍內的所有改變皆應被納入該等請求項的範疇中。
102‧‧‧硬體裝置
104‧‧‧計算系統
106‧‧‧暫存器
108‧‧‧中央處理器(CPU)
110‧‧‧共享記憶體
112‧‧‧系統記憶體
114‧‧‧驅動程式
115‧‧‧硬體介面層
115-1‧‧‧硬體裝置介面層
115-2‧‧‧硬體裝置介面層
115-n‧‧‧硬體裝置介面層
116‧‧‧機器可讀取硬體規格
118‧‧‧代碼產生工具
120‧‧‧硬體-軟體介面處理器
122‧‧‧實體記憶體
Claims (20)
- 一種在一計算環境中實現一型別安全驅動程式的方法,該型別安全驅動程式可支援高流通量及低延遲之裝置,該方法包括以下步驟:從一硬體裝置接收資料;及將該資料傳遞至一或更多個驅動程式程序,該等驅動程式程序使用一零複製執行於使用者模式中以允許該一或更多個驅動程式程序支援高流通量及低延遲的硬體裝置。
- 如請求項1所述之方法,其中該資料傳遞之行使沒有先佔(pre-empting)該核心模式。
- 如請求項1所述之方法,該方法進一步包括以下步驟:限制一處理器在核心模式中所花的時間量。
- 如請求項1所述之方法,其中該驅動程式程序係以受控代碼實現。
- 如請求項1所述之方法,該方法進一步包括以下步驟:以一I/O中斷管理器於中斷時暫存使用者模式裝置驅動程式,該I/O中斷管理器係實現於使用者模式中。
- 如請求項5所述之方法,其中該I/O中斷管理器將中斷調度至驅動程式程序。
- 如請求項1所述之方法,該方法進一步包括以下步驟:以單一執行緒程序實現驅動程式。
- 如請求項1所述之方法,其中該一或更多個驅動程式程序之實現係沒有限制何種使用者模式程式庫可被用以實現該一或更多個驅動程式程序。
- 一種在一計算環境中實現一型別安全驅動程式的方法,該型別安全驅動程式可支援高流通量及低延遲之裝置,該方法包括以下步驟:從執行於使用者模式的一驅動程式程序接收資料;及使用零複製將該資料傳遞至一硬體裝置,以允許該一或更多個驅動程式程序支援高流通量及低延遲之硬體裝置。
- 如請求項9所述之方法,其中該資料傳遞之行使沒有先佔該核心模式。
- 如請求項9所述之方法,該方法進一步包括以下步驟:限制一處理器在核心模式中所花的時間量。
- 如請求項9所述之方法,其中該驅動程式程序係以受控代碼實現。
- 如請求項9所述之方法,該方法進一步包括以下步驟:以一I/O中斷管理器於中斷時暫存使用者模式裝置驅動程式,該I/O中斷管理器係實現於使用者模式中。
- 如請求項9所述之方法,其中該I/O中斷管理器將中斷調度至驅動程式程序。
- 如請求項9所述之方法,該方法進一步包括以下步驟:以單一執行緒程序實現驅動程式。
- 如請求項9所述之方法,其中該一或更多個驅動程式程序之實現沒有限制何種使用者模式程式庫可被用以實現該一或更多個驅動程式程序。
- 一種電腦可讀取媒體,當被包含於該電腦可讀取媒體之電腦可執行指令被一或更多個處理器執行時,將造成一或更多個處理器行使以下步驟:從執行於使用者模式中的一驅動程式程序接收資料;及使用零複製將資料傳遞至一硬體裝置,以允許該一或更多個驅動程式程序支援高流通量及低延遲之硬體裝置。
- 如請求項17所述之電腦可讀取媒體,其中該資料傳遞之行使沒有先佔該核心模式。
- 如請求項17所述之電腦可讀取媒體,該電腦可讀取媒體進一步包括以下步驟:限制一處理器在核心模式中所花的時間量。
- 如請求項17所述之電腦可讀取媒體,其中該驅動程式程序係以受控代碼實現。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/734,718 US20140195834A1 (en) | 2013-01-04 | 2013-01-04 | High throughput low latency user mode drivers implemented in managed code |
Publications (1)
Publication Number | Publication Date |
---|---|
TW201432461A true TW201432461A (zh) | 2014-08-16 |
Family
ID=50031535
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102148742A TW201432461A (zh) | 2013-01-04 | 2013-12-27 | 在受控代碼中實現的高流通量低延遲使用者模式驅動程式 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20140195834A1 (zh) |
EP (1) | EP2941695B1 (zh) |
CN (1) | CN105051683A (zh) |
AR (1) | AR095747A1 (zh) |
TW (1) | TW201432461A (zh) |
WO (1) | WO2014107543A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102257737B1 (ko) * | 2014-08-12 | 2021-05-28 | 삼성전자 주식회사 | 전자장치의 처리량 제어장치 및 방법 |
US9817776B2 (en) | 2015-01-19 | 2017-11-14 | Microsoft Technology Licensing, Llc | Memory descriptor list caching and pipeline processing |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7234144B2 (en) * | 2002-01-04 | 2007-06-19 | Microsoft Corporation | Methods and system for managing computational resources of a coprocessor in a computing system |
US20060034167A1 (en) * | 2004-07-30 | 2006-02-16 | International Business Machines Corporation | Communication resource reservation system for improved messaging performance |
US7613813B2 (en) * | 2004-09-10 | 2009-11-03 | Cavium Networks, Inc. | Method and apparatus for reducing host overhead in a socket server implementation |
US8713180B2 (en) * | 2005-06-22 | 2014-04-29 | Cisco Technology, Inc. | Zero-copy network and file offload for web and application servers |
US7949766B2 (en) * | 2005-06-22 | 2011-05-24 | Cisco Technology, Inc. | Offload stack for network, block and file input and output |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US8024417B2 (en) * | 2008-06-04 | 2011-09-20 | Microsoft Corporation | Simple flow control protocol over RDMA |
US8769036B2 (en) * | 2009-10-30 | 2014-07-01 | International Business Machines Corporation | Direct sending and asynchronous transmission for RDMA software implementations |
-
2013
- 2013-01-04 US US13/734,718 patent/US20140195834A1/en not_active Abandoned
- 2013-12-27 TW TW102148742A patent/TW201432461A/zh unknown
-
2014
- 2014-01-03 EP EP14702317.0A patent/EP2941695B1/en active Active
- 2014-01-03 WO PCT/US2014/010116 patent/WO2014107543A1/en active Application Filing
- 2014-01-03 CN CN201480003957.XA patent/CN105051683A/zh active Pending
- 2014-01-07 AR ARP140100048A patent/AR095747A1/es unknown
Also Published As
Publication number | Publication date |
---|---|
AR095747A1 (es) | 2015-11-11 |
US20140195834A1 (en) | 2014-07-10 |
CN105051683A (zh) | 2015-11-11 |
EP2941695B1 (en) | 2019-06-12 |
WO2014107543A1 (en) | 2014-07-10 |
EP2941695A1 (en) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10235515B2 (en) | Method and apparatus for on-demand isolated I/O channels for secure applications | |
KR102104695B1 (ko) | 하드웨어 디바이스에 대한 소프트웨어 인터페이스 | |
Chen et al. | Enabling FPGAs in the cloud | |
JP5122597B2 (ja) | 仮想プロセッサへの直接的なインタラプトの送信 | |
KR102255767B1 (ko) | 가상 머신 감사를 위한 시스템 및 방법들 | |
US20180113797A1 (en) | Instruction set architecture and software support for register state migration | |
US20070239965A1 (en) | Inter-partition communication | |
TWI603199B (zh) | 基於能力的裝置驅動程式架構 | |
Vilanova et al. | Direct Inter-Process Communication (dIPC) Repurposing the CODOMs Architecture to Accelerate IPC | |
US10540193B2 (en) | Software-defined microservices | |
CN112148336A (zh) | 计算系统固件的安全更新 | |
TW201432461A (zh) | 在受控代碼中實現的高流通量低延遲使用者模式驅動程式 | |
WO2013189180A1 (zh) | 虚拟化系统中关闭中断的方法和装置 | |
Kristiansen | PCIe Device Lending | |
Pickartz et al. | A locality-aware communication layer for virtualized clusters | |
Crutcher et al. | Operating System | |
TWI733745B (zh) | 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置 | |
Zhang et al. | The Optimization of IVSHMEM Based on Jailhouse | |
Chuang | On Optimizing and Leveraging Distributed Shared Memory for High Performance, Resource Aggregation, and Cache-coherent Heterogeneous-ISA Processors | |
Balasubramanian | Towards a Fast NVMe Layer for a Decomposed Kernel | |
Xu et al. | virtCCA: Virtualized Arm Confidential Compute Architecture with TrustZone | |
Verhulst et al. | Requirements and Specifications for the OpenComRTOS Project | |
Poess | Binary device driver reuse | |
WO2009113571A1 (ja) | 複数の基盤ソフトウェアを動作可能な情報処理装置および方法 |