标签:intel dpdk dpdk安装 多核处理器 igb_uio模块 大页内存
一、DPDK系统需求:
1、需要的编译工具(ubuntu12.04 LTS均符合要求,可以不检查)
GNU make;
cmp, sed, grep, arch;
gcc;libc库文件(glibc-devel fedora;libc ubuntu)
kernel-devel(fedora);kernel-dev(ubuntu)
python 2.6 or 2.7
2、运行条件(关键在于kernel的配置,其他均符合条件)
kernel-version >=2.6.33 :查看命令 uname -r
glibc>=2.7: 查看命令ldd --version
kernel configuration
UIO 支持 (编译之后挂载)
HUGETLBFS(见下一小节)
PROC_PAGE_MONITOR支持(不用配置)
HPET和HPET_MMAP(不用配置)
二、、预留大页内存
1、大页内存的设置
大页内存支持是为了分配较大的内存池用来存放报文。对于2M的内存页,hugepages = 1024,对于其他大小的内存页,必须显式设置,efault_hugepagesz=1G hugepapgesz=1G hugepages=4。
对于64位系统,推荐使用1G页面。对于双socket的NUMA机制,要分别对两个socket进行单独设置:
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
对于2M的页面,通常是在系统启动之后进行设置。但是对于1G的页面,是不可能在系统之后进行设置的。
2、大页内存的挂载:
上一步执行的是大页内存的预留,为了能够将其有效的使用,还需要进行挂载。
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
想要使得该挂载在系统每次启动时自动执行,将下列文本加入/etc/fstab里面去。
nodev /mnt/huge hugetlbfs defaults 0 0
对于1G的页面,页面大小必须在挂载时被显式指定
nodev /mnt/huge_1GB hugetlbfs pagesize=1G 0 0
三、编译
1.安装DPDK
解压源码包
user@host:~$ unzip DPDK-<version>.zip
user@host:~$ cd DPDK-<version>
user@host:~/DPDK-<version>$ ls
app/ config/ examples/ lib/ LICENSE.GPL LICENSE.LGPL Makefile mk/ scripts/ tools/
lib: 源码库
app: DPDK相关应用的源代码
examples: DPDK相关例子的源代码
config, tools,scripts, mk: 平台相关的配置、脚本、工具
2.目标环境的安装
DPDK目标的格式:ARCH-MACHINE-EXECENV-TOOLCHAIN
其中
ARCH可为: i686, x86_64
MACHINE可为: default, ivshmem
EXECENV可为 linuxapp, bsdapp
TOOLCHAIN可为: gcc, icc
安装时要在dpdk的顶级目录里面,命令如下:
make install T=x86_64-default-linuxapp-gcc 或者
make config T=x86_64-default-linuxapp-gcc
cd x86_64-default-linuxapp-gcc
make
一旦目标环境创建完毕,用户若要修改或者重新编译,可进入build目录修改.config文件然后重新编译。如:
cd x86_64-default-linuxapp-gcc
vi .config
make
并且,可使用make clean 命令可以移除已经编译过的所有文件。
创建结束后可通过
ls x86_64-default-linuxapp-gcc
app build hostapp include kmod lib Makefile
来查看安装后的目标环境。
3.加载DPDK igb_uio模块
运行任何DPDK应用,都必须加载igb_uio模块,该模块在DPDK目标环境目录下的kmod子目录里面。命令如下:
sudo modprobe uio
sudo insmod kmod/igb_uio.ko
4.网卡与igb_uio的绑定与解绑
DPDK默认不会自动解绑网络接口,任何DPDK应用将要用到的网络端口都必须先与Linux内核解绑,然后绑定到igb_uio模块上去。tools目录下的pci_unbind.py可用来查看网卡的绑定情况,并可以用来绑定或解绑网卡到指定的模块。使用范例如下,也可以使用--help或--usage参数来获取帮助信息。
root@host:DPDK# ./tools/pci_unbind.py --status
Network devices using IGB_UIO driver
====================================
0000:82:00.0 ‘82599EB 10-Gigabit SFI/SFP+ Network Connection‘ drv=igb_uio unused=ixgbe
0000:82:00.1 ‘82599EB 10-Gigabit SFI/SFP+ Network Connection‘ drv=igb_uio unused=ixgbe
Network devices using kernel driver
===================================
0000:04:00.0 ‘I350 Gigabit Network Connection‘ if=em0 drv=igb unused=igb_uio *Active*
0000:04:00.1 ‘I350 Gigabit Network Connection‘ if=eth1 drv=igb unused=igb_uio
0000:04:00.2 ‘I350 Gigabit Network Connection‘ if=eth2 drv=igb unused=igb_uio
0000:04:00.3 ‘I350 Gigabit Network Connection‘ if=eth3 drv=igb unused=igb_uio
Other network devices.....
=====================
绑定eth1到igb_uio模块:
root@host:DPDK# ./tools/pci_unbind.py --bind=igb_uio eth1 或者
./tools/ igb_uio_bind.py --bind=igb_uio 04:00.1
将网卡82.00.0绑定到原来模块使用如下命令:
root@host:DPDK# ./tools/pci_unbind.py --bind=ixgbe 82:00.0
四、编译且运行示例程序
RTE_SDK - Points to the Intel DPDK installation directory.
RTE_TARGET - Points to the Intel DPDK target environment directory
使用如下命令来输出环境变量:
user@host:~/DPDK$ cd examples/helloworld/
user@host:~/DPDK/examples/helloworld$ export RTE_SDK=$HOME/DPDK
user@host:~/DPDK/examples/helloworld$ export RTE_TARGET=x86_64-default-...
user@host:~/DPDK/examples/helloworld$ make
CC main.o
LD helloworld
INSTALL-APP helloworld
INSTALL-MAP helloworld.map
user@host:~/DPDK/examples/helloworld$ ls build/app
helloworld helloworld.map
编译测试程序:环境变量设置好之后可以进入DPDK的主目录中的example编译测试。
user@DPDK_dir/examples/helloworld$ make
运行:
user@target:~$ ./helloworld -c f -n 4
五、使用脚本进行快速配置
运行DPDK根目录下tools/setup.sh
标签:intel dpdk dpdk安装 多核处理器 igb_uio模块 大页内存
原文地址:http://muyunzhe.blog.51cto.com/9164050/1626834