用于多核架構的Linux網絡框架:PFQ
PFQ是一個設計用于Linux操作系統的網絡框架,能夠高效地進行包捕獲和傳輸,內核處理功能,跨sockets包轉發。
PFQ 專門為多核處理器而優化,包括對多個硬件隊列的網絡設備優化,支持任意網絡設備驅動,并提供一個腳本用來加速和優化對設備數據的獲取。
該框架可用來開發高性能的應用,使用 C、C++11 和 Haskell 。此外 PFQ 還包含一個純函數語言 PFQ/lang 。
PFQ/lang 靈感來自于 Haskell 可以用來創建運行在內核空間中網絡設備驅動之上的小應用程序,例如用來創建高效的橋接程序、端口鏡像、簡單防火墻和網絡均衡器等等。
特性
-
完全無鎖和非堵塞架構
-
預先分配 Socket 緩沖池
-
兼容絕大多數網絡設備驅動
-
Rx and Tx 10-Gbit line-rate (14,8Mpps), 基于 Intel ixgbe vanilla 驅動
-
透明的支持核心線程,用于異步包交換
-
通過 socket 組并發監控多線程應用
-
通過隨機化哈希和固定分類進行 Per-group 包管理
-
Per-group Berkeley 和 VLAN 過濾器.
-
內核中用于包處理的函數化引擎: PFQ/lang v4.x.
-
為 C、C++11-14 和 Haskell 語言提供用戶空間庫
-
PFQ/lang as eDLS for C++11-14 and Haskell language.
-
加速的 pcap 庫用于包捕獲和傳輸
-
pfqd, 用來配置和并行化多實例傳統應用的守護進程.
-
pfq-omatic, 用來動態加速 vanilla 驅動的腳本
-
I/O user<->kernel 共享內存 基于 HugePages
PFQ 的性能高度依賴于所運行的硬件環境。在至強處理器、Intel 82599 10G 控制器上,PFQ 每秒可處理約 1480 萬的數據包(2 或者 3 核心線程),詳細配置請看 Intel processors.