f-stack的源码编译安装

news2024/11/23 21:25:05

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ansible原理简介与安装篇

工作原理 1、在Ansible管理体系中,存在“管理节点”和“被管理节点” 2、被管理节点通常被称为”资产“ 3、在管理节点上,Ansible将AdHoc或PlayBook转换为python脚本。并通过SSH将这些python脚本传递到被管理服务器上。在被管理服务器上依次执行&#xf…

遥感云大数据在灾害、水体与湿地领域及GPT模型应用

近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

目录 基础篇010.1 STM32驱动RC522 RFID模块之一:基础知识 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3.2 配置调试方式 3.3 配置时钟电路 3.4 配置时钟 3.5 配…

【C++】Map、Set 模拟实现

文章目录 📕 概念📕 实现框架Find()★ 迭代器 ★反向迭代器map 的 operator[ ] 📕 源代码rb_tree.hset.hmap.h 📕 概念 map、set 是 C 中的关联式容器,由于 map 和set所开放的各种操作接口,RB-tree 也都提…

2023.05.28 学习周报

文章目录 摘要文献阅读1.题目2.现有方法存在的局限性3.SR-GNN模型4.模型的组成部分4.1 构图4.2 item向量表示4.3 session向量表示4.4 预测模块 5.实验与分析5.1 数据集5.2 比较方法5.3 评估指标5.4 实验结果 6.结论 有限元法1.一个例子2.进一步 深度学习1.张量场2.对流-扩散方程…

Linux(基础IO详解)

在基础IO这篇博客中,我们将了解到文件系统的构成,以及缓冲区究竟是个什么东东,我们都知道缓冲区,有时也谈论缓冲区,但不一定真的去深入了解过缓冲区。为什么内存和磁盘交互速度如此之慢?为什么都说Linux中一…

Dom解析与Sax解析的区别

1.Dom解析: Dom解析的时候,首先要把整个文件读取完毕,装载到内存中。然后进行解析,在解析的过程中,你可以直接获取某个节点,进行操作,也可以获取根节点然后进行遍历操作,得到所有的…

一台服务器通过apache安装多个web应用

当我们只有一台linux服务器资源但有创建多个网站的需求时,我们可以通过安装一个网站服务器Apache进行搭建,此次服务器使用Centos 7 下面分别介绍一个域名多个端口和多个域名用Apache来搭建多个网站的操作过程。 一、使用apache 服务器 (一…

HCIA-MSTP替代技术之链路捆绑(LACP模式)

目录 手工链路聚合的不足: LACP链路聚合的原理 LACP模式: LACPDU: 1,设备优先级: 设备优先级的比较是:先比较优先级大小,0到32768,越小优先级越高,如果优先级相同&a…

华为FinalMLP

FinalMLP:An Enhanced Two-Stream MLP model for CTR Prediction 摘要 Two-Stream model:因为一个普通的MLP网络不足以学到丰富的特征交叉信息,因此大家提出了很多实用MLP和其他专用网络结合来学习。 MLP是隐式地学习特征交叉,当前很多工作…

分布式网络通信框架(二)——RPC通信原理和技术选型

项目实现功能 技术选型 黄色部分:设计rpc方法参数的打包和解析,也就是数据的序列化和反序列化,用protobuf做RPC方法调用的序列化和反序列化。 使用protobuf的好处: protobuf是二进制存储,xml和json是文本存储; pro…

哈希应用: 位图 + 布隆过滤器

文章目录 哈希应用: 位图 布隆过滤器1. 位图1.1 提出问题1.2 位图概念1.3 位图实现1.4 位图应用1.4.1 变形题1代码 1.4.2 变形题21.4.3 找文件交集思路1思路2 1.4.4 总结 1.5 位图优缺点 2. 哈希切割3. 布隆过滤器3.1 提出问题3.2 布隆过滤器概念3.3 布隆过滤器的各个接口3.3.…

MySQL---优化(insert、order by 、group by 、limit、子查询)

1. insert语句优化 当进行数据的insert操作的时候,可以考虑采用以下几种优化方案: -- 如果需要同时对一张表插入很多行数据时,应该尽量使用多个值表的insert语句,这种方式将大大的缩减 -- 客户端与数据库之间的连接、关闭等消耗。使得效率比…

R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

ARM体系结构

目录 ARM体系架构 一、ARM公司概述 二、ARM产品系列 三、指令、指令集 指令 指令集 ARM指令集 ARM指令集 Thumb指令集 (属于ARM指令集) 四、编译原理 五、ARM数据类型 字节序 大端对齐 小端对齐 六、ARM工作模式 1.AR…

Java中synchronized锁的深入理解

使用范围 synchronized使用上用于同步方法或者同步代码块在锁实现上是基于对象去实现使用中用于对static修饰的便是class类锁使用中用于对非static修饰的便是当前对象锁 synchronized的优化 在jdk1.6中对synchronized做了相关的优化 锁消除 在synchronized修饰的代码块中…

如何实现局域网下设备之间的互通互联和外网访问?

两台电脑怎么在同一路由下访问共享文件夹?两台不同系统的电脑在同一个路由器下访问共享文件夹进行数据共享,从本质上说就是在同一个局域网下设备之间的互通互联,这就需要我们搭建一个内网文件共享服务器来实现此功能 ,比如常见的W…

linux系统中通配符与常用转义字符

通配符 在平时我们使用使用linux系统的过程中会遇到忘记文件名称的问题,这时候呢,通配符就发挥它的作用啦。 顾名思义啦,通配符就是用来匹配信息的符号,如何(*)代表零个或多个字符,(…

Unity烟花特效实现(附源码)

Unity烟花特效 附代码 写在前面效果代码地址核心步骤 写在后面 写在前面 朋友过生,不知道送什么礼物,就想着用自己所学知识做个特效当礼物吧,嘿。 主要参考了 这位up的视频 ,感谢 效果 代码地址 https://github.com/hahahappyb…

【LeetCode热题100】打开第5天:最长回文子串

文章目录 最长回文子串⛅前言🔒题目🔑题解 最长回文子串 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识…