02. DPDK examples分析之helloworld

DPDK源码库中提供了一些示例程序来测试DPDK,这些示例程序可以看作是一个个小的DPDK的app。那我们先来分析第一个最简单的app——helloworld。

编译执行示例程序

运行app之前需要完成app的编译,这个前提是已经完成了DPDK库的编译和安装,编译方法很简单,首先需要导入两个环境变量,RTE_SDK指向DPDK的安装目录,RTE_TARGET指向DPDK的目标环境目录:

export RTE_SDK=/home/user/DPDK
export RTE_TARGET=x86_64-native-linuxapp-gcc

再进入示例程序的源码目录,如helloworld的app的代码就在$RET_SDK/examples/helloworld目录下,执行命令make即可完成编译,编译的可执行文件存放在build/app目录下:

# cd $RTE_SDK/examples/helloworld
# ls
Makefile  main.c   meson.build
# make
  CC main.o
  LD helloworld
  INSTALL-APP helloworld
  INSTALL-MAP helloworld.map
# ls build/app/
helloworld  helloworld.map

执行该示例程序,该程序完成的功能是,从lcore上分别打印一条语句hello from core #,等所有的lcore都执行完之后master core也打印一条后退出。

# cd build/app/
# ./helloworld -l 0-4 -n 4
EAL: Detected 16 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: No free hugepages reported in hugepages-2048kB
EAL: Probing VFIO support...
EAL: PCI device 0000:00:03.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 1af4:1000 net_virtio
EAL: PCI device 0000:00:07.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 1af4:1000 net_virtio
hello from core 1
hello from core 2
hello from core 3
hello from core 4
hello from core 0

EAL参数说明

从上面可以看到在执行helloworld程序时,后面指定了几个参数-l 0-4 -n 4,那这几个参数的含义是什么呢。打开源码可以看到这些参数最终都是传给EAL做初始化使用的,下面列出部分EAL参数说明其含义:

lcore相关参数

  • -c COREMASK | -l CORELIST | --lcores COREMAPS:DPDK程序使用的核,可以使用核号的掩码或者列表的形式给出,例如 -c 0x1f 和 -l 0-4 效果是一样的,都表示使用的核是0,1,2,3,4。
  • --master-lcore COREID:指定master core的核号,默认为核号最小的那个核。
  • -s SERVICE_CORE_MASK:执行service cores的核的掩码,默认不分配。

内存相关参数

  • -n CHANNELS:设置使用的内存通道。
  • -r RANKS:设置使用的内存ranks,默认自动检测。
  • -m MEGABYTES:启动时预分配的内存大小。
  • --in-memory:
  • --iova-mode <pa|va>

设备相关参数

  • -b, --pci-blacklist PCI:禁止EAL使用的PCI设备列表。
  • -w, --pci-whitelist PCI:将PCI设备加入到白名单。
  • --vdev <device arguments>:添加一个虚拟设备,格式为<driver><id>,[key=val,...],例如:--vdev net_pcap0,rx_pcap=input.pcap,tx_pcap=output.pcap
  • -d <path_to_shared_object>:
  • --no-pci:

调试相关参数

  • --log-level <type:val>:设置不同组件的日志级别,例如--log-level eal:8

helloworld代码分析

了解上面一些基本的EAL参数之后,回头来分析一下hellworld的源码,从这个简单的app上看看DPDK的程序编码风格等。

/* SPDX-License-Identifier: BSD-3-Clause
 * Copyright(c) 2010-2014 Intel Corporation
 */

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <sys/queue.h>

#include <rte_memory.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include <rte_debug.h>

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;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容