DPDK: Data Plane Development Kit

18.02.0-rc0
rte_memory.h File Reference
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include <rte_common.h>

Go to the source code of this file.

Data Structures

struct  rte_memseg

Macros

#define SOCKET_ID_ANY   -1
#define RTE_CACHE_LINE_MASK   (RTE_CACHE_LINE_SIZE-1)
#define RTE_CACHE_LINE_ROUNDUP(size)   (RTE_CACHE_LINE_SIZE * ((size + RTE_CACHE_LINE_SIZE - 1) / RTE_CACHE_LINE_SIZE))
#define RTE_CACHE_LINE_MIN_SIZE   64
#define __rte_cache_aligned   __rte_aligned(RTE_CACHE_LINE_SIZE)
#define __rte_cache_min_aligned   __rte_aligned(RTE_CACHE_LINE_MIN_SIZE)

Typedefs

typedef uint64_t phys_addr_t
typedef uint64_t rte_iova_t

Functions

int rte_mem_lock_page (const void *virt)
phys_addr_t rte_mem_virt2phy (const void *virt)
rte_iova_t rte_mem_virt2iova (const void *virt)
struct rte_memsegrte_eal_get_physmem_layout (void)
void rte_dump_physmem_layout (FILE *f)
uint64_t rte_eal_get_physmem_size (void)
unsigned rte_memory_get_nchannel (void)
unsigned rte_memory_get_nrank (void)
int rte_eal_using_phys_addrs (void)

Detailed Description

Memory-related RTE API.

Definition in file rte_memory.h.

Macro Definition Documentation

#define SOCKET_ID_ANY   -1
#define RTE_CACHE_LINE_MASK   (RTE_CACHE_LINE_SIZE-1)

Cache line mask.

Definition at line 68 of file rte_memory.h.

#define RTE_CACHE_LINE_MIN_SIZE   64

Minimum Cache line size.

Definition at line 85 of file rte_memory.h.

struct rte_mempool_ops_table __rte_cache_aligned   __rte_aligned(RTE_CACHE_LINE_SIZE)

Force alignment to cache line.

Definition at line 90 of file rte_memory.h.

struct rte_eth_txq_info __rte_cache_min_aligned   __rte_aligned(RTE_CACHE_LINE_MIN_SIZE)

Force minimum cache line alignment.

Definition at line 95 of file rte_memory.h.

Typedef Documentation

typedef uint64_t phys_addr_t

Physical address.

Definition at line 97 of file rte_memory.h.

typedef uint64_t rte_iova_t

IO virtual address type. When the physical addressing mode (IOVA as PA) is in use, the translation from an IO virtual address (IOVA) to a physical address is a direct mapping, i.e. the same value. Otherwise, in virtual mode (IOVA as VA), an IOMMU may do the translation.

Definition at line 106 of file rte_memory.h.

Function Documentation

int rte_mem_lock_page ( const void *  virt)

Lock page in physical memory and prevent from swapping.

Parameters
virtThe virtual address.
Returns
0 on success, negative on error.
phys_addr_t rte_mem_virt2phy ( const void *  virt)

Get physical address of any mapped virtual address in the current process. It is found by browsing the /proc/self/pagemap special file. The page must be locked.

Parameters
virtThe virtual address.
Returns
The physical address or RTE_BAD_IOVA on error.
rte_iova_t rte_mem_virt2iova ( const void *  virt)

Get IO virtual address of any mapped virtual address in the current process.

Parameters
virtThe virtual address.
Returns
The IO address or RTE_BAD_IOVA on error.
struct rte_memseg* rte_eal_get_physmem_layout ( void  )
read

Get the layout of the available physical memory.

It can be useful for an application to have the full physical memory layout to decide the size of a memory zone to reserve. This table is stored in rte_config (see rte_eal_get_configuration()).

Returns
  • On success, return a pointer to a read-only table of struct rte_physmem_desc elements, containing the layout of all addressable physical memory. The last element of the table contains a NULL address.
  • On error, return NULL. This should not happen since it is a fatal error that will probably cause the entire system to panic.
void rte_dump_physmem_layout ( FILE *  f)

Dump the physical memory layout to a file.

Parameters
fA pointer to a file for output
uint64_t rte_eal_get_physmem_size ( void  )

Get the total amount of available physical memory.

Returns
The total amount of available physical memory in bytes.
unsigned rte_memory_get_nchannel ( void  )

Get the number of memory channels.

Returns
The number of memory channels on the system. The value is 0 if unknown or not the same on all devices.
unsigned rte_memory_get_nrank ( void  )

Get the number of memory ranks.

Returns
The number of memory ranks on the system. The value is 0 if unknown or not the same on all devices.
int rte_eal_using_phys_addrs ( void  )

Drivers based on uio will not load unless physical addresses are obtainable. It is only possible to get physical addresses when running as a privileged user.

Returns
1 if the system is able to obtain physical addresses. 0 if using DMA addresses through an IOMMU.