DPDK Mempool

在我使用 DPDK 的經驗裡,要分配空間通常都是直接利用 rte_pktmbuf_pool_create() 函式來建立。這個函式會建立一個專門用於存放 packet buffer (struct rte_mbuf) 的儲存池。完整的函式 prototype 如下:

1
2
3
4
5
6
7
8
struct rte_mempool* rte_pktmbuf_pool_create(
const char * name,
unsigned n,
unsigned cache_size,
uint16_t priv_size,
uint16_t data_room_size,
int socket_id
)
參數名稱 說明
name 儲存池的名稱,主要是除錯時使用
n 儲存池的空間個數
cache_size 儲存池的 cache 大小,除了本身的儲存空間外,DPDK 會在每個 Core 上分配一個 cache 用來降低對 mempool 空間的存取,進而提昇效能。如果將其設為 0 則會關閉 cache。
priv_size 私人空間大小,如果想再 mempool 結構後面放一些自己的 metadata,就可以利用這個參數來分配
data_room_size 每個 mbuf 的 data 段要分配多少空間
socket_id 空間要配置在哪個 NUMA Node 的記憶體中,可以用 SOCKET_ID_ANY 表示任意放置。