一、环境描述
系统版本:Linux ubuntu 4.4.0-186-generic #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
安装环境:虚拟机vmware
网卡信息:
对外网卡(ens0):网卡82540EM Gigabit Ethernet Controller 驱动e1000 * 1张
对外网卡作用:提供一个ip地址,供ssh远程操作
内部网卡(ens32 ens33):网卡82540EM Gigabit Ethernet Controller 驱动e1000 * 2张
内部网卡作用:两张网卡分别充当客户端发包网卡和服务端收包网卡
二、fstack部署
1.项目包下载
mkdir /data/f-stack
git clone https://github.com/F-Stack/f-stack.git /data/f-stack
2.下载依赖
编译fstack需要保证linux环境联网,执行如下命令
apt-get install git gcc openssl libssl-dev linux-headers-$(uname -r) bc libnuma1 libnuma-dev libpcre3 libpcre3-dev zlib1g-dev python
3.编译DPDK
cd /data/f-stack/dpdk/tools
./dpdk-setup.sh
Compile with x86_64-native-linuxapp-gcc
4.大页内存设置
我的环境是CPU是NUMA架构,大页内存配置如下
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
挂载大页并保证重启后可以自动挂载
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
把"nodev /mnt/huge hugetlbfs defaults 0 0"添加到/etc/fstab文件末尾
5.网卡操作
1)安装dpdk驱动
modprobe uio
insmod /data/f-stack/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
insmod /data/f-stack/dpdk/x86_64-native-linuxapp-gcc/kmod/rte_kni.ko carrier=on
2)网卡配置
python dpdk-devbind.py --status 查询当前系统可被dpdk接管的网卡
ifconfig ens33 down 停止ens33网卡
python dpdk-devbind.py --bind=igb_uio eth33 # assuming that use 10GE NIC and eth33 绑定ens33作为dpdk网卡
5.设置环境变量并编译fstacklib
export FF_PATH=/data/f-stack 【fstack环境变量】
export FF_DPDK=/data/f-stack/dpdk/x86_64-native-linuxapp-gcc 【fstack环境变量】
export DPDK_SDK=/data/f-stack/dpdk/ 【dpdk环境变量】
export DPDK_TARGET=/data/f-stack/dpdk/x86_64-native-linuxapp-gcc 【dpdk环境变量】
cd /data/f-stack/lib/
make
6.编译dpdk确包dpdk安装成功
cd /data/f-stack/dpdk/examples/helloworld/
make
cd build
./helloworld
我的机器是24核的CPU,所以运行后的结果如下
看到此结果证明,dpdk已安装成功
记录一个小问题
暂时未确认此问题的原因,后续会继续调试
6.编译运行fstack的helloworld程序
cd /data/f-stack/dpdk/examples/helloworld/
make
在fstack目录提供了启动脚本
cd /data/f-stack/
./start.sh
启动后显示如下:
上图说明:指定配置文件为config.ini,指定启动进程为主进程
上图说明:dpdk相关配置,端口0配置
上图说明:freebsd协议栈配置
上图说明:与dpdk的demo启动现象相同,上图显示的是dpdk启动的打印
上图说明:同样的,dpdk启动的错误提示也相同,这个错误后面写客户端服务端demo时继续调试
上图说明:dpdk创建mbuf、ring
上图说明:看见上图打印后,fstack的port 0即启动成功,f-stack-0的mac地址也能显示
如果只启动一个端口0作为服务端程序,那么此时继续配置nginx即可以提供服务,但我的
需求是双端口收发包,所以需要继续调试
6.fstack的工具安装
cd /data/f-stack/tools
make
7.下一小节目标
ens32作为port0,充当fstack的tcp连接client,
ens33作为port1,充当fstack的tcp连接server,
参考fstack已有demo,写一个客户端服务端程序



