介绍
f-stack是基于DPDK(Data Plante Development Kit)实现的一个用户态的协议栈;DPDK主要是操作系统内核数据平面,重载网卡驱动,减少内核中断,内存拷贝和上下文切换;在此之前Linux数据平面和控制平面混在一起,不适合处理大规模的网络数据包;f-stack是基于DPDK从FressBsd协议栈移植而来的用户态协议栈;详细解释何以看相关blog,论坛和官网文档;
编译
环境
- Linux centos 4.16.5-1.el7.elrepo.x86_64 #1 SMP Thu Apr 26 09:54:55 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
- 00:19.0 Ethernet controller: Intel Corporation Ethernet Connection (3) I218-LM (rev 03)
依赖
yum install kernel-devel kernel-headers pciutils net-tools libpcap-devel numactl* gcc*
主要就是kernel-devel和kernel-headers安装kernel对应的版本编译
下载
可以直接从github上clone
编译DPDK
1),
cd f-stack/dpdk
# 进入dpdk文件夹
2),make config T=x86_64-native-linuxapp-gcc
# 这里选择x86_64-native-linuxapp-gcc
3),make
# 编译,这里可能会出现一些错误,基本都是kernel版本和dpdk版本不匹配造成的,可以搜索相关的patch编译f-stack
1),设置环境变量
export FF_PATH=/data/f-stack
和export FF_DPDK=/data/f-stack/dpdk/x86_64-native-linuxapp-gcc
FF_PATH
是f-stack所在的目录,FF_DPDK
是dpdk编译好的目录
2),cd f-stack/lib && make
编译nginx
1),
cd f-stack/app/nginx-1.11.10
# 进入f-stack中nginx的目录
2)../configure --prefix=/data/nginx-fstack --with-ff_module && make && make install
# –prefix选择安装目录,–with-ff_module包含fstack nginx module
配置
1), 在配置之前要保存网卡的相关信息,包括ip地址,netmask子网掩码,gateway网关,broadcast广播地址
1 | # 确认网卡名称,我这里是enp0s25 |
2), 配置大页内存 set hugepage
1 | # single-node system |
3), 安装DPDK驱动并绑定网卡
1 | # 确保依赖,要不然安装的时候会出前错误,类似 unknow symbol in module |
测试
启动
1
cd /data/nginx-fstack && ./sbin/nginx && ps -ef | grep nginx
运行
1
curl -vo "http://192.168.55.177/" # 192.168.55.177是${myip},这里会看到nginx的响应,说名安装成功
后记
- 一些DPDK的详细概念,和f-stack的详细配置,可以参看相关文档;
- 这些都是在自己的机器上做的,在其它的机器上可能有一些会不一样,本文仅作参考;
- 对于性能还没有来得及测试,后续有机器可以补上;
参考连接
1 | https://dpdk.org/ |
* 如有疑问欢迎批评指正,谢谢! *