DPDKメモリ管理とリングバッファAPIリファレンス

メモリアロケータ (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

メモリプールを解放します。

タグ: DPDK memory_management ring_buffer mempool high_performance

6月11日 20:05 投稿