f-stack的源码编译安装

DPDK虽然能提供高性能的报文转发(安装使用方法见DPDK的源码编译安装),但是它并没有提供对应的IP/TCP协议栈,所以在网络产品的某些功能场景下(特别是涉及到需要使用TCP协议栈的情况),比如BGP邻居建立、nginx代理转发等等,都需要一套协议栈来实现这些功能。DPDK本身提供了KNI的接口,打通了与内核协议栈的通道,不过性能上肯定不会太好。

为了提高协议栈的转发性能,采用DPDK收包,工作在用户态的协议栈应用而生。f-stack就是基于DPDK,从FressBSD协议栈移植而来的一款开源的用户态协议栈。F-Stack是一个全用户态(kernel bypass)的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器。

下面我们来看一下f-stack的源码编译安装方法:

操作系统版本:  Ubuntu 20.04.5

f-stack版本:  v1.22

1、下载f-stack源码,选择v1.22版本:

git clone https://github.com/F-Stack/f-stack.git
git checkout v1.22

2、安装依赖包:

sudo apt-get install libnuma-dev
sudo apt install gcc make libssl-dev
sudo apt-get install gawk

3、编译DPDK,f-stack自带DPDK和igb_uio驱动源码:


meson -Denable_kmods=true build
ninja -C build
ninja -C build install

4、关闭ASLR(地址空间随机化):

echo 0 > /proc/sys/kernel/randomize_va_space

5、加载驱动igb和kni驱动:


insmod build/kernel/linux/igb_uio/igb_uio.ko
insmod build/kernel/linux/kni/rte_kni.ko carrier=on

6、配置大页内存:

在/etc/default/grub中添加

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 default_hugepagesz=2M hugepagesz=2M hugepages=2048"

也可以根据CPU的配置为1G大页,使用命令

cat /proc/cpuinfo |grep pdpe1gb

查看CPU信息,如果有显示pdpe1gb,则支持1G大页。

重新生成grub配置文件:

grub-mkconfig -o /boot/grub/grub.cfg

reboot重启系统后,使用

grep Huge /proc/meminfo

查看大页内存是否生效:

7、绑定网卡驱动:


ifconfig -a
ifconfig eth1 down
ifconfig eth2 down
dpdk-devbind.py --bind=igb_uio eth1
dpdk-devbind.py --bind=igb_uio eth2

8、编译安装f-stack:


export FF_PATH=/data/f-stack
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib/pkgconfig
cd ../lib/
make
make install

说明:如果想编译debug版本,将Makefile文件的

DEBUG=-O0 -gdwarf-2 -g3 -Wno-format-truncation

这一行的注释去掉。

9、编译安装nginx并启动nginx:​​​​​​​


cd ../app/nginx-1.16.1/
./configure --prefix=/usr/local/nginx_fstack --with-ff_module
make
make install
cd ./objs
./nginx

说明:如果编译nginx报错误: 

note: previous declaration of ‘gettimeofday’ was here

需要修改src/event/modules/ngx_ff_module.c:554行,将

int gettimeofday(struct timeval *tv, struct timezone *tz)

修改为

gettimeofday(struct timeval *tv,  void *tz)

10、编译安装redis:​​​​​​​


cd app/redis-6.2.6/deps/jemalloc
./autogen.sh
cd ../..
make
make install

11、编译tools目录下的网络工具:​​​​​​​


cd ../tools
make
cd ./sbin
./ifconfig

可以看到nginx启动时,创建了f-stack-0的网口,IP地址为192.168.1.2,IP地址配置见/usr/local/nginx_fstack/conf/f-stack.conf(如果没有这个文件,把f-stack源码目录下的config.ini拷贝过去改名为f-stack.conf):

./netstat -an

12、基于f-stack的nginx功能验证:

将一台PC的网口接到安装有f-stack的服务器的网口上,在PC上打开浏览器,输入http://192.168.1.2,浏览器显示内容如下:

查看nginx配置cat /usr/local/nginx_fstack/conf/nginx.conf,nginx配置的页面内容与上面浏览器的一致:

好了,f-stack的源码编译安装和简单测试到这里就完成了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值