DPDK-helloworld实例分析
【环境】
VMware12 pro 、DPDK-16.04、Ubuntu14.04
【程序流程】
1.启动初始运行环境,初始EAL
2.遍历可用lcore并调用lcore_hello函数
3.执行结束
【运行指令】
1.进入DPDK目录
cd dpdk-<version>
2.设置运行环境
export RTE_SDK=/home/wwr/dpdk-16.04(设置dpdk路径,请根据实际情况而定)
export RTE_TARGET=x86_64-native-linuxapp-gcc
3.编译
make
4.运行参数
./build/helloworld -c COREMASK -n NUM
【参数解析】
coremask:十六进制掩码表示分配的逻辑内核
num:内存通道数
【运行截图】
PS: 3是十六进制 11表示使用lcore0和lcore1
lcore0默认是主线程,lcore1是从属线程。
helloworld先在从线程运行hello函数,最后在主线程运行hello函数,所以顺序为hello from core 1、hello from core 0
PS: f是十六进制 1111表示使用lcore0、lcore1、lcore2、lcore3
lcore0默认是主线程,lcore1、lcore2、lcore3是从属线程。
helloworld先在从线程运行hello函数,最后在主线程运行hello函数,所以顺序为1、2、3、0
PS:可以指定lcore1为主线程,所以顺序为0、2、3、1
【源码分析】
PS:
1.rte_eal_init( )解析入口参数,保存为DPDK运行的系统信息,主要功能包括:
配置初始化、内存初始化、内存池初始化、队列初始化、告警初始化、中断初始化、PCI初始化、定时器初始化等
2.rte_eal_remote_launch( int(*f)(void *),void *arg,unsigned slave_id);
第一个参数:被征召的线程
第二个参数:传给从线程的参数
第三个参数:指定逻辑核