Skip to main content

Memory

Generic memory management APIs for libmango.

Example

Here is an example of creating a 2MB hugepage backed host memory.

example_memory.cc
#include <libmango.h>

#define SZ_2MB (2 * 1024 * 1024)

int main() {
// Create a memory handle
mango_memory_h memory;
mango_memory_create(MANGO_MEMORY_HUGE_MEM, SZ_2MB, SZ_2MB, &memory);

// Get the data pointer of memory handle
void *data;
mango_memory_get_data(memory, &data);

// Get the DMA address of memory handle
uint64_t addr;
mango_memory_get_addr(memory, &addr);

// Get the size of memory handle
size_t size;
mango_memory_get_size(memory, &size);

...

// Cleanup
mango_memory_destroy(memory);

return 0;
}

Datatypes

mango_memory_h

typedef void * mango_memory_h;

A handle of mango memory.

Functions

mango_memory_create

mango_status_e mango_memory_create(mango_memory_type_e type,
uint64_t key,
size_t size,
mango_memory_h *memory)

Create an memory handle.

Parameters

  • in type The memory type.
  • in key The memory key identifier.
  • in size The memory buffer size.
  • out memory The output memory handle.

Returns 0 on success, Otherwise, a negative error value.

note

The key has different semantics depending a given memory type.

  • MANGO_MEMORY_SHMEM_OWNER: shmem key for sharing.
  • MANGO_MEMORY_SHMEM_USER: shmem key for sharing.
  • MANGO_MEMORY_PCIE_BAR: PCIe BAR Index.
  • MANGO_MEMORY_HUGE_MEM: Hugepage size.
  • MANGO_MEMORY_HOST_MEM: Host DMA address.
  • MANGO_MEMORY_DPU_MEM: DPU DMA address.
  • MANGO_MEMORY_DPU_MEM_EXT: DPU DMA address (external RAM).
  • MANGO_MEMORY_DPU_HUGE_MEM: Hugepage size.

mango_memory_destroy

mango_status_e mango_memory_destroy(mango_memory_h memory)

Destroy the memory handle.

Parameters

  • in memory The memory handle to be destroyed.

Returns 0 on success, Otherwise, a negative error value.

mango_memory_get_data

mango_status_e mango_memory_get_data(mango_memory_h mem, void **data)

Get the data pointer in memory buffer.

Parameters

  • in mem the memory handle.
  • out data the output data pointer.

Returns 0 on success, Otherwise, a negative error value.

mango_memory_get_addr

mango_status_e mango_memory_get_addr(mango_memory_h mem, uint64_t *addr)

Get the dma address if mapped.

Parameters

  • in mem the memory handle.
  • out addr the dma address mapped.

Returns 0 on success, Otherwise, a negative error value.

mango_memory_get_size

mango_status_e mango_memory_get_size(mango_memory_h mem, size_t *size)

Get the memory size mapped.

Parameters

  • in mem the memory handle.
  • out size the memory size mapped.

Returns 0 on success, Otherwise, a negative error value.