DPDK学习笔记<4>源代码分析(1)
2017-04-10 11:31
190 查看
源代码分析(1)helloworld
源代码:
分析:
helloworld为dpdk的入门样例程序,程序的编写和系统编程一样都是从main函数作为入口函数。
rte_eal_init()启动基础运行环境,该函数完成的工作比较复杂,读取入口参数,解析并保存DPDK运行的系统信息,并根据这些信息构建包处理的运行环境。
配置初始化
内存初始化
内存池初始化
队列初始化
警告初始化
中断初始化
PCI初始化
定时器初始化
…………
使用DPDK这些操作已经被EAL封装,如果需要进行深度定制二次开发,则需要进一步的研究。
源代码:
/*- * 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 int lcore_hello(__attribute__((unused)) void *arg) { unsigned lcore_id; lcore_id = rte_lcore_id(); printf("hello from core %u\n", lcore_id); return 0; } int main(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)。
相关文章推荐
- Linux内核部件分析<4> 更强的链表klist
- 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(第一篇)----它怎么也能爆红?
- <转>boost::any的用法、优点和缺点以及源代码分析
- 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(第一篇)----它怎么也能爆红?
- 本书已出版<拨云见日:基于android的内核与系统架构源代码分析 >
- 读<看透Spring MVC 源代码分析与实践>Tomcat笔记
- 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(一)
- Android 图片使用导致OOM 性能分析<4>
- 读<看透Spring MVC 源代码分析与实践>Tomcat笔记
- 面向对象系统设计与分析专题<4>__业务事件分析
- 2014-05-08雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(一)
- Collections.sort(List<T> list, Comparator<? super T> c) 源代码分析
- Apache源代码分析——配置命令执行过程
- 基于 linux 平台的 libpcap 源代码分析
- java源代码分析----jvm.dll装载过程
- Peercast收听电台的源代码流程分析
- 基于 linux 平台的 libpcap 源代码分析
- RTL8139的linux源代码分析
- Apache源代码分析——模块的加载
- [原创]经过整理的源代码 google map 代码分析之一