DPDK学习笔记<4>源代码分析(1)

来源:互联网 发布:怎么搜索微博域名 编辑:程序博客网 时间:2024/05/22 07:46

源代码分析(1)helloworld

源代码:

/*- *   BSD LICENSE * *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved. *   All rights reserved. * *   Redistribution and use in source and binary forms, with or without *   modification, are permitted provided that the following conditions *   are met: * *     * Redistributions of source code must retain the above copyright *       notice, this list of conditions and the following disclaimer. *     * Redistributions in binary form must reproduce the above copyright *       notice, this list of conditions and the following disclaimer in *       the documentation and/or other materials provided with the *       distribution. *     * Neither the name of Intel Corporation nor the names of its *       contributors may be used to endorse or promote products derived *       from this software without specific prior written permission. * *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include #include #include #include #include #include #include #include #include #include #include #include static intlcore_hello(__attribute__((unused)) void *arg){unsigned lcore_id;lcore_id = rte_lcore_id();printf("hello from core %u\n", lcore_id);return 0;}intmain(int argc, char **argv){int ret;unsigned lcore_id;ret = rte_eal_init(argc, argv);if (ret < 0)rte_panic("Cannot init EAL\n");/* call lcore_hello() on every slave lcore */RTE_LCORE_FOREACH_SLAVE(lcore_id) {rte_eal_remote_launch(lcore_hello, NULL, lcore_id);}/* call it on master lcore too */lcore_hello(NULL);rte_eal_mp_wait_lcore();return 0;}


分析:

helloworld为dpdk的入门样例程序,程序的编写和系统编程一样都是从main函数作为入口函数。

rte_eal_init()启动基础运行环境,该函数完成的工作比较复杂,读取入口参数,解析并保存DPDK运行的系统信息,并根据这些信息构建包处理的运行环境。

配置初始化

内存初始化

内存池初始化

队列初始化

警告初始化

中断初始化

PCI初始化

定时器初始化

…………

使用DPDK这些操作已经被EAL封装,如果需要进行深度定制二次开发,则需要进一步的研究。

RTE_LCORE_FOREACH_SLAVE(lcore_id) {rte_eal_remote_launch(lcore_hello, NULL, lcore_id);}
DPDK面向多核设计,程序试图独占运行在逻辑核(lcore)上,RTE_LCORE_FOREACH_SLAVE遍历EAL指定的可用逻辑核,然后在每个逻辑核上执行被指定的线程,本文中为
lcore_hello。(大家可以执行设计lcore_hello)。


0 0
原创粉丝点击