施佺,劉德靖
(南通大學電子信息學院,江蘇 南通 226019)
面向開源路由設備的I2RS加速技術設計與實現
施佺,劉德靖
(南通大學電子信息學院,江蘇 南通 226019)
南向協議接口標準I2RS(路由系統接口)是傳統網絡向SDN(軟件定義網絡)過渡過程中出現的一種新標準。基于該標準,提出了一種直接利用地址訪問內核空間數據的方法,從而能夠使南向接口以更高效率獲取單點路由設備狀態和各類統計信息的方法,給出了方法的實現過程,并對采用本方法提取數據的速度、訪問數據出錯次數以及從異常中恢復的時間進行了大量、長時間的測試。實驗測試結果表明,與現有技術相比,本方法提取信息的速率明顯提高,并且在提取信息出現異常時能夠快速從異常中恢復。在實際網絡環境中的應用表明,該方法發揮了快速可靠提取信息的作用。
軟件定義網絡;路由系統接口;南向接口;路由設備;操作系統
軟件定義網絡(software defined networking,SDN)的南向協議接口有多種標準[1],比較 典型的有 ForCES[2]、OpenFlow[3]等,而針對實際應用中非SDN設備數量仍占多數的情況,IETF制定了另一套南向接口標準I2RS(路由系統接口)[4]。I2RS的主要思想是復用現有路由設備,在現有路由設備上開發出一套能夠獲取其路由信息、狀態信息和各種統計信息的監控接口,并根據監控接口獲取的各種信息對各個路由設備的路由策略進行動態調整。在現有技術中,實現I2RS監測最常見的方法是在路由設備所安裝的操作系統(以下簡稱路由操作系統)的用戶空間實現一個代理,由代理收集路由操作系統內用戶空間和內核空間的各種信息,并且將其轉發給外部的SDN控制器。
在路由操作系統內,對于用戶空間,代理一般通過共享內存的方式來獲得各種信息;對于內核空間,代理獲取信息的方法有多種,常見的有 Sysctl方式[5]、Mmap 方式[6]、Proc 文件系統方式[7]和UNIX domain socket方式[8]。上述幾種通信方式雖然都能在路由操作系統內完成內核空間和用戶空間的數據交互工作,但不同通信方式適合的應用場景不同,開銷也不同。例如,Sysctl方式通常被設計用來供用戶在用戶空間動態調整一些內核可配置信息,典型應用場景是一些通信量較小的用戶空間和內核空間的交互;Mmap方式用來將一段連續的內存映射到用戶空間,其只適合像數組一樣的占用連續一大段內存的數據結構,但不能很好地支持鏈式存儲結構,典型的應用場景是磁盤文件的讀寫;Proc文件系統方式是一種類似于Mmap的方式,適合于讀取內核的一些參數或者發送簡單開關指令給內核模塊;UNIX domain socket方式則是一種全雙工的內核和用戶空間通信方式,適合于用戶空間和內核空間大數據量數據的交互,然而傳輸的是無結構的信息,并且數據交互過程需要進行多次復制操作。
當前,在SDN實際應用中存在這樣一種特殊需求的I2RS監測接口,需要大量地從路由操作系統內核空間中提取狀態、統計等各類信息,并且這些信息是有結構的。此時,上述幾種內核空間通信方式都不能很好地滿足提取這種類型數據的要求。本文針對這種特殊需求的應用,提出了一種直接利用地址訪問路由操作系統內核空間數據的方法,并對所提方法的效率以及頑健性進行了測試。下面給出具體分析與設計過程。
路由操作系統有軟件路由操作系統和硬件路由操作系統,例如,參考文獻[9]提出了基于NetBSD改寫的軟件路由操作系統,參考文獻[10]提出了基于FPGA技術的硬件路由操作系統,本文的路由操作系統是基于FreeBSD 10.0操作系統改寫而成的軟件路由操作系統,因此與FreeBSD 10.0操作系統相同,在操作系統的用戶空間不能直接通過地址訪問內核空間的數據。在FreeBSD 10.0操作系統中,設計這一策略的目的是限制用戶程序的訪問權限,避免用戶程序對內核空間數據錯誤的修改而導致整個系統運行崩潰。雖然,用戶空間不能直接利用地址訪問內核空間數據,但操作系統也添加了多種用戶空間和內核空間數據交互方式。然而,禁止直接用地址訪問內核空間的數據,第1節所述方法就需要一些額外的開銷供用戶空間和內核空間進行數據通信,在本文中,代理只會讀取信息,不會對內核空間的數據進行寫操作。因此,從用戶空間直接利用地址訪問內核空間數據成為減小開銷的一個安全可行方案。
在路由操作系統中,程序用虛擬地址訪問數據,虛擬地址經過地址轉換映射到物理地址,最終程序通過物理地址訪問到實際的數據[11]。而對用戶空間或者內核空間地址的判斷工作,就發生在虛擬地址轉換成物理地址的過程中。轉換過程中,MMU(內存管理單元)發現地址不合法,產生一個異常,在異常中,具體判斷出現地址的不合法屬于哪一種類型,通過修改內核源碼,在對用戶空間直接利用地址訪問這一異常處理分支中,去掉其對內核空間地址的保護措施,最終能夠從用戶空間利用地址直接訪問內核空間的數據。
本文設計的系統拓撲如圖1所示,整個拓撲網絡由SDN控制器和路由設備組成。SDN控制器通過I2RS接口獲取路由操作系統狀態、統計等各類信息,圖1中虛框部分為路由設備的內部結構示意。一臺路由設備主要由路由設備硬件和路由操作系統兩部分組成,路由操作系統進一步可以分為用戶空間和內核空間。代理就運行在路由操作系統的用戶空間中,而需要獲取的路由設備的大部分狀態、統計等各類信息則存在于內核空間。
現有技術中路由操作系統內用戶空間和內核空間通信的方式主要有兩類:一是通過內存映射將內核空間的一段內存映射到用戶空間,用戶空間訪問內核空間映射在用戶空間的地址,實現用戶空間與內核空間的通信;二是通過系統中斷方式進入內核空間,由于內核空間具有最高權限,可以利用復制的方式將數據從用戶空間復制到內核空間或從內核空間復制到用戶空間,從而實現用戶空間和內核空間的通信。本文提出了一種在用戶空間直接利用地址訪問內核空間數據的方法,即圖1虛線框中,通過運行在用戶空間的代理直接用地址獲取存儲在內核空間的數據。
圖1 系統總體拓撲
在實際路由操作系統中,各種狀態、統計等信息零星分布在內存的不同功能模塊內,而不是集中在圖1所示的數據模塊中,并且各條記錄的地址會動態變化。例如,反應路由接口與反應路由表信息的數據在內存中存放的地址是不同的。路由表添加了一條記錄,新記錄會被分配到一個新的存儲空間中,其擁有了一個新的內存地址。因此,為了方便代理利用地址直接訪問,能正確獲取內核收集來的各種信息,本設計在內核空間中添加了一個線程,用來定時收集存儲在內核空間零散分布的狀態、統計等信息,并且設計了一套數據結構以規范內核空間線程收集的數據存儲,使其結構化。同時,為了保證代理訪問內核空間數據的可靠性,設計了一套用戶空間和內核空間的訪問同步機制以及訪問超時檢查機制以確保所設計方案的可靠性和實用性。
通過對內核空間中需要進行收集的信息進行詳細分析,內核空間中的存儲結構可以用模型—實例的模式進行統一描述。“模型”是對所有具有相同結構信息的統稱,是一個抽象概念,例如,用模型的概念對路由器內核空間中的信息進行描述,路由器接口信息用接口模型描述,靜態路由信息用靜態路由模型描述。一種路由器內核空間中的數據需要多種模型來描述,由于一種路由設備內模型的種類是固定的,所以不同的模型可以通過散列表組織起來;“實例”是對某一模型下具體存儲的某一條記錄的代稱,以接口模型為例,路由操作系統內核空間中通常存儲著該路由設備各網絡接口的信息,例如某網絡接口所允許發送最大數據分組的大小、網口轉發分組的數量、網口轉發數據量的總和等,所有關于一個網絡接口描述信息的集合就是一個實例。對于一臺路由設備而言,它一般具有多個網絡接口,因此,路由操作系統的內核空間內存在著多個接口模型的實例,并且這些模型的實例是可以隨著網絡接口的添加或減少而動態添加或刪除的,因此不同的實例通過鏈表連接起來,能夠滿足動態變化的要求。圖2給出了存儲結構總體設計示意。
由于接口模型中有接口名稱、接口轉發分組數量兩個字段,而靜態路由模型有靜態路由命中次數1個字段,因此兩個模型實例的數據結構是不相同的。為了能夠以一種統一的方式管理各種模型實例,采用了圖2所示的數據結構,以達到不同的數據結構用同一存儲結構進行管理的目的。在圖2的結構中,存儲每一個模型實例的數據時,每個實例并不是在實例內部存放統計信息數據,而是通過指針指向一塊單獨的內存區域。這樣的存儲結構,對于每一個模型,其模型和實例部分的結構是完全相同的,不同的僅是其數據部分。因此,在這套存儲結構上尋找模型及實例可以用相同的方法,不同的僅僅是取每一個模型數據的方法。
圖2 內核存儲結構
路由操作系統用戶空間進程通過存儲結構首地址去獲取內核空間各模型的數據,內核空間線程通過存儲結構首地址對各模型數據進行更新。然而,由于路由設備內操作系統進程調度以及處理器多核等原因,對同一塊區域的讀寫,會出現數據不一致的情況。為了保證數據的一致性,必須對路由操作系統內用戶空間的讀進程和內核空間的寫線程進行同步操作。本文所面對的同步問題,并不是路由操作系統中用戶空間的臨界資源同步讀寫,或者內核空間臨界資源同步讀寫,上述兩種同步方案在路由操作系統中已經有實現的接口。本文涉及的臨界資源同步是關于用戶空間進程和內核空間線程的同步,由于原路由操作系統不提供在用戶空間直接用地址訪問內核空間數據的方法,即用戶空間進程不能從用戶空間訪問內核空間的數據,造成現有路由操作系統不提供用戶空間和內核空間的同步方法。為了實現用戶空間進程和內核空間線程的同步操作來保證數據的一致性,本文設計了如圖3所示的同步訪問方案。
圖3 用戶進程及內核線程的同步
圖3所示的臨界資源即各模型實例的統計數據,為了能夠對訪問臨界資源的用戶空間進程和內核空間線程進行同步操作,本設計給位于內核空間的臨界資源加了一把鎖。當用戶空間進程準備讀取臨界資源時,該進程首先觸發內核的一段程序執行,該段被觸發的程序給臨界資源加上鎖并返回一個操作結果。若返回的操作結果表示獲取鎖成功,則用戶空間進程開始讀取臨界資源中的信息;否則等待,直到獲取鎖進行讀取數據。內核空間線程的寫操作與用戶空間的進程讀操作類似。
正確工作狀態下,用戶空間進程和內核空間線程的工作流程是:首先,用戶空間進程每隔5 s申請一次讀鎖,申請成功后讀取臨界區的數據并釋放讀鎖,然后內核空間線程每隔5 s申請一次寫鎖,申請成功后更新數據并釋放寫鎖。然而,在實際的運行測試中,出現了兩種特殊情況:一是用戶空間某個進程異常退出,沒有釋放讀鎖,導致內核空間線程長時間不能獲取寫鎖,如圖4所示;二是用戶空間有太多的進程讀取臨界區數據,導致內核空間長時間不能獲取寫鎖,其示意如圖5所示。
圖4 用戶進程異常終止
上述兩種情況無論哪一種發生,都會導致內核空間線程不能及時獲取寫鎖,從而不能更新臨界區的數據。為了解決上述的異常問題,本文在內核空間中設計了超時檢查功能。超時檢查功能的主要思想是設計一個計數器,當內核空間線程獲取寫鎖失敗時,計數器開始計時,在計數器計時開始后的一段固定時間內,如果內核空間線程一直不能獲取寫鎖,則說明用戶空間訪問的進程發生異常,需要在內核空間強制釋放所有讀鎖。在上述強制釋放讀鎖的過程中,很有可能釋放掉用戶空間正常進程的讀鎖,若此時內核空間線程又立刻獲取寫鎖進行更新數據,則仍然存在著讀寫沖突問題。為了解決這個問題,本文為鎖設置了一個特殊狀態:“等待態”。在“等待態”下,有兩個特點,一是內核空間線程不再每隔5 s獲取一次寫鎖,而是不斷嘗試獲取寫鎖,直到獲取寫鎖為止;二是內核空間線程能夠在讀鎖全部釋放的情況下,獲取寫鎖,但是用戶空間進程申請讀鎖會失敗。在引入“等待態”后,內核線程更新數據時間應該是:
圖5 多進程同時訪問
其總體工作流程如圖6所示。
在圖6中,內核空間線程需要對臨界資源的信息進行更新,它首先申請寫鎖,若此時上述兩種異常情況的一種發生或兩者同時發生,內核空間線程申請寫鎖時會失敗。在上述異常情況下,會設置鎖的狀態為“等待態”,并且計算距離第一次發生異常所經過的時間,如果時間超過了指定值(這個值與具體應用有關,本文目前設置為15 s),則內核空間的寫線程會強制釋放所有的讀鎖。釋放完之后,內核開始申請寫鎖,由于此時鎖的狀態為“等待態”,并且讀鎖的計數已經恢復到0,所以寫鎖申請成功,然后更新數據并設置鎖的狀態為正常態,釋放寫鎖。
本文從時間提取的數據發生錯誤次數、異常狀況下恢復時間等角度對本設計方法的性能及可靠性進行了評估。使用的測試平臺為AMD64 3.7 GHz處理器、內存4 GB的通用型計算機,路由操作系統為基于Freebsd 10.0內核修改的測試系統。
圖6 超時檢查機制
本文提到多種內核空間與用戶空間通信方式,例如Sysctl、Mmap、Proc、UNIX domain socket等。在設計測試方案時,由于Mmap與Proc方式適用于從內核空間與用戶空間傳遞一整塊信息,而本文所傳輸的信息是鏈式的,因此Mmap與Proc不適合本文所設計的方案。Sysctl能夠用來將一小段內存傳遞到用戶空間,對于本文的鏈式方案也不適用。UNIX domain socket是一種常用的內核空間和用戶空間通信的方式,能夠將內核中的鏈式信息傳遞到用戶空間,因此在系統測試時,將本文的設計方案與UNIX domain socket通信方案進行對比。圖7給出了獲取相同的內核空間信息時,兩種程序所需要的時間。圖7的測試結果表明,直接用地址訪問方式獲取數據,其獲取內核靜態路由統計信息的時間比用UNIX domain socket方式少,說明本方案在提取內核空間信息效率方面比UNIX domain socket方式要高。
圖7 獲取數據時間測試比較曲線
(1)同步方案有效性的驗證
路由操作系統中,由于進程調度以及多核等原因,訪問臨界區進程越多,訪問數據越容易出現數據不一致問題(即本文所說的錯誤數據),圖8給出了在未使用同步方案的情況下,隨著時間的變化,不同數目進程訪問臨界區時,所產生的錯誤次數變化;而圖9則給出了在使用不同方案的情況下,產生錯誤次數的變化。
圖8 未使用同步方案時的數據出錯次數
圖9 使用同步方案時的數據出錯次數
在圖8中,由于未使用同步方案,可以看出,不管同時測試的進程數目有多少,錯誤次數都會隨著時間的變化不斷增多;而隨著同時運行的進程數目的增多,其數據錯誤也會明顯增多,說明并發進程數目越多,的確會增加數據的不一致問題。圖9中使用同步方案后,相比于圖8可以看出,隨著時間的變化,錯誤的次數始終為0;即使并發進程數目增多,其次數仍然為0。因此,說明了盡管在進程增多不確定性增大的情況下,本文同步方案都能夠解決數據不一致的問題,證明了同步方案的有效性。
(2)超時檢查機制有效性驗證
為了驗證本文設計的讀寫機制超時檢查方案是否能夠保證數據的及時更新,設計了圖4和圖5出現的兩種異常情況。
首先,模擬圖4所示的用戶進程異常終止情況,在用戶空間同時開啟5個進程,此時內核空間鎖的計數為5,人為終止其中任意一個進程,若沒有超時檢查,內核空間鎖的計數應該始終大于或等于1;引入超時檢查功能后,內核空間鎖的計數能夠回歸到0,說明超時檢查機制起了作用。
其次,模擬圖5所示情況,表1給出了在進程數為10的情況下,數據的平均更新時間與內核設置的更新時間之間的關系,從表1中可以看出,隨著內核設置的更新時間的變化,數據的平均更新時間都是等于“內核設置的更新時間+比較短的時間”,與第3.3節分析的“更新數據時間=5 s(內核設置的更新時間)+嘗試獲取鎖的時間”一致。表2給出了隨著進程數目的變化,內核空間數據在使用與不使用同步情況下的平均更新時間。結果表明,采用超時檢查方案后,進程數目從5個調整到20個,其數據平均更新時間為5.02 s,而未使用超時檢查的程序時,在5個進程時,時間也為5.02 s,分析其原因,是由于5個用戶空間進程不是很多,在5 s時間段內能夠訪問完所有數據,不會影響內核空間線程獲取寫鎖,而從開啟到10個線程時,其平均更新時間不確定,這里不確定的意思是指更新時間沒規律且跳躍性很大,例如會呈現5 s、40 s、15 s這樣變化很大的時間,分析其原因,由于沒有超時檢查機制,其與用戶空間進程是通過競爭關系獲取鎖,隨著用戶空間進程數目的增多,雖然它獲取鎖的概率越來越小,但是也有獲得到鎖的概率,什么時候能夠成功獲取鎖,是一個隨機事件,所以其時間呈現這種跳躍性的變化。
表1、表2的結果相互對比說明,使用超時檢查機制后,能夠使更新時間維持在一個穩定的時間段內,證明了超時檢查機制所設計的有效性。
表1 數據平均更新時間與內核更新間隔時間關系
表2 數據平均更新時間與進程數的關系
本文針對SDN控制器需要提取路由設備統計信息這一要求,通過對I2RS接口的研究,設計了一套利用地址直接獲取內核空間信息的方法。與UNIX domain socket方法相比,本設計在提取相同數量的內核信息時所需的時間更少。本文還設計了一種用戶空間和內核空間訪問臨界資源的同步方案,實現了對臨界資源的可靠訪問,在實際應用中發揮了穩定提取信息的作用。然而,在SDN南向接口獲取數據的過程中,影響其獲取信息效率的因素往往不只一個,本文所設計的方案只是針對控制器需要提取路由設備信息時,優化了數據從內核空間到用戶空間的路徑,但是由路由設備發往控制器這條路徑并沒有得到優化,因此,在這條路徑上的優化嘗試將是進一步研究的內容。
[1]Stanford university clean slate program [EB/OL]. [2015-02-12].http://clean slate.stanford.edu/.
[2]IETF.Forwarding and control elementseparation (ForCES)forwarding element model:RFC5812[S].2010.
[3]MCKEOWN N,ANDERSON T,BALAKRISHNAN H,et all.OpenFlow:enabling innovation in campus networks [J].ACM Communications Review,2008,38(2):69-74.
[4]HARESS,WHITE R.Software-definednetworksandthe interface to the routing system (I2RS)[J].IEEE Internet Computing,2013,17(4):84-88.
[5] Sysctl [EB/OL]. [2016-01-11].http:/www.freebsd.org/cgi/man.cgi?query=sysctl&sektion=3.
[6]IEEE standard for information technology-portable operating system interface (POSIX(R)[EB/OL]. [2016-01-11].http://standards.ieee.org/findstds/standard/1003.1-2008.html2001.
[7] Proc file system [EB/OL]. [2016-01-11].https:/www.kernel.org/doc/Documentation/filesystems/proc.txt.
[8]GREG A.Woods [EB/OL]. [2016-01-11].http:/archives.neohapsis.com/archives/postfix/2000-09/1476.html.
[9]徐恪,吳建平,江勇,等.通用路由器軟件體系結構研究綜述[J].小型微型計算機系統,2001,22(4):385-392.XU K,WU J P,JIANG Y,et al.Research on software architecture of general-purpose routers:a survey[J].?Mini-micro Systems,2001,22(4):385-392.
[10]鐘雪燕.基于 FPGA的 SpaceWire路由器的設計與驗證[D].南京:南京航空航天大學,2013.ZHONG X Y.Design and verification of SpaceWire router based on the FPGA [D].Nanjing:Nanjing University of Aeronautics and Astronautics,2013.
[11]JACOB B,MUDGE T.Software-managed address translation[C]//The 3rd International Symposium on High Performance Computer Architecture,Feb 1-5,1997,San Antonio,Texas,USA.New Jersey:IEEE Press,1997:156-167.
A quickly accessed method for I2RS in open-source router
SHI Quan,LIU Dejing
School of Electronic Information,Nantong University,Nantong 226019,China
Southbound interface protocol specification I2RS (interface to routing system)appears in the transitional period of traditional network to SDN (software defined networking).Based on the protocol specification,a method which could get the state and statistics information of network’s equipments in a more efficient way was put forward.The design was detailed and adequately testing was performed,which included the speed of getting information about equipments’ state and statistics,the numbers of the wrong information as well as the recovery time from exception.The experiment results show that the proposed method improves the speed of getting the information about equipments’ state and statistics,which is better than the existed method and when some exceptions happen,the proposed method can recover the situation quickly.The application of the real network environment shows that the proposed method can get the wanted information quickly and stably.
SDN,I2RS,south bound interface,routing equipment,operating system
s:The National Natural Science Foundation of China(No.61171132),The Natural Science Foundation of Jiangsu(No.BK20151272),The “333” Program Talents of Jiangsu Province(No.BRA2015356),The Six Top Talents of Jiangsu Province Grant(No.2014-WLW-029),Nantong Science and Technology Platform (No.CP2013001,No.HL2014006,No.BK2014054)
TP393
A
10.11959/j.issn.1000-0801.2016137
2016-03-03;
2016-05-02
施佺,sq@ntu.edu.cn
國家自然科學基金資助項目(No.61171132);江蘇省自然科學基金資助項目(No.BK20151272);江蘇省“六大人才高峰”項目(No.2014-WLW-029);江蘇省“333 工程”資助項目(No.BRA2015356);南通市科技項目(No.CP2013001,No.HL2014006,No.BK2014054)
施佺(1973-),男,博士,南通大學電子信息學院教授,主要研究方向為智能信息處理。
劉德靖(1990-),男,南通大學電子信息學院碩士生,主要研究方向為智能信息處理、計算機網絡。