背景技術:
用于使用計算設備的圖像捕獲設備來捕獲圖像的常規(guī)技術將圖像存儲在緩沖器中以便通過管道進行處理。每次要訪問緩沖器時,創(chuàng)建緩沖器,然后使用探測、鎖定和映射操作進行訪問。由于每次執(zhí)行操作時這種訪問可能花費幾毫秒,因此這可能會由于訪問緩沖器的次數(shù)而對操作效率造成嚴重的影響,特別是在遇到被捕獲的不斷增大尺寸的圖像時。
技術實現(xiàn)要素:
描述了存儲器描述符列表高速緩存和管道處理技術。在一個或多個示例中,一種方法被配置為提高計算設備的管道內的緩沖器使用的效率。該方法包括,在計算設備的存儲器中創(chuàng)建緩沖器,并且由計算設備高速緩存存儲器描述符列表,該存儲器描述符列表在緩沖器信息高速緩存器中描述緩沖器,并且與用作對存儲器描述符列表的查找的句柄相關聯(lián)。該方法還包括,傳遞句柄以通過計算設備的管道,從而由管道的一個或多個階段對緩沖器內的數(shù)據進行處理,使得由所述一個或多個階段通過作為調用的一部分將句柄用作查找來從緩沖器信息高速緩存器獲得針對緩沖器的存儲器描述符列表,以獲得對數(shù)據的訪問。
在一個或多個示例中,描述了一種提高由計算設備的管道對緩沖器內的數(shù)據的訪問的效率的方法。該方法包括:由要訪問緩沖器內的數(shù)據的計算設備的管道的至少一個階段接收句柄,由所述至少一個階段調用該句柄的源以通過將句柄用作在緩沖器信息高速緩存器中的查找來由所述計算設備獲得描述緩沖器的存儲器描述符列表,以及由所述至少一個階段使用所獲得的存儲器描述符列表來訪問所述緩沖器內的數(shù)據。
在一個或多個示例中,計算設備被配置為提高在計算設備的管道內的緩沖器使用的效率。計算設備包括被配置為執(zhí)行一個或多個操作的處理系統(tǒng)和被配置為維護可由處理系統(tǒng)執(zhí)行以執(zhí)行操作系統(tǒng)的指令的存儲器。操作系統(tǒng)被配置為,通過執(zhí)行探測、鎖定和映射操作在存儲器中創(chuàng)建緩沖器;高速緩存存儲器描述符列表,其在緩沖器信息高速緩存器中描述緩沖器,并且與支持對存儲器描述符列表的查找的句柄相關聯(lián);由要訪問緩沖器內的數(shù)據的管道的至少一個階段接收句柄;由所述至少一個階段調用所述句柄的源以獲得所述存儲器描述符列表;以及由所述至少一個階段使用存儲器描述符列表來訪問緩沖器內的數(shù)據。
提供本發(fā)明內容以便以簡化的形式介紹以下在具體實施方式中進一步描述的概念的選擇。本發(fā)明內容不旨在標識所要求保護的主題的關鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。
附圖說明
具體實施方式參照附圖進行描述。在圖中,附圖標記的最左邊的(多個)數(shù)字標識出該附圖標記首次出現(xiàn)在其中的圖。在具體實施方式和圖中的不同實例中使用相同的附圖標記可以指示相似或相同的項目。在圖中表示的實體可以指示一個或多個實體,并且因此可以在討論中可交換地對單一或復數(shù)形式的實體做出引用。
圖1是可操作以采用本文描述的存儲器描述符列表高速緩存和管道處理技術的示例實現(xiàn)中的環(huán)境的圖示。
圖2描繪了示例實現(xiàn)中的系統(tǒng),其中示出了使用緩沖器鎖定信息高速緩存器來管理對緩沖器的訪問。
圖3描繪了示例實現(xiàn)中的系統(tǒng),其中在操作系統(tǒng)的用戶和內核模式上下文中采用圖2的緩沖器分配器模塊,緩沖器鎖定信息高速緩存器和存儲器描述符列表的功能。
圖4是描繪示例實現(xiàn)中的過程的流程圖,該過程示出了存儲器描述符列表的創(chuàng)建和使用。
圖5是描繪示例實現(xiàn)中的過程的流程圖,其中,緩沖器被創(chuàng)建并且句柄被用來通過使用經高速緩存的存儲器描述符列表來傳遞對緩沖器的訪問。
圖6是描繪示例實現(xiàn)中的過程的流程圖,其中,緩沖器被創(chuàng)建并且句柄被用來通過使用經高速緩存的存儲器描述符列表來獲得對緩沖器的訪問。
圖7圖示出了包括示例設備的各種組件的示例系統(tǒng),該示例設備可以被實現(xiàn)為如參照圖1-6所描述的任何類型的計算設備,以實現(xiàn)本文描述的技術的實施例。
具體實施方式
概述
每次期望訪問緩沖器時,甚至當最初在將數(shù)據(例如圖像)向下發(fā)送到設備驅動器(例如,內核模式捕獲驅動器)時將數(shù)據(例如,圖像)捕獲到緩沖器中時,照相機管道常規(guī)地執(zhí)行探測、鎖定和映射操作。由于在每次執(zhí)行操作時這些操作可能消耗幾毫秒,所以這個時間量可以快速地加起來,特別是當遇到大的緩沖器尺寸(例如,用于存儲不斷增大的圖像尺寸)時,捕獲會話中涉及的時間量增大,等等。因此,這些常規(guī)技術可能導致顯著的性能和功率劣化。
描述了存儲器描述符列表和高速緩存器處理技術。在一個或多個實現(xiàn)中,存儲器描述符列表被高速緩存在緩沖器信息高速緩存器中并且與可用于執(zhí)行查找以定位期望的存儲器描述符列表的句柄相關聯(lián)。存儲器描述符列表描述了在計算機設備的存儲器中分配的緩沖器。因此,通過探測、鎖定和映射操作創(chuàng)建緩沖器,并且將描述該緩沖器的存儲器描述符列表(例如,位置,尺寸等)存儲在緩沖器信息高速緩存器中。
緩沖器信息高速緩存器中的存儲器描述符列表與句柄相關聯(lián),該句柄被傳遞給可能期望訪問緩沖器的下游組件,比如具有訪問緩沖器的內核側組件的管道中的階段、信宿等等。以這種方式,這些組件使用句柄來避免重復的探測、鎖定和映射操作,從而提高對緩沖器的訪問效率,并且因而提高整個計算設備的可用資源。這些和其他技術的另外的示例在下面的部分中描述并在對應的圖中示出。
示例環(huán)境
圖1是可操作以采用本文描述的存儲器描述符列表高速緩存和管道處理技術的示例實現(xiàn)中的環(huán)境100的圖示。所圖示出的環(huán)境100包括計算設備102的示例,其被圖示為通信地耦合到設備(例如,外圍設備)的臺式pc,所述設備的示例被圖示為照相機104,但是其他示例也被考慮,比如三維打印機、音頻捕獲設備、傳感器等。這種設備的另一示例被圖示為顯示設備106。雖然被分開圖示出,但是該設備也可以被合并作為計算設備102的組成部分,比如具有照相機、顯示設備、麥克風等的平板配置。
計算設備102可以以各種方式配置,比如傳統(tǒng)計算機(例如,臺式個人計算機、膝上型計算機等)、移動站、娛樂器具、無線電話、平板、上網本等,如關于圖7進一步描述的。因此,計算設備102的范圍可以從具有大量存儲器和處理器資源的全資源設備(例如,個人計算機、控制臺)到具有有限的存儲器和/或處理資源的低資源設備(例如,傳統(tǒng)的機頂盒、手持式游戲控制臺)。計算設備102還可以涉及使計算設備102執(zhí)行一個或多個操作的軟件。
計算設備102還被圖示為包括各種硬件組件,其示例包括處理系統(tǒng)108,以及計算機可讀存儲介質的示例(在該實例中,其是存儲器110)。存儲器110被配置以維護可由處理系統(tǒng)108執(zhí)行以執(zhí)行一個或多個操作的應用112和其他軟件。
處理系統(tǒng)108不受形成其的材料或其中所采用的處理機制的限制。例如,處理系統(tǒng)108可以包括(多個)半導體和/或晶體管(例如,電子集成電路(ic)),比如芯片上的系統(tǒng)、處理器、中央處理單元、處理核心、功能塊等等。在這樣的上下文中,可執(zhí)行指令可以是電子可執(zhí)行指令??商鎿Q地,屬于或針對處理系統(tǒng)108的機制并且因而屬于或針對計算設備的機制可以包括但不限于量子計算、光學計算、機械計算(例如,使用納米技術)等等??。附加地,盡管示出了單個存儲器110,但是可以采用各種各樣的存儲器的類型和組合,比如隨機存取存儲器(ram)、硬盤存儲器、可移除介質存儲器和其他類型的計算機可讀存儲介質。
計算設備102還被圖示為包括操作系統(tǒng)114。操作系統(tǒng)114被配置為將計算設備102的底層功能抽象到在計算設備102上可執(zhí)行的應用112。例如,操作系統(tǒng)114可以抽象處理系統(tǒng)108、存儲器110、網絡、輸入/輸出和/或顯示設備108的顯示功能等等,使得可以編寫應用112而不知道“如何”實現(xiàn)該底層功能。例如,應用112可以向操作系統(tǒng)114提供要由顯示設備106再現(xiàn)和顯示的數(shù)據,而不了解將如何執(zhí)行該再現(xiàn)。操作系統(tǒng)114還可以表示各種其他功能,比如管理可由計算設備102的用戶導航的文件系統(tǒng)和用戶界面。
該功能的示例被圖示為緩沖器分配模塊116。緩沖器分配模塊116是用于維護具有多個緩沖器120的循環(huán)緩沖器系統(tǒng)118的操作系統(tǒng)114或其他地方的功能的表示。緩沖器120用于維護從設備獲得的數(shù)據,比如從圖像捕獲設備104捕獲的圖像。在該示例中,緩沖器120由緩沖器分配器模塊116維護在循環(huán)緩沖器系統(tǒng)118中,該緩沖器分配器模塊116支持緩沖器120的重復使用。因此,緩沖器120的使用是循環(huán)的,例如,以捕獲和釋放圖像并對于后來的圖像進行重復。然而,如前所述,使用常規(guī)技術重復訪問緩沖器120可能消耗大量資源(例如,移動應用中的處理、存儲器和功率資源)以及涉及執(zhí)行操作的時間。
因此,在該示例中,緩沖器分配模塊116被配置為維護緩沖器鎖定信息高速緩存器122,其包括所創(chuàng)建的每個緩沖器120的描述。通過在緩沖器鎖定信息高速緩存器122中維護描述,緩沖器分配模塊116能夠促進避免重復使用探測、鎖定和映射操作,從而提高計算設備102的操作效率,對于此的進一步描述在下面描述并在對應的圖中示出。
圖2描繪了示例實現(xiàn)中的系統(tǒng)200,其中示出了使用緩沖器鎖定信息高速緩存器112來管理對緩沖器120的訪問。使用第一、第二和第三階段202、204、206來圖示出系統(tǒng)200。在第一階段202處,緩沖器分配器模塊116在計算設備102的存儲器110中創(chuàng)建緩沖器120。例如,緩沖器分配器模塊116執(zhí)行探測、鎖定和映射操作以定位適合用作緩沖器的存儲器110的部分,并且當找到時,將這些部分鎖定以免于被計算設備102的其他功能使用,以及將這些部分映射為緩沖器120。該信息可以被稱為存儲器描述符列表208,并且被存儲在緩沖器鎖定信息高速緩存器122中,使得緩沖器120可以被再次定位并重復使用,如下面進一步描述的。
存儲器描述符列表208與句柄210相關聯(lián)。句柄210可用作查找(例如,通過用作索引)來定位對應的存儲器描述符列表208。以這種方式,句柄210可用于獲得存儲器描述符列表208,并從其訪問對應的緩沖器120,如下面進一步描述的。
在第二階段204處,例如,設備驅動器212用于捕獲設備數(shù)據214并將其加載到緩沖器120。設備驅動器212可以對應于照相機104,從而使得將由照相機104捕獲的圖像加載到緩沖器120中。為這樣做,緩沖器分配器模塊116傳遞句柄210,然后句柄210用于獲得存儲器描述符列表208并找到對應的緩沖器120。一旦設備數(shù)據214(例如,圖像)被寫入緩沖器120,設備驅動器212就將緩沖器120釋放回緩沖器分配器模塊116。以這種方式,使用句柄210來獲得對緩沖器120的訪問,而不重復探測、鎖定和映射操作。
對于期望訪問緩沖器120中的數(shù)據的后續(xù)組件,繼續(xù)該過程。例如,句柄210用于將對緩沖器120的訪問傳遞到設備管道216。設備管道216包括多個階段218、220,其用于處理設備數(shù)據214,(例如,在照相機示例中的圖像處理中涉及的一個或多個變換),以便進一步到達用于存儲,傳送或再現(xiàn)緩沖器120中的數(shù)據的信宿222。例如,階段218可以使用句柄210作為查找的一部分來獲得描述緩沖器120的存儲器描述符列表208。階段218將句柄210傳遞到緩沖器分配器模塊116,然后緩沖器分配器模塊116使用句柄210作為查找以定位存儲器描述符列表208,然后其被提供回到階段218。
階段218然后可以訪問緩沖器120,以便采用用于處理緩沖器120內的設備數(shù)據214的相關的硬件組件、內核模式功能等,例如,在其中設備管道216是圖像處理管道的照相機104示例中的硬件jpeg編碼器。一旦處理完成,句柄210就被傳遞到后續(xù)的階段222、信宿222等,以執(zhí)行類似的訪問技術。
因此,緩沖器鎖定信息高速緩存器122、存儲器描述符列表208和句柄210支持這樣的功能,其可用于由“下游”組件訪問緩沖器而不重復探測、鎖定和映射操作。一旦緩沖器120內的設備數(shù)據214的使用被完成(例如,由信宿222再現(xiàn)、存儲或傳送),緩沖器120就被緩沖器分配器模塊116釋放,以作為循環(huán)緩沖器系統(tǒng)118的一部分以供重復使用(例如,以捕獲另一圖像),這也可以在不重復探測、鎖定和映射操作的情況下執(zhí)行。這些技術也可以在用戶模式/內核模式上下文中使用,其示例在下面描述并在對應的圖中示出。
圖3描繪了示例實現(xiàn)中的系統(tǒng)300,其中在操作系統(tǒng)114的用戶和內核模式302、304上下文中采用緩沖器分配器模塊116、緩沖器鎖定信息高速緩存器122和存儲器描述符列表208的功能。在該示例中,操作系統(tǒng)114包括內核模式116和用戶模式118。圖1的處理系統(tǒng)108,在操作系統(tǒng)114的控制下,根據正在執(zhí)行的代碼的類型在這些模式之間切換。例如,在用戶模式118中執(zhí)行應用112,并且在內核模式116中執(zhí)行操作系統(tǒng)的部分(例如,內核組件)。
為了在用戶模式118中執(zhí)行應用112,操作系統(tǒng)114創(chuàng)建針對應用112的進程。該進程向應用112提供私有虛擬地址空間和私有句柄表。因為應用112的虛擬地址空間是私有的,所以一個應用不能改變屬于另一個應用的數(shù)據,因此每個應用被隔離執(zhí)行。因此,如果應用112崩潰,則崩潰被限制到該應用112,并且如此,其他應用和操作系統(tǒng)114被保護而免于崩潰,例如繼續(xù)執(zhí)行。
除了是私有的,應用112的虛擬地址空間還在用戶模式118中受限制。如此,不準許從用戶模式118訪問為操作系統(tǒng)114預留的虛擬地址。然而,在內核模式116中運行的整個代碼共享單個虛擬地址空間。
在所圖示的示例中,在內核模式304內執(zhí)行設備驅動器212(例如,內核流傳輸驅動器)。在設備管道216的捕獲引擎308內執(zhí)行設備代理306。設備代理306表示設備104到設備管道216的階段210。因此,由設備代理306輸出的流被階段210視為由設備104本身輸出的流。
在該示例中,一個或多個階段210包括作為由階段210執(zhí)行的處理的一部分的核心模式組件310。例如,在所圖示的照相機104的示例中,在內核模式304內執(zhí)行內核模式組件310以便與圖像處理硬件(例如硬件jpeg編碼器)通過接口相連。緩沖器鎖定信息高速緩存器122、存儲器描述符列表208和句柄210的使用在本上下文內也是可用的。
在該示例中,設備代理306使用調用“ntcreatefile”(例如,根據該進程是否是應用容器,直接或間接使用設備訪問中介)來創(chuàng)建pin對象。在內核模式304中創(chuàng)建“file_object”,并且將句柄210(例如,句柄對象)存儲在用戶模式302中,例如存儲在設備代理中。該句柄210支持對內核對象的唯一查找,這在該示例中導致內核流傳輸pin對象。
設備代理306將具有用戶模式句柄210的調用(例如,“deviceiocontrol”)用于經由設備驅動器,來捕獲設備數(shù)據214以及將控制命令轉發(fā)到設備104(例如,照相機),例如,“ksproperty”,擴展屬性和“ioctl_ks_write_stream/ioctl_ks_read_stream”。
用于捕獲的讀緩沖器被配置為“neither_io”,并且在每次到內核模式304的行程中由設備驅動器212探測和鎖定,并且在返回到用戶模式302時被釋放。
緩沖器120沿設備管道216向下傳遞,其中緩沖器也可傳遞到管道所利用的其他分立(discreet)的內核模式組件310。這些內核模式組件310也可以鎖定并探測緩沖器120。
在一個或多個實現(xiàn)中,支持選擇加入機制來鎖定緩沖器120并將對應的存儲器描述符列表208高速緩存在緩沖器鎖定信息高速緩存器122中,例如作為內核流傳輸空間中的“cksqueue”對象。該技術也可以擴展到其他類型的緩沖器(例如,dx緩沖器),這也導致如上所述的對應的效率改進。
作為這些技術的一部分,可以允許以下設計。對于驅動器,通過對于“ksallocator_framing_ex”結構使用標志來添加功能以改變?yōu)槭乖撎卣鞒蔀獒槍υO備驅動器212的客戶端的選擇加入(opt-in),從而使得“declare_sfmple_framing_ex”在頭文件中添加下面定義的附加標志:
#defineksallocator_enable_mdl_caching0x00004000
(注意:這也可以被實現(xiàn)為單獨的擴展屬性控制)
附加地,可用于支持該設計的功能如下。
對于設備驅動器212,形成了頭文件(例如“ks.h”)中的句柄和緩沖器有效負載的聯(lián)合體(union)。這由設備代理206在緩沖器從往返行程返回到內核模式304時構造。該聯(lián)合體在api調用中被用來檢索其中存儲了存儲器描述符列表208的pin對象,其示例描述如下:
定義了兩個外部應用編程接口(api)。首先,api“ksgetpinnedmemorymdlfromhandle”被定義以便基于例如從“imfsample”提取的全局唯一標識符獲得被鎖定的存儲器描述符列表208。在存儲在設備驅動器212中的列表中的樣本上添加引用。其次,定義api“ksreleasememorymdlfromhandle”以便當內核模式組件310完成訪問存儲器描述符列表208時釋放樣本上的引用。
還定義了取消例程,其被設備驅動器212用于向使用存儲器描述符列表208的內核模式組件310通知存儲器描述符列表208的消滅,如下所示:
取消例程:
可以在“ksstream_header”上設置附加標志,以向設備驅動器212指示緩沖器120被高速緩存在緩沖器鎖定信息高速緩存器122中,其示例如下:
#defineksstream_header_optionsf_persist_mdl0x00008000。
下面描述作為設備驅動器212的一部分的存儲器描述符列表218的存儲。存儲器描述符列表208可以存儲在列表(例如,“l(fā)ist_entry”)數(shù)據結構中。此列表是上述queue對象的一部分。該列表與“mutex”同步,從而將調用限制到irql<dispatch_level。這種布置的示例描述如下:
獲取(acquire)和釋放(release)語義可用于獲取和釋放存儲器描述符列表208。設備驅動器120對獲取器保持跟蹤并管理該訪問,使得在任何一個時間只有單個組件獲取存儲器描述符列表208。存儲存儲器描述符列表208的數(shù)據結構被引用計數(shù),并且調用者供應取消例程。
當組件完成對存儲器描述符列表208的使用時,使用釋放調用通知設備驅動器212,然后設備驅動器212不再使用存儲器描述符列表208,因為隨后的使用可能導致錯誤。
請求訪問存儲器描述符列表208的組件能夠處置調用失敗,即不檢索存儲器描述符列表208。在這種情況下,例如,組件恢復到探測、鎖定和映射操作以獲得來自緩沖器212的系統(tǒng)地址。這可能例如由于存儲器子系統(tǒng)在內核中設置了低存儲器事件而發(fā)生。
獲取調用,例如“ksgetpinnedmemorymdlfromhandle”具有輸入參數(shù)全局唯一標識符,其如前所述從“imfsample”檢索,然后例如通過具有分立的內核模式驅動器的私有接口傳遞到內核模式304。
在該示例中,全局唯一標識符被分裂成用戶模式句柄和緩沖器。如上所述,從用戶模式句柄獲得內核模式“file_object”。
在“file_object”被視為pin對象之前,可以實施多個檢查,例如,
i)對象是否是fileobject(文件對象)。這將保護我們免受句柄回收利用。
ii)對象是否是ks對象
iii)對象是否是pin
pin上的引用增加,使得其在調用期間不丟失。在調用期間獲取pin控制鎖,使得當調用進行時隊列不會丟失。掃描隊列中的列表,并且在沒有其他客戶端已經做出請求的情況下返回存儲器描述符語言208。當調用返回時,pin上的引用計數(shù)被釋放。
釋放調用“ksreleasememorymdlfromhandle”減少在存儲器描述符語言208上的引用計數(shù),這在存儲器描述符語言208被請求時進行。
外部調用也被利用來支持有效的緩沖器120訪問。例如,可以執(zhí)行檢查來確定標志“ksstream_header_optionsf_persist_mdl”是否被設置,并且如果是,則停止探測。
在一些情況下,可用于緩沖器120的存儲器110中的空閑空間量降低到閾值以下,這導致操作系統(tǒng)114通知已登記的觀察者。響應于由內核揭露的這樣的事件(例如,低存儲器通知事件)而不是產生單獨的線程,執(zhí)行檢查以確定當嘗試訪問列表時是否發(fā)信號通知了該事件,并因此修剪(prune)嘗試。附加地,存儲器描述符列表208僅在流傳輸活躍時被高速緩存,因此執(zhí)行“waitonthedispatcherobject(等待分派器對象)”操作以具有零超時等待。這阻止了,將導致的上下文切換使得等待是非零的等待。如果事件被設置,則存儲器描述符列表208列表將被修剪,即,存儲器描述符列表208不被高速緩存,直到事件進入到未被發(fā)信號通知的狀態(tài)。
在使用標志來控制探測的示例中,“ksthunk.sys”是類過濾器驅動器,其被激活用于32位應用,并且對于設備棧中的64位應用是可行的(passthrough)。以下調用處置thunking并鎖定設備驅動器。
如果流頭(streamheader)通告由設備代理306或設備驅動器212設置的標志,則該函數(shù)跳過探測和鎖定。
下文描述了可用于通過設備管道216獲得存儲器描述符列表208的技術,例如“mfcore”和“mfplat”。對于“mfcore”,全局唯一標識符(guid)用于由設備代理306在樣本上設置屬性。作為guid的有效負載由調用(例如,“getguid”)檢索,然后被傳遞到任何內核模式組件310以檢索存儲器描述符列表208。
對于“mfcore”,每當在樣本上設置了“mfsampleextension_capturemetadata”屬性時,該實體就跳過元數(shù)據緩沖器的分配。
緩沖器分配器模塊116被配置為當存儲器樣本可用于饋送設備驅動器212并且不存在饑餓時修剪自身。當緩沖器分配器模塊116被修剪時,一些樣本被移除,并且在選擇加入時通知設備驅動器212。
屬性“ksproperty”被包括作為設備驅動器212的一部分,其從設備代理306發(fā)送到pin,使得設備驅動器212能夠釋放與樣本相關聯(lián)的存儲器描述符列表208。
這是從imfvideosampleallocatornotifyex而不是imfvideosampleallocatornotify繼承的接口cksbasepin的改變。方法notifyprune被添加到devproxy中的cksbasepin類中,其調用ksproperty來釋放所涉及的樣本。
方法“notifyprune”在分配器樣本由緩沖器分配器模塊116在“mfplat”中釋放以修剪時被調用,并且也在分配器被終止時被調用。通過枚舉來分隔調用,從而將修剪與清理區(qū)分開來。方法“notifyprune”將“ksproperty”調用到設備驅動器212中。設備驅動器212清理對應于正被修剪的緩沖器120的存儲器描述符列表208。
緩沖器分配器模塊116被配置為使得當返回到緩沖器分配器模塊116時,樣本元數(shù)據和guid有效負載不被清除。這可能涉及“cmfdxallocator”類中的“onlnvokedelete”函數(shù)的改變。如果在樣本上設置了guid,則它對于下一次樣本運行將持續(xù)。接口“imfvideosampleallocatornotifyex”與方法“notifyprune”一起使用,以回調到設備代理306來釋放鎖定的樣本。
為元數(shù)據分配的存儲器跨樣本而持續(xù),返回到緩沖器分配器模塊116。這是對設備代理306的優(yōu)化,該設備代理306例如在每次到設備驅動器212的行程中為元數(shù)據分配和釋放新緩沖器。
下面描述可由客戶端驅動器使用以利用高速緩存特征的示例:
例如,在“kspin_descriptor_ex”定義中,客戶端驅動器導出的是標志“or'd”到“allocator_framing”標志。如果緩沖器分配器模塊116正在分配系統(tǒng)存儲器緩沖器,則這將開啟存儲器描述符列表208高速緩存。
以下描述用于確定是否執(zhí)行探測和鎖定的公共api,其采用兩個輸入參數(shù)。第一輸入參數(shù)是guid,它是用戶模式文件句柄和用戶模式鎖定地址的組合。用戶地址是用于存儲所使用的存儲器描述符列表208的數(shù)據結構中的關鍵。這不使用探測和鎖定操作。
取消例程也由要求鎖定的存儲器描述符列表208的外部組件供應。存儲器描述符列表208是非空的并且包含有效的存儲器描述符列表208地址。存儲在隊列中的存儲器描述符列表208如果在隊列中被發(fā)現(xiàn)則返回給調用者。如果沒有找到,則返回給調用者一個合適的錯誤。
以下api接受兩個輸入參數(shù),例如作為由設備代理306設置的樣本屬性的guid和由設備驅動器212返回的存儲器描述符列表208:
結果,如果guid和存儲器描述符列表208對于pin和用戶模式緩沖器/mdl組合是有效的,則調用返回“status_success”。關于這些和其它示例的進一步的討論將關于以下過程進行描述,并在對應的圖中示出。
示例過程
以下討論描述了可以利用先前描述的系統(tǒng)和設備來實現(xiàn)的存儲器描述符列表高速緩存和管道處理技術。每個過程的各個方面可以在硬件、固件或軟件、或其組合中實現(xiàn)。這些過程被示出為指定由一個或多個設備執(zhí)行的操作的框的集合,并且不一定限于由各個塊執(zhí)行操作所示的順序。在以下討論的各部分中,將參照上述圖。
關于圖1-3的示例描述的功能,特征和概念可以在本文所述的過程的上下文中采用。此外,關于下面的不同過程描述的功能、特征和概念可以在不同的過程之間互換,并且不限于在單獨過程的上下文中的實現(xiàn)。此外,與不同的代表性過程相關聯(lián)的框和本文對應的圖可以一起應用和/或以不同的方式組合。因此,關于本文中不同示例環(huán)境、設備、組件和過程描述的各個功能、特征和概念可以以任何合適的組合使用,并且不限于由列舉的示例表示的特定組合。
圖4描繪了示例實現(xiàn)中的過程400,其示出了存儲器描述符列表208的創(chuàng)建和使用。創(chuàng)建pin(框402)以及實例化緩沖器分配器模塊116(框404)。創(chuàng)建樣本(例如,圖像或其他數(shù)據)(框406)并發(fā)送樣本(框408)。
在判定框410處確定是否高速緩存了存儲器描述符列表208。如果是(來自判定框410的“是”),則在隊列中執(zhí)行搜索(框412)。如果不是(來??自判定框410的“否”),則創(chuàng)建存儲器描述符列表作為鎖定的一部分,并且為這樣創(chuàng)建的緩沖器獲得系統(tǒng)地址(框414)。
存儲器描述符列表被添加到隊列中的列表(框416),并且設置標志以指示存儲器描述符列表208在隊列中可用(框418)。將存儲器描述符列表208添加到irp(塊420),并將數(shù)據捕獲到緩沖器中(框422)。一旦請求完成(框424),存儲器描述符列表208被罷免(框426)并且請求完成(框428),使得樣本被發(fā)送回緩沖器分配模塊。還考慮了各種其他示例。
圖5描繪了其中創(chuàng)建緩沖器并且使用句柄以便通過使用高速緩存的存儲器描述符列表來傳遞對緩沖器的訪問的示例實現(xiàn)中的過程500。在該示例中,描述了一種方法來提高計算設備的管道內的緩沖器使用的效率。例如通過執(zhí)行探測、鎖定和映射操作在計算設備的存儲器中創(chuàng)建緩沖器(框502)。
存儲器描述符列表由計算設備高速緩存,所述存儲器描述符列表在緩沖器信息高速緩存器中描述緩沖器并且與用作對存儲器描述符列表的查找的句柄相關聯(lián)(框504)。例如,存儲器描述符列表208與作為緩沖器鎖定信息高速緩存器122的一部分的句柄210相關聯(lián)。
句柄被傳遞通過計算設備的管道,以便由管道的一個或多個階段處理緩沖器內的數(shù)據,使得所述一個或多個階段通過以下方式獲得對數(shù)據的訪問:作為調用的一部分,使用句柄作為查找,以便從緩沖器信息高速緩存器獲得針對緩沖器的存儲器描述符列表(框506),而例如不重復探測、鎖定和映射操作。以這種方式,可以通過階段218、220以有效的方式獲得對緩沖器120的訪問。
把句柄從管道傳遞到計算設備的信宿,以便由管道的一個或多個階段處理緩沖器內的數(shù)據,所述一個或多個階段通過以下方式獲得對數(shù)據的訪問:作為調用的一部分,使用句柄作為查找,以便從緩沖器信息高速緩存器獲得針對緩沖器的存儲器描述符列表(框508),而例如不重復探測、鎖定和映射操作。同樣,信宿222可以以有效的方式獲得對緩沖器120的訪問。
圖6描繪了示例實現(xiàn)中的過程600,其中,創(chuàng)建了緩沖器,并且通過使用高速緩存的存儲器描述符列表,句柄被用來獲得對緩沖器的訪問。在該示例中,描述了一種提高計算設備的管道對緩沖器內的數(shù)據的訪問的效率的方法。由訪問緩沖器內的數(shù)據的計算設備的管道的至少一個階段接收句柄(框602)。階段218例如接收句柄210。
由至少一個階段對句柄的源進行調用,以便由計算設備通過使用句柄作為在緩沖器信息高速緩存器中的查找來獲得描述緩沖器的存儲器描述符列表(框604)。例如,階段218使用句柄來調用緩沖器分配器模塊116,以獲得對應的存儲器描述符列表208。
所獲得的存儲器描述符列表被至少一個階段用于訪問緩沖器內的數(shù)據(框606)。階段218例如使用存儲器描述符列表208來獲得對緩沖器120的訪問,并且在完成之后釋放緩沖器120以供后續(xù)階段220、信宿222等使用。
示例系統(tǒng)和設備
圖7總體在700處圖示出了示例系統(tǒng),其包括代表可以實現(xiàn)本文描述的各種技術的一個或多個計算系統(tǒng)和/或設備的示例計算設備702,如通過包括緩沖器分配模塊116所說明的那樣。計算設備702可以是例如服務提供商的服務器,與客戶端相關聯(lián)的設備(例如,客戶端設備),片上系統(tǒng)和/或任何其它合適的計算設備或計算系統(tǒng)。
如圖所示的示例計算設備702包括彼此通信地耦合的處理系統(tǒng)704、一個或多個計算機可讀介質706和一個或多個i/o接口708。盡管未示出,但是計算設備702還可以包括系統(tǒng)總線或者將各種組件彼此耦合的其他數(shù)據和命令傳輸系統(tǒng)。系統(tǒng)總線可以包括不同總線結構的任何一個或組合,比如存儲器總線或存儲器控制器、外圍總線、通用串行總線、和/或利用各種總線架構中的任何一種的處理器或局部總線。還考慮了各種其他示例,比如控制線和數(shù)據線。
處理系統(tǒng)704代表使用硬件執(zhí)行一個或多個操作的功能。因此,處理系統(tǒng)704被圖示為包括可被配置為處理器、功能塊等的硬件元件710。這可以包括在硬件中實現(xiàn)為專用集成電路或使用一個或多個半導體形成的其他邏輯設備。硬件元件710不受其形成的材料或其中采用的處理機制的限制。例如,處理器可以包括(多個)半導體和/或晶體管(例如,電子集成電路(ic))。在這樣的上下文中,處理器可執(zhí)行指令可以是電子可執(zhí)行指令。
計算機可讀存儲介質706被圖示為包括存儲器/存儲裝置712。存儲器/存儲裝置712表示與一個或多個計算機可讀介質相關聯(lián)的存儲器/存儲容量。存儲器/存儲組件712可以包括易失性介質(比如隨機存取存儲器(ram))和/或非易失性介質(比如只讀存儲器(rom)、閃速存儲器、光盤、磁盤等)。存儲器/存儲組件712可以包括固定介質(例如,ram、rom,固定硬驅動器等)以及可移除介質(例如,閃速存儲器、可移除硬驅動器、光盤等)。計算機可讀介質706可以以下面進一步描述的各種其他方式配置。
(多個)輸入/輸出接口708代表允許用戶將命令和信息鍵入到計算設備702并且還允許使用各種輸入/輸出設備向用戶和/或其他組件或設備呈現(xiàn)信息的功能。輸入設備的示例包括鍵盤、光標控制設備(例如,鼠標)、麥克風、掃描器、觸摸功能(例如,被配置為檢測物理觸摸的電容式或其他傳感器)、照相機(例如,其可以采用可見或不可見波長(比如紅外頻率)以將移動辨識為不涉及觸摸的手勢)等等。輸出設備的示例包括顯示設備(例如,監(jiān)視器或投影儀)、揚聲器、打印機、網卡、觸覺響應設備等等。因此,計算設備702可以以下面進一步描述的各種方式進行配置,以支持用戶交互。
本文可以在軟件、硬件元件或程序模塊的一般上下文中描述各種技術。一般地,這些模塊包括執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據類型的例程、程序、對象、元素、組件、數(shù)據結構等。本文所使用的術語“模塊”、“功能”和“組件”一般表示軟件、固件、硬件或其組合。本文描述的技術的特征是平臺無關的,這意味著這些技術可以在具有各種處理器的各種商業(yè)計算平臺上實現(xiàn)。
所描述的模塊和技術的實現(xiàn)可以存儲在某種形式的計算機可讀介質上或者通過某種形式的計算機可讀介質傳輸。計算機可讀介質可以包括可由計算設備702訪問的各種介質。作為示例而非限制,計算機可讀介質可以包括“計算機可讀存儲介質”和“計算機可讀信號介質”。
“計算機可讀存儲介質”可以是指與信號傳輸、載波或信號本身形成對照的允許信息的持久和/或非暫時性存儲的介質和/或設備。因此,計算機可讀存儲介質是指非信號承載介質。計算機可讀存儲介質包括硬件,易失性和非易失性、可移除和不可移除介質和/或存儲設備,其以適于存儲比如計算機可讀指令、數(shù)據結構、程序模塊、邏輯元件/電路、或其他數(shù)據之類的信息的方法或技術來實現(xiàn)。計算機可讀存儲介質的示例可以包括但不限于ram、rom、eeprom、閃速存儲器或其它存儲器技術、cd-rom、數(shù)字通用盤(dvd)或其它光學存儲器、硬盤、磁盒、磁帶、磁盤存儲裝置或其他磁存儲設備、或適于存儲所需信息并且可由計算機訪問的其他存儲設備、有形介質或制品。
“計算機可讀信號介質”可以是指被配置以比如經由網絡將指令傳送到計算設備702的硬件的信號承載介質。信號介質典型地可以在諸如載波、數(shù)據信號或其它傳輸機制之類的經調制的數(shù)據信號中具體體現(xiàn)計算機可讀指令、數(shù)據結構、程序模塊或其他數(shù)據。信號介質還包括任何信息遞送介質。術語“經調制的數(shù)據信號”是指以在信號中對信息進行編碼的方式設置或改變其特征中的一個或多個的信號。作為示例而非限制,通信介質包括比如有線網絡或直接有線連接之類的有線介質,以及比如聲學、rf、紅外和其它無線介質之類的無線介質。
如前所述,硬件元件710和計算機可讀介質706代表以硬件形式實現(xiàn)的模塊、可編程設備邏輯和/或固定設備邏輯,其可以在一些實施例中用于實現(xiàn)本文所描述的技術的至少一些方面,比如執(zhí)行一個或多個指令。硬件可以包括以下各項的組件:集成電路或片上系統(tǒng)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)、復雜可編程邏輯器件(cpld)以及硅中的其他實現(xiàn)或其他硬件。在該上下文下,硬件可以操作為執(zhí)行由硬件所體現(xiàn)的邏輯和/或指令所定義的程序任務的處理設備,以及用于存儲用于執(zhí)行的指令的硬件,例如先前描述的計算機可讀存儲介質。
前述內容的組合也可以用于實現(xiàn)本文所述的各種技術。因此,軟件、硬件或可執(zhí)行模塊可以被實現(xiàn)為具體體現(xiàn)在某種形式的計算機可讀存儲介質上和/或由一個或多個硬件元件710具體體現(xiàn)的一個或多個指令和/或邏輯。計算設備702可以被配置為實現(xiàn)與軟件和/或硬件模塊相對應的特定指令和/或功能。因此,可以至少部分地以硬件(例如通過使用處理系統(tǒng)704的計算機可讀存儲介質和/或硬件元件710)來實現(xiàn)可由計算設備702作為軟件執(zhí)行的模塊的實現(xiàn)。指令和/或功能可能可由一個或多個制品(例如,一個或多個計算設備702和/或處理系統(tǒng)704)執(zhí)行/操作以實現(xiàn)本文所述的技術、模塊和示例。
如圖7中進一步所圖示,示例系統(tǒng)700在個人計算機(pc)、電視設備和/或移動設備上運行應用時,能夠實現(xiàn)用于無縫的用戶體驗的普遍存在的環(huán)境。服務和應用在所有三個環(huán)境中基本相似地運行,以便在利用應用、玩視頻游戲、觀看視頻等的同時從一個設備轉移到下一個設備時獲得共同的用戶體驗。
在示例系統(tǒng)700中,多個設備通過中央計算設備互連。中央計算設備可以是多個設備本地的,或者可以遠離多個設備定位。在一個實施例中,中央計算設備可以是通過網絡、因特網或其他數(shù)據通信鏈路連接到多個設備的一個或多個服務器計算機的云。
在一個實施例中,該互連架構使得能夠跨多個設備遞送功能以向多個設備的用戶提供共同的無縫體驗。多個設備中的每一個可以具有不同的物理需求和能力,并且中央計算設備使用平臺來使得能夠將針對設備定制并且仍然對于所有設備而言是共同的體驗遞送到設備。在一個實施例中,創(chuàng)建目標設備類,并且針對通用設備類來定制體驗。設備類可以由設備的物理特征、使用類型或其他常見特征來定義。
在各種實現(xiàn)中,計算設備702可以采取各種不同的配置,比如用于計算機714、移動裝置716和電視718用途。這些配置中的每一個包括可以具有一般不同的構造和能力的設備,因此可以根據不同設備類中的一個或多個來配置計算設備702。例如,計算設備702可以被實現(xiàn)為計算機714設備類,其包括個人計算機、臺式計算機、多屏幕計算機、膝上型計算機、上網本等。
計算設備702還可以被實現(xiàn)為移動裝置716設備類,其包括移動設備,比如移動電話、便攜式音樂播放器、便攜式游戲設備、平板計算機、多屏幕計算機等。計算設備702還可以被實現(xiàn)為電視機718設備類,其包括具有或連接到在休閑觀看環(huán)境中的一般更大的屏幕的設備。這些設備包括電視機、機頂盒、游戲控制臺等。
本文描述的技術可以由計算設備702的這些各種配置來支持,并且不限于本文所描述的技術的具體示例。該功能還可以全部或部分地通過使用分布式系統(tǒng)實現(xiàn),比如通過如下所述的平臺722在“云”720上實現(xiàn)。
云720包括和/或代表用于資源724的平臺722。平臺722抽象化云720的硬件(例如,服務器)和軟件資源的底層功能。資源724可以包括在遠離計算設備702的服務器上執(zhí)行計算機處理時可以利用的應用和/或數(shù)據。資源724還可以包括通過因特網和/或通過比如蜂窩或wi-fi網絡之類的訂戶網絡提供的服務。
平臺722可以抽象用于將計算設備702與其他計算設備相連的資源和功能。平臺722還可以用于抽象資源的規(guī)模以針對所遇到的對于經由平臺722實現(xiàn)的資源724的需求提供對應層次的規(guī)模。因此,在互連設備實施例中,本文描述的功能的實現(xiàn)可以分布在整個系統(tǒng)700中。例如,功能可以部分地實現(xiàn)在計算設備702上,以及經由抽象云720的功能的平臺722實現(xiàn)。
結論和示例實現(xiàn)
本文描述的示例實現(xiàn)包括但不限于以下示例中的一個或多個示例的一個或任一組合:
在一個或多個示例中,一種方法被配置為提高計算設備的管道內的緩沖器使用的效率。該方法包括,通過執(zhí)行探測、鎖定和映射操作來在計算設備的存儲器中創(chuàng)建緩沖器,并且由計算設備高速緩存存儲器描述符列表,該存儲器描述符列表在緩沖器信息高速緩存器中描述緩沖器,并且與用作對存儲器描述符列表的查找的句柄相關聯(lián)。該方法還包括,傳遞句柄以通過計算設備的管道,從而由管道的一個或多個階段對緩沖器內的數(shù)據進行處理,使得由一個或多個階段通過作為調用的一部分將句柄用作查找來從緩沖器信息高速緩存器獲得針對緩沖器的存儲器描述符列表,以獲得對數(shù)據的訪問。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中存儲器描述符列表被高速緩存在設備驅動器的緩沖器信息高速緩存器中,該緩沖器信息高速緩存器被配置為在計算設備的操作系統(tǒng)的內核模式中執(zhí)行。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中該句柄支持從操作系統(tǒng)的用戶模式查找在內核模式中的存儲器描述符列表。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中設備驅動器對應于照相機,并且緩沖器中的數(shù)據是圖像。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中緩沖器是循環(huán)分配器的一部分。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中循環(huán)分配器在計算設備的操作系統(tǒng)的用戶模式內執(zhí)行。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,還包括將所述句柄從所述管道傳遞到所述計算設備的信宿,使得由一個或多個階段通過作為調用的一部分將句柄用作索引以從瀏覽器信息高速緩存器獲得針對緩沖器的存儲器描述符列表而不重復探測、鎖定和映射操作,來獲得對數(shù)據的訪問。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,還包括由信宿再現(xiàn)、傳送或存儲緩沖器內的數(shù)據。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,還包括,檢測存儲器中的可用空間量已經降到閾值以下并且作為響應,恢復使用探測、鎖定和映射操作并停止使用緩沖器信息高速緩存器。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中,由一個或多個階段通過作為調用的一部分將句柄用作查找以從緩沖器信息高速緩存器獲得針對緩沖器的存儲器描述符列表而不重復探測、鎖定和映射操作,來獲得對數(shù)據的訪問。
在一個或多個示例中,描述了一種提高由計算設備的管道對緩沖器內的數(shù)據的訪問的效率的方法。該方法包括:由要訪問緩沖器內的數(shù)據的計算設備的管道的至少一個階段接收句柄,由所述至少一個階段調用該句柄的源以通過將句柄用作在緩沖器信息高速緩存器中的查找來由所述計算設備獲得描述緩沖器的存儲器描述符列表,以及由所述至少一個階段使用所獲得的存儲器描述符列表來訪問所述緩沖器內的數(shù)據。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中通過探測、鎖定和映射操作創(chuàng)建緩沖器,以及由所述至少一個階段使用存儲器描述符列表來訪問緩沖器內的數(shù)據在不使用探測、鎖定和映射操作的情況下執(zhí)行。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中存儲器描述符列表被高速緩存在設備驅動器的緩沖器信息高速緩存其中,該緩沖器信息高速緩存器被配置為在計算設備的操作系統(tǒng)的內核模式中執(zhí)行。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中該句柄支持從操作系統(tǒng)的用戶模式查找在內核模式中的存儲器描述符列表。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中緩沖器是循環(huán)分配器的一部分。
在一個或多個示例中,計算設備被配置為提高在計算設備的管道內的緩沖器使用的效率。計算設備包括被配置為執(zhí)行一個或多個操作的處理系統(tǒng)和被配置為維護可由處理系統(tǒng)執(zhí)行以執(zhí)行操作系統(tǒng)的指令的存儲器。操作系統(tǒng)被配置為,通過執(zhí)行探測、鎖定和映射操作在存儲器中創(chuàng)建緩沖器;高速緩存存儲器描述符列表,其在緩沖器信息高速緩存器中描述緩沖器并且與支持對存儲器描述符列表的查找的句柄相關聯(lián);由要訪問緩沖器內的數(shù)據的管道的至少一個階段接收句柄;由所述至少一個階段調用所述句柄的源以獲得所述存儲器描述符列表;以及由所述至少一個階段使用存儲器描述符列表來訪問緩沖器內的數(shù)據。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中通過探測、鎖定和映射操作創(chuàng)建緩沖器,以及由所述至少一個階段使用存儲器描述符列表來訪問緩沖器內的數(shù)據在不使用探測、鎖定和映射操作的情況下執(zhí)行。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中存儲器描述符列表被高速緩存在設備驅動器的緩沖器信息高速緩存器中,緩沖器信息高速緩存器被配置為在計算設備的操作系統(tǒng)的內核模式中執(zhí)行。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中該句柄支持從操作系統(tǒng)的用戶模式查找在內核模式中的存儲器描述符列表。
如單獨地或與本文任何其它敘述的示例組合地描述的示例,其中緩沖器是循環(huán)分配器的一部分。
雖然已經以特定于結構特征和/或方法動作的語言描述了示例實現(xiàn),但是應當理解,在所附權利要求中限定的實現(xiàn)不一定限于所描述的特定特征或動作。相反,特定特征和動作被公開為實現(xiàn)所要求保護的特征的示例形式。