[dpdk] 读文档

前提:已读了这本书<<深入浅出dpdk(朱清河等著)>>。

目标:读官方文档,同时跟着文档进行安装编译等工作。

环境:thinkpadT450 + archlinux + kvm + CentOS 7(逐层自下而上的关系)

KVM参数:
sudo qemu-system-x86_64 -nographic -enable-kvm -numa node -numa node -drive file=disk.img,if=virtio   -cdrom /home/tong/ISO/CentOS-7-x86_64-DVD-1511.iso -boot order=c -m 2G   -net nic,model=virtio,macaddr=‘00:00:00:00:00:03‘ -net tap,ifname=tap0 

当前dpdk版本:dpdk-16.07

前提交代完,接下来是正文。内容会是一种笔记的形式,我遇见问题,就会在下边写下来。

一 编译:

make config T=x86_64-native-linuxapp-gcc
sed -ri ‘s,(PMD_PCAP=).*,\1y,‘ build/.config
make

问题一:编译错误

In file included from /root/dpdk-16.07/lib/librte_eal/linuxapp/eal/eal_pci.c:42:0:
/root/dpdk-16.07/build/include/rte_memcpy.h:814:2: error: incompatible type for argument 2 of ‘_mm_storeu_si128’
  MOVEUNALIGNED_LEFT47(dst, src, n, srcofs);
  ^
In file included from /root/dpdk-16.07/build/include/rte_common.h:289:0,
                 from /root/dpdk-16.07/build/include/rte_log.h:45,
                 from /root/dpdk-16.07/lib/librte_eal/linuxapp/eal/eal_pci.c:37:
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/emmintrin.h:700:1: note: expected ‘__m128i’ but argument is of type ‘int’
 _mm_storeu_si128 (__m128i *__P, __m128i __B)

咋解决:查看了这个头文件emmintrin.h 内容是这样的,也就是说这是个CPU平台相关的问题,所以很可能需要调整kvm的cpu参数,或者dpdk的编译参数,从这两个方面入手:

/* The Intel API is flexible enough that we must allow aliasing with other
   vector types, and their scalar components.  */
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));

dpdk的编译参数并没有神马好改的,你重要指定一个CPU平台给它,所以我必须让qemu模拟intel或者是虚拟机直接认得本地CPU,然而qemu的手册并不清晰,又没有时间系统的学习qemu,只能试了。(qemu kvm也需要系统学习!)

尝试1:不给qemu CPU参数:

 qemu-system-x86_64 -nographic -enable-kvm -m 2G -drive file=disk.img,if=virtio \      -net nic,model=virtio,macaddr=‘00:00:00:00:00:03‘ -net tap,ifname=tap0 

进入系统后查看cpuinfo

[[email protected] dpdk-16.07]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 6
model name      : QEMU Virtual CPU version 2.5+
stepping        : 3
......

编译报同样的错,毫无悬念。

尝试2:指定CPU类型,模拟至强E3

qemu-system-x86_64 -nographic -enable-kvm -m 2G -cpu IvyBridge -drive file=disk.img,if=virtio -net nic,model=virtio,macaddr=‘00:00:00:00:00:03‘ -net tap,ifname=tap0

编译成功:

[[email protected] dpdk-16.07]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel Xeon E3-12xx v2 (Ivy Bridge)
stepping        : 9
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
... ...

编译错误二:

  SYMLINK-FILE include/exec-env/rte_dom0_common.h
  INSTALL-LIB librte_eal.a
== Build lib/librte_eal/linuxapp/igb_uio
make: *** /lib/modules/3.10.0-327.el7.x86_64/build: No such file or directory.  Stop.
make[5]: *** [igb_uio.ko] Error 2
make[4]: *** [igb_uio] Error 2
make[3]: *** [linuxapp] Error 2
make[2]: *** [librte_eal] Error 2
make[1]: *** [lib] Error 2
make: *** [all] Error 2

解决:人家文档写的清楚需要内核开发包 “kernel - devel.x86_64”

yum install kernel-devel
ln -fs /usr/src/kernels/3.10.0-327.36.1.el7.x86_64/ /lib/modules/3.10.0-327.el7.x86_64/build

问题三:因为enable了PCAP,没错就是前边那个sed,鬼知道它是干嘛的,反正要装 libpcap-devel.

编译通过,好棒!: )

二,调整硬件架构

调整虚拟机为numa架构,并设置hugepage。

# numa参数只调整结构,并不申请资源,所以还是需要m和smp两个参数来进行资源申请。sudo qemu-system-x86_64 -nographic -enable-kvm         -m 2G -cpu Nehalem \                  #Nehalem就是i7,我的物理CPU是i7,模拟至强的时候,warning有一些特性不支持,为了防止后续出现诡异的错误,就模拟了i7.
        -smp cores=2,threads=2,sockets=2 \    #两颗CPU,两个核心,超线程
        -numa node,mem=1G,cpus=0-3,nodeid=0         -numa node,mem=1G,cpus=4-7,nodeid=1         -drive file=disk.img,if=virtio         -net nic,model=virtio,macaddr=‘00:00:00:00:00:03‘         -net tap,ifname=tap0 &

然后在虚拟机里的效果就是这样的:

[[email protected] ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 2
apicid          : 2
initial apicid  : 2
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 2
apicid          : 3
initial apicid  : 3
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 4
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 1
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 4
initial apicid  : 4
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 5
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 1
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 5
initial apicid  : 5
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 6
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 1
siblings        : 4
core id         : 1
cpu cores       : 2
apicid          : 6
initial apicid  : 6
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model   : 26
model name      : Intel Core i7 9xx (Nehalem Class Core i7)
stepping        : 3
microcode       : 0x1
cpu MHz         : 2394.456
cache size      : 4096 KB
physical id     : 1
siblings        : 4
core id         : 1
cpu cores       : 2
apicid          : 7
initial apicid  : 7
fpu     : yes
fpu_exception   : yes
cpuid level     : 11
wp      : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl pni ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm
bogomips        : 4788.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

cat /proc/cpuinfo

[[email protected] ~]# numastat
                           node0           node1
numa_hit                  193979          184758
numa_miss                      0               0
numa_foreign                   0               0
interleave_hit              7016            6897
local_node                187494          184103
other_node                  6485             655

numastat

大页:

查看cpuinfo: If pse exists, 2M hugepages are supported; if pdpe1gb exists, 1G hugepages are supported. 所以我只支持2M,而且我也没有那么多内存。但是我的物理cpu是支持1G的,这让我感觉很牛逼,我是说host主机。

通过设置内核参数:测试发现,保留的大页会平均分给两个node。

[[email protected] ~]# cat /boot/grub2/grub.cfg|grep huge
        linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 hugepages=32
[[email protected] ~]# cat /proc/meminfo |grep Huge
AnonHugePages:      8192 kB
HugePages_Total:      32
HugePages_Free:       32
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
[[email protected] ~]# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
16
[[email protected] ~]# cat /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
16
时间: 2024-10-13 00:27:18

[dpdk] 读文档的相关文章

读代码还是读文档,来自知乎

题目是陈皓回答的,来自知乎.我只是希望更多的人看到. Jeff Atwood说过这么一句话:“Code Tells You How, Comments Tell You Why”. 其实,Jeff这句话并不准确,另外,我把其扩展一下—— 代 码 => What, How & Details文档/书 => What, How & Why 可见,代码并不会告诉你 Why,看代码只能靠猜测或推导来估计Why,是揣测,不准确,所以会有很多误解.而且,我们每个人都知道,Why 这个东西是

关于python logging模块读文档的几个心得

1. logger是分层级的,root是所有logger的祖先. 2. root这个logger在执行logging.warning() 等一系列方法和basicConfig()的时候才会被初始化handler, 否则该logger是没有handler的. 3.使用类似logging.getLogger(‘fdsfdsf’) 生成的logger是没有handler的,需要自己手动添加. 4.某个logger如果依照propagate的配置propagate完之后,没有handler处理过,对于p

[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 pr

使用CStdioFile 读写UNICODE文档

转自 http://blog.csdn.net/shuilan0066/article/details/6996310 一:写文档 1  创建文档并写入内容 CString filePath=L"C:\\unicode.txt"; CStdioFile wfile; if (!wfile.Open(filePath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary)) { AfxMessageBox(L"文件无法修改&q

[daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文

序 用linux作为工作生产环境的几个需要解决的问题之一是:文档协作,即如何兼容Micro$oft Office格式的文档. 我一般的工作方式是:在linux下创建一个win7的虚拟机,安装常用的windows软件,office,QQ,teamview等. 写文档的时候,我会进入win虚拟机,使用office软件进行编写,保证其他大多数使用windows的同事可以正常打开我的文档. 读文档的时候,我在linux里使用wps.先后用过openoffice, libreoffice,wps.wps与

【转】如何读懂Oracle文档中的语法图

转自:http://blog.itpub.net/22990797/viewspace-750157/ Oracle文档中用到了两种表达语法的方法,语法图和BNF. BNF, Backus-Naur Form,中文是巴科斯范式:,它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)引入的用来描述计算机语言语法的符号集. 首先来看语法图.读语法图,要从左到右,顺着箭头读. 不同形状的含义: 长方形中的大写词语,命令. 椭圆形中的小写词语,参数. 圆形中,标点符号.操作符

读thinking in java的收获(二) --eclipse生成javadoc文档

最开始学习java语言的时候学过生成javadoc不过当时只是用windows命令行生成.读了这里的javadoc温故而知新发现其实我们做的项目就用到了一些注释,只是没有用eclipse 生成这份文档,通过查阅,最终补全了这份知识. 一.书中的代码: <pre name="code" class="java">//:object/HelloDate.java package unit2; import java.util.Date; /** * The

[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

[dpdk] 读开发指南(1)

该文档是随着对于文档的阅读进度,不断增加的阅读笔记.主要内容以大纲为主,以及记录帮助记忆的内容. 在之后的实际应用中,也不随着不断的深入理解,逐渐丰富各大纲下面的内容. 1. 前期准备:设置两个环境变量. export RTE_SDK=/home/user/DPDK export RTE_TARGET=x86_64-native-linuxapp-gcc 2. dpdk提供的环境抽象层: DPDK loading and launching                        DPDK