相比原生 Linux(Native Linux),采用Intel® DPDK技術(shù)后能夠大幅提升IP轉(zhuǎn)性能的主要原因在于Intel® DPDK采用了如下描述的主要特征。
輪詢模式取代中斷 通常當數(shù)據(jù)包進入的時候,Native Linux會從網(wǎng)絡接口控制器(NIC,Network Interface Controller)接收到中斷,然后調(diào)度軟中斷,對所得的中斷進行上下文切換,并喚醒系統(tǒng)調(diào)用,如read()和write()。
相比之下,Intel® DPDK采用了優(yōu)化的輪詢模式驅(qū)動(PMD,Poll Mode Driver)代替默認的以太網(wǎng)驅(qū)動程序,從而可以不斷地接收數(shù)據(jù)包,避免軟件中斷,上下文切換和喚醒系統(tǒng)調(diào)用,從而大大的節(jié)省重要的CPU資源,并且降低了延遲。
HugePage取代傳統(tǒng)頁 相比Native Linux的4kB 頁,采用更大的頁尺寸意味著可以節(jié)省頁的查詢時間,并減少轉(zhuǎn)譯查找緩存(TLB,Translation Lookaside Buffer)丟失的可能。
Intel® DPDK作為用戶空間(User-space)應用運行時,在自己的內(nèi)存空間中分配HugePage至存儲幀緩沖區(qū),環(huán)形和其他相關(guān)緩沖區(qū),這些緩沖區(qū)是由其他應用程序控制,甚至是Linux內(nèi)核。本白皮書描述的測試中,總計1024@2MB的HugePage被保留用于運行IP轉(zhuǎn)發(fā)應用。
零拷貝緩沖區(qū) 在傳統(tǒng)的數(shù)據(jù)包處理過程中,原生 Linux(Native Linux)解封包的報頭,然后根據(jù)Socket ID將數(shù)據(jù)復制到用戶空間(User Space)緩沖區(qū)。一旦用戶空間(User Space)應用程序完成了數(shù)據(jù)的處理,一個write()系統(tǒng)調(diào)用將被喚醒并把數(shù)據(jù)送至內(nèi)核,負責將數(shù)據(jù)從用戶空間(User Space)拷貝至內(nèi)核緩沖區(qū),封裝包的報頭,最后借助相關(guān)的物理端口將數(shù)據(jù)發(fā)出去。顯然,原生 Linux(Native Linux)在內(nèi)核緩沖區(qū)和用戶空間(User Space)緩沖區(qū)之間進行拷貝動作,犧牲了很多的時間和資源。
相比之下,Intel® DPDK在自己保留的內(nèi)存區(qū)域接收數(shù)據(jù)包,這個區(qū)域位于用戶空間(User Space)緩沖區(qū),之后根據(jù)配置規(guī)則將這些數(shù)據(jù)包分類到每一個Flow中。在處理完解封包之后,在相同的用戶空間(User Space)緩沖區(qū)中使用正確的報頭進行包封裝,最后通過相關(guān)的物理端口發(fā)送這些數(shù)據(jù)。
Run-to-Completion(RTC,運行到完成)和Core Affinity 在執(zhí)行應用之前,Intel® DPDK會進行初始化,分配所有的低級資源,如內(nèi)存空間,PCI設(shè)備,定時器,控制臺,這些資源將被保留且僅用于那些基于Intel® DPDK的應用。初始化完成之后,每一個核(或線程,當BIOS設(shè)置中啟用了Intel®超線程技術(shù)時)將被啟用來負責每一個執(zhí)行單元,并根據(jù)實際應用的需求,運行相同的或不同的工作負載。
此外,Intel® DPDK還提供了一種方法,即可以設(shè)置每個執(zhí)行單元運行在每一個核心上,以維持更多的Core Affinity,從而避免緩存丟失。在此白皮書描述的測試中,aTCA-6200處理器刀片的物理端口根據(jù)Affinity被綁定在兩個不同的CPU線程上。
無鎖執(zhí)行和緩存校準 Intel® DPDK提供的庫和API,被優(yōu)化成無鎖,以防止多線程應用程序死鎖現(xiàn)象的發(fā)生。對于緩沖區(qū)、環(huán)形和其他數(shù)據(jù)結(jié)構(gòu),Intel® DPDK也進行了優(yōu)化,執(zhí)行了緩存校準,以達到緩存行(Cache-Line)的效率最大化,同時最大限度減少緩存行(Cache-Line)的沖突。
|