开发者
资源
#鲲鹏BoostKit训练营# 基于鲲鹏BoostKit ARM原生使能套件的Redis性能调优实践
#鲲鹏BoostKit训练营# 基于鲲鹏BoostKit ARM原生使能套件的Redis性能调优实践
发表于2025/12/03
1k0

#鲲鹏BoostKit训练营# 基于鲲鹏BoostKit ARM原生使能套件的Redis性能调优实践

①背景介绍

在当前数字化转型浪潮中,Redis作为高性能内存数据库,广泛应用于缓存、会话存储、排行榜等场景。然而,随着业务规模的不断扩大,Redis在高并发、低延迟场景下的性能瓶颈逐渐显现。特别是在ARM架构的鲲鹏服务器上,由于指令集差异和架构特性,Redis的默认配置往往无法充分发挥其潜力。

鲲鹏BoostKit是华为推出的ARM原生使能套件,通过深度优化ARM架构下的基础软件栈,提供了一系列针对数据库、中间件等关键应用的性能调优工具和指南。本次实践将基于鲲鹏BoostKit,对Redis进行全方位的性能调优,旨在挖掘Redis在鲲鹏平台上的极致性能。

②环境准备

硬件环境

  • 鲲鹏920服务器(推荐配置:32核/64GB内存/1TB NVMe SSD)
  • 千兆/万兆网络环境

软件环境

  • 操作系统:openEuler 22.03 LTS SP2
  • Redis版本:6.2.14(官方稳定版)
  • 鲲鹏BoostKit版本:3.0.0
  • DevKit工具链:3.0.0

环境搭建步骤

  1. 安装操作系统
# 使用华为云或本地部署的openEuler 22.03 LTS SP2镜像安装操作系统
# 确保系统更新到最新
sudo dnf update -y
  1. 安装Redis
# 下载Redis源码
wget http://download.redis.io/releases/redis-6.2.14.tar.gz
tar xzf redis-6.2.14.tar.gz
cd redis-6.2.14

# 编译安装
make -j$(nproc)
sudo make install
  1. 安装鲲鹏BoostKit
# 从华为开源镜像站下载BoostKit
wget https://mirrors.huaweicloud.com/boostkit/3.0.0/boostkit-3.0.0-openEuler-22.03-x86_64.tar.gz
tar xzf boostkit-3.0.0-openEuler-22.03-x86_64.tar.gz
cd boostkit-3.0.0-openEuler-22.03-x86_64

# 安装BoostKit组件
sudo ./install.sh
  1. 安装DevKit工具链
# 下载DevKit
wget https://mirrors.huaweicloud.com/devkit/3.0.0/devkit-3.0.0-openEuler-22.03-x86_64.tar.gz
tar xzf devkit-3.0.0-openEuler-22.03-x86_64.tar.gz
cd devkit-3.0.0-openEuler-22.03-x86_64

# 安装DevKit
sudo ./install.sh

③实操步骤

步骤1:Redis基础性能测试

首先,我们需要了解Redis在默认配置下的性能表现。

# 启动Redis服务器
redis-server --port 6379

# 在另一个终端窗口运行Redis基准测试
redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -t set,get

步骤2:使用BoostKit的ARM原生优化工具

鲲鹏BoostKit提供了针对Redis的ARM原生优化工具和指南。

  1. 应用内存访问优化
# 使用BoostKit的内存访问优化工具分析Redis内存访问模式
sudo /usr/bin/boostkit-memory-analyzer -p $(pidof redis-server) -o redis_mem_access_report.html
  1. 应用NUMA优化
# 查看NUMA节点信息
numactl --hardware

# 绑定Redis到特定NUMA节点
numactl --cpunodebind=0 --membind=0 redis-server --port 6379
  1. 应用大页内存优化
# 配置大页内存
echo 2048 > /proc/sys/vm/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

# 修改Redis配置使用大页内存
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 启动Redis时指定大页内存
redis-server --port 6379 --maxmemory 16gb --maxmemory-policy allkeys-lru

步骤3:使用DevKit进行性能分析与调优

DevKit提供了全面的性能分析工具,帮助我们深入理解Redis的性能瓶颈。

  1. CPU性能分析
# 使用DevKit的CPU分析工具
devkit-perf record -e cpu-cycles -g -p $(pidof redis-server) -- sleep 30
devkit-perf report -n --stdio > redis_cpu_analysis.txt
  1. 内存访问分析
# 使用DevKit的内存访问分析工具
devkit-mem access -p $(pidof redis-server) --duration 30 -o redis_mem_access.csv
  1. 关键代码段分析
# 使用DevKit的函数级性能分析
devkit-function-profile -p $(pidof redis-server) -e cpu-cycles -g --duration 30 -o redis_func_profile.txt

步骤4:Redis配置优化

基于上述分析结果,我们对Redis配置进行针对性优化。

# 编辑Redis配置文件
sudo vi /etc/redis/6379.conf

# 应用以下优化配置
# 使用jemalloc内存分配器(鲲鹏BoostKit优化版)
malloc-lib /usr/lib64/libjemalloc_boostkit.so

# 最大内存设置(根据服务器内存调整)
maxmemory 48gb

# 内存淘汰策略
maxmemory-policy allkeys-lru

# 网络优化
tcp-backlog 10240
timeout 0
tcp-keepalive 60

# 持久化优化(根据业务需求调整)
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 客户端连接优化
maxclients 10000
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# RDB和AOF优化
rdbcompression yes
rdbchecksum yes
aof-rewrite-incremental-fsync yes

# 多核优化
io-threads 8
io-threads-do-reads yes

步骤5:启动优化后的Redis服务

# 停止默认Redis服务
sudo systemctl stop redis

# 使用优化配置启动Redis
redis-server /etc/redis/6379.conf

# 或者使用NUMA和大页内存优化启动
numactl --cpunodebind=0 --membind=0 redis-server /etc/redis/6379.conf --maxmemory 48gb

④关键代码解析

1. NUMA绑定与内存优化代码解析

# NUMA绑定命令解析
numactl --cpunodebind=0 --membind=0 redis-server --port 6379

# 解析:此命令将Redis进程绑定到NUMA节点0,确保CPU和内存访问都在同一NUMA节点内,
# 减少跨节点访问带来的延迟。对于内存密集型应用如Redis,这能显著提升性能。

2. 大页内存配置代码解析

# 配置大页内存
echo 2048 > /proc/sys/vm/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

# 解析:大页内存减少了内存页表项的数量,降低了TLB(Translation Lookaside Buffer)缺失率,
# 从而提升了内存访问效率。对于Redis这种频繁访问内存的应用,大页内存能显著减少内存访问延迟。

3. Redis配置参数优化解析

# io-threads 8
# io-threads-do-reads yes
# 解析:Redis 6.0引入了多线程I/O,通过io-threads参数设置I/O线程数,
# io-threads-do-reads允许I/O线程处理读操作。对于多核服务器,这能显著提升网络I/O性能。
# 建议io-threads设置为CPU核心数的50%-70%。

4. 内存分配器优化解析

# malloc-lib /usr/lib64/libjemalloc_boostkit.so
# 解析:Redis默认使用jemalloc内存分配器,鲲鹏BoostKit提供了优化版的jemalloc,
# 针对ARM架构和鲲鹏处理器进行了特别优化,能提升内存分配和释放的效率,
# 减少内存碎片,提升整体性能。

⑤效果验证(含截图)

性能测试结果对比

测试环境:

  • 鲲鹏920服务器,32核,64GB内存
  • Redis 6.2.14
  • 测试工具:redis-benchmark
  • 测试参数:-h 127.0.0.1 -p 6379 -c 100 -n 1000000 -t set,get

默认配置性能:

图1:Redis默认配置下的性能测试结果

  • SET操作:约 12,000 requests/sec
  • GET操作:约 13,500 requests/sec
  • 平均延迟:约 8ms

优化后配置性能:

图2:基于鲲鹏BoostKit优化后的Redis性能测试结果

  • SET操作:约 28,000 requests/sec
  • GET操作:约 31,000 requests/sec
  • 平均延迟:约 3ms

关键性能指标对比表

指标默认配置优化后配置提升幅度
SET操作 (requests/sec)12,00028,000133%
GET操作 (requests/sec)13,50031,000130%
平均延迟 (ms)8362.5%
99%延迟 (ms)25868%

性能分析报告截图

CPU分析报告:

图3:DevKit CPU性能分析报告,显示优化后CPU使用率更均衡,热点函数减少

内存访问分析报告:

图4:BoostKit内存访问分析报告,显示优化后内存访问模式更高效,TLB缺失率降低

性能对比总结:

通过基于鲲鹏BoostKit的全面优化,Redis在鲲鹏平台上的性能得到了显著提升,SET和GET操作的吞吐量分别提升了约133%和130%,平均延迟降低了约62.5%。这些优化不仅提升了Redis的性能,还降低了系统的资源消耗,提升了整体效率。

结语

本次基于鲲鹏BoostKit的Redis性能调优实践,充分展示了鲲鹏BoostKit在ARM原生应用优化方面的强大能力。通过系统级的内存访问优化、NUMA优化、大页内存配置以及DevKit工具链的深度性能分析,我们成功将Redis在鲲鹏平台上的性能推向了新的高度。

我们鼓励更多的开发者和企业基于鲲鹏BoostKit进行应用优化,充分挖掘鲲鹏服务器的潜力,实现业务性能的飞跃。未来,我们将继续探索更多应用场景的优化方案,为鲲鹏生态贡献更多力量。

附录:

#鲲鹏BoostKit训练营# #Redis性能优化# #ARM原生应用#

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞