测试性能
本特性基于“Docker+Bond4+IPVLAN”的组网环境进行Redis性能优化,安装和使用该特性进行性能测试之前,请确保已完成相应组网环境的搭建。以同时对4个redis-server实例进行redis-benchmark压力测试为例,验证特性是否成功使能,以及获取特性使能后的性能测试结果。
- 在Server端环境分别进入4个Docker容器。
1docker exec -it {容器名} bash
- 如果使能了分域调度特性,在容器中使用以下命令。如果没有使能分域调度特性,则跳过这个步骤。
1echo $nid > /sys/fs/cgroup/cpu/cpu.soft_domain
分域调度指定cgroup对应NUMA,nid代表NUMA序号+1,比如是NUMA0,那nid就为1。
- 每个Docker容器上启动一个redis-server实例,共启动4个redis-server实例。
1 2
cd path/redis-6.0.20 ./src/redis-server ./redis.conf --bind 0.0.0.0 --port 6379
- 如果使能了网络多路径特性,在Redis进程启动后,使用以下命令查看网卡是否成功启用网络多路径特性。如果没有使能网络多路径特性,则跳过这一步骤。
1 2
ethtool -u eth1 ethtool -u eth2
上述eth1和eth2是启用网络多路径特性配置网卡的设备名称。如果存在配置规则,如下图所示,则代表网络多路径特性已启用;否则未启用。

- 如果使能了分域调度特性,使用以下命令查看分域调度是否使能成功。如果没有使能分域调度特性,则跳过这一步骤。
1cat /sys/kernel/debug/sched_features | grep -e SOFT_DOMAIN -e SIS_HIGHIRQ

1cat /sys/fs/cgroup/cpu/docker/*/cpu.soft_domain上述命令结果不为空,显示信息如:

- 在Client端环境进入Redis目录,准备压力测试脚本,可参考以下脚本内容并按实际情况修改相应参数。
以下参数请按实际情况进行修改:
- REDIS_PATH为Redis所在根目录。
- REDIS_SERVER_IP_PREFIX为IP网段。
- redis_server_ip_suffix为起始IP后缀。
- instances=4。
- client为-c参数,设为最优并发数。
- size为-d参数,默认3字节,也可改为256字节或其他。
#!/bin/bash REDIS_PATH="xxx1" # redis所在目录 REDIS_PORT=6379 REDIS_SERVER_IP_PREFIX="192.168.xx" redis_server_ip_suffix=128 # Server端起始IP后缀 instances=4 # 实例数 client=200 #-c参数 size=3 # -d参数,默认3 # 关闭redis-benchmark进程,清空测试数据日志 pkill redis-benchmark DATA_LOG="xxx2" # 性能数据结果存放的目录 mkdir -p $DATA_LOG rm -rf ${DATA_LOG}/* # 在Client端进行redis-benchmark压力测试 job_ids="" for (( instance=1; instance<=instances; instance++ )); do REDIS_SERVER_IP="${REDIS_SERVER_IP_PREFIX}.${redis_server_ip_suffix}" echo "Running redis-benchmark on ${REDIS_SERVER_IP}:$REDIS_PORT" echo "${REDIS_PATH}/src/redis-benchmark -h ${REDIS_SERVER_IP} -p $REDIS_PORT" ${REDIS_PATH}/src/redis-benchmark -h ${REDIS_SERVER_IP} -p $REDIS_PORT -c $client -d $size -n 10000000 -r 10000000 -t set,get --threads 20 -q >> ${DATA_LOG}/${instances}_c${client}_d${size}_${REDIS_SERVER_IP}_${REDIS_PORT}.log & job_ids="$job_ids $!" ((redis_server_ip_suffix++)) done # 等待 redis-benchmark 执行完毕 echo "Waiting for the $instances jobs: SET, GET" wait $job_ids - 执行压力测试脚本同时对4个实例进行redis-benchmark压力测试。
性能结果会记录在规定路径DATA_LOG下,用cat ./*命令查看,取四个实例的平均值为四实例性能。