在我使用 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 表示任意放置。 |