Gazelle 单网卡功能使用说明
背景介绍
目前使用 Gazelle 进行应用程序进行加速时,只能处理应用程序使用端口的报文,对网卡接收到的其他报文(如运维命令ssh 等),无法进行处理。
功能介绍
对于网卡接收到的所有报文,在 Gazelle 内部进行分流处理。分流原则如下:对于Gazelle 记录端口的报文在 Gazelle 处理后送到应用程序,对未记录端口的报文转送到内核。
举例:当Gazelle 加速redis时,Gazelle 会在启动时记录redis监听的端口6379。当Gazelle 收到网卡的报文后,进行每个报文进行判断,对于目的端口是6379 的报文送到Gazelle,其余的报文送到内核进行处理。
使用说明
虚机场景
安装dpdk Gazelle 配置大页
shellyum install -y dpdk gazelle echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages mkdir -p /mnt/hugepages-lstack chmod -R 700 /mnt/hugepages-lstack mount -t hugetlbfs nodev /mnt/hugepages-lstack
详细步骤可参考:挂载大页内存
dpdk 绑定网卡
以网卡绑定 igb_uio 为例
shellcd /lib/modules my_var=$(find /lib/modules/ -name igb_uio.ko) modprobe uio # 加载ko insmod ${my_var} #使用igb_uio dpdk-devbind -b igb_uio enp3s0
详细步骤可参考: dpdk绑定网卡
修改Gazelle配置文件
shellflow_bifurcation=1 # 打开分流开关
加速应用程序,启动Gazelle 以加速 redis 为例
shellLD_PRELOAD=/usr/lib64/liblstack.so Gazelle_BIND_PROCNAME=redis-server /root/redis-server /root/redis.conf
容器场景
安装dpdk、配置大页、dpdk 绑定网卡 同上述章节虚拟场景配置
安装 docker
shellyum install -y docker
导入镜像
shelldocker load -i openEuler-docker.x86_64.tar.xz
host模式
启动容器
shelldocker run -d -it --privileged -v /lib/modules:/lib/modules -v /mnt:/mnt -v /dev:/dev -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev openeuler-22.03-lts-sp4 bash
shelldocker 启动映射文件解释 -v /lib/modules:/lib/modules 映射内核模块 -v /mnt:/mnt 映射外部存储设备 文件系统 -v /dev:/dev 映射内核设备 -v /sys/bus/pci/drivers:/sys/bus/pci/drivers 映射驱动文件 -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages 映射大页信息 -v /sys/devices/system/node:/sys/devices/system/node 映射节点信息
进入容器
shelldocker exec -it xxxxx bash
安装dpdk Gazelle
shellyum install -y dpdk gazele
修改配置文件
shellflow_bifurcation=1 # 打开分流开关 devices="52:54:00:de:2a:57" # 修改mac地址为 dpdk绑定的网卡地址
启动Gazelle 以加速 redis 为例
shellLD_PRELOAD=/usr/lib64/liblstack.so Gazelle_BIND_PROCNAME=redis-server /root/redis-server /root/redis.conf
VF 直通模式
启动容器
shelldocker run -d -it --network host --privileged -v /lib/modules:/lib/modules -v \ /mnt:/mnt -v /dev:/dev -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v \ /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v \ /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev \ openeuler-22.03-lts-sp4 bash
配置VF 直通网卡
shellecho 2 > /sys/class/net/enp130s0f1/device/sriov_numvfs docker ps PID=$(docker inspect -f '{{.State.Pid}}' 容器名称) mkdir -p /var/run/netns ln -s /proc/PID/ns/net /var/run/netns/PID ip link set enp129s0f1v0 netns PID
进入容器
shelldocker exec -it xxx bash
安装dpdk Gazelle
shellyum install -y dpdk gazele
修改配置文件
shellflow_bifurcation=1 # 打开分流开关 devices="52:54:00:de:2a:57" # 修改mac地址为VF直通的网卡
启动Gazelle 以加速 redis 为例
shellLD_PRELOAD=/usr/lib64/liblstack.so Gazelle_BIND_PROCNAME=redis-server /root/redis-server /root/redis.conf
功能限制
- 同节点通信(用户态服务端+内核态客户端 或者 用户态客户端+ 内核态服务端)只支持TCP协议,UDP 协议暂不支持。
- 不支持和kni 功能同时开启。
- 对不携带端口的报文无法做到分流。
- 开启此功能后,性能会下降 2% 左右。
- 虚拟环境及容器环境需要支持
ip a
命令查询网卡信息。若不支持此命令,可能影响虚拟网卡IPV6地址状态,进而影响IPV6通信。
已支持运维命令
ifconfig
tcpdump
ifconfig
ftp/sftp
sar
netstat
ssh -- 需开启ssh 登录,若未开启可按照下面方式开启
shell
[root@eb2936ebeaaf ~]# yum install openssh-server
[root@eb2936ebeaaf ~]# vim /etc/ssh/sshd_config
Port 22 # 开启端口
PubkeyAuthentication yes # 修改登录验证方式
[root@eb2936ebeaaf ~]# /usr/sbin/sshd # 启动ssh服务
[root@eb2936ebeaaf ~]# netstat -pant | grep sshd # 查询 ssh 服务是否开启
文档捉虫