pktgen:DPDK流量生成器-程序员宅基地

技术标签: 【计算机网络】  

目录

Pktgen入门

系统要求

设置巨大的TLB /巨大页面支持

BIOS设置

终端显示

获取源代码

编译DPDK和Pktgen

设置环境

运行应用程序


Pktgen入门

本节包含有关如何启动和运行DPDKpktgen流量生成器应用程序的说明。

这些说明与pktgen在Ubuntu桌面系统上设置DPDK 有关。但是,该版本应该可以在任何最新的Linux系统上使用,这些系统对kernel支持巨大的TLB /巨大页面。

系统要求

主要的系统要求是支持DPDK数据包处理框架。

DPDK Linux入门指南》中的“ 系统要求”部分 介绍了编译和运行基于DPDK的应用程序(如)的BIOS,系统和工具链要求pktgen。在继续之前,请确保您的系统满足这些要求。

您还将需要DPDK支持的NIC

当前版本pktgen是使用Ubuntu 13.10 x86_64(内核版本3.5.0-25)在运行频率为2.4GHz,每个插槽12GB内存6GB的Westmere Dual插座板上开发和测试的。

设置巨大的TLB /巨大页面支持

要获得hugeTLB / hugepage支持,您的Linux内核必须至少为2.6.33,并且HUGETLBFS必须启用kernel选项。

《 DPDK Linux入门指南》中有关于在Linux环境中使用大页面的部分。

进行所需的更改后,请确保使用以下命令在内核中具有HUGE TLB支持:

$ grep -i huge /boot/config-2.6.35-24-generic
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y

$ grep -i huge /proc/meminfo

HugePages_Total:      128
HugePages_Free:       128
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

Total和Free中的值可能会因系统而异。

您将需要编辑/etc/sysctl.conf文件以设置大页面大小:

$ sudo vi /etc/sysctl.conf
Add to the bottom of the file:
vm.nr_hugepages=256

您可以vm.nr_hugepages=256根据需要配置。在某些情况下,使其过小会影响pktgen的性能或导致其在启动时终止。

您还需要编辑/etc/fstab文件以在启动时装入大页面:

$ sudo vi /etc/fstab
Add to the bottom of the file:
huge /mnt/huge hugetlbfs defaults 0 0

$ sudo mkdir /mnt/huge
$ sudo chmod 777 /mnt/huge

您还应该重新引导计算机,因为必须在引导后立即设置巨大的页面,以确保有足够的连续内存来容纳2MB的页面。

注意

如果您pktgen在重新启动后首次启动之前启动了大量使用大型页面的应用程序(例如Eclipse或WR Workbench),则pktgen可能无法加载。在这种情况下,您应该关闭另一个正在使用大页面的应用程序。

BIOS设置

在BIOS中,确保已启用HPET高精度事件计时器。还要确保启用了超线程。有关 更多详细信息,请参阅有关启用其他BIOS功能的DPDK文档。

终端显示

pktgen输出显示需要132列和大约42行正确显示。作者使用132x42的xterm,但您也可以使用更大的显示屏,甚至可能更小。如果要显示的端口数多于4-6,则需要更宽的显示范围。

page如果不能一次全部显示在屏幕上,则Pktgen允许您通过运行时命令查看一组设置的端口,请参阅命令。

Pktgen使用VT100控制代码显示其输出屏幕,这意味着您的终端必须支持VT100。

使用默认pktgen配色方案时,最好将终端背景设置为黑色。

获取源代码

Pktgen需要构建DPDK源代码。

主存储库dpdkpktgengit存储库位于dpdk.org上

dpdk代码可以如下克隆:

git clone git://dpdk.org/dpdk
# or:
git clone http://dpdk.org/git/dpdk

pktgen代码可以如下克隆:

git clone git://dpdk.org/apps/pktgen-dpdk
# or:
git clone http://dpdk.org/git/apps/pktgen-dpdk

在下面的说明中,资源库关闭目录称为 DPDKInstallDirPktgenInstallDir

您还将需要Linux内核标头,以允许DPDK构建其内核模块。在Ubuntu上,您可以按以下方式安装它们(版本与内核版本匹配):

$ sudo apt-get install linux-headers-3.5.0-32-generic

DPDK也可以与libpcap驱动程序配合使用,有时对于不使用实际NIC进行测试或低速数据包捕获很有用。libpcap使用包管理安装 开发库。例如:

$ sudo apt-get install libpcap-dev

编译DPDK和Pktgen

设置DPDK所需的环境变量:

export RTE_SDK=<DPDKInstallDir>
export RTE_TARGET=x86_64-native-linux-gcc
or
export RTE_TARGET=x86_64-native-linuxapp-gcc

# or use clang if you have it installed:
export RTE_TARGET=x86_64-native-linux-clang
or
export RTE_TARGET=x86_64-native-linuxapp-clang

创建DPDK构建树:

$ cd $RTE_SDK
$ make install T=x86_64-native-linux-gcc
or
$ make install T=x86_64-native-linuxapp-gcc

上面的命令将在目录的顶层创建x86_64-pktgen-linux-gcc$RTE_SDK目录。它还将构建基本的DPDK库,内核模块和构建树。

然后可以如下构建Pktgen:

$ cd <PktgenInstallDir>
$ make

设置环境

PktgenInstallDir/ tools级别目录中,有run.py脚本,该脚本应在每次引导时使用-s选项运行一次,以设置端口。通过删除-s选项,还可以使用相同的配置文件来运行pktgen。

注意

run.py脚本将在内部执行sudo到根目录,这意味着sudo不需要。

该脚本包含设置环境所需的命令:

$ cd <PktgenInstallDir>/tools
$ ./run.py -s default  # setup system using the cfg/default.cfg file

run.py脚本是python脚本,它尝试将系统配置为运行DPDK应用程序。您可能必须更改配置文件以匹配您的系统。

要使用default.cfg配置运行pktgen:

$ cd <PktgenInstallDir>/tools
$ run.py default

run.py命令使用python数据文件来配置设置并运行pktgen。配置文件位于PktgenInstallDir/ cfg目录中。这些文件允许设置和运行pktgen,并且可以配置为与您的系统匹配,或者可以创建新的配置文件。

这是default.cfg文件:

# Setup configuration
setup = {
 'devices': [
     '81:00.0 81:00.1 81:00.2 81:00.3',
     '85:00.0 85:00.1 85:00.2 85:00.3',
     '83:00.0'
     ],

 'opts': [
     '-b igb_uio'
     ]
 }

# Run command and options
run = {
 'dpdk': [
     '-l 1,1-5,10-13',
     '-n 4',
     '--proc-type auto',
     '--log-level 7',
     '--socket-mem 2048,2048',
     '--file-prefix pg'
     ],

 'blacklist': [
     #'-b 81:00.0 -b 81:00.1 -b 81:00.2 -b 81:00.3',
     #'-b 85:00.0 -b 85:00.1 -b 85:00.2 -b 85:00.3',
     '-b 81:00.0 -b 81:00.1',
     '-b 85:00.0 -b 85:00.1',
     '-b 83:00.0'
     ],

 'pktgen': [
     '-T',
     '-P',
     '--crc-strip',
     '-m [2:3].0',
     '-m [4:5].1',
     '-m [10:11].2',
     '-m [12:13].3',
     ],

 'misc': [
     '-f themes/black-yellow.theme'
    ]
}

我们有两个部分,一个用于设置,另一个用于运行pktgen。

在安装脚本中,该命令将UIO支持模块加载到内核中,并放入igb-uio.ko模块。modprobe uio

设置脚本中的两个echo命令为两个套接字系统设置了巨大的页面。如果只有一个套接字系统,则删除第二个echo命令。脚本中的最后一个命令用于显示大页面设置。

您也可以编辑您的.bashrc.profile.cshrc文件永久添加的环境变量设置了上面:

export RTE_SDK=<DPDKInstallDir>
export RTE_TARGET=x86_64-native-linux-gcc
or
export RTE_TARGET=x86_64-native-linux-appgcc

运行应用程序

完成上述步骤并pktgen编译了应用程序后,您可以使用“ 运行Pktgen” 部分中显示的命令来运行它。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Rong_Toa/article/details/107933183

智能推荐

大规模 K8s 集群管理经验分享 · 上篇_尔达 Erda的博客-程序员宅基地

11 月 23 日,Erda 与 OSCHINA 社区联手发起了【高手问答第 271 期 – 聊聊大规模 K8s 集群管理】,目前问答活动已持续一周,由 Erda SRE 团队负责人骆冰利为大家解答,以下是本次活动的部分问题整理合集,其他问题也将于近期整理后发布,敬请期待!Q1:K8s 上面部署不通的应用对于存储有不同的要求,有的要高吞吐,有的是要低响应。大规模 K8s 部署的时候是怎么协调这种存储差异的问题?还是说需要根据不同的场景,运维不同的存储服务?又或者说尽量存储使用解决方案?A1:存储相对于

Linux如何推迟30秒关机_linux定时30秒关闭计算机系统指令-程序员宅基地

命令行 shutdown-t n是推迟n秒关机,所以只需输入shutdown-t 30是推迟30秒关机。_linux定时30秒关闭计算机系统指令

docker 部署 mongodb 并且开启远程连接-程序员宅基地

拉取镜像docker pull mongo .可以查看镜像是否下载成功docker images | grep mongo .应该会有如下的显示mongo latest 7177e01e8c01 2 months ago 393MB > 2 mon...

ubuntu 16.04 系统环境变量读取的探索-程序员宅基地

最近在ubuntu系统中做一个关于程序开机自启动的问题由于环境变量在不同的运行模式下读取的流程不一样,导致在服务器开机重启后运行既定程序找不到相应的环境变量错误这里做一篇博客来探讨一下环境变量的读取过程首先,要明确几个概念,登录型shell和非登录型shell,交互型shell(interactive shell) 和非交互型shell(non-interactive shell)登录型shell:简单来说, 就是在终端输入用户名和密码后得到的shell非登录型shell:简单来说,就.

FIFO OPT LRU页面置换算法中关于缺页率的计算_opt求却页率-程序员宅基地

某程序在内存中分配 3 个页面,初始为空,所需页面的走向为 4, 3, 2, 1, 4, 3, 5, 4,3, 2, 1, 5分别通过三种算法计算缺页率1.FIFO算法(先进先出页面置换算法)2. LRU(最近最少使用页面置换算法)3.OPT(最佳页面置换算法)..._opt求却页率

神经网络调参经验总结_神经网络调参经验大汇总-程序员宅基地

新手炼丹经验总结炼丹入坑三年多,来总结一些经验,本文旨在帮助小白少走弯路,大佬轻喷:本文源于一个旧回答:你有哪些deep learning(rnn、cnn)调参的经验?我的工作可以参见 我的 Github,一股浓浓调参风,所以感觉能来说点小经验。另,旷视研究院目前在春招实习生,欢迎大家投递。准备工作大部分情况下,我们的工作应该站在巨人的肩膀上,切忌空中楼阁和徒手造轮子。在实践中建议琢磨以下两问:a. 目前的问题是否可能用神经网络学习? b. 是否有人做过类似的工作?a. 即使有数据,神经网络不是万_神经网络调参经验大汇总

随便推点

梦幻西游服务器每周几维护,梦幻西游5月6日维护公告:唯美版地图不再更新-程序员宅基地

为保证服务器的运行稳定和服务质量,《梦幻西游2》所有服务器将于2014年5月6日上午8:00停机,进行每周例行的维护工作。预计维护时间为上午8:00~9:30。如果在预定时间内无法完成维护内容,开机时间也将继续顺延。请各位玩家相互转告,并提前留意游戏时间,以免造成不必要的损失。对于维护期间给您带来的不便,敬请谅解,网易游戏感谢所有玩家的支持和配合。【上周内容】游戏界面内“拖动条”显示效果优化、“藏...

MYSQL8.0以上版本忘记ROOT密码_mysql8.0忘记root密码-程序员宅基地

MYSQL8.0+ 忘记Root密码:1. 以超级管理员打开cmd,关闭mysql服务2. 跳过权限验证登录mysql3. 在新的窗口中登录mysql4. 切换到mysql,将密码置空。5. 设置加密规则并更新新密码,授权6. 设置成功后,重启mysql服务,使用新密码登录异常:Authentication plugin 'caching_sha2_password' cannot be loadedThe MySQL server is running with the --skip-grant-tabl_mysql8.0忘记root密码

APP有哪些常被黑客利用的安全漏洞_app公共组件漏洞-程序员宅基地

首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时会因为BOSS时间催得紧等很多可观原因。由国内移动应用安全检测团队爱内测(www.ineice.com)的CTO给我们浅谈关于Android 系统的开源设计以及生态环境。1. 应用反编译漏洞:APK 包非_app公共组件漏洞

常用polyfill代码-程序员宅基地

原生js创建XHR对象:function createXHR() { if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { /_polyfill代码

SpringMVC配置控制器作为首页_springmvc 设置控制器为首页。-程序员宅基地

Spring MVC配置Controller跳转首页至此在我们使用Spring MVC构建Web项目的时候,也许你会通过web.xml中的&amp;amp;lt;welcome-file-list&amp;amp;gt;&amp;amp;lt;/welcome-file-list&amp;amp;gt;标签来配置首页例:&amp;amp;lt;welcome-file-list&amp;amp;gt; &amp;amp;lt;welco_springmvc 设置控制器为首页。