From 5249ab9e033d2f02ca78eca1b96db540f9990641 Mon Sep 17 00:00:00 2001 From: xiusailong 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