|
相比原生 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)的衝突。
|