声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tony 转载请注明出处:http://blog.csdn.net/linzhaolover
此文中源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
请注意:此文请结合dpdk的源码去阅读,此文中提到的源码是dpdk-1.2.3版本,目前dpdk已经更新的1.3.1,1.3.1版本中的代码有很大的改变;
rte_eal_cpu_init 读取当前系统cpu信息,并将其填入全局结构体rte_config中;dpdk的运行,要了解当前系统的core数,检查创建线程的合法化;
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 中;