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
- DPDK学习笔记<4>源代码分析(1)
- dpdk学习之多进程simple_mp源代码分析
- dpdk学习之ip_pipeline源代码分析
- DPDK学习笔记<1>学习安排
- DPDK学习笔记<2>DPDK安装部署
- dpdk之多进程client_server_mp源代码分析
- dpdk acl使用 学习笔记
- DPDK学习(rte_eal_init)
- DPDK学习(eal_thread_loop)
- DPDK学习(基础知识)
- Nutch1.7学习笔记4:Generator源代码分析
- Nutch1.7学习笔记4:Generator源代码分析
- DPDK学习笔记<3>样例学习
- DPDK学习(测试环境)
- DPDK support for vhost-user学习笔记
- easymock源代码学习笔记(1)
- dpdk学习
- DPDK(八):l2fwd代码分析
- Linu编译器vim的基本操作
- .canvas绘制出来的东西有锯齿,怎么解决?
- SpringMVC controller层模板
- lintcode(384)最长无重复字符的子串
- WebRTC常用知识点
- DPDK学习笔记<4>源代码分析(1)
- web网站嵌入QQ临时会话代码
- c++控制台程序实现定时器
- Android事件分发机制详解:史上最全面、最易懂
- 线性代数mooc课(3.2)
- 敏感词的简单实现
- 数据库邮件
- 2017.4.8第五次測試總結
- 获取表字段名用于insert into语句