• 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版本:

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

    2、安装依赖包:

    1. sudo apt-get install libnuma-dev
    2. sudo apt install gcc make libssl-dev
    3. sudo apt-get install gawk

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

    1. meson -Denable_kmods=true build
    2. ninja -C build
    3. ninja -C build install

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

    echo 0 > /proc/sys/kernel/randomize_va_space

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

    1. insmod build/kernel/linux/igb_uio/igb_uio.ko
    2. 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、绑定网卡驱动:

    1. ifconfig -a
    2. ifconfig eth1 down
    3. ifconfig eth2 down
    4. dpdk-devbind.py --bind=igb_uio eth1
    5. dpdk-devbind.py --bind=igb_uio eth2

    8、编译安装f-stack:

    1. export FF_PATH=/data/f-stack
    2. export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib/pkgconfig
    3. cd ../lib/
    4. make
    5. make install

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

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

    这一行的注释去掉。

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

    1. cd ../app/nginx-1.16.1/
    2. ./configure --prefix=/usr/local/nginx_fstack --with-ff_module
    3. make
    4. make install
    5. cd ./objs
    6. ./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:​​​​​​​

    1. cd app/redis-6.2.6/deps/jemalloc
    2. ./autogen.sh
    3. cd ../..
    4. make
    5. make install

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

    1. cd ../tools
    2. make
    3. cd ./sbin
    4. ./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的源码编译安装和简单测试到这里就完成了。

  • 相关阅读:
    二叉树讲解
    【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论
    msfvenom常用参数
    (附源码)spring boot宠物健康管理系统 毕业设计 201738
    决策树分类器(保姆级教学) 定义+特性+原理及公式+鸢尾花分类经典问题示例(完整Python代码带详细注释、保姆级分部代码解释及结果说明、决策树可视化及解释)
    【深度学习】不同虚拟环境安装不同Pytorch版本
    【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法
    k8skubectl陈述式及声明式资源管理
    Linux下OpenCV出现错误:ASSERT false in file qasciikey.cpp, line 501
    尚硅谷SpringBoot3笔记
  • 原文地址:https://blog.csdn.net/RelaxTech/article/details/130912803