sched_set_affinity()
、sched_get_affinity()
内核函数_lcore_id
,_lcore_id
与CPU ID是一致的。注意虽然默认是1:1关系,但可以通过--lcores='<lcore_set>@<cpu_set>'
来指定lcore的CPU亲和性,这样可以不是1:1的,也就是多个lcore还是可以亲和到同一个的核,这就需要注意调度的情况(以非抢占式无锁rte_ring
为例):SCHED_OTHER
时,性能会有所影响SCHED_FIFO/SCHED_RR
,会产生死锁/sys/devices/system/cpu/cpuX/
目录的信息获取CPU的分布情况,将第一个核设置为MASTER,并通过eal_thread_set_affinity()
为每个SLAVE绑定CPUrte_eal_mp_remote_launch()
将自己的回调函数注册到DPDK中(lcore_config[].f
)eal_thread_loop()->回调函数
来执行真正的逻辑rte_memcpy()
在Intel处理器上充分利用了SSE/AVX的特点:优先保证Store指令存储的地址对齐,然后在每个指令周期指令2条Load的特新弥补一部分非对齐Load带来的性能损失。rte_mb()
:内存屏障读写APIrte_wmb()
:内存屏障写APIrte_rmb()
:内存屏障读APIrte_atomic64_add()
:原子操作APIrte_spinlock_lock()
, rte_spinlock_unlock()
被广泛的应用在告警、日志、中断机制、内存共享和link bonding的代码中,用于临界资源的保护。