How do you figure out what settings need to be used to correctly configure a DPDK mempool for your application?

Specifically using rte_pktmbuf_pool_create():

- n, the number of elements in the mbuf pool
- cache_size
- priv_size
- data_room_size

EAL arguments:
- n number of memory channels
- r number of memory ranks
- m amount of memory to preallocate at startup
- in-memory no shared data structures
- IOVA mode
- huge-worker-stack

My setup:

  • 2 x Intel Xeon Gold 6348 CPU @ 2.6 Ghz
    • 28 cores per socket
    • Max 3.5 Ghz
    • Hyperthreading disabled
    • Ubuntu 22.04.1 LTS
    • Kernel 5.15.0-53-generic
    • Cores set to performance governor
    • 4 x Sabrent 2TB Rocket 4 Plus in RAID0 Config
    • 128 GB DDR4 Memory
    • 10 1GB HugePages (Can change to what is required)
  • 1 x Mellanox ConnectX-5 100gbe NIC
    • 31:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
    • Firmware-version: 16.35.1012
  • UDP Source:
    • 100 gbe NIC
    • 9000 MTU Packets
    • ipv4-udp packets

Will be receiving 10GB/s UDP packets over a 100gbe link. Right now trying to get it working for 2GB/s to a single queue.

Reviewed the DPDK Programmers guide: https://doc.dpdk.org/guides/prog_guide/mempool_lib.html Also searched online but the resources seem limited. Would appreciate any help or a push in the right direction.


Sincerely,

DB