声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tonyE-mail : linzhaolover@gmail.com
Create Date:2013-7-7 14:06:26 Sunday
Last Change: 2013-8-8 13:22:36 Thursday
转载请注明出处:http://blog.csdn.net/linzhaolover
此文中源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
请注意:此文请结合dpdk的源码去阅读,此文中提到的源码是dpdk-1.2.3版本,目前dpdk已经更新的1.3.1,1.3.1版本中的代码有很大的改变;
1、函数作用
rte_eal_cpu_init 读取当前系统cpu信息,并将其填入全局结构体rte_config中;dpdk的运行,要了解当前系统的core数,检查创建线程的合法化;
2、函数调用讲解
rte_eal_cpu_init(void) 在文件( dpdk/lib/librte_eal/linuxapp/eal/eal_lcore.c )中;
/* get pointer to global configuration */
config = rte_eal_get_configuration();
去获取rte_config结构体的指针,后面会将一些系统信息放入这个结构体中,这结构体很重要;
/* open /proc/cpuinfo */
f = fopen(PROC_CPUINFO, "r");
打开 /proc/cpuinfo 这个记录文件,去查询信息;
if (parse_processor_id(buf, &lcore_id) == 0)
continue;
去查询core信息;/* parse one line and try to match "processor : %d". */
if (parse_socket_id(buf, &socket_id) == 0)
continue;
去查询物理cpu信息;/* parse one line and try to match "physical id : %d". */
lcore_config[lcore_id].detected = 1;
lcore_config[lcore_id].socket_id = socket_id;
lcore_config这个结构会存储cpu信息;
struct lcore_config 在dpdk/lib/librte_eal/linuxapp/eal/include/exec-env/rte_lcore.h文件中的定义;
config->lcore_count = count;
最后将cpu可以用的core数传递给rte_config-> locre_count 中;
而这个count与之前我们执行程序传递的 -c所产生的coremask有效掩码数相一致;