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的源码编译安装和简单测试到这里就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23598.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9. Linux下实现简单的UDP请求

本文简单介绍了UDP传输层协议,并在Linux下实现简单的socket通讯 一、UDP UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,它不保证数据包的可靠性和顺序。UDP在IP协议的基础上增加了简单的差错…

Spring Authorization Server 系列(二)获取授权码

Spring Authorization Server 系列(二)获取授权码 概述获取授权码获取授权码的url逻辑解析匹配url参数解析 概述 Spring Authorization Server 是基于 OAuth2.1 和 OIDC 1.0 的。 只有 授权码,刷新token,客户端模式。 获取授权码…

Revit建模|Revit风管怎么绘制?

​绘制风管是机电工程重要的一环,对于不少刚接触Revit的小伙伴来说似乎还无从下手,今天就让小编来告诉大家在Revit中绘制风管的方法。 一、在Revit绘制风管 第一步:首先我们先在revit的界面中项目文件找到风管。 第二步:打开后我…

Mysql 学习(十 三)InnoDB的BufferPool

为什么要有缓存? 我们知道每次获取数据我们都需要从磁盘获取,磁盘的运行速度又慢的不行,对于这一个问题我们要怎么解决呢?我们把查询结果存储起来不就行了,因为当需要访问某个页的数据时,就会把完整的页的…

dvwa靶场通关(一)

第一关:Brute force low 账号是admin,密码随便输入 用burp suite抓包 爆破得出密码为password 登录成功 Medium 中级跟low级别基本一致,分析源代码我们发现medium采用了符号转义,一定程度上防止了sql注入,采用暴力破…

简析java JNI技术

前言 认识JNI(Java Native Interface)技术,了解Java调用本地C/C库的简单原理以及一些基本的知识点;自己编写一个自定义的JNI接口。 一、简介 JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代…

Linux命令(22)之chage

Linux命令之chage 1.chage介绍 chage命令用来更改linux用户密码到期信息,包括密码修改间隔最短、最长日期、密码失效时间等等。 2.chage用法 chage [参数] 用户名 chage常用参数 参数说明-m密码可更改的最小天数,为0表示可以随时更改-M密码有效期最大…

神经网络语言模型(NNLM)

神经网络语言模型【NNLM】 1 为什么使用神经网络模型?2 什么是神经网络模型?3. 代码实现3.1 语料库预处理代码3.2 词向量创建3.3 NNLM模型类3.4 完整代码 1 为什么使用神经网络模型? 解决独热编码无法解决词之间相似性问题 使用神经网络语言…

Blazor实战——Known框架增删改查导

本章介绍学习增、删、改、查、导功能如何实现,下面以商品资料作为示例,该业务栏位如下: 类型、编码、名称、规格、单位、库存下限、库存上限、备注 1. 前后端共用 1.1. 创建实体类 在KIMS项目Entities文件夹下创建KmGoods实体类该类继承Ent…

【C++】类和对象的应用案例 2 - 点和圆的关系

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、分析 3、示例代码 1 4、代码优化 4.1、point.h 4.2、point.c 4.3、circle.h 4.4、circle.c 4.4、main.c …

Netty 源码分析系列(十八)一行简单的writeAndFlush都做了哪些事?

文章目录 前言源码分析ctx.writeAndFlush 的逻辑writeAndFlush 源码ChannelOutBoundBuff 类addMessage 方法addFlush 方法AbstractNioByteChannel 类 小结 前言 对于使用netty的小伙伴来说,我们想通过服务端往客户端发送数据,通常我们会调用ctx.writeAn…

实时聊天组合功能,你了解吗?

你有兴趣安装实时聊天组合功能吗?如果您选择了SaleSmartly(ss客服),您的实时聊天插件可以不仅仅只是聊天通道,还可以有各种各样的功能,你不需要包含每一个功能,正所谓「宁缺勿滥」,功…

再获认可!腾讯连续三年被Gartner列为CWPP供应商之一

随着云的快速发展,企业的工作负载已经从服务器发展到虚拟机、容器、serverless等,部署的模式也日益复杂,包括公有云、混合云和多云等。在此背景下,传统的主机安全防护已无法满足需求,CWPP(云工作负载保护平…

C#,码海拾贝(23)——求解“复系数线性方程组“的“全选主元高斯消去法“之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary&g…

day20 - 绘制物体的运动轨迹

在我们平常做目标检测或者目标追踪时&#xff0c;经常要画出目标的轨迹图。绘制轨迹图的一种方法就是利用光流估计来进行绘制。 本期我们主要来介绍视频中光流估计的使用和效果&#xff0c;利用光流估计来绘制运动轨迹。 完成本期内容&#xff0c;你可以&#xff1a; 掌握视…

网站部署与上线(1)虚拟机

文章目录 .1 虚拟机简介2 虚拟机的安装 本章将搭建实例的生产环境&#xff0c;将所有的代码搭建在一台Linux服务器中&#xff0c;并且测试其能否正常运行。 使用远程服务器进行连接&#xff1b; 基本的Linux命令&#xff1b; 使用Nginx搭建Node.js服务器&#xff1b; 在服务器端…

一、预约挂号详情

文章目录 一、预约挂号详情1、需求分析 2、api接口2.1 添加service接口2.2 添加service接口实现2.2.1 在ScheduleServiceImpl类实现接口2.2.2 在获取科室信息 2.3 添加controller方法 3、前端3.1封装api请求3.2 页面展示 二、预约确认1、api接口1.1 添加service接口1.2 添加con…

通过python采集整站lazada商品列表数据,支持多站点

要采集整站lazada商品列表数据&#xff0c;需要先了解lazada网站的结构和数据源。Lazada是东南亚最大的电商平台之一&#xff0c;提供各种商品和服务。Lazada的数据源主要分为两种&#xff1a;HTML和API。 方法1&#xff1a;采集HTML数据 步骤1&#xff1a;确定采集目标 首先…

一、CNNs网络架构-基础网络架构(LeNet、AlexNet、ZFNet)

目录 1.LeNet 2.AlexNet 2.1 激活函数&#xff1a;ReLU 2.2 随机失活&#xff1a;Droupout 2.3 数据扩充&#xff1a;Data augmentation 2.4 局部响应归一化&#xff1a;LRN 2.5 多GPU训练 2.6 论文 3.ZFNet 3.1 网络架构 3.2 反卷积 3.3 卷积可视化 3.4 ZFNet改…

Java的Arrays类的sort()方法(41)

目录 sort&#xff08;&#xff09;方法 1.sort&#xff08;&#xff09;方法的格式 2.使用sort&#xff08;&#xff09;方法时要导入的类 3.作用 4.作用的对象 5.注意 6.代码及结果 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果 sort&#xff08;&…