攻城獅自述丨OK1043A-C DPDK環境體驗
飛凌嵌入式今年6月推出的——FET1043A-C核心板,采用NXP公司的QorIQ? LS1043A處理器設計,擁有四顆ARMv8-A架構的Cortex-A53核,主頻1.6G,低功耗,高能效。四通道高達10GB的SerDes包含多種靈活配置,在飛凌設計的配套底板中最大程度上發揮了QorIQ?LS1043A 處理器網絡性能,采用一個萬兆,六個千兆的設計,配合處理器內部的DPAA1加速引擎,再加上2GB大容量DDR4內存簡直就是網絡性能怪獸。
硬件如此的優秀,那么傳統的Linux內核還是否與其門當戶對?答案是否定的。
原因有以下幾個方面:
? 中斷處理。當網絡中大量數據包到來時,會產生頻繁的硬件中斷請求,這些硬件中斷可以打斷之前較低優先級的軟中斷或者系統調用的執行過程,如果這種打斷頻繁的話,將會產生較高的性能開銷。
? 內存拷貝。正常情況下,一個網絡數據包從網卡到應用程序需要經過如下的過程:數據從網卡通過DMA等方式傳到內核開辟的緩沖區,然后從內核空間拷貝到用戶態空間,在Linux內核協議棧中,這個耗時操作甚至占到了數據包整個處理流程的57.1%。
? 上下文切換。頻繁到達的硬件中斷和軟中斷都可能隨時搶占系統調用的運行,這會產生大量的上下文切換開銷。另外,在基于多線程的服務器設計框架中,線程間的調度也會產生頻繁的上下文切換開銷,同樣,鎖競爭的耗能也是一個非常嚴重的問題。
? 局部性失效。如今主流的處理器都是多個核心的,這意味著一個數據包的處理可能跨多個CPU 核心,比如一個數據包可能中斷在cpu0,內核態處理在cpu1,用戶態處理在cpu2,這樣跨多個核心,容易造成CPU 緩存失效,造成局部性失效。如果是NUMA 架構,更會造成跨NUMA 訪問內存,性能受到很大影響。
? 內存管理。傳統服務器內存頁為4K,為了提高內存的訪問速度,避免cache miss,可以增加cache 中映射表的條目,但這又會影響CPU 的檢索效率。
綜合以上問題,可以看出內核本身就是一個非常大的瓶頸所在。那很明顯解決方案就是想辦法繞過內核。經很多前輩先驅的研究,DPDK在眾多方案脫穎而出。
“紙上得來終覺淺,絕知此事要躬行”,下面我們通過一個實例來體驗下DPDK。
首先,使用DPDK環境,需要修改設備樹,將網絡配置到用戶態。需要使用到的設備樹文件:
OK10xx-linux-fs/flexbuild/build/linux/linux/arm64/fsl-ls1043a-rdb-usdpaa.dtb
將fsl-ls1043a-rdb-usdpaa.dtb拷貝到開發板根目錄,使用如下命令替換設備樹:
mv/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb.bak
cp/fsl-ls1043a-rdb-usdpaa.dtb /run/media/mmcblk0p2/boot
ln-s /run/media/mmcblk0p2/boot/fsl-ls1043a-rdb-usdpaa.dtb/run/media/mmcblk0p2/boot/fsl-ls1043a-rdb-sdk.dtb
reboot
替換成功后啟動開發板輸入:ifconfigfm1-mac1
如果提示Devicenot found 就是已經替換成功。
測試DPDK完成后恢復默認配置方法:
cp/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb.bak/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb
reboot
將網絡配置到用戶態之后,那么我們該如何使用它們呢?TCP/UDP咋用?不要急在DPDK中使用TCP或者UDP的話還需要移植一個協議棧到DPDK中。入門階段我們還是先來體驗一把DPDK中包含了二層轉發的測試例程吧。
二層轉發網絡拓撲如下圖所示:
使用OK1043A-C平臺的Port2和Port3(對應fm1-mac3和fm1-mac4),對LinuxHost 和 OK1012A-C之間的數據進行轉發。LinuxHost 和 OK1012A-C您可以替換成其他的網絡設備。
配置OK1043A-C:
l2fwd-c 0xf -n 1 -- -p 0xc -q 1 --no-mac-updating
參數 |
說明 |
-c |
Core mask 0xf 使用4核 |
-n |
內存通道數 |
-p |
Port mask 0xc 二進制1100使用port3 port2 |
-q |
每個核的隊列數量默認為1 |
--no-mac-updating |
轉換后不替換MAC |
配置OK1012A-C:
ifconfigeth0 192.168.1.200
tcpdump-i eth0 -vv -n -e
配置Linux Host:
ifconfigeth0 192.168.1.120
sudomodprobe pktgen.ko
echo"add_deviceeth0"> /proc/net/pktgen/kpktgend_0
echo"dst_mac6e:56:7d:85:ce:4d"> /proc/net/pktgen/eth0
echo"dst192.168.1.200">/proc/net/pktgen/eth0
echo"pkt_size64"> /proc/net/pktgen/eth0
echo"count1000000"> /proc/net/pktgen/eth0
echo"start"> /proc/net/pktgen/pgctrl
我們讓LinuxHost主機發送100萬個64字節大小的包出去,測試OK1043A-CDPDK對這些數據包的轉發能力。
通過查看OK1043A-C的串口打印信息,我們發現DPDK已經將所有收到的數據包完完全全的轉發了出去。同時細心的你會發現采用DPDK進行數據轉發時,CPU的負載一直居高不下,因為它一直在應用層輪詢,查看是否有數據包需要處理。
---- END ----
長按識別二維碼加關注 飛凌嵌入式 專注于智能設備核心平臺研發與制造
|
■ 關注“飛凌嵌入式”公眾號,不定期分享行業干貨及產品一線資料。 ■ 直接微信回復產品平臺,如“LS1043A”,即可快速獲取對應產品信息。 ■ 想要了解飛凌更多信息,歡迎與我們聯系: 銷售工程師:400-699-6866 國際業務部:0312-3102650-854 技術服務部:0312-3119192 方案定制類:17713286015 (杜工),18633238067(王工)
■ 實時技術支持: AM 9:00—11:30,PM 13:30—17:00(周一至周五) |
相關產品 >
-
FET1046A-C核心板
4核1.8GHz,原生8網口靈活擴展|LS1046A 系列ARM工控核心板基于 NXP公司的LS1046A高性能64位ARM四核處理器。LS1046A處理器將四個64位ARM Cortex-A72內核與數據包處理加速和高速外設相集成,CoreMark跑分高達45000,LS1046A強大的網絡處理能力和豐富的高速接口,適用于工業路由、邊緣計算網關、IP-PBX等產品,以及邊緣計算、 能源物聯網、智慧城市、工業自動化、視頻監控等應用領域。
了解詳情 -
OK1046A-C2開發板
4核1.8GHz,原生8網口,支持萬兆網絡|
飛凌嵌入式LS1046a ARM工控主板系列LS1046開發板 基于 NXP LS1046A 四核Cortex A72 CPU,強大的萬兆網絡處理能力和豐富的高速接口,CoreMark跑分高達45000。飛凌不僅僅提供了LS1046A開發板套件,還提供了調試心得、LS1046A硬件數據手冊,并根據應用情況發布了 LS1046A 5G CPE 工業網關方案、邊緣計算網關方案,降低了客戶二次開發的難度。更多關于LS1046A的解決方案,產品詳情,您可以登入飛凌嵌入式官網了解。
了解詳情 -
FET1043A-C核心板
LS1043A處理器是恩智浦推出的一款面向嵌入式網絡的四核64位ARM處理器。LS1023A (雙核)和LS1043A (四核)支持無風扇設計,超過10 Gbps的性能。LS1043A和LS1023A能夠面向無線LAN和以太網供電系統方案提供額外的功耗節省。支持引腳兼容設計,可擴展至LS1046A (四核A72處理器)或LS1088A (十核A53處理器)。
飛凌LS1043系列核心板,基于NXP公司的LS1043A四核處理器設計,主頻1.6GHz,ARM Cortex-A53架構。原生支持1個10Gbps和6個1000Mbps。支持PCIe 2.0、SATA3.0、USB3.0、UART、IIC等功能接口 了解詳情 -
OK1043A-C開發板
LS1043A開發板基于四核64位Arm Cortex-A53 LS1043A的處理器專為嵌入式網絡應用而設計,主頻1.6GHz,板載資源豐富,原生支持7 個Ethernet。 飛凌OK1043A-C開發板上市已有一段時間,大家對LS1043A有了初步體驗,飛凌也優化了很多資料,幫助客戶使用LS1043應用解決方案套件,包括LS1043軟件手冊、LS1043硬件手冊、LS1043引腳定義等,客戶可以通過這些LS1043的資料快速完成產品原型設計開發工作。
了解詳情