update README
fix some bugs
refactor pkt read send to improve performance
refactor kernle event toimproveperformance
(cherry picked from commit a8c66704608ca83c799adab88be6214bccdcfa44)
333 lines
12 KiB
Diff
333 lines
12 KiB
Diff
From 5249ab9e033d2f02ca78eca1b96db540f9990641 Mon Sep 17 00:00:00 2001
|
||
From: xiusailong <xiusailong@huawei.com>
|
||
Date: Wed, 29 Jun 2022 11:28:10 +0800
|
||
Subject: [PATCH 4/6] update README.md
|
||
|
||
---
|
||
README.md | 10 +-
|
||
...50\346\210\267\346\214\207\345\215\227.md" | 159 +++++++-----------
|
||
2 files changed, 62 insertions(+), 107 deletions(-)
|
||
|
||
diff --git a/README.md b/README.md
|
||
index 61f298c..3c1487c 100644
|
||
--- a/README.md
|
||
+++ b/README.md
|
||
@@ -75,12 +75,12 @@ mkdir -p /mnt/hugepages
|
||
mkdir -p /mnt/hugepages-2M
|
||
chmod -R 700 /mnt/hugepages
|
||
chmod -R 700 /mnt/hugepages-2M
|
||
-mount -t hugetlbfs nodev /mnt/hugepages
|
||
-mount -t hugetlbfs nodev /mnt/hugepages-2M
|
||
+mount -t hugetlbfs nodev /mnt/hugepages -o pagesize=2M
|
||
+mount -t hugetlbfs nodev /mnt/hugepages-2M -o pagesize=2M
|
||
```
|
||
|
||
### 5. 应用程序使用Gazelle
|
||
-有两种使能Gazelle方法,根据需要选择其一
|
||
+有两种使用Gazelle方法,根据需要选择其一
|
||
- 重新编译应用程序,链接Gazelle的库
|
||
修改应用makefile文件链接liblstack.so,示例如下:
|
||
```
|
||
@@ -256,8 +256,8 @@ Gazelle可能存在如下安全风险,用户需要根据使用场景评估风
|
||
- 风险点
|
||
属于同一用户的恶意进程模仿DPDK实现逻辑,通过大页文件共享大页内存,写破坏大页内存,导致Gazelle程序crash。建议用户下的进程属于同一信任域。
|
||
|
||
-**流量限制**
|
||
+**流量限制**
|
||
Gazelle没有做流量限制,用户有能力发送最大网卡线速流量的报文到网络,可能导致网络流量拥塞。
|
||
|
||
-**进程仿冒**
|
||
+**进程仿冒**
|
||
合法注册到ltran的两个lstack进程,进程A可仿冒进程B发送仿冒消息给ltran,修改ltran的转发控制信息,造成进程B通讯异常,进程B报文转发给进程A信息泄露等问题。建议lstack进程都为可信任进程。
|
||
diff --git "a/doc/gazelle-\347\224\250\346\210\267\346\214\207\345\215\227.md" "b/doc/gazelle-\347\224\250\346\210\267\346\214\207\345\215\227.md"
|
||
index bfe0f7c..3f40bf1 100644
|
||
--- "a/doc/gazelle-\347\224\250\346\210\267\346\214\207\345\215\227.md"
|
||
+++ "b/doc/gazelle-\347\224\250\346\210\267\346\214\207\345\215\227.md"
|
||
@@ -1,54 +1,52 @@
|
||
-[toc]
|
||
+# gazelle-用户指南
|
||
|
||
-# 1 简介
|
||
+## 1 简介
|
||
|
||
EulerOS提供了利用Gazelle runtime优化数据库服务性能的完整解决方案,Gazelle
|
||
runtime基于bypass内核的架构设计,能够提供更高性能运行环境,优化服务软件性
|
||
能,可以很好地满足产品的性能需求。
|
||
本文主要介绍Gazelle软件如何安装使用。
|
||
|
||
-# 2 安装软件包,编译应用程序(以redis 为例)
|
||
+## 2 安装软件包,编译应用程序(以redis 为例)
|
||
|
||
-1. 在使用之前,需要安装Gazelle软件包。
|
||
+在使用之前,需要安装Gazelle软件包。
|
||
|
||
-#### 操作步骤
|
||
+### 操作步骤
|
||
|
||
- Gazelle是高性能用户态协议栈软件包,使用如下命令安装Gazelle软件包:
|
||
+Gazelle是高性能用户态协议栈软件包,使用如下命令安装Gazelle软件包:
|
||
|
||
```
|
||
- yum install gazelle
|
||
+yum install gazelle
|
||
```
|
||
|
||
-#### 安装正确性验证
|
||
+### 安装正确性验证
|
||
|
||
- 1. 安装完成后,使用“rpm -qa | grep -E gazelle”命令确认是否已经正确安装。示例如下:
|
||
+1. 安装完成后,使用“rpm -qa | grep -E gazelle”命令确认是否已经正确安装。示例如下:
|
||
|
||
- 如果已正确安装则结果显示如下:
|
||
+如果已正确安装则结果显示如下:
|
||
```
|
||
- gazelle-1.0.0-h1.eulerosv2r10.aarch64
|
||
+gazelle-1.0.0-h1.eulerosv2r10.aarch64
|
||
```
|
||
|
||
2. 确认以下dpdk组件是否存在:
|
||
```
|
||
-
|
||
- /lib/modules/4.19.90-vhulk2007.2.0.h188.eulerosv2r10.aarch64/extra/dpdk/igb_uio.ko
|
||
- /usr/share/dpdk
|
||
- /usr/share/dpdk/usertools/dpdk-devbind.py
|
||
+rpm -ql dpdk | grep igb_uio
|
||
+/usr/share/dpdk
|
||
+/usr/share/dpdk/usertools/dpdk-devbind.py
|
||
```
|
||
|
||
3. 确认以下Gazelle组件是否存在:
|
||
-
|
||
-```
|
||
|
||
- /usr/bin/gazellectl
|
||
- /usr/bin/ltran
|
||
- /usr/lib64/liblstack.so
|
||
- /etc/gazelle/ltran.conf
|
||
- /etc/gazelle/lstack.conf
|
||
- /etc/gazelle/lstack.Makefile
|
||
+```
|
||
+/usr/bin/gazellectl
|
||
+/usr/bin/ltran
|
||
+/usr/lib64/liblstack.so
|
||
+/etc/gazelle/ltran.conf
|
||
+/etc/gazelle/lstack.conf
|
||
+/etc/gazelle/lstack.Makefile
|
||
```
|
||
|
||
-#### 链接Gazelle编译redis-server
|
||
+### 链接Gazelle编译redis-server
|
||
|
||
1. 获取开源redis代码,更改redis/src/Makefile文件,使其链接lstack,示例如下:
|
||
|
||
@@ -78,10 +76,10 @@ index 4b2a31c..92fa17d 100644
|
||
|
||
2. 编译redis:
|
||
|
||
- ```
|
||
- localhost:/euler/zyk/serverless/lredis/src # make distclean
|
||
- localhost:/euler/zyk/serverless/lredis/src # make USE_GAZELLE=1 -j32
|
||
- ```
|
||
+ ```
|
||
+ localhost:/euler/zyk/serverless/lredis/src # make distclean
|
||
+ localhost:/euler/zyk/serverless/lredis/src # make USE_GAZELLE=1 -j32
|
||
+ ```
|
||
|
||
#### 注意
|
||
|
||
@@ -89,7 +87,7 @@ index 4b2a31c..92fa17d 100644
|
||
|
||
支持LD_PRELOAD方式免编译使用gazelle,可跳过编译应用程序步骤。
|
||
|
||
-#3 设置配置文件(以redis为例)
|
||
+## 3 设置配置文件(以redis为例)
|
||
|
||
安装完软件包后,运行Gazelle服务需要设置必要的配置文件。
|
||
|
||
@@ -168,13 +166,13 @@ tcp_conn_scan_interval=10
|
||
|
||
redis.conf为redis服务的配置文件,可以参考开源的配置文件,需要注意的是,redis.conf侦听的ip必须和其使用的lstack.conf里面的host_addr值保持一致。
|
||
|
||
-# 4 环境初始化
|
||
+## 4 环境初始化
|
||
|
||
配置文件完成后,需要配置大页、插入igb_uio.ko、绑定dpdk网卡等环境初始化工作才可以运行Gazelle服务。
|
||
|
||
**说明:igb_uio.ko依赖于uio.ko,需要用户先确保已安装uio.ko模块。**
|
||
|
||
-#### 操作步骤
|
||
+### 操作步骤
|
||
|
||
1. **配置大页内存**
|
||
|
||
@@ -203,68 +201,24 @@ tcp_conn_scan_interval=10
|
||
将需要通信的网卡绑定到dpdk,示例如下:
|
||
|
||
```
|
||
- [root@ARM159server usertools]# ./dpdk-devbind.py --bind=igb_uio eth4
|
||
+[root@ARM159server usertools]# dpdk-devbind.py --bind=igb_uio eth4
|
||
```
|
||
|
||
如果是1822网卡,必须绑定vfio-pci驱动:
|
||
-```
|
||
- [root@ARM159server usertools]# ./dpdk-devbind.py --bind=vfio-pci eth4
|
||
-```
|
||
-
|
||
-4. **一键部署脚本使用**
|
||
-
|
||
- 提供gazelle_setup脚本,用于快速自动化部署gazelle运行环境。
|
||
-
|
||
- 一键部署脚本执行示例:
|
||
-
|
||
-```
|
||
- gazelle_setup.sh –i/--nic eth0 –n/--numa 1024,1024 –d/--daemon 1/0 –k/--kni 1/0 –l/--lowpower 1/0 --ltrancore 0,1 --lstackcore 2-3
|
||
-```
|
||
-
|
||
- 参数描述:
|
||
-
|
||
- -i/--nic:设置待绑定网卡,此参数必须配置,且网卡需要有ip、路由和网关等必须参数,否则会读取配置失败,必选。
|
||
-
|
||
- -n/--numa:lstack大页内存(不包括ltran的,ltran默认为1024M,setup脚本不对其做修改),根据numa节点配置,并用","(英文的逗号)分离,这里需要根据系统环境内存配置对应的大小,默认为1024, 可选。
|
||
-
|
||
- -d/--daemon:是否开启deamon模式,开启为1,关闭为0;默认为1,可选。
|
||
-
|
||
- -k/--kni:是否开启kni,开启为1,关闭为0;默认为0,可选。
|
||
-
|
||
- -l/--lowpower:是否开启低功耗模式,开启为1,关闭为0;默认为0,可选。
|
||
-
|
||
- --ltrancore:ltran的绑核参数,参考dpdk的参数配置,此处不做参数校验;默认为0,1,可选。
|
||
-
|
||
- --lstackcore:lstack的绑核参数,同--ltrancore,默认为2,可选。
|
||
-
|
||
- **说明**
|
||
-
|
||
- 1. gazelle_setup.sh支持非root用户启动;(即执行脚本对应的用户及用户组)。
|
||
- 2. 默认配置文件的目录为:/etc/gazelle。
|
||
- 3. gazelle_setup.sh会按照启动参数生成lstack.conf;对于lstack多进程场景,若多进程要使用不同配置文件,则需要自己拷贝修改每个进程的lstack.conf。
|
||
- 4. 部署脚本会启动ltran进程。
|
||
-
|
||
- 一键退出脚本执行实例:
|
||
|
||
```
|
||
- gazelle_exit.sh
|
||
+[root@ARM159server usertools]# dpdk-devbind.py --bind=vfio-pci eth4
|
||
```
|
||
|
||
- **说明**
|
||
-
|
||
- 若启动了ltran的守护任务(gazelle_setup.sh指定了 -d/--daemon 1),那么在杀死ltran之后,守护任务仍会将ltran拉起,所以此时若要完全退出ltran,需要执行gazelle_exit.sh。
|
||
-
|
||
-
|
||
+## 5 运行Gazelle
|
||
|
||
-# 5 运行Gazelle
|
||
-
|
||
-#### 前提条件
|
||
+### 前提条件
|
||
|
||
- 已完成软件包的安装。
|
||
- 已设置完配置文件。
|
||
- 已初始化环境。
|
||
|
||
-#### 操作步骤
|
||
+### 操作步骤
|
||
|
||
1. **启动ltran**
|
||
|
||
@@ -275,21 +229,22 @@ tcp_conn_scan_interval=10
|
||
**说明:一键部署脚本已启动ltran,若使用一键部署脚本,无需此步骤。**
|
||
|
||
```
|
||
- [root@localhost deploy_open_source]# ltran --config-file /usr/share/gazelle/ltran.confEAL: Detected 96 lcore(s)
|
||
- EAL: Detected 4 NUMA nodes
|
||
- EAL: Multi-process socket /var/run/dpdk/(null)/mp_socket
|
||
- EAL: Selected IOVA mode 'PA'
|
||
- EAL: No free hugepages reported in hugepages-2048kB
|
||
- EAL: No free hugepages reported in hugepages-2048kB
|
||
- EAL: No free hugepages reported in hugepages-2048kB
|
||
- EAL: No available hugepages reported in hugepages-1048576kB
|
||
- EAL: Probing VFIO support...
|
||
- EAL: VFIO support initialized
|
||
- EAL: PCI device 0000:03:00.0 on NUMA socket 0......
|
||
- EAL: Finished Process ltran_core_init.
|
||
- EAL: Finished Process ctrl_thread_fn.
|
||
- EAL: Finished Process client_rx_buf_init.
|
||
- EAL: Runing Process forward.
|
||
+[root@localhost deploy_open_source]# ltran --config-file /usr/share/gazelle/ltran.conf
|
||
+EAL: Detected 96 lcore(s)
|
||
+EAL: Detected 4 NUMA nodes
|
||
+EAL: Multi-process socket /var/run/dpdk/(null)/mp_socket
|
||
+EAL: Selected IOVA mode 'PA'
|
||
+EAL: No free hugepages reported in hugepages-2048kB
|
||
+EAL: No free hugepages reported in hugepages-2048kB
|
||
+EAL: No free hugepages reported in hugepages-2048kB
|
||
+EAL: No available hugepages reported in hugepages-1048576kB
|
||
+EAL: Probing VFIO support...
|
||
+EAL: VFIO support initialized
|
||
+EAL: PCI device 0000:03:00.0 on NUMA socket 0......
|
||
+EAL: Finished Process ltran_core_init.
|
||
+EAL: Finished Process ctrl_thread_fn.
|
||
+EAL: Finished Process client_rx_buf_init.
|
||
+EAL: Runing Process forward.
|
||
```
|
||
|
||
2. **启动redis**
|
||
@@ -367,7 +322,7 @@ GAZELLE_BIND_PROCNAME=benchmark_ker GAZELLE_BIND_THREADNAME=disp LD_PRELOAD=/lib
|
||
1. 不支持使用export方式单独声明LD_PRELOAD环境变量。
|
||
2. GAZELLE_BIND_PROCNAME指定lstack绑定的进程名称;GAZELLE_BIND_THREADNAME指定lstack绑定的进程中的具体线程名,且支持字串匹配,如设置disp,表示进程中所有线程名包含disp 字串的线程都会绑定lstack。
|
||
|
||
-# 6 最佳性能配置
|
||
+## 6 最佳性能配置
|
||
|
||
为获得最佳的性能,Gazelle在启动时对cpu和内存配置有一定要求。最佳性能配置如下:
|
||
|
||
@@ -377,7 +332,7 @@ GAZELLE_BIND_PROCNAME=benchmark_ker GAZELLE_BIND_THREADNAME=disp LD_PRELOAD=/lib
|
||
4. 应用进程绑核可提高性能,与网卡同一个numa节点对应的核如果有空闲,应当优先绑定。
|
||
5. Gazelle的网络高性能只有在远程访问的时候才有保证,本机的tcp连接功能也支持,但如果本机有频繁的数据访问,会导致实例整体性能下降,不建议这么部署。
|
||
|
||
-# 7 使用约束
|
||
+## 7 使用约束
|
||
|
||
1. Gazelle提供的命令行及配置文件仅root权限开源执行或修改。配置大页内存需要root用户执行操作。
|
||
2. 在将网卡绑定到igb_uio后,禁止将网卡绑回ixgbe。
|
||
@@ -408,7 +363,7 @@ GAZELLE_BIND_PROCNAME=benchmark_ker GAZELLE_BIND_THREADNAME=disp LD_PRELOAD=/lib
|
||
|
||
|
||
|
||
-# 8 升级说明
|
||
+## 8 升级说明
|
||
|
||
后续升级需要变更的组件包括ltran、liblstack.so、gazellectl、lstack.Makefile、lstack.conf、ltran.conf、gazelle_setup.sh、gazelle_exit.sh、gazelle_crontab.sh、gazelle_common.sh。
|
||
|
||
@@ -436,9 +391,9 @@ GAZELLE_BIND_PROCNAME=benchmark_ker GAZELLE_BIND_THREADNAME=disp LD_PRELOAD=/lib
|
||
|
||
|
||
|
||
-#9 调测工具
|
||
+## 9 调测工具
|
||
|
||
-##9.1 获取ltran统计数据说明
|
||
+### 9.1 获取ltran统计数据说明
|
||
|
||
#### 概述
|
||
|
||
@@ -501,7 +456,7 @@ GAZELLE_BIND_PROCNAME=benchmark_ker GAZELLE_BIND_THREADNAME=disp LD_PRELOAD=/lib
|
||
|
||
|
||
|
||
-## 9.2 获取Lstack统计数据说明
|
||
+### 9.2 获取Lstack统计数据说明
|
||
|
||
#### 概述
|
||
|
||
@@ -553,4 +508,4 @@ lstack作为网络协议栈底座,使用时必须指定需要获取的lstack
|
||
|
||
```
|
||
gazellectl lstack set {client_ip} lowpower {0 | 1}1:enable lowpower mode
|
||
-```
|
||
\ No newline at end of file
|
||
+```
|
||
--
|
||
2.23.0
|
||
|