メモリアロケータ (librte_malloc)
rte_malloc
void *rte_malloc(const char *type, size_t size, unsigned align);
指定サイズのメモリブロックをアライメント付きで割り当てます。
type: メモリタイプ識別文字列(デバッグ用)size: 割り当てサイズ(バイト)align: アライメントサイズ(2のべき乗)
使用例
#include <rte_malloc.h>
void *buffer = rte_malloc("data_buffer", 2048, RTE_CACHE_LINE_SIZE);
if (buffer == NULL) {
// エラー処理
}
// メモリ使用処理
rte_free(buffer);
rte_zmalloc
ゼロ初期化されたメモリを割り当てます。パラメータはrte_mallocと同様です。
rte_calloc
void *rte_calloc(const char *type, size_t num, size_t size, unsigned align);
指定数の要素をゼロ初期化状態で割り当てます。
rte_realloc
void *rte_realloc(void *ptr, size_t size, unsigned align);
既存のメモリブロックのサイズを変更します。元のポインタは無効になる可能性があります。
rte_free
割り当てられたメモリを解放します。
rte_malloc_socket
指定NUMAノードにメモリを割り当てます。
rte_memzone_reserve
共有メモリ領域を確保します。複数プロセス間でのデータ共有に使用します。
リングバッファ管理 (librte_ring)
rte_ring_create
struct rte_ring *rte_ring_create(const char *name, unsigned count,
int socket_id, unsigned flags);
マルチプロデューサ/マルチコンシューマ対応のリングバッファを作成します。
使用例
struct rte_ring *queue = rte_ring_create("packet_queue", 4096,
SOCKET_ID_ANY, 0);
if (queue == NULL) {
// エラー処理
}
rte_ring_enqueue / rte_ring_dequeue
リングバッファへの要素追加と取り出しを行います。
rte_ring_enqueue_bulk / rte_ring_dequeue_bulk
複数要素の一括操作を提供します。
rte_ring_count
現在のリングバッファ内要素数を返します。
rte_ring_empty / rte_ring_full
リングバッファの空/満状態をチェックします。
rte_ring_lookup
名前指定でリングバッファを検索します。
メモリプール管理 (librte_mempool)
rte_mempool_create
struct rte_mempool *rte_mempool_create(const char *name, unsigned nb_elem,
unsigned elt_size, unsigned cache_size,
unsigned private_data_size,
rte_mempool_obj_cb_t *obj_init,
void *obj_init_arg,
rte_mempool_ctor_t *mp_init,
void *mp_init_arg,
int socket_id, unsigned flags);
事前割り当て済みのメモリプールを作成します。
rte_mempool_get / rte_mempool_put
メモリプールからのオブジェクト取得と返却を行います。
rte_mempool_avail_count
利用可能なオブジェクト数を返します。
rte_mempool_lookup
名前指定でメモリプールを検索します。
rte_mempool_free
メモリプールを解放します。