本發明涉及通信領域,具體涉及一種共享內存管理方法及共享內存管理設備。
背景技術:
網絡功能虛擬化(英文:networkfunctionvirtualization,nfv)系統通過軟硬件解耦及功能抽象,使網絡設備功能不再依賴于專用硬件,資源可以充分靈活共享,實現新業務的快速開發和部署。nfv技術的基礎包含云計算技術和虛擬化技術,通用的計算、存儲、網絡等硬件設備通過虛擬化技術可以分解為多種虛擬資源,以供上層各種應用程序使用。
當在nfv系統上運行多個應用程序(英文:application,app)時,為了實現在不同的應用進程之間進行報文轉發,可以采用共享內存機制的零拷貝技術,也即不同的應用程序共享同一包緩存(英文:packetbuffer,pbuf)內存,從而可以避免在不同應用程序之間進行拷貝操作,提升系統的性能。但同時使用共享內存機制時,由于各應用程序共享同一pbuf內存,所以破壞了應用程序間的隔離性,導致當出現pbuf內存誤操作問題時,無法準確定位內存問題現場。
技術實現要素:
本發明實施例提供了一種共享內存管理方法及共享內存管理設備,以在app對共享pbuf內存進行誤操作時,準確定位產生誤操作的問題現場。
第一方面,本發明實施例提供一種共享內存管理方法,該方法應用于報文零拷貝系統中,該報文零拷貝系統運行于操作系統上,該報文零拷貝系統包括至少兩個應用程序apps,該apps的共享內存第一pbuf內存,該方法通過以下步驟進行共享內存管理。首先apps中的任一應用程序app設置該app對第一pbuf內存的讀寫操作保護屬性在當前時刻為只讀;然后在app接收到操作系統發送的pbuf內存誤操作通知消息時,獲取pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,該pbuf內存誤操作通知消息用于提醒app對第一pbuf內存進行寫操作以及該寫操作的具體位置;最后app基于pbuf內存誤操作現場信息確定app對第一pbuf內存進行寫操作的內存誤操作現場。從而實現在多個app共享同一pbuf內存的情況下,當該共享pbuf內存出現內存誤操作時,能快速并準確地定位產生該pbuf內存誤操作的app以及具體位置,即確定pbuf內存誤操作現場,保障系統可靠性。
在一個可能的設計中,該操作系統包括linux操作系統,該linux操作系統包括mprotect內存管理接口,該mprotect內存管理接口用于被調用以設置第一pbuf內存的讀寫操作屬性;從而app通過調用該mprotect內存管理接口設置app對第一pbuf內存的讀寫操作屬性在當前時刻為只讀。從而通過調用linux操作系統的mprotect內存管理接口可以方便地在linux操作系統下對第一pbuf內存的讀寫操作屬性進行設置。
在一個可能的設計中,mprotect內存管理接口用于被app調用以基于一個或多個頁表設置app對第一pbuf內存的讀寫操作屬性。從而使得基于頁表管理的mprotect內存讀寫操作管理機制可獨立對該第一pbuf內存進行控制。
在一個可能的設計中,該報文零拷貝系統還包括第二pbuf內存,apps的共享內存還包括該第二pbuf內存,其中,該第一pbuf內存為小頁內存,該第二pbuf內存為大頁內存,該第一pbuf內存與一個或多個頁表存在唯一對應關系。app在預設時刻確定第一pbuf內存為apps的共享內存,app在預設時刻之外確定第二pbuf內存為apps的共享內存。當該預設時刻的頻率越小時,則說明進行pbuf內存監控的頻率越小,所以此時系統可靠性相對較小,而此時使用大頁內存第二pbuf內存進行填充的相對次數多,系統的性能提升較大;而預設時刻的頻率越大,則說明進行pbuf內存監控的頻率越大,所以此時系統的可靠性相對較大,而此時使用大頁內存第二pbuf內存進行填充的相對次數小,系統的性能提升較小。故可以根據需求,權衡系統的性能提升與可靠性設置該預設時刻。
在一個可能的設計中,該第一pbuf內存還用于緩存軌跡標識,app還通過該軌跡標識記錄第一pbuf內存的軌跡點信息,該軌跡點信息包括所應用程序標識、應用程序當前進程標識以及當前時刻。通過在第一pbuf的軌跡點信息確定的第一pbuf的軌跡,來進一步確定該第一pbuf所經過的上游app,從而在確定app對第一pbuf內存進行寫操作的內存誤操作現場后,可進一步通過該app的上游app來進行pbuf內存問題排查,以進一步提高系統可靠性。
第一方面,本發明實施例提供一種共享內存管理方法,該方法應用于操作系統,該操作系統上運行有報文零拷貝系統,該報文零拷貝系統包括至少兩個應用程序apps,apps包括第一報文緩存pbuf內存,該方法通過以下步驟實現共享內存管理。首先操作系統根據apps中的任一應用程序app對第一pbuf內存的讀寫操作屬性設置指示記錄app對第一pbuf內存的讀寫操作屬性為只讀;從而當操作系統監控到app對第一pbuf內存進行寫操作,操作系統向app發送pbuf內存誤操作通知消息,該pbuf內存誤操作通知消息用于提醒app對第一pbuf內存進行寫操作以及該寫操作的具體位置。從而實現在多個app共享同一pbuf內存的情況下,當該共享pbuf內存出現內存誤操作時,能快速并準確地定位產生該pbuf內存誤操作的app以及具體位置,即確定pbuf內存誤操作現場,保障系統可靠性的同時能提高系統性能。
在一個可能的設計中,該操作系統包括linux操作系統,該linux操作系統包括mprotect內存管理接口,該mprotect內存管理接口用于被app調用以設置該app對第一pbuf內存的讀寫操作屬性;在app通過調用mprotect內存管理接口設置app對第一pbuf內存的讀寫操作屬性在當前時刻為只讀時,linux操作系統記錄app對第一pbuf內存的讀寫操作屬性。從而通過調用linux操作系統的mprotect內存管理接口可以方便地在linux操作系統下對第一pbuf內存的讀寫操作屬性進行設置。
在一個可能的設計中,所述mprotect內存管理接口用于被app調用以基于一個或多個頁表設置app對第一pbuf內存的讀寫操作屬性。從而使得基于頁表管理的mprotect內存讀寫操作管理機制可獨立對該第一pbuf內存進行控制。
在一個可能的設計中,該頁表包括讀寫操作屬性標識,操作系統通過該頁表上的讀寫操作屬性標識記錄app對第一pbuf內存的讀寫操作屬性為只讀。從而使得基于頁表管理的mprotect內存讀寫操作管理機制可獨立對該第一pbuf內存進行控制。
第三方面,本發明實施例提供一種應用程序app,該應用程序app具有實現上述第一方面的方法的功能,所述功能可以通過硬件實現,也可以通過硬件執行相應的軟件實現。所述硬件或軟件包括一個或多個與上述功能相對應的模塊。
第四方面,本發明實施例提供一種計算機存儲介質,用于儲存為上述用于第三方面所述的應用程序app所用的計算機軟件指令,其包含用于執行上述第一方面的方法的程序。
第五方面,本發明實施例提供一種操作系統,該操作系統具有實現上述第二方面的方法的功能,所述功能可以通過硬件實現,也可以通過硬件執行相應的軟件實現。所述硬件或軟件包括一個或多個與上述功能相對應的模塊。
第六方面,本發明實施例提供一種計算機存儲介質,用于儲存為上述用于第五方面所述的操作系統所用的計算機軟件指令,其包含用于執行上述第二方面的方法的程序。
第七方面,本發明實施例提供一種共享內存管理裝置,該共享內存管理裝置包括存儲有可執行程序代碼的存儲器,以及與所述存儲器耦合的處理器;所述處理器上運行有應用程序app與操作系統,所述操作系統上運行有報文零拷貝系統,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一包緩存pbuf內存,所述app為所述apps中的任一app,所述app用于執行本發明第一方面的方法流程。
第八方面,本發明實施例提供一種共享內存管理裝置,該共享內存管理裝置包括存儲有可執行程序代碼的存儲器,以及與所述存儲器耦合的處理器;所述處理器上運行有應用程序app和操作系統,所述操作系統上運行有報文零拷貝系統,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一報文緩存pbuf內存,所述app為所述apps中的任一app,所述操作系統用于執行本發明第二方面的方法流程。
第九方面,本發明實施例提供一種共享內存管理設備,該共享內存管理設備包括處理器和存儲器。該處理器上運行第三方面的應用程序app和第五方面的操作系統,該處理器被配置為支持應用程序app以及操作系統執行本發明實施例所提供的共享內存管理方法。該存儲器用于與處理器耦合,用于存儲應用程序app必要的程序代碼和數據,以及用于存儲操作系統必要的程序代碼和數據。
相較于現有技術,本發明實施例的方案中在多個app共享同一pbuf內存的情況下,通過設置app對第一pbuf內存的讀寫操作屬性為只讀,從而在操作系統監控到app對第一pbuf進行寫操作時,操作系統向app發送pbuf內存誤操作通知消息,以使app基于該pbuf內存誤操作通知消息快速并準確地定位產生該pbuf內存誤操作的app以及具體位置,即確定pbuf內存誤操作現場,保障系統可靠性。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹。
圖1是本發明實施例提供的一種網絡功能虛擬化系統的架構示意圖;
圖2是本發明實施例提供的另一種nfv系統的架構示意圖;
圖3是本發明實施例提供的又一種nfv系統的架構示意圖;
圖4是本發明實施例提供的一種報文零拷貝系統的架構示意圖;
圖5是本發明實施例提供的一種共享內存管理方法的流程示意圖;
圖6是本發明實施例提供的一種app進程間第一pbuf內存管理流程示意圖;
圖7是本發明實施例提供的一種報文零拷貝流程以及第一pbuf內存管理流程示意圖;
圖8-a是本發明實施例提供的另一種報文零拷貝系統的架構示意圖;
圖8-b是本發明實施例提供的另一種報文零拷貝流程以及pbuf內存管理流程示意圖;
圖9是本發明實施例提供的一種應用程序app的結構示意圖;
圖10是本發明實施例提供的一種操作系統的結構示意圖;
圖11為本發明實施例提供的一種共享內存管理裝置的結構示意圖;
圖12為本發明實施例提供的另一種共享內存管理裝置的結構示意圖;
圖13為本發明實施例提供的一種共享內存管理設備的結構示意圖。
具體實施方式
為了使本技術領域的人員更好地理解本發明方案,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述。
為了更好地理解本發明技術方案,下面首先對本發明實施例所基于的應用場景進行說明。
首先參見圖1,圖1是本發明實施例提供的一種網絡功能虛擬化系統nfv100的架構示意圖。如圖1所示,該nfv系統包括硬件層110,管理程序(英文:hyperviser)層120,操作系統(英文:opersystem,os)層130、應用程序(英文:application,app)層140,其中,操作系統層130和各個應用程序構成虛擬機(英文:virtualmachine,vm)。
其中,硬件層110為虛擬化環境運行的硬件平臺,該硬件層110可以由一臺或多臺服務器組成;管理程序120直接安裝在硬件計算資源上,用于管理和調用硬件資源,不需要底層操作系統,也即可以理解管理程序為一個很薄的操作系統;操作系統層130包括一個或多個操作系統,是運行在管理程序上的訪問操作系統(英文:guestos),在本發明實施例中,該操作系統可以為linux操作系統或其它操作系統;應用程序層140包括一個或多個應用程序模塊,是運行在訪問操作系統上的應用,為客戶提供服務。
參見圖2,圖2是本發明實施例提供的另一種nfv系統的架構示意圖。如圖2所示,該nfv系統包括硬件層210,宿主機(英文:host)層220,管理程序層230,訪問操作系統(英文:guest)240、app層250。其中,圖2所示的nfv系統架構與圖1所示的網絡功能虛擬化系統架構不同之處在于,在圖2所示的網絡功能虛擬化系統架構中,通過增加host層220,該host層可用于安裝基礎操作系統,從而使管理程序層230運行在基礎操作系統上,構建出一整套虛擬硬件平臺,使用者根據需要在guest層上安裝新的操作系統和應用軟件,host層和guest層上的操作系統可以完全無關。在本發明實施例中,該host層的操作系統可以為windos操作,該guest層上的操作系統可以為linux操作系統。
參見圖3,圖3是本發明實施例提供的又一種nfv系統的架構示意圖。在圖3所示的網絡功能虛擬化系統中,包括網絡功能虛擬化基礎設施層(英文:nfvinfrastructure,nfvi)310、虛擬網絡功能(英文:virtualnetworkfunctions,vnfs)320、操作/業務支持系統(英文:operationsupportsystem/businesssupportsystem,oss/bss)330以及網絡功能虛擬化管理和編排系統(英文:nfvmanagementandorchestration,nfvmano)340。
其中,虛擬化基礎設施層310包括硬件資源層,虛擬化層以及虛擬資源層,vnfs320包括多個vnf以及多個網元管理器(英文:elementmanager,em),可以為用戶提供不同的虛擬網絡功能。相對于圖1或圖2所示的架構,可以認為圖1或圖2中的app部署于圖3中的vnf。
其中,nfvmano包括網絡功能虛擬化編排器(英文:nfvorchestrator,nfvo)、一個或多個虛擬化網絡功能管理器(英文:vnfmanager,vnfm)和虛擬化基礎設施管理器(英文:virtualizedinfrastructuremanager,vim),網絡服務目錄(英文:networkservicecatalogue,nscatalogue),用于負責對整個nfvi資源的管理和編排,負責業務網絡和nfvi資源的映射和關聯,負責oss業務資源流程的實施等,mano通過解析產品提供的虛擬網絡功能描述符(英文:vnfdescriptor,vnfd)文件實現虛擬機的創建、網元的安裝、親和及反親和的配置、系統擴縮容等操作。
參見圖4,圖4是本發明實施例提供的一種報文零拷貝系統400的架構示意圖,如圖4所示,該報文零拷貝系統400包括n個app,也即包括apps,分別為app1,app2,···appn,第一網卡和第一網卡隊列,第二網卡和第二網卡隊列,以及一個報文緩存pbuf內存。其中,不同的app屬于不同的業務進程,該pbuf內存由n個app共享。
在本發明實施例中,該n個app可以為上述圖1和圖2中運行于同一個vm的app,也可以為圖3中的vnf,也可以為運行于物理計算機中的不同應用程序。
在本發明實施例中,該報文零拷貝系統可運行于物理計算機上的操作系統上,也可以運行于nfv系統中的操作系統上。
值得說明的是,該app可以為一個獨立的功能模塊,用于執行特征的功能,例如,可以為用于執行傳輸層處理功能的app、或用于執行應用層處理功能的app,或也可以為一個獨立函數編寫的功能模塊。
可選地,在本發明的一個實施例中,該多個app可以為不同的進程;也可以為同一個進程中的不同線程。不管該多個app處于不同的進程,還是處于同一個進程中的不同線程,只要該多個app共享同一pbuf內存,并利用該pbuf內存在該多個app之間進行報文轉發的場景均為本發明實施例所提供的應用場景。
在本發明實施例中,上述第一網卡和第二網卡可以為虛擬網卡(英文:virtualnetworkcard,vnic),也可以為物理網卡。
在本發明實施例中,當利用該報文零拷貝系統進行零拷貝報文轉發時,首先app1進程往第一網卡隊列中填充pbuf內存的直接內存存儲(英文:directmemoryaccess,dma)地址后,第一網卡往該pbuf內存地址中填充報文,然后app1從第一網卡隊列中收包該報文至pbuf內存,并將該報文依次經過多個app進程進行處理,最后appn處理完畢后,第二網卡再往第二網卡隊列中填充該pbuf內存地址,appn將該報文填充至第二網卡隊列的pbuf內存地址,然后第二網卡從該第二網卡隊列中回收該報文并發送出去。當第二網卡發送報文后,appn收回該pbuf內存至內存池。可以看出,該報文零拷貝系統通過pbuf內存共享內存,實現在不同的app之間的報文轉發,從而實現報文零拷貝。
但同時,基于該報文零拷貝系統,由于不同的app共享同一個pbuf內存,所以破壞了不同的app進程間的隔離性,當跨進程操作時出現pbuf內存問題時,無法找到出現pbuf內存問題所在的app與具體位置(例如,當pbuf內存出現問題時,無法確定是n個app中具體哪個app發生誤操作問題),也即無法定位問題第一現場,導致業務恢復周期長。
為了解決上述問題,本發明實施例提出了一種共享內存管理方法,通過設置pbuf內存的讀寫操作屬性,以在pbuf內存發生誤操作時,獲取到產生該pbuf內存誤操作的內存誤操作現場,增強報文零拷貝系統可靠性。
下面對本發明實施例進行詳細說明。參見圖5,圖5是本發明實施例提供的一種共享內存管理方法的流程示意圖,該共享內存管理方法應用于圖4所示的零拷貝系統,該報文零拷貝系統運行于操作系統,如圖5所示,該方法可以包括以下步驟:
s501、apps中的任一應用程序app設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀,所述操作系統記錄所述app對所述第一pbuf內存的讀寫操作屬性。
在本發明實施例中,該至少兩個應用程序為圖4所示的apps,該至少兩個應用程序中的任一應用程序app可以為app1至appn間的任一應用程序,例如,app1,app2,appn。
其中,第一pbuf內存的讀寫操作屬性是指為了對共享內存第一pbuf進行管理,防止多個應用程序同時對第一pbuf進行寫操作而產生內存問題,由各app所設置的該app對第一pbuf在某時刻所應當執行的讀寫操作,從而當app對第一pbuf內存執行了讀寫操作屬性以外的操作時,操作系統則認為是內存誤操作。
在本發明實施例中,該讀寫操作屬性包括只讀、讀寫、以及只寫。當設置app對第一pbuf內存的讀寫操作屬性為只讀時,而此時app對第一pbuf內存執行了寫操作,此時操作系統認為app對第一pbuf內存誤操作;當設置app對第一pbuf內存為讀寫時,也即此時app對第一pbuf內存執行讀操作或者寫操作,操作系統均不會監控為內存誤操作;當設置app對第一pbuf內存為只寫時,從而此時當app對第一pbuf內存執行了讀操作,操作系統認為app對第一pbuf內存誤操作。值得說明的是,對于讀寫操作屬性為讀寫時,也可進一步在app對第一pbuf內存執行讀操作的情況下,確定此時的讀寫操作屬性為只讀,在app對第一pbuf內存執行寫操作的情況下,確定此時的讀寫操作屬性為只寫。
可選地,在本發明的一個實施例中,當app通過第一pbuf內存接收到報文并進行處理時,此時該app設置對第一pbuf內存的讀寫操作屬性為讀寫,而在其它時刻app對該第一pbuf內存的讀寫操作屬性為只讀,例如,當app未接收到報文時,或者當app將報文處理完畢并發送至其它app后,app對該第一pbuf內存的讀寫操作屬性均為只讀。
具體地,在本發明的一個實施例中,當app通過第一pbuf內存接收到預設報文并處理時,此時該app將對該第一pbuf內存的讀寫操作屬性設置為讀寫,而其它app對該第一pbuf內存的讀寫操作屬性為只讀,當app將該預設報文發送給其它app后,此時將收回該寫操作屬性,也即此時app對該預設報文的讀寫操作屬性將重設置為只讀。當各app設置好對第一pbuf內存的讀寫操作屬性后,后續該零拷貝系統所運行的操作系統監控到存在app對第一pbuf內存的誤操作時,將發出pbuf內存誤用通知消息,以提示用戶第一pbuf內存出現問題,從而通過該方式可以實現對第一pbuf內存的管理。
舉例說明,在本發明的一個示例中,具體參見圖6,圖6是本發明實施例提供的一種app進程間第一pbuf內存管理流程示意圖。在報文在app1、app2以及app3之間進行轉發的情況下,當app1在時刻1通過第一pbuf內存接收到報文并進行處理,此時app1對第一pbuf內存的讀寫操作屬性設置為讀寫;當app1將報文發送至app2進程后,app2在時刻2接收到該報文,此時app2對第一pbuf內存的讀寫操作屬性將設置為讀寫,而此時app1將收回第一pbuf內存的寫操作,也即此時app1對第一pbuf內存的讀寫操作屬性將為只讀。在這兩個時刻,app3未對報文進行處理,所以app3對該第一pbuf內存的讀寫操作屬性一直設置為只讀。
更進一步地,參見圖7,圖7是本發明實施例提供的一種報文零拷貝流程以及第一pbuf內存管理流程示意圖。當利用該報文零拷貝系統進行零拷貝報文轉發時,首先app1、app2和app3將對第一pbuf內存的讀寫操作屬性均設置為只讀。app1往第一網卡隊列填充dma地址,也即第一pbuf內存地址,第一網卡將報文收包之后將該報文寫入第一網卡隊列中,然后app1使用第一pbuf內存從第一網卡隊列中收包該報文,此時app1將對該第一pbuf內存的讀寫操作屬性設置為讀寫;當app1對第一pbuf內存中的報文處理完畢后,將該報文發送至app2,此時app1收回該第一pbuf內存的寫操作屬性,也即此時app1進程對該第一pbuf內存的讀寫操作屬性為只讀,而此時app2將設置對該第一pbuf內存的讀寫操作屬性為讀寫;當app2對該報文處理完畢后,再依次發往下一個app,各app的第一pbuf內存的讀寫操作屬性設置方式同上步驟。當報文轉發到appn后,appn對第一pbuf內存的讀寫操作屬性為讀寫,當appn對報文進行處理后,appn將該報文發送給app1,并收回寫操作屬性。此時app1接收到該報文后,app1重新設置對第一pbuf內存的讀寫操作屬性為讀寫,最后app1將報文發送至第二網卡隊列,然后第二網卡將報文第二網卡隊列中取出,完成整個網卡收發包流程。需要說明的是,在圖7所示的流程中,由app1統一管理網卡的收發包。
具體地,在本發明的一個實施例中,當各app運行在linux操作系統時,linux操作系統包括mprotect內存管理接口,該mprotect內存管理接口用于設置所述第一pbuf內存的讀寫操作屬性,也即當app在處理第一pbuf內存報文時,app通過調用mprotect內存管理接口設置app對該第一pbuf內存的讀寫操作屬性為讀寫,其它app則通過調用mprotect內存管理接口設置對該第一pbuf的讀寫操作屬性為只讀,此時linux操作系統將記錄app對第一pbuf內存的讀寫操作屬性。一旦讀寫操作屬性為只讀的app對第一pbuf內存進行寫操作時,linux系統可以立即偵聽到該內存誤操作,然后linux操作系統產生段錯誤信號segmentfault,用于提示app對第一pbuf的內存進行了誤操作了,然后該app即可通過該錯誤信息提示打印出調用棧信息來確定異常的上下文第一現場。可以理解,通過調用linux操作系統的mprotect內存管理接口可以方便地在linux操作系統下對第一pbuf內存的讀寫操作屬性進行設置。
可選地,在本發明的一個實施例中,由于mprotect內存管理接口是基于頁表進行管理的,也即同一頁表上所對應內存的讀寫操作屬性將同時進行設置,具體地,各頁表包括讀寫操作屬性標識,從而操作系統記錄app對第一pbuf內存的讀寫操作屬性為只讀時,可以通過在該頁表上的讀寫操作屬性標識上記錄app對第一pbuf內存的讀寫操作屬性為只讀。由于各頁表對應一個讀寫操作屬性標識,也即各頁表通過該讀寫操作屬性標識來統一設置該頁表所對應pbuf內存的讀寫操作屬性。故當基于mprotect內存讀寫操作管理機制進行內存讀寫操作管理時,為了使在由mprotect內存讀寫操作管理機制對第一pbuf內存的讀寫操作屬性進行設置時,不至于干擾到該頁表上的其它內存的讀寫操作屬性,所以需要使該頁表與第一pbuf內存存在唯一的對應關系,也即該第一pbuf內存對應的一個頁表或多個頁表由mprotect內存讀寫操作管理機制獨立進行控制,此時與該第一pbuf內存對應的一個或多個頁表的讀寫操作屬性標識將同時進行設置為只讀或者讀寫。
可選地,在本發明的一個實施例中,該頁表可以為普通的4k比特的頁表,例如第一pbuf內存大小為4k比特以內大小時,該第一pbuf內存對應一個頁表,此時mprotect內存讀寫操作管理機制通過獨立設置控制該頁表以對第一pbuf內存的讀寫操作屬性進行獨立控制,具體地,可以通過設置該頁表的讀寫操作屬性標識來設置各app對該第一pbuf的讀寫操作屬性,或者如果第一pbuf內存大小為8k比特時,該第一pbuf內存對應連續兩個頁表,此時mprotect內存讀寫操作管理機制可通過同時控制該兩個頁表以對第一pbuf內存的讀寫操作屬性進行獨立控制,具體地,可以通過同時設置該2個頁表的讀寫操作屬性標識為相同(同時為只讀或者同時為讀寫)來獨立控制第一pbuf內存的讀寫操作屬性。可以理解,通過使得第一pbuf內存獨立于其它pbuf內存與頁表唯一對應,使得基于頁表管理的mprotect內存讀寫操作管理機制可獨立對該第一pbuf內存進行控制。
可選地,在本發明的一個實施例中,所述報文零拷貝系統還包括第二pbuf內存,所述apps的共享內存還包括第二pbuf內存,報文零拷貝系統在使用共享內存進行零拷貝時,app可在預設時刻確定所述第一pbuf內存為所述apps的所述共享內存,所述app在預設時刻之外確定所述第二pbuf內存為所述apps的共享內存,所述第一pbuf內存為小頁內存,所述第二pbuf內存為大頁內存,所述第一pbuf內存與所述一個或多個頁表存在唯一對應關系。
其中,大頁內存是指通過增加頁表大小來減少頁表數量,提高系統性能,在大頁內存下,每個頁表大小可以1g比特或更大,而如果apps的共享內存大小僅4k比特時,此時每個頁表將對應多個pbuf內存。小頁內存是與大頁內存相對的概念,小頁內存下,每個頁表的大小可為普通4k比特大小的頁表或8k比特大小的頁表。
可選地,在本發明的一個實施例中,預設時刻是指app基于預設規則確定的,例如,可以是基于預設采樣周期確定的,從而app在預設采樣周期對應的預設時刻使用第一pbuf內存,在預設采樣周期之外的時刻使用第二pbuf內存;又例如,也可以是在報文零拷貝系統即將處理的報文的類型是預設類型時,使用第一pbuf內存保存該報文(即確定當前時刻為預設時刻),在報文零拷貝系統即將處理的報文的類型是其它類型時,使用第二pbuf內存保存該報文(即確定當前時刻為預設時刻之外),從而可基于報文零拷貝系統當前將處理的報文類型確定預設時刻。
具體地,在本發明的一個實施例中,由于在4k比特頁表下,系統性能比較低,而如果將該pbuf內存設置為大頁內存,此時將存在多個pbuf內存對應同一個頁表的情況,如果對當前的pbuf內存的讀寫操作進行管理時,將錯誤地管理到同一頁表的其它pbuf內存,造成系統功能異常。所以,在保證系統性能與防止系統功能異常的情況下,可以通過增加第二pbuf內存,設置該第二pbuf內存為大頁內存,從而app可通過第一pbuf內存或第二pbuf內存接收并處理預設報文,提升系統性能。例如可參見圖8-a,圖8-a是本發明實施例提供的另一種報文零拷貝系統的架構示意圖。但由于第二pbuf內存為大頁內存,linux操作系統并不對該第二pbuf內存進行讀寫操作管理,只對第一pbuf內存進行讀寫操作管理。可設置第一pbuf內存的預設采樣周期,app進程在預設采樣周期對應的采樣時刻填充第一pbuf內存,然后通過對該第一pbuf內存進行讀寫操作管理,保證系統可靠性。例如,在設置第一pbuf內存的預設采樣周期為1000的情況下,每填充999個第二pbuf內存,填充一個第一pbuf內存,linux對該第一pbuf內存進行讀寫操作管理以保證系統可靠性,同時由于在1000個pbuf內存中有999個采用的是大頁內存的第二pbuf內存,所以可保證系統的高性能。
值得說明的是,通過設置app使用第一pbuf內存的預設時刻,當該預設時刻的頻率越小時,則說明進行pbuf內存監控的頻率越小,所以此時系統可靠性相對較小,而此時使用大頁內存第二pbuf內存進行填充的相對次數多,系統的性能提升較大;而預設時刻的頻率越大,則說明進行pbuf內存監控的頻率越大,所以此時系統的可靠性相對較大,而此時使用大頁內存第二pbuf內存進行填充的相對次數小,系統的性能提升較小。故可以根據需求,權衡系統的性能提升與可靠性設置該預設時刻。
更進一步地,參見圖8-b,圖8-b是本發明實施例提供的另一種報文零拷貝流程以及pbuf內存管理流程示意圖。圖8-b所示的流程為基于圖8-a所示的零報文拷貝系統執行的,也即包括兩個pbuf內存:第一pbuf內存與第二pbuf內存。由于第一pbuf內存與頁表一一對應,第二pbuf內存為大頁內存,所以設置預設采樣周期對第一pbuf內存進行采樣填充,并僅使用mprotect內存讀寫操作管理機制對第一pbuf內存進行讀寫操作管理,對于第二pbuf內存則不進行內存讀寫操作管理。并且圖8-b所示的流程由app1統一管理網卡的收發包。如圖8-b所示,首先app1、app2和app3將第一pbuf內存的讀寫操作屬性均設置為只讀。app1往第一網卡隊列中填充dam地址時,當不為預設采樣周期時,使用第二pbuf內存的dma地址填充第一網卡隊列,從而后續app1通過第二pbuf內存從第一網卡隊列讀取報文并處理;當為預設采樣周期時,使用第一pbuf內存的dma地址填充第一網卡隊列,從而當app1通過第一pbuf內存從第一網卡隊列讀取報文后,由于第一pbuf內存為需要進行讀寫操作屬性設置的采樣pbuf內存,所以app1設置第一pbuf內存的讀寫操作屬性為讀寫,并處理報文,當處理完報文后,app1收回第一pbuf內存的寫操作屬性,并將該報文發往app2。
app2收到app1發送的報文時,判斷該pbuf內存是否為采樣第一pbuf內存,在判斷為否的情況下,不進行讀寫操作屬性設置直接處理,在判斷為是的情況下,設置該第一pbuf內存的讀寫操作屬性為讀寫,并處理報文,當處理完報文后,app2收回第一pbuf內存的寫操作屬性,并將該報文發往app3。
app3收到app2發送的報文時,判斷該pbuf內存是否為采樣第一pbuf內存,在判斷為否的情況下,不進行讀寫操作屬性設置直接處理,在判斷為是的情況下,設置該第一pbuf內存的讀寫操作屬性為讀寫,并處理報文,當處理完報文后,app3收回第一pbuf內存的讀操作屬性,并將該報文發往app1。
app1收到該報文后,在判斷為第二pbuf內存的情況下,此時不進行讀寫操作屬性設置,處理完報文后將報文發送至第二網卡隊列并回收該第二pbuf內存至pbuf內存池。在判斷為第一pbuf內存的情況下,此時設置該第一pbuf內存的讀寫操作屬性為讀寫,并處理報文,然后再將報文發送到第二網卡隊列,以及從第二網卡隊列中回收該第一pbuf內存至pbuf內存池,同時收回第一pbuf內存的寫操作屬性。從而完成整個報文零拷貝過程。
s502、在操作系統監控到app對第一pbuf內存進行寫操作的情況下,操作系統向app發送pbuf內存誤操作通知消息,此時app接收到操作系統發送的pbuf內存誤操作通知消息,并獲取所述pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,所述pbuf內存誤操作通知消息用于指示所述app對所述第一pbuf內存進行寫操作以及所述寫操作的具體位置。
可選地,在本發明的一個實施例中,該pbuf內存誤操作現場信息包括調用棧信息。
具體地,在本發明的一個實施例中,當操作系統監測到第一pbuf內存為只讀時,app對該第一pbuf內存進行了寫操作,然后操作系統將向該app發送pbuf內存誤操作通知消息,例如,該pbuf內存誤操作通知消息可為段錯誤信號segmentfault,然后app通過該段錯誤信號segmentfault打印出來調用棧信息,從而進一步地,該app可以根據該調用棧信息確定導致內存錯誤的具體位置,以及使得app可以根據該具體位置修復導致內存錯誤的問題。
可選地,在本發明的一個實施例中,所述第一pbuf內存還用于緩存軌跡標識,所述app接收到pbuf內存誤操作通知消息后,app還可以通過該第一pbuf內存的軌跡標識記錄第一pbuf內存的軌跡點信息,該軌跡點信息包括應用程序app標識、應用程序當前進程標識以及當前時刻,其中,app標識用于指示在某個時刻使用該第一pbuf內存的app,應用程序當前進程標識指示在某個時刻使用該第一pbuf內存的app進程。
在本發明實施例中,軌跡點信息是指使用該第一pbuf內存的app的相關信息,從而將使用該第一pbuf的app的相關信息按時間順序銜接則構成第一pbuf內存的軌跡點信息。
具體地,在本發明實施例中,可以通過軌跡標識來記錄軌跡點信息,其中,該軌跡標識可以是指第一pbuf內存中用于保存報文的內存空間,從而可以利用該剩余內存空間來記錄第一pbuf的軌跡點信息。
舉例說明,在本發明的一個示例中,參見圖4。當app1進程在第一時刻接收并處理第一pbuf內存報文時,app1進程在第一pbuf內存的剩余內存空間中記錄此時的軌跡點信息,也即app1標識、app2進程標識以及第一時刻;然后當app1將第一內存報文發送至app2后,app2進程在第二時刻接收并處理第一pbuf內存報文時,app2進程再更一步在該第一pbuf內存的剩余空間中記錄此時的軌跡點信息,也即app2標識、app2進程標識以及第二時刻;依次記錄第一pbuf內存所經過的所有的軌跡點信息,從而在appn當中將包括第一pbuf內存從app1到appn的所有軌跡點信息,將該所有軌跡點信息根據時間先后即可得到第一pbuf內存所經過的軌跡。更進一步地,還可以記錄零拷貝系統中的第一pbuf內存經過第一網卡隊列以及第二網卡隊列的軌跡。
可以理解,當記錄到第一pbuf的軌跡點信息后,則可以當在某個app發生誤用寫操作時,可以通過在第一pbuf的軌跡點信息確定的第一pbuf的軌跡,來進一步確定該第一pbuf所經過的上游app,以進一步提高系統可靠性。
s503、app基于所述pbuf內存誤操作現場信息確定所述app對所述pbuf內存進行寫操作的內存誤操作現場。
更進一步地,在本發明的一個實施例中,可以基于該內存誤操作現場進行業務恢復。
舉例說明,在本發明的一個示例中,在報文零拷貝系統工作時,并且第一pbuf內存發送至app3,此時app2通過調用mprotect內存管理接口設置app2對第一pbuf內存的讀寫操作屬性為只讀,app2將接收到系統發送的pbuf內存誤操作通知消息,例如段錯誤信號,然后app2基于該段錯誤信號打印調用棧信息,并由app2基于該調用棧信息確定產生對第一pbuf進行寫操作的位置,也即產生誤寫操作的代碼位置,從而可使得app基于該位置修復該問題,防止后續app2對第一pbuf內存進行誤寫操作。通過設置各app對第一pbuf內存的讀寫操作屬性,從而在第一pbuf內存運行至app3時,在app2對該第一pbuf內存進行了寫操作的情況下,系統能通過pbuf內存誤操作通知消息提醒app2,以使得app2可以及時定位并修改該第一pbuf內存問題,保證系統可靠性,并且也使得此刻正操作第一pbuf內存的app3不至于浪費資源去進行pbuf內存問題排查,也進一步提高了系統性能。
更進一步地,app可在對第一pbuf內存進行誤寫操作時,記錄下app對第一pbuf內存進行寫操作之前該第一pbuf內存相應位置所存儲的數值,從而當app對第一pbuf內存進行誤寫時,可將該第一pbuf內存相應位置的數值恢復至誤寫之前的數值,以進一步提高系統可靠性與系統性能,也提高了系統魯棒性。
更進一步地,通過記錄第一pbuf內存的軌跡點信息,在確定app對第一pbuf內存進行寫操作的內存誤操作現場后,可進一步通過該app的上游app來進行pbuf內存問題排查,進一步提高系統可靠性。
值得說明的是,上述方法實施例不僅可用于當app對第一pbuf內存的讀寫操作屬性設置為只讀時,對第一pbuf內存進行內存誤操作的監控。當app對第一pbuf內存的讀寫操作屬性設置為只寫,以及當app對第一pbuf內存的讀寫操作屬性設置為讀寫時的讀狀態以及寫狀態時,同樣可使用上述方式對第一pbuf內存進行內存誤操作的監控,具體地,可根據讀寫操作屬性所對應的操作范圍對上述方法的使用進行適應調整。
值得說明的是,上述步驟s501、步驟s502和步驟s503在實際執行時也可以同步并行執行,本發明實施例并不對其執行順序進行嚴格限制。
可以看出,本發明實施例的方案中,當運行于操作系統的零拷貝系統中由apps共享第一pbuf內存時,該apps中的任一app設置該app對第一pbuf內存的讀寫操作屬性在當前時刻為只讀時,操作系統記錄該app對第一pbuf內存的讀寫操作屬性;然后在操作系統監控到該app對第一pbuf內存進行寫操作時,操作系統向該app發送pbuf內存誤操作通知消息,該app接收到操作系統發送的pbuf內存誤操作通知消息后,獲取該pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,該pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作以及該寫操作的具體位置;最后該app再基于該pbuf內存誤操作現場信息確定app對第一pbuf內存進行寫操作的內存誤操作現場。從而實現在多個app共享同一pbuf內存的情況下,當該共享pbuf內存出現內存誤操作時,能快速并準確地定位產生該pbuf內存誤操作的app以及具體位置,即確定pbuf內存誤操作現場,保障系統可靠性的同時能提高系統性能。
更進一步地,可以基于該pbuf內存誤操作現場進行業務恢復,更一步保障系統可靠性。
參見圖9,圖9是本發明實施例提供的一種應用程序app的結構示意圖,用于實現本發明實施例公開的共享內存管理方法。其中,該app應用于報文零拷貝系統中,所述報文零拷貝系統運行于操作系統上,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一包緩存pbuf內存,所述app為所述apps中的任一app。如圖9所示,本發明實施例提供的一種app包括:
設置模塊910、獲取模塊920以及確定模塊930。
設置模塊910,用于設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀。
獲取模塊920,用于在接收到所述操作系統發送的pbuf內存誤操作通知消息的情況下,獲取所述pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,所述pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作的具體位置。
確定模塊930,用于基于所述pbuf內存誤操作現場信息確定所述app對所述第一pbuf內存進行寫操作的內存誤操作現場。
可選地,在本發明的一個實施例中,所述操作系統包括linux操作系統,所述linux操作系統包括mprotect內存管理接口,所述mprotect內存管理接口用于被調用以設置所述第一pbuf內存的讀寫操作屬性;所述設置模塊910具體用于:
通過調用所述mprotect內存管理接口設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀。
可選地,在本發明的一個實施例中,所述mprotect內存管理接口用于被所述app調用以基于一個或多個頁表設置所述app對所述第一pbuf內存的讀寫操作屬性。
可選地,在本發明的一個實施例中,所述報文零拷貝系統還包括第二pbuf內存,所述apps共享所述第二pbuf內存,所述app配置為在預設采樣周期對應的采樣時刻采樣所述第一pbuf內存,所述app配置為在所述采樣時刻之外采樣所述第二pbuf內存。
可選地,在本發明的一個實施例中,所述報文零拷貝系統還包括第二pbuf內存,所述apps的共享內存包括所述第二pbuf內存,所述確定模塊930還用于所述apps中的任一應用程序app設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀息之前,在預設時刻確定所述第一pbuf內存為所述apps的所述共享內存,所述app在預設時刻之外確定所述第二pbuf內存為所述apps的共享內存,所述第一pbuf內存為小頁內存,所述第二pbuf內存為大頁內存,所述第一pbuf內存與所述一個或多個頁表存在唯一對應關系。
可選地,在本發明的一個實施例中,app900還包括記錄模塊940,用于通過所述軌跡標識記錄所述第一pbuf內存的軌跡點信息,所述軌跡點信息包括所述應用程序標識、所述應用程序當前進程標識以及所述當前時刻。
可以看出,本發明實施例的方案中,當運行于操作系統的零拷貝系統中由apps共享第一pbuf內存時,該apps中的任一app設置該app對第一pbuf內存的讀寫操作屬性在當前時刻為只讀時,操作系統記錄該app對第一pbuf內存的讀寫操作屬性;然后在操作系統監控到該app對第一pbuf內存進行寫操作時,操作系統向該app發送pbuf內存誤操作通知消息,該app接收到操作系統發送的pbuf內存誤操作通知消息后,獲取該pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,該pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作以及該寫操作的具體位置;最后該app再基于該pbuf內存誤操作現場信息確定app對第一pbuf內存進行寫操作的內存誤操作現場。從而實現在多個app共享同一pbuf內存的情況下,當該共享pbuf內存出現內存誤操作時,能快速并準確地定位產生該pbuf內存誤操作的app以及具體位置,即確定pbuf內存誤操作現場,保障系統可靠性的同時能提高系統性能。
更進一步地,可以基于該pbuf內存誤操作現場進行業務恢復,更一步保障系統可靠性。
在本實施例中,應用程序app900是以模塊的形式來呈現。這里的“模塊”可以指特定應用集成電路(application-specificintegratedcircuit,asic),執行一個或多個軟件或固件程序的處理器和存儲器,集成邏輯電路,和/或其他可以提供上述功能的器件。
可以理解的是,本實施例的應用程序app900的各功能單元的功能可根據上述方法實施例中的方法具體實現,其具體實現過程可以參照上述方法實施例的相關描述,此處不再贅述。
參見圖10,圖10是本發明實施例提供的一種操作系統的結構示意圖,用于實現本發明實施例公開的共享內存管理方法。其中,所述操作系統上運行有報文零拷貝系統,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一報文緩存pbuf內存,如圖10所示,本發明實施例提供的一種操作系統1000包括:
記錄模塊1010以及發送模塊1020。
其中,記錄模塊1010,用于根據所述apps中的任一應用程序app對所述第一pbuf內存的讀寫操作屬性設置指示記錄所述app對所述第一pbuf內存的讀寫操作屬性為只讀;
發送模塊1020,用于在所述操作系統監控到所述app對所述第一pbuf內存進行寫操作的情況下,所述操作系統向所述app發送pbuf內存誤操作通知消息,所述pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作的具體位置。
可選地,在本發明的一個實施例中,所述操作系統包括linux操作系統,所述linux操作系統包括mprotect內存管理接口,所述mprotect內存管理接口用于被所述app調用以設置所述app對所述第一pbuf內存的讀寫操作屬性。
可選地,在本發明的一個實施例中,所述mprotect內存管理接口用于被所述app調用以基于一個或多個頁表設置所述app對所述第一pbuf內存的讀寫操作屬性。
可選地,在本發明的一個實施例中,所述頁表包括讀寫操作屬性標識,所述記錄模塊1010記錄所述app對所述第一pbuf內存的讀寫操作屬性為只讀包括:
通過所述讀寫操作屬性標識記錄所述app對所述第一pbuf內存的讀寫操作屬性只讀。
可以看出,本發明實施例的方案中,當運行于操作系統的零拷貝系統中由apps共享第一pbuf內存時,該apps中的任一app設置該app對第一pbuf內存的讀寫操作屬性在當前時刻為只讀時,操作系統記錄該app對第一pbuf內存的讀寫操作屬性;然后在操作系統監控到該app對第一pbuf內存進行寫操作時,操作系統向該app發送pbuf內存誤操作通知消息,該app接收到操作系統發送的pbuf內存誤操作通知消息后,獲取該pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,該pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作以及該寫操作的具體位置;最后該app再基于該pbuf內存誤操作現場信息確定app對第一pbuf內存進行寫操作的內存誤操作現場。從而實現在多個app共享同一pbuf內存的情況下,當該共享pbuf內存出現內存誤操作時,能快速并準確地定位產生該pbuf內存誤操作的app以及具體位置,即確定pbuf內存誤操作現場,保障系統可靠性的同時能提高系統性能。
更進一步地,可以基于該pbuf內存誤操作現場進行業務恢復,更一步保障系統可靠性。
在本實施例中,操作系統1000是以模塊的形式來呈現。這里的“模塊”可以指特定應用集成電路(application-specificintegratedcircuit,asic),執行一個或多個軟件或固件程序的處理器和存儲器,集成邏輯電路,和/或其他可以提供上述功能的器件。
可以理解的是,本實施例的操作系統1000的各功能單元的功能可根據上述方法實施例中的方法具體實現,其具體實現過程可以參照上述方法實施例的相關描述,此處不再贅述。
參見圖11,圖11為本發明實施例提供的一種共享內存管理裝置的結構示意圖,如圖11所示,該共享內存管理設備1100包括:
存儲有可執行程序代碼的存儲器1101與所述存儲器耦合的處理器1102。該存儲器1101可以獨立存在,通過總線與處理器1102相連接。存儲器1101也可以和處理器1102集成在一起。其中,所述處理器1102可以為中央處理器(centralprocessingunit,cpu),所述處理器1102上運行有應用程序app與操作系統,所述操作系統上運行有報文零拷貝系統,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一包緩存pbuf內存,所述app為所述apps中的任一app。
所述app用于:設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀;在所述app接收到所述操作系統發送的pbuf內存誤操作通知消息的情況下,獲取所述pbuf內存誤操作通知消息中的pbuf內存誤操作現場信息,所述pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作的具體位置;基于所述pbuf內存誤操作現場信息確定所述app對所述第一pbuf內存進行寫操作的內存誤操作現場。
可選地,在本發明的一個實施例中,所述操作系統包括linux操作系統,所述linux操作系統包括mprotect內存管理接口,所述mprotect內存管理接口用于被調用以設置所述第一pbuf內存的讀寫操作屬性;
所述設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀,包括:
通過調用所述mprotect內存管理接口設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀。
可選地,在本發明的一個實施例中,所述mprotect內存管理接口用于被所述app調用以基于一個或多個頁表設置所述app對所述第一pbuf內存的讀寫操作屬性。
可選地,在本發明的一個實施例中,在所述設置所述app對所述第一pbuf內存的讀寫操作屬性在當前時刻為只讀之前,所述app還用于:
在預設時刻確定所述第一pbuf內存為所述apps的所述共享內存,在預設時刻之外確定所述第二pbuf內存為所述apps的共享內存,所述第一pbuf內存為小頁內存,所述第二pbuf內存為大頁內存,所述第一pbuf內存與所述一個或多個頁表存在唯一對應關系。
可選地,在本發明的一個實施例中,所述第一pbuf內存還用于緩存軌跡標識,所述app還用于:通過所述軌跡標識記錄所述第一pbuf內存的軌跡點信息,所述軌跡點信息包括所述應用程序標識、所述應用程序當前進程標識以及所述當前時刻。
值得說明的是,圖11僅僅示出了共享內存管理設備1100的簡化設計。在實際應用中,共享內存管理設備1100可以包含任意數量處理器和存儲器等,而所有可以實現本發明實施例的共享內存管理設備都在本發明實施例的保護范圍之內。
參見圖12,圖12為本發明實施例提供的另一種共享內存管理裝置的結構示意圖,如圖12所示,該共享內存管理設備1200包括:
存儲有可執行程序代碼的存儲器1201與所述存儲器耦合的處理器1202。該存儲器1201可以獨立存在,通過總線與處理器1202相連接。存儲器1201也可以和處理器1202集成在一起。其中,所述處理器1202可以為中央處理器cpu,所述處理器1202上運行有應用程序app與操作系統,所述操作系統上運行有報文零拷貝系統,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一包緩存pbuf內存,所述app為所述apps中的任一app。
所述操作系統用于:根據所述apps中的任一應用程序app對所述第一pbuf內存的讀寫操作屬性設置指示記錄所述app對所述第一pbuf內存的讀寫操作屬性為只讀;在所述操作系統監控到所述app對所述第一pbuf內存進行寫操作的情況下,向所述app發送pbuf內存誤操作通知消息,所述pbuf內存誤操作通知消息用于提醒所述app對所述第一pbuf內存進行寫操作以及所述寫操作的具體位置。
可選地,在本發明的一個實施例中,所述操作系統包括linux操作系統,所述linux操作系統包括mprotect內存管理接口,所述mprotect內存管理接口用于被所述app調用以設置所述app對所述第一pbuf內存的讀寫操作屬性。
可選地,在本發明的一個實施例中,所述mprotect內存管理接口用于被所述app調用以基于一個或多個頁表設置所述第一pbuf內存的讀寫操作屬性。
可選地,在本發明的一個實施例中,所述頁表包括讀寫操作屬性標識,所述記錄模塊記錄所述app對所述第一pbuf內存的讀寫操作屬性為只讀包括:
通過所述讀寫操作屬性標識記錄所述app對所述第一pbuf內存的讀寫操作屬性為只讀。
值得說明的是,圖12僅僅示出了共享內存管理設備1200的簡化設計。在實際應用中,共享內存管理設備1200可以包含任意數量處理器和存儲器等,而所有可以實現本發明實施例的共享內存管理設備都在本發明實施例的保護范圍之內。
參見圖13,圖13為本發明實施例提供的一種共享內存管理設備的結構示意圖,如圖13所示,該共享內存管理設備1300包括:
存儲有可執行程序代碼的存儲器1301與所述存儲器耦合的處理器1302。其中,處理器1101可以為中央處理器(centralprocessingunit,cpu),該處理器上可以運行如圖5所示方法實施例中的app和操作系統、或者如圖9所示裝置實施例中的app和如圖10所示裝置實施例中的操作系統、或者如圖11所示裝置實施例中的app和圖12所示裝置實施例中的操作系統,以用于執行本發明實施例所提供的共享內存管理方法。其中,所述操作系統上運行有報文零拷貝系統,所述報文零拷貝系統包括至少兩個應用程序apps,所述apps共享第一包緩存pbuf內存,所述app為所述apps中的任一app。該存儲器1301用于存儲app的程序代碼和數據,以及用于存儲操作系統的程序代碼和數據。該存儲器1301可以獨立存在,通過總線與處理器1302相連接。存儲器1301也可以和處理器1302集成在一起。
可以理解的是,圖13僅僅示出了共享內存管理設備1300的簡化設計。在實際應用中,共享內存管理設備1300可以包含任意數量處理器和存儲器等,而所有可以實現本發明實施例的共享內存管理設備都在本發明實施例的保護范圍之內。
本發明實施例還提供一種計算機存儲介質,其中,該計算機存儲介質可存儲有程序,該程序執行時可以實現包括上述方法實施例中記載的任何共享內存管理方法的部分或全部步驟。前述的存儲介質包括:u盤、只讀存儲器(英文:read-onlymemory)、隨機存取存儲器(英文:randomaccessmemory,ram)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的裝置,可通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
以上所述,以上實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發明各實施例技術方案的范圍。