DPDK  19.08.0-rc0
Data Structures | Macros | Functions | Variables
rte_lcore.h File Reference
#include <rte_config.h>
#include <rte_per_lcore.h>
#include <rte_eal.h>
#include <rte_launch.h>

Go to the source code of this file.

Data Structures

struct  lcore_config
 

Macros

#define LCORE_ID_ANY   UINT32_MAX
 
#define RTE_LCORE_FOREACH(i)
 
#define RTE_LCORE_FOREACH_SLAVE(i)
 

Functions

 RTE_DECLARE_PER_LCORE (unsigned, _lcore_id)
 
 RTE_DECLARE_PER_LCORE (rte_cpuset_t, _cpuset)
 
static unsigned rte_lcore_id (void)
 
static unsigned rte_get_master_lcore (void)
 
static unsigned 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)
 
__rte_experimental int rte_lcore_to_cpu_id (int lcore_id)
 
__rte_experimental rte_cpuset_t rte_lcore_cpuset (unsigned int lcore_id)
 
static int rte_lcore_is_enabled (unsigned int lcore_id)
 
static unsigned int rte_get_next_lcore (unsigned int i, int skip_master, int wrap)
 
int rte_thread_set_affinity (rte_cpuset_t *cpusetp)
 
void rte_thread_get_affinity (rte_cpuset_t *cpusetp)
 
int rte_thread_setname (pthread_t id, const char *name)
 
int rte_ctrl_thread_create (pthread_t *thread, const char *name, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
 
int rte_lcore_has_role (unsigned int lcore_id, enum rte_lcore_role_t role)
 

Variables

struct lcore_config lcore_config [RTE_MAX_LCORE]
 

Detailed Description

API for lcore and socket manipulation

Definition in file rte_lcore.h.

Macro Definition Documentation

◆ LCORE_ID_ANY

#define LCORE_ID_ANY   UINT32_MAX

Any lcore.

Definition at line 23 of file rte_lcore.h.

◆ RTE_LCORE_FOREACH

#define RTE_LCORE_FOREACH (   i)
Value:
for (i = rte_get_next_lcore(-1, 0, 0); \
i<RTE_MAX_LCORE; \
i = rte_get_next_lcore(i, 0, 0))
static unsigned int rte_get_next_lcore(unsigned int i, int skip_master, int wrap)
Definition: rte_lcore.h:234

Macro to browse all running lcores.

Examples
examples/exception_path/main.c, examples/ipv4_multicast/main.c, examples/l2fwd-jobstats/main.c, examples/multi_process/symmetric_mp/main.c, examples/vhost_crypto/main.c, examples/vm_power_manager/guest_cli/main.c, and examples/vm_power_manager/guest_cli/vm_power_cli_guest.c.

Definition at line 255 of file rte_lcore.h.

◆ RTE_LCORE_FOREACH_SLAVE

#define RTE_LCORE_FOREACH_SLAVE (   i)

Function Documentation

◆ RTE_DECLARE_PER_LCORE() [1/2]

RTE_DECLARE_PER_LCORE ( unsigned  ,
_lcore_id   
)

Per thread "lcore id".

◆ RTE_DECLARE_PER_LCORE() [2/2]

RTE_DECLARE_PER_LCORE ( rte_cpuset_t  ,
_cpuset   
)

Per thread "cpuset".

◆ rte_lcore_id()

static unsigned rte_lcore_id ( void  )
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..

Returns
Logical core ID (in EAL thread) or LCORE_ID_ANY (in non-EAL thread)
Examples
examples/bond/main.c, examples/distributor/main.c, examples/ethtool/ethtool-app/main.c, examples/eventdev_pipeline/main.c, examples/eventdev_pipeline/pipeline_worker_generic.c, examples/eventdev_pipeline/pipeline_worker_tx.c, examples/exception_path/main.c, examples/flow_classify/flow_classify.c, examples/helloworld/main.c, examples/ip_fragmentation/main.c, examples/ip_pipeline/thread.c, examples/ip_reassembly/main.c, examples/ipsec-secgw/ipsec-secgw.c, examples/ipsec-secgw/ipsec.c, examples/ipv4_multicast/main.c, examples/kni/main.c, examples/l2fwd-cat/l2fwd-cat.c, examples/l2fwd-crypto/main.c, examples/l2fwd-jobstats/main.c, examples/l2fwd-keepalive/main.c, examples/l2fwd/main.c, examples/l3fwd-acl/main.c, examples/l3fwd-power/main.c, examples/l3fwd-vf/main.c, examples/l3fwd/l3fwd_em.c, examples/l3fwd/l3fwd_lpm.c, examples/link_status_interrupt/main.c, examples/load_balancer/runtime.c, examples/multi_process/client_server_mp/mp_server/main.c, examples/multi_process/simple_mp/main.c, examples/multi_process/symmetric_mp/main.c, examples/packet_ordering/main.c, examples/performance-thread/common/lthread.c, examples/performance-thread/common/lthread_diag.c, examples/performance-thread/common/lthread_sched.c, examples/performance-thread/l3fwd-thread/main.c, examples/performance-thread/pthread_shim/main.c, examples/ptpclient/ptpclient.c, examples/qos_meter/main.c, examples/qos_sched/main.c, examples/quota_watermark/qw/main.c, examples/rxtx_callbacks/main.c, examples/server_node_efd/server/main.c, examples/skeleton/basicfwd.c, examples/tep_termination/main.c, examples/timer/main.c, examples/vhost/main.c, examples/vhost_crypto/main.c, examples/vmdq/main.c, and examples/vmdq_dcb/main.c.

Definition at line 80 of file rte_lcore.h.

◆ rte_get_master_lcore()

static unsigned rte_get_master_lcore ( void  )
inlinestatic

◆ rte_lcore_count()

static unsigned rte_lcore_count ( void  )
inlinestatic

◆ rte_lcore_index()

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.

Parameters
lcore_idThe targeted lcore, or -1 for the current one.
Returns
The relative index, or -1 if not enabled.
Examples
examples/performance-thread/common/lthread_sched.c.

◆ rte_socket_id()

unsigned int rte_socket_id ( void  )

Return the ID of the physical socket of the logical core we are running on.

Returns
the ID of current lcoreid's physical socket
Examples
examples/bbdev_app/main.c, examples/bond/main.c, examples/distributor/main.c, examples/ethtool/ethtool-app/main.c, examples/ethtool/lib/rte_ethtool.c, examples/eventdev_pipeline/main.c, examples/exception_path/main.c, examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/flow_classify/flow_classify.c, examples/flow_filtering/main.c, examples/ipsec-secgw/ipsec-secgw.c, examples/ipv4_multicast/main.c, examples/kni/main.c, examples/l2fwd-cat/l2fwd-cat.c, examples/l2fwd-crypto/main.c, examples/l2fwd-jobstats/main.c, examples/l2fwd-keepalive/main.c, examples/l2fwd/main.c, examples/link_status_interrupt/main.c, examples/multi_process/client_server_mp/mp_server/init.c, examples/multi_process/simple_mp/main.c, examples/multi_process/symmetric_mp/main.c, examples/netmap_compat/bridge/bridge.c, examples/packet_ordering/main.c, examples/performance-thread/common/lthread_sched.c, examples/ptpclient/ptpclient.c, examples/qos_meter/main.c, examples/quota_watermark/qw/init.c, examples/quota_watermark/qw/main.c, examples/rxtx_callbacks/main.c, examples/server_node_efd/node/node.c, examples/server_node_efd/server/init.c, examples/server_node_efd/server/main.c, examples/skeleton/basicfwd.c, examples/tep_termination/main.c, examples/vhost/main.c, examples/vm_power_manager/main.c, examples/vmdq/main.c, and examples/vmdq_dcb/main.c.

◆ rte_socket_count()

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.

Returns
the number of physical sockets as recognized by EAL

◆ rte_socket_id_by_idx()

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.

Parameters
idxindex of physical socket id to return
Returns
  • physical socket id as recognized by EAL
  • -1 on error, with errno set to EINVAL

◆ rte_lcore_to_socket_id()

unsigned int rte_lcore_to_socket_id ( unsigned int  lcore_id)

◆ rte_lcore_to_cpu_id()

__rte_experimental int rte_lcore_to_cpu_id ( int  lcore_id)
Warning
EXPERIMENTAL: this API may change without prior notice.

Return the id of the lcore on a socket starting from zero.

Parameters
lcore_idThe targeted lcore, or -1 for the current one.
Returns
The relative index, or -1 if not enabled.

◆ rte_lcore_cpuset()

__rte_experimental rte_cpuset_t rte_lcore_cpuset ( unsigned int  lcore_id)
Warning
EXPERIMENTAL: this API may change without prior notice.

Return the cpuset for a given lcore.

Parameters
lcore_idthe targeted lcore, which MUST be between 0 and RTE_MAX_LCORE-1.
Returns
The cpuset of that lcore

◆ rte_lcore_is_enabled()

static int rte_lcore_is_enabled ( unsigned int  lcore_id)
inlinestatic

◆ rte_get_next_lcore()

static unsigned int rte_get_next_lcore ( unsigned int  i,
int  skip_master,
int  wrap 
)
inlinestatic

Get the next enabled lcore ID.

Parameters
iThe current lcore (reference).
skip_masterIf true, do not return the ID of the master lcore.
wrapIf true, go back to 0 when RTE_MAX_LCORE is reached; otherwise, return RTE_MAX_LCORE.
Returns
The next lcore_id or RTE_MAX_LCORE if not found.
Examples
examples/bond/main.c, examples/ethtool/ethtool-app/main.c, examples/timer/main.c, and examples/vm_power_manager/main.c.

Definition at line 234 of file rte_lcore.h.

◆ rte_thread_set_affinity()

int rte_thread_set_affinity ( rte_cpuset_t *  cpusetp)

Set core affinity of the current thread. Support both EAL and non-EAL thread and update TLS.

Parameters
cpusetpPoint to cpu_set_t for setting current thread affinity.
Returns
On success, return 0; otherwise return -1;

◆ rte_thread_get_affinity()

void rte_thread_get_affinity ( rte_cpuset_t *  cpusetp)

Get core affinity of the current thread.

Parameters
cpusetpPoint to cpu_set_t for getting current thread cpu affinity. It presumes input is not NULL, otherwise it causes panic.

◆ rte_thread_setname()

int rte_thread_setname ( pthread_t  id,
const char *  name 
)

Set thread names.

Note
It fails with glibc < 2.12.
Parameters
idThread id.
nameThread name to set.
Returns
On success, return 0; otherwise return a negative value.

◆ rte_ctrl_thread_create()

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.

Wrapper to pthread_create(), pthread_setname_np() and pthread_setaffinity_np(). 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.

Parameters
threadFilled with the thread id of the new created thread.
nameThe name of the control thread (max 16 characters including '\0').
attrAttributes for the new thread.
start_routineFunction to be executed by the new thread.
argArgument passed to start_routine.
Returns
On success, returns 0; on error, it returns a negative value corresponding to the error number.
Examples
examples/kni/main.c, examples/tep_termination/main.c, and examples/vhost/main.c.

◆ rte_lcore_has_role()

int rte_lcore_has_role ( unsigned int  lcore_id,
enum rte_lcore_role_t  role 
)

Test if the core supplied has a specific role

Parameters
lcore_idThe identifier of the lcore, which MUST be between 0 and RTE_MAX_LCORE-1.
roleThe role to be checked against.
Returns
Boolean value: positive if test is true; otherwise returns 0.
Examples
examples/qos_sched/args.c.

Variable Documentation

◆ lcore_config

struct lcore_config lcore_config[RTE_MAX_LCORE]

Internal configuration (per-lcore)