[dpdk] 读官方文档(3)

续前节,

测试小程序

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

[[email protected] tools]# cat ~/env.sh
export RTE_SDK=/root/dpdk-16.07
export RTE_TARGET=x86_64-native-linuxapp-gcc
[[email protected] 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
[[email protected] 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
[[email protected] tools]# 

我觉得弄一下 uio_pci_generic

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

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

[[email protected] tools]# ./dpdk-devbind.py --status

Network 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

[[email protected] tools]# modprobe uio_pci_generic

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

[[email protected] tools]# ./dpdk-devbind.py --status

Network 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的操作没有区别。

[[email protected] tools]# lspci -nn -s 00:04.0
00:04.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection (3) I218-V [8086:15a3] (rev 03)
[[email protected] tools]# echo 0000:00:04.0 > /sys/bus/pci/devices/0000\:00\:04.0/driver/unbind 
[[email protected] tools]# ./dpdk-devbind.py --status

Network 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 上面去。

[[email protected] tools]# echo ‘0000:00:04.0‘ > /sys/bus/pci/drivers/uio_pci_generic/bind  
[[email protected] 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库。就是dpdk的程序都可以接受命令行参数。其他是可选的,只有一个-c mask是比较主要的,用掩码觉得运行程序的逻辑核。

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

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

这么多年都是这样的。

[[email protected] build]# cat /proc/cpuinfo 

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

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

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

[[email protected] ~]$ 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#0
      PU L#0 (P#0)
      PU L#1 (P#1)
    L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
      PU L#2 (P#2)
      PU L#3 (P#3)
  HostBridge L#0
    PCI 8086:1616
      GPU L#0 "card1"
      GPU L#1 "renderD129"
      GPU L#2 "controlD65"
    PCI 8086:15a3
    PCIBridge
      PCI 8086:095b
        Net L#3 "wlan0"
    PCIBridge
      PCI 10de:1347
        GPU L#4 "card0"
        GPU L#5 "renderD128"
        GPU L#6 "controlD64"
    PCI 8086:9c83
      Block(Disk) L#7 "sda"
      Block(Disk) L#8 "sdb"
[[email protected] ~]$ 
时间: 2025-01-07 22:41:46

[dpdk] 读官方文档(3)的相关文章

[dpdk] 读官方文档(2)

续前节.切好继续: 一,文档里提到uio_pci_generic, igb_uio, vfio_pci三个内核模块,完全搞不懂,以及dpdk-devbind.py用来查看网卡状态,我得到了下边的输出: [[email protected] tools]# ./dpdk-devbind.py --status Network devices using DPDK-compatible driver ============================================ <none

【苦读官方文档】2.Android应用程序基本原理概述

官方文档原文地址 应用程序原理 Android应用程序是通过Java编程语言来写.Android软件开发工具把你的代码和其它数据.资源文件一起编译.打包成一个APK文件,这个文档以.apk为后缀,保存了一个Android应用程序全部的内容.Android设备通过它来安装相应的应用. 一旦安装到设备上.每一个Android应用程序就执行在各自独立的安全沙盒中: Android系统是一个多用户的Linux系统.每一个应用都是一个用户. Android系统默认会给每一个应用分配一个唯一的用户ID(这个

使用oracle官方文档(11G)简单举例

使用oracle官方文档(11G)举例 以下正是oracle官方文档界面,想要学好oracle,读官方文档是必经之路,此文为给初学者大致了解官方文档的使用,对官方文档有一个更直观的认识.文档可通过文章关联的链接查看到,或登录到oracle官网查看(内容更加丰富). <官方文档>阅读来源 官网链接:Oracle11G官方文档      下载地址:Oracle11G官方文档下载 以下,简单几个例子,帮助读者对于文档的使用有进一步的理解: [举例1]:在Windows下远程连接数据库使用的指令是什么

第0001题 : 产生随机数(顺便读random模块官方文档)

看这个之前我准备先看一下random模块的官方文档... 在整个随机模块中,  最基础的就是random, 它产生一个 [0.0, 1.0)的浮点数. 这个模块下所有的函数实际上是绑定在一个叫做random.Ramdom的类的隐藏实例下的, 当然你可以自己实例化这个类从而得到新的随机数生成器, 同时random模块下还有一个叫做SystemRandom的类, 它使用系统函数 os.urandom()用操作系统提供的随机资源来来产生随机数.(不知所云...) 只挑了一部分看起来有用的函数... r

读vue-cli3 官方文档的一些学习记录

原来一直以为[email protected] 就是创建模板的工具,读了官方文档才知道原来这么有用,不少配置让我长见识了 Prefetch 懒加载配置 懒加载相信大家都是知道的,使用Import() 语法就可以在需要的时候加载了,但是读了官方文档Prefetch一节后,发现事情并没有想象的那么简单. 文档写的很清楚,Prefetch是在空闲的时候就加载一些不着急的文件,并且import默认是加上了Prefetch的,也就是说你使用了import可能并不是你想要的结果(比如用户点击某个按钮才触发加

Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的人,但事实并非如此,例如我.好在闷着头看了一遍,又查资料又敲代码,总算明白了. 其实说穿了一文不值,我们用一个例子来解释: 假定,现有一个app,功能是接收你输入的生日,然后显示你的年龄.看起来app只要用当前日期减去你输入的日期就是年龄,应该很简单对吧?可惜事实不是这样的. 这里面有三个问题: 问题一:我们输入的永远是字符串,字符串需要转成日期格式才能被我们的ap

苹果官方文档阅读的入门

1.下载和打开官方文档的步骤 (1).在code->preferences->components(目录下的document栏目)可以下载相关的官方文档 (2).在help->documentation and API references中可以打开官方文档 2.下面介绍的是官方网站上的文档结构,相关链接:https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Guide

官方文档 恢复备份指南三 Recovery Manager Architecture

本节讨论以下问题: About the RMAN Environment                        关于RMAN环境 RMAN Command-Line Client                            RMAN命令行 RMAN Channels                                                      RMAN通道 RMAN Repository                                

hbase官方文档(转)

Apache HBase™ 参考指南  HBase 官方文档中文版 Copyright © 2012 Apache Software Foundation.保留所有权利. Apache Hadoop, Hadoop, MapReduce, HDFS, Zookeeper, HBase 及 HBase项目 logo 是Apache Software Foundation的商标. Revision History Revision 0.95-SNAPSHOT 2012-12-03T13:38 中文版