DPDK 22.11.6
|
#include <stdio.h>
#include <rte_compat.h>
#include <rte_config.h>
#include <rte_per_lcore.h>
#include <rte_eal.h>
#include <rte_launch.h>
#include <rte_thread.h>
Go to the source code of this file.
Macros | |
#define | LCORE_ID_ANY UINT32_MAX |
#define | RTE_LCORE_FOREACH(i) |
#define | RTE_LCORE_FOREACH_WORKER(i) |
Typedefs | |
typedef int(* | rte_lcore_init_cb) (unsigned int lcore_id, void *arg) |
typedef void(* | rte_lcore_uninit_cb) (unsigned int lcore_id, void *arg) |
typedef int(* | rte_lcore_iterate_cb) (unsigned int lcore_id, void *arg) |
Enumerations | |
enum | rte_lcore_role_t |
Functions | |
RTE_DECLARE_PER_LCORE (unsigned, _lcore_id) | |
enum rte_lcore_role_t | rte_eal_lcore_role (unsigned int lcore_id) |
int | rte_lcore_has_role (unsigned int lcore_id, enum rte_lcore_role_t role) |
static unsigned | rte_lcore_id (void) |
unsigned int | rte_get_main_lcore (void) |
unsigned int | rte_lcore_count (void) |
int | rte_lcore_index (int lcore_id) |
unsigned int | rte_socket_id (void) |
unsigned int | rte_socket_count (void) |
int | rte_socket_id_by_idx (unsigned int idx) |
unsigned int | rte_lcore_to_socket_id (unsigned int lcore_id) |
int | rte_lcore_to_cpu_id (int lcore_id) |
rte_cpuset_t | rte_lcore_cpuset (unsigned int lcore_id) |
int | rte_lcore_is_enabled (unsigned int lcore_id) |
unsigned int | rte_get_next_lcore (unsigned int i, int skip_main, int wrap) |
void * | rte_lcore_callback_register (const char *name, rte_lcore_init_cb init, rte_lcore_uninit_cb uninit, void *arg) |
void | rte_lcore_callback_unregister (void *handle) |
int | rte_lcore_iterate (rte_lcore_iterate_cb cb, void *arg) |
void | rte_lcore_dump (FILE *f) |
int | rte_thread_setname (pthread_t id, const char *name) |
__rte_experimental int | rte_thread_getname (pthread_t id, char *name, size_t len) |
int | rte_thread_register (void) |
void | rte_thread_unregister (void) |
int | rte_ctrl_thread_create (pthread_t *thread, const char *name, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) |
API for lcore and socket manipulation
Definition in file rte_lcore.h.
#define LCORE_ID_ANY UINT32_MAX |
Any lcore.
Definition at line 27 of file rte_lcore.h.
#define RTE_LCORE_FOREACH | ( | i | ) |
Macro to browse all running lcores.
Definition at line 218 of file rte_lcore.h.
#define RTE_LCORE_FOREACH_WORKER | ( | i | ) |
Macro to browse all running lcores except the main lcore.
Definition at line 226 of file rte_lcore.h.
typedef int(* rte_lcore_init_cb) (unsigned int lcore_id, void *arg) |
Callback prototype for initializing lcores.
lcore_id | The lcore to consider. |
arg | An opaque pointer passed at callback registration. |
Definition at line 242 of file rte_lcore.h.
typedef void(* rte_lcore_uninit_cb) (unsigned int lcore_id, void *arg) |
Callback prototype for uninitializing lcores.
lcore_id | The lcore to consider. |
arg | An opaque pointer passed at callback registration. |
Definition at line 252 of file rte_lcore.h.
typedef int(* rte_lcore_iterate_cb) (unsigned int lcore_id, void *arg) |
Callback prototype for iterating over lcores.
lcore_id | The lcore to consider. |
arg | An opaque pointer coming from the caller. |
Definition at line 310 of file rte_lcore.h.
enum rte_lcore_role_t |
The lcore role (used in RTE or not).
Definition at line 34 of file rte_lcore.h.
RTE_DECLARE_PER_LCORE | ( | unsigned | , |
_lcore_id | |||
) |
Per thread "lcore id".
enum rte_lcore_role_t rte_eal_lcore_role | ( | unsigned int | lcore_id | ) |
Get a lcore's role.
lcore_id | The identifier of the lcore, which MUST be between 0 and RTE_MAX_LCORE-1. |
int rte_lcore_has_role | ( | unsigned int | lcore_id, |
enum rte_lcore_role_t | role | ||
) |
Test if the core supplied has a specific role
lcore_id | The identifier of the lcore, which MUST be between 0 and RTE_MAX_LCORE-1. |
role | The role to be checked against. |
|
inlinestatic |
Return the Application thread ID of the execution unit.
Note: in most cases the lcore id returned here will also correspond to the processor id of the CPU on which the thread is pinned, this will not be the case if the user has explicitly changed the thread to core affinities using –lcores EAL argument e.g. –lcores '(0-3)@10' to run threads with lcore IDs 0, 1, 2 and 3 on physical core 10..
Definition at line 79 of file rte_lcore.h.
unsigned int rte_get_main_lcore | ( | void | ) |
Get the id of the main lcore
unsigned int rte_lcore_count | ( | void | ) |
Return the number of execution units (lcores) on the system.
int rte_lcore_index | ( | int | lcore_id | ) |
Return the index of the lcore starting from zero.
When option -c or -l is given, the index corresponds to the order in the list. For example: -c 0x30, lcore 4 has index 0, and 5 has index 1. -l 22,18 lcore 22 has index 0, and 18 has index 1.
lcore_id | The targeted lcore, or -1 for the current one. |
unsigned int rte_socket_id | ( | void | ) |
Return the ID of the physical socket of the logical core we are running on.
unsigned int rte_socket_count | ( | void | ) |
Return number of physical sockets detected on the system.
Note that number of nodes may not be correspondent to their physical id's: for example, a system may report two socket id's, but the actual socket id's may be 0 and 8.
int rte_socket_id_by_idx | ( | unsigned int | idx | ) |
Return socket id with a particular index.
This will return socket id at a particular position in list of all detected physical socket id's. For example, on a machine with sockets [0, 8], passing 1 as a parameter will return 8.
idx | index of physical socket id to return |
unsigned int rte_lcore_to_socket_id | ( | unsigned int | lcore_id | ) |
Get the ID of the physical socket of the specified lcore
lcore_id | the targeted lcore, which MUST be between 0 and RTE_MAX_LCORE-1. |
int rte_lcore_to_cpu_id | ( | int | lcore_id | ) |
Return the id of the lcore on a socket starting from zero.
lcore_id | The targeted lcore, or -1 for the current one. |
rte_cpuset_t rte_lcore_cpuset | ( | unsigned int | lcore_id | ) |
Return the cpuset for a given lcore.
lcore_id | the targeted lcore, which MUST be between 0 and RTE_MAX_LCORE-1. |
int rte_lcore_is_enabled | ( | unsigned int | lcore_id | ) |
Test if an lcore is enabled.
lcore_id | The identifier of the lcore, which MUST be between 0 and RTE_MAX_LCORE-1. |
unsigned int rte_get_next_lcore | ( | unsigned int | i, |
int | skip_main, | ||
int | wrap | ||
) |
Get the next enabled lcore ID.
i | The current lcore (reference). |
skip_main | If true, do not return the ID of the main lcore. |
wrap | If true, go back to 0 when RTE_MAX_LCORE is reached; otherwise, return RTE_MAX_LCORE. |
void * rte_lcore_callback_register | ( | const char * | name, |
rte_lcore_init_cb | init, | ||
rte_lcore_uninit_cb | uninit, | ||
void * | arg | ||
) |
Register callbacks invoked when initializing and uninitializing a lcore.
This function calls the init callback with all initialized lcores. Any error reported by the init callback triggers a rollback calling the uninit callback for each lcore. If this step succeeds, the callbacks are put in the lcore callbacks list that will get called for each lcore allocation/release.
Note: callbacks execution is serialised under a write lock protecting the lcores and callbacks list.
name | A name serving as a small description for this callback. |
init | The callback invoked when a lcore_id is initialized. init can be NULL. |
uninit | The callback invoked when a lcore_id is uninitialized. uninit can be NULL. |
arg | An optional argument that gets passed to the callback when it gets invoked. |
void rte_lcore_callback_unregister | ( | void * | handle | ) |
Unregister callbacks previously registered with rte_lcore_callback_register.
This function calls the uninit callback with all initialized lcores. The callbacks are then removed from the lcore callbacks list.
handle | The handle pointer returned by a former successful call to rte_lcore_callback_register. |
int rte_lcore_iterate | ( | rte_lcore_iterate_cb | cb, |
void * | arg | ||
) |
Iterate on all active lcores (ROLE_RTE, ROLE_SERVICE and ROLE_NON_EAL). No modification on the lcore states is allowed in the callback.
Note: as opposed to init/uninit callbacks, iteration callbacks can be invoked in parallel as they are run under a read lock protecting the lcores and callbacks list.
cb | The callback that gets passed each lcore. |
arg | An opaque pointer passed to cb. |
void rte_lcore_dump | ( | FILE * | f | ) |
List all lcores.
f | The output stream where the dump should be sent. |
int rte_thread_setname | ( | pthread_t | id, |
const char * | name | ||
) |
Set thread names.
id | Thread id. |
name | Thread name to set. |
__rte_experimental int rte_thread_getname | ( | pthread_t | id, |
char * | name, | ||
size_t | len | ||
) |
Get thread name.
id | Thread id. |
name | Thread name to set. |
len | Thread name buffer length. |
int rte_thread_register | ( | void | ) |
Register current non-EAL thread as a lcore.
void rte_thread_unregister | ( | void | ) |
Unregister current thread and release lcore if one was associated.
int rte_ctrl_thread_create | ( | pthread_t * | thread, |
const char * | name, | ||
const pthread_attr_t * | attr, | ||
void *(*)(void *) | start_routine, | ||
void * | arg | ||
) |
Create a control thread.
Creates a control thread with the given name and attributes. The affinity of the new thread is based on the CPU affinity retrieved at the time rte_eal_init() was called, the dataplane and service lcores are then excluded. If setting the name of the thread fails, the error is ignored and a debug message is logged.
thread | Filled with the thread id of the new created thread. |
name | The name of the control thread (max 16 characters including '\0'). |
attr | Attributes for the new thread. |
start_routine | Function to be executed by the new thread. |
arg | Argument passed to start_routine. |