01/09/2023 14:47, omer yamac: > Hello, > > I need clarification while creating direct/indirect buffers for mbuf. I > couldn't find exact documentation, and I just looked over the fragmentation > test case and saw that two pools were created. One is a > direct pool, and the other is an indirect pool. Here are the methods to > create pools: > direct_pool = rte_pktmbuf_pool_create("FRAG_D_MBUF_POOL", > NUM_MBUFS, BURST, 0, > RTE_MBUF_DEFAULT_BUF_SIZE, > SOCKET_ID_ANY); > indirect_pool = rte_pktmbuf_pool_create("FRAG_I_MBUF_POOL", > NUM_MBUFS, BURST, 0, > 0, SOCKET_ID_ANY) > > I couldn't see the exact difference. Just the "data_room_size" parameter is > different. If this parameter is 0, then is the pool indirect?
A pool is neither direct or indirect, it is just a pool of buffers with a defined size for all buffers of a pool. You are free to create any pool for your needs. Now if you create a pool of buffers with size 0, we can expect you will save some data elsewhere, using rte_pktmbuf_attach_extbuf() for instance. More explanations can be found in the doc: https://doc.dpdk.org/guides/prog_guide/mbuf_lib.html#direct-and-indirect-buffers