[dpdk] 读官方文档(3)

续前节,

测试小程序

1. 想编译测试程序首先需要设置两个环境变量,为什么呢,因为测试程序的Makefile里用了。。。 rpm装了打包好的devel包,这个rpm也会自带这两个环境变量。就是说写第三方程序的时候,习惯上,约定了这两个环境变量

[root@dpdk tools]# cat ~/env.sh 
export RTE_SDK=/root/dpdk-16.07
export RTE_TARGET=x86_64-native-linuxapp-gcc
[root@dpdk tools]# 

2. 文档里说:The UIO drivers and hugepages must be setup prior to running an application.

UIO包括:uio_pci_generic, uio, igb_uio, vfio_pci

vfio_pci 在host里我已经学会怎么玩了。uio不知道是啥,好想要和igb_uio放在一起用

sudo modprobe uio
sudo insmod kmod/igb_uio.ko
[root@dpdk tools]# locate igb_uio.ko
/root/dpdk-16.07/build/build/lib/librte_eal/linuxapp/igb_uio/.igb_uio.ko.cmd
/root/dpdk-16.07/build/build/lib/librte_eal/linuxapp/igb_uio/igb_uio.ko
/root/dpdk-16.07/build/kmod/igb_uio.ko
/root/dpdk-16.07/x86_64-native-linuxapp-gcc/build/lib/librte_eal/linuxapp/igb_uio/.igb_uio.ko.cmd
/root/dpdk-16.07/x86_64-native-linuxapp-gcc/build/lib/librte_eal/linuxapp/igb_uio/igb_uio.ko
/root/dpdk-16.07/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
[root@dpdk tools]# 

我觉得弄一下 uio_pci_generic

首先,有一个非常好用的工具 tools/dpdk-devbind.sh . (我就是客气一下,我并没有觉得特别好用,当然也觉得难用,因为我根本就没怎么用)

(1) 现运行这个命令,看一看

[root@dpdk tools]# ./dpdk-devbind.py --statusNetwork devices using DPDK-compatible driver
============================================
<none>Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device' if= drv=virtio-pci unused= 
0000:00:04.0 'Ethernet Connection (3) I218-V' if=ens4 drv=e1000e unused= *Active*Other network devices
=====================
<none>

(2)加载驱动 uio_pci_generic

[root@dpdk tools]# modprobe uio_pci_generic

(3) 再运行看一下,然后发现unused发生了变化,可是也没什么大不了的。

[root@dpdk tools]# ./dpdk-devbind.py --statusNetwork devices using DPDK-compatible driver
============================================
<none>Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device' if= drv=virtio-pci unused=uio_pci_generic 
0000:00:04.0 'Ethernet Connection (3) I218-V' if=ens4 drv=e1000e unused=uio_pci_generic *Active*Other network devices
=====================
<none>

(4)把网卡从原驱动e1000e上面解绑,和vfio_pci的操作没有区别。

[root@dpdk tools]# lspci -nn -s 00:04.0
00:04.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection (3) I218-V [8086:15a3] (rev 03)
[root@dpdk tools]# echo 0000:00:04.0 > /sys/bus/pci/devices/0000\:00\:04.0/driver/unbind 
[root@dpdk tools]# ./dpdk-devbind.py --statusNetwork devices using DPDK-compatible driver
============================================
<none>Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device' if= drv=virtio-pci unused=uio_pci_generic Other network devices
=====================
0000:00:04.0 'Ethernet Connection (3) I218-V' unused=uio_pci_generic

(5) 绑到 uio_pci_generic 上面去。

[root@dpdk tools]# echo '0000:00:04.0' > /sys/bus/pci/drivers/uio_pci_generic/bind  
[root@dpdk tools]# ./dpdk-devbind.py --status                                   Network devices using DPDK-compatible driver
============================================
0000:00:04.0 'Ethernet Connection (3) I218-V' drv=uio_pci_generic unused=Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device' if= drv=virtio-pci unused=uio_pci_generic Other network devices
=====================
<none>

(6) 至此,绑完了就。就文档说(4)和(5)可以用一条命令搞定。并没有测试。

./tools/dpdk-devbind.py --bind=uio_pci_generic 04:00.1

大页,我早已经在虚拟机里设置好了。

3. EAL库。

 (1) 就是dpdk的程序都可以接受命令行参数。其他是可选的,只有一个-c mask是比较主要的,用掩码觉得运行程序的逻辑核。

[root@dpdk build]# ./helloworld -c 1 |grep hello
hello from core 0
[root@dpdk build]# ./helloworld -c 2 |grep hello
hello from core 1
[root@dpdk build]# ./helloworld -c 4 |grep hello
hello from core 2
[root@dpdk build]# ./helloworld -c 3 |grep hello
hello from core 0
hello from core 1
[root@dpdk build]# ./helloworld -c 6 |grep hello
hello from core 2
hello from core 1
[root@dpdk build]# 

给mask参数之前,你必须知道你的cpu结构。

这么多年都是这样的。

[root@dpdk build]# cat /proc/cpuinfo 

后来觉得可视性不好,于是写了个脚本整理了一下输出结果。可是那又怎么样呢? 依然很土。

然后,对,刚刚,dpdk的文档里介绍了这个:lstopo (pkg: hwloc). 输出结果是酱紫的!

牛逼的!我还能说什么。。。 还有nographic版本:

[tong@T7 ~]$ lstopo-no-graphics 
Machine (7927MB)Package L#0 + L3 L#0 (4096KB)L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0PU L#0 (P#0)PU L#1 (P#1)L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1PU L#2 (P#2)PU L#3 (P#3)HostBridge L#0PCI 8086:1616GPU L#0 "card1"GPU L#1 "renderD129"GPU L#2 "controlD65"PCI 8086:15a3PCIBridgePCI 8086:095bNet L#3 "wlan0"PCIBridgePCI 10de:1347GPU L#4 "card0"GPU L#5 "renderD128"GPU L#6 "controlD64"PCI 8086:9c83Block(Disk) L#7 "sda"Block(Disk) L#8 "sdb"
[tong@T7 ~]$ 

 

(2) 内存参数。可以申请在hugepage中预申请内存,并决定node。

使用参数 -m ,或 --socket-mem

(3)  测试程序。test, testpmd

4. HPET (High Precision Event Timer) 高精度定时器。

  (1)查看硬件支持与BOIS状态,如下有输出,代表启用,没有任何输入代表没有启用或不支持:

[root@dpdk ~]# grep hpet /proc/timer_list 
Clock Event Device: hpetset_next_event: hpet_legacy_next_eventset_mode:       hpet_legacy_set_mode
[root@dpdk ~]# 

  (2)内核支持。内核参数 HPET_MMAP 可以将计数器映射近用户态进程地址空间。

  (3)dpdk支持。CONFIG_RTE_LIBEAL_USE_HPET 编译时设置编译选项,默认为n。

5. 使用非超级用户运行。

6. 电源管理。

7. Isolation Core。指定的CPU将不参加系统内核任务调度,从而可以单独被专用。

支持内核参数如下:

isolcpus=2,4,6

8. KNI kernel Mode (Dpdk Kernel NIC Interface) 并不知道是干嘛的。

9. IOMMU。与之前的类似。

10. 40G网卡。 i40e驱动

  确保 firmware 支持。我也不知道怎么确保。。。

 

快速设置脚本 dpdk-setup.sh

自动化工具用于完成前边提到的大部分内容。

 

获取最佳网卡性能

内存:

查看通道数,频率之类的,不太懂。先这么地把。(下图例子为host主机 T450 板载4G,外插4G。均为DDR3 1600 ;我还看了我的台式机输出,台式机DDR2 800 X 4 双通道。然而并不能通过输出很显然的反馈出上述信息,所以这部分知识还是需要仔细学习的。)

[tong@T7 ~]$ sudo dmidecode -t memory |grep LocatorLocator: ChannelA-DIMM0Bank Locator: BANK 0Locator: ChannelB-DIMM0Bank Locator: BANK 2
[tong@T7 ~]$ sudo dmidecode -t memory |grep SpeedSpeed: 1600 MHzConfigured Clock Speed: 1600 MHzSpeed: 1600 MHzConfigured Clock Speed: 1600 MHz
[tong@T7 ~]$ 

网卡:

设备相关的内容。最近无业,手上都是家庭环境,没有专有设备。略。

BOIS:

硬件 passthrough 启用 vt-d。前文介绍过了。

Kernel设置:

大页 / isolation core / iommu

dpdk设置:

基于硬件编译库 / 挂载大页 / 查看cpu node 相关信息

[root@dpdk tools]# lstopo-no-graphics 

查看网卡在哪个Node上:

[root@dpdk tools]# cat /sys/bus/pci/devices/0000\:00\:04.0/numa_node 
-1
[root@dpdk tools]# 

很显然这个输出结果证明没有node绑定。那么这玩意应该怎么绑上去啊???愿意分享的请留言  : )

网卡绑定到用户态驱动 vfio uio 等:

略,跟前边一样。

l3fwd

就是个check list。看源文档。

至此,入门指南读完,下一节读开发指南 : )

转载于:https://www.cnblogs.com/hugetong/p/5914938.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比较OpenDDR和WURFL

量身定制的Web内容通常受益于定制&#xff0c;以考虑多种因素&#xff0c;例如屏幕大小&#xff0c;标记语言支持和图像格式支持。 此类信息存储在“设备描述存储库”&#xff08;DDR&#xff09;中。 WURFL和OpenDDR项目都提供了访问DDR的API&#xff0c;以简化并促进适应其交…

逻辑表达式——黑纸白纸

一、问题描述 有A、B、C、D、E五个人&#xff0c;每人额头上都贴了一张黑色或白色的纸条。五人对坐&#xff0c;每人都可以看到其他人额头上的纸的颜色&#xff0c;但都不知道自己额头上的纸的颜色。五人互相观察后&#xff0c; A说&#xff1a;“我看见有三个人额头上贴的是白…

java 1.6u29 下载_jdk1.6 64位下载|JDK 6(Java SE Development Kit)下载6u43 64位官方版_java运行环境 IT猫扑网...

jdk1.6 64位适用于x64的系统安装的java运行环境&#xff0c;Java SE Development Kit6是java开发人员必备的产品&#xff0c;也叫做jdk6&#xff0c;欢迎下载使用。官方介绍适用于您的计算机(windows)的 Java 软件&#xff0c;即 Java Runtime Environment&#xff0c;也称为 J…

ZK 6中的MVVM初探

MVVM与MVC 在上一篇文章中&#xff0c;我们已经看到Ajax框架ZK如何采用CSS选择器启发的Controller来在View中连接UI组件并监听它们的事件。 在此ZK MVC模式下&#xff0c; View中的UI组件无需绑定到任何Controller方法或数据对象。 使用选择器模式作为将View状态和事件映射到Co…

消失循环的2023?你都做了什么? | 2023 年度总结

2023年度总结 -- 今年都做了什么事&#xff1f; 前言心态关键词感悟 记录申请软著独立游戏技术成长 共勉 前言 又到了一年一次年度总结的时候了。我们常常感叹时间飞逝&#xff0c;却又没办法让它放慢的脚步。那就将2023写下来&#xff0c;让它在时间的长河中留下一丝记忆。 心…

由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法

读者如要转载&#xff0c;请标明出处和作者名&#xff0c;谢谢。 地址01&#xff1a;http://space.itpub.net/25851087 地址02&#xff1a;http://www.cnblogs.com/zjrodger/ 作者名&#xff1a;zjrodger 【问题发生环境和相关参数】(1)OS&#xff1a;Win7 32Bit. (2)Git&#…

java语言基本语法_Java语言基本语法

Java语言基本语法一、标识符和关键字标识符在java语言中&#xff0c;用来标志类名、对象名、变量名、方法名、类型名、数组名、包名的有效字符序列&#xff0c;称为“标识符”&#xff1b;标识符由字母、数字、下划线、美元符号组成&#xff0c;且第一个字符不能是数字&#xf…

Maven的鸟瞰图

我们每天要做的一件事是使用Maven通过发出诸如mvn install之类的构建命令来构建我们的项目。 然后&#xff0c;Maven查看我们项目的配置文件&#xff08;亲切地称为POM&#xff09;&#xff0c;神奇地找出要执行的操作&#xff0c;并且&#xff0c;嘿&#xff0c;您的构建已完成…

node源码详解(五)

本作品采用知识共享署名 4.0 国际许可协议进行许可。转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.org/topic/56ed6735b705742136388fa6 本博客同步在http://www.cnblogs.com/papertree/p/5295344.html 在上一篇博客&#xff…

分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线

2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBDescription Alice和Bob现在要乘飞机旅行&#xff0c;他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务&#xff0c;设这些城市分别标记为0到n-1&#xff0c;一共有m种航线&#xff0c;每…

java web 保护_java web项目请求控制及简单漏洞防范

背景&#xff1a;当时项目没用什么框架&#xff0c;过滤器&#xff0c;请求限制等都需要自己手写。1、请求加时间戳在后台过滤器中可以加判断&#xff0c;如果请求时间戳与服务器时间相差太大&#xff0c;可以返回异常&#xff0c;具体情况可以具体使用。请求中加时间戳的示例如…

Maven最佳实践

尽管Maven提供了“配置之上的约定”解决方案&#xff0c;但是仍然有足够多的必要配置引起严重的头痛。 在这篇文章中&#xff0c;我将与您分享一些最佳实践&#xff0c;以简化对POM文件的维护。 请勿使用已弃用的引用&#xff0c;例如$ {artifactId}或$ {pom.artifactId}。 使用…

51Nod - 1381 硬币游戏

51Nod - 1381 硬币游戏 有一个简单但是很有趣的游戏。在这个游戏中有一个硬币还有一张桌子&#xff0c;这张桌子上有很多平行线&#xff08;如下图所示&#xff09;。两条相邻平行线之间的距离是1&#xff0c;硬币的半径是R&#xff0c;然后我们来抛硬币到桌子上&#xff0c;抛…

Android中Activity和Fragment之间的通信

Android中Activity和Fragment之间的通信 Fragment启动Activity传数据到Fragment 举例&#xff1a;城市选择列表。一个Fragment启动Activity&#xff0c;Activity再把城市选择数据回传到Fragment中。Fragment中方法iv_city.setOnClickListener(new View.OnClickListener() {Ove…

NoSQLUnit 0.3.0发布

介绍 单元测试是一种验证应用程序中可测试的最小部分的方法。 单元测试必须遵循FIRST规则&#xff1b; 这些是快速&#xff0c;隔离&#xff0c;可重复&#xff0c;自我验证和及时的。 考虑到没有持久层&#xff08;典型的关系数据库或新的NoSQL数据库&#xff09;的JEE应用程…

proftpd java_Proftpd:编译安装

下载 proftpd# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5a.tar.gz# wget https://github.com/proftpd/proftpd/archive/v1.3.5a.tar.gz# yum -y install gcc openssl-devel# ./configure --prefix/usr/local/proftpd/ \--sysconfdir/usr/local/proftpd/ \--ena…

javascript 相关小的知识点集合

本文主要是列出一些javascript 相关的&#xff0c;不限于javascript的&#xff0c;容易记错或者遗忘的小知识&#xff0c;小技巧。 1、javascript中的false 在 JavaScript&#xff0c;常见的 false 值&#xff1a; 0, 0, 0, -0, false, ,null,undefined,NaN 要注意空数组([])和…

AOS – 另外一个独特的页面滚动动画库(CSS3)

AOS 是一个用于在页面滚动的时候呈现元素动画的工具库&#xff0c;你可能会觉得它和 WOWJS 一样&#xff0c;的确他们效果是类似的。但是AOS是 CSS3 动画驱动的库&#xff0c;当你滚动页面的时候能让元素动起来&#xff0c;当页面滚回顶部的时候&#xff0c;元素能够回到前一个…

关于Java包

我希望我们都同意&#xff0c;方法和类应该很小&#xff0c;并且只有很少的依赖关系。 这种观点被广泛接受&#xff0c;而对“小”的解释则各不相同。 关于这一点有很多文献。 但是包裹呢&#xff1f; 有些人将包视为名称空间。 因此&#xff0c;包只是允许您为类重用名称的东西…

python中打开文件时只允许写入的模式是_详解python中各种文件打开模式

在python中&#xff0c;总的来说有三种大的模式打开文件,分别是:a, w, r当以a模式打开时&#xff0c;只能写文件&#xff0c;而且是在文件末尾添加内容。当以a模式打开时&#xff0c;可以写文件&#xff0c;也可读文件&#xff0c;可是在读文件的时候&#xff0c;会发现读出来的…