К сожалению, вы мало что можете сделать.Каждый объект пула памяти имеет заголовок, который имеет указатели на:
- Следующий объект.
- Пул памяти, к которому принадлежит объект.
- IO / физический адрес.
См .: http://doc.dpdk.org/api/structrte__mempool__objhdr.html
Плюс внутренний пул памяти хранит кольцевой буфер, который является примерно другим указателем на объект.Таким образом, накладные расходы для каждого объекта намного больше, чем данные, которые вы пытаетесь сохранить в каждом объекте.
Если нам не важен физический адрес и т. Д., И все, что нам нужно, - это иметь возможностьЭффективно сохраняйте эти 24 байта, мы почти используем кольцевой буфер ( rte_ring ) с плоским массивом маленьких объектов.В этом случае накладные расходы составят ~ 8 байт на объект.
Производительность будет ниже, поскольку в пуле памяти реализован внутренний кэш для каждого ядра.
Если это все еще слишком много, вам следует изучить другие структуры данных, не относящиеся к DPDK.
Или хранить группы объектов.Скажем, 100 объектов на ведро уменьшат накладные расходы примерно в 100 раз.