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