首页 » 通讯 » 【信创】 JED on 鲲鹏(ARM) 调优步骤与成果_内核_网卡

【信创】 JED on 鲲鹏(ARM) 调优步骤与成果_内核_网卡

神尊大人 2024-12-28 19:49:10 0

扫一扫用手机浏览

文章目录 [+]

架构设计

CPU型号

【信创】 JED on 鲲鹏(ARM) 调优步骤与成果_内核_网卡 【信创】 JED on 鲲鹏(ARM) 调优步骤与成果_内核_网卡 通讯

CPU

【信创】 JED on 鲲鹏(ARM) 调优步骤与成果_内核_网卡 【信创】 JED on 鲲鹏(ARM) 调优步骤与成果_内核_网卡 通讯
(图片来自网络侵删)

睿频

内存频率

操作系统

华为

ARM

kunpeng920-7262C

128C

3200 MT/s

欧拉

Intel

X86

platium-8338C-3rd

128C

开启

3200 MT/s

centos 8

数据库配置

支配机房

廊坊

支配办法

容器

网关配置

16C/12G 磁盘:/export:30G

数据库架构

1个集群,一主一从

数据库配置

8C/24G 磁盘:/export:512G

调优成果

调优前:背景压力50%时,JED on 鲲鹏 读性能是 Intel 的 58%,写性能为68%

调优后: JED on 鲲鹏读性能至 Intel的99%,写性能至 Intel 的 121%,读写稠浊7:3时达到113% ,TP99和相应韶光表现较优,数据库CPU利用率此时均达100%,调优过程中的紧张场景与性能数据记录如下:

详细调优流程1、BIOS优化

须要机房修正,并重启宿主机

预期:CPU prefetching 对数据库性能有影响,须要关闭; Power Policy 开箱即为Performance;Smmu可不关闭

2、宿主机pagesize改大页 4K改为64K

原配置:

页表大小对数据库性能有影响,请确认 x86 和鲲鹏的宿主机系统的页表大小是否同等 变动宿主机操作系统的页表大小须要重新编译内核,不同 OS 上操作有差异,可与运维团队 联系变动

rpm -ivh http://storage.jd.local/k8s-node/kernel/5.10-jd_614-arm64/kernel-5.10.0-1.64kb.oe.jd_614.aarch64.rpm --force3、宿主机OS内优化3.1 关闭防火墙

线上机器已关闭,无需修正

systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.servicesystemctl status firewalld.service 3.2 网络内核参数优化(宿主机重启后会失落效)

读写性能未看到明显提升 不改动

echo 1024 >/proc/sys/net/core/somaxconnecho 16777216 >/proc/sys/net/core/rmem_maxecho 16777216 >/proc/sys/net/core/wmem_maxecho "4096 87380 16777216" >/proc/sys/net/ipv4/tcp_rmem echo "4096 65536 16777216" >/proc/sys/net/ipv4/tcp_wmem echo 360000 >/proc/sys/net/ipv4/tcp_max_syn_backlog3.3 IO参数优化

性能未见提升 不改动

echo deadline > /sys/block/nvme0n1/queue/scheduler;echo deadline > /sys/block/nvme1n1/queue/scheduler;echo deadline > /sys/block/nvme2n1/queue/scheduler;echo deadline > /sys/block/nvme3n1/queue/scheduler;echo deadline > /sys/block/sda/queue/scheduler;echo 2048 > /sys/block/nvme0n1/queue/nr_requests;echo 2048 > /sys/block/nvme1n1/queue/nr_requests;echo 2048 > /sys/block/nvme2n1/queue/nr_requests;echo 2048 > /sys/block/nvme3n1/queue/nr_requests;echo 2048 > /sys/block/sda/queue/nr_requests3.4 缓存参数优化

性能未见提升 不改动

echo 5 >/proc/sys/vm/dirty_ratio; echo 1 > /proc/sys/vm/swappiness3.5 网卡中断绑核

整体方案不落地,但ethxx网卡行列步队数可修正

ethtool -l ethxxx 查看ethxxx网卡行列步队数

ethtool -L ethxxx combined 8 ethxxx 网卡行列步队数须要设成8,和x86同等,修正后性能有提升 (所有流量都是从eth 网卡进去的)。

systemctl stop irqbalancesystemctl disable irqbalanceethtool -L eth0 combined 1 #将网卡eth0的行列步队配置为 combined 模式,将所有行列步队合并为一个。
#eth0 修正为实际利用的网卡设备名 这项参数对性能有影响# 查看网卡行列步队信息ethtool -l ethxxxnetdevice=eth0cores=31#查看网卡所属的 NUMANODEcat /sys/class/net/${netdevice}/device/numa_node#查看网卡中断号cat /proc/interrupts | grep $(ethtool -i $netdevice | grep -i bus-info | awk -F ': ' '{print $2}') | awk -F ':' '{print $1}'# 网卡中断绑核for i in `cat /proc/interrupts | grep $(ethtool -i $netdevice | grep -i bus-info | awk -F ': ' '{print $2}')| awk -F ':' '{print $1}'`;do echo ${cores} > /proc/irq/$i/smp_affinity_list;donenetdevice=eth0# 查看绑核后的结果for i in `cat /proc/interrupts | grep $(ethtool -i $netdevice | grep -i bus-info | awk -F ': ' '{print $2}')| awk -F ':' '{print $1}'`;do cat /proc/irq/$i/smp_affinity_list;donenetdevice=eth1cores=31# 网卡中断绑核for i in `cat /proc/interrupts | grep $(ethtool -i $netdevice | grep -i bus-info | awk -F ': ' '{print $2}')| awk -F ':' '{print $1}'`;do echo ${cores} > /proc/irq/$i/smp_affinity_list;done# 查看绑核后的结果for i in `cat /proc/interrupts | grep $(ethtool -i $netdevice | grep -i bus-info | awk -F ': ' '{print $2}')| awk -F ':' '{print $1}'`;do cat /proc/irq/$i/smp_affinity_list;done
4、业务容器绑NUMA (升级调度器并支配混部agent)

平台支配前,如果须要测试,可自行修正容器的cgroup配置进行绑核,将CPU与内存与背景压力所在的NUMA隔离。

举例操作如下

# 进入业务容器cgroup配置地址cd /sys/fs/cgroup/cpuset/kubepods/burstable/poded/7b40a68a# 停docker,如果重启会重置cgroup配置systemctl stop docker# 压测过程中把稳不雅观察配置文件是否生效,如果docker做事会一直重启,可写个小脚本一贯停做事或者覆盖写cgroup配置echo 16-23 > cpu.setecho 0 > mem.set5、mysql-crc32 软编改成硬编 针对ARM

数据库侧编译,可统一支配

cd /mysql-5.7.26git apply crc32-mysql5.7.26.patch6、mysqld反馈编译优化

数据库侧编译,可统一支配

须要确认利用openEuler gcc 10.3.1

https://gitee.com/openeuler/A-FOT/wikis/README

环境准备(在测试环境和编译环境实行)

git clone https://gitee.com/openeuler/A-FOT.gityum install -y A-FOT (仅支持 openEuler 22.03 LTS) yum -y install perf

修正配置文件 a-fot.ini(在测试环境和编译环境实行)

cd /A-FOTvim ./a-fot.ini # 修正内容如下# 文件和目录请利用绝对路径# 优化模式(AutoFDO、AutoPrefetch、AutoBOLT、Auto_kernel_PGO)(选择 AutoBolt) opt_mode=AutoBOLT# 脚本事情目录(用来编译运用程序/存放 profile、日志,中间过程文件可能会很大,确保有 150G 的空 间)work_path=/pgo-opt# 运用运行脚本路径(空文件占位即可,利用 chmod 777 /root/run.sh 授予可实行权限) run_script=/root/run.sh# GCC 路径(bin、lib 的父目录,修正成所要利用的 gcc 的目录)gcc_path=/usr# AutoFDO、AutoPrefetch、AutoBOLT# 针对运用的三种优化模式,请填写此部分配置# 运用进程名application_name=mysqld# 二进制安装后可实行文件bin_file=/usr/local/mysql-pgo/bin/mysqld# 运用构建脚本路径(文件内填写源码编译 mysql 的干系命令, 授予可实行权限)chmod 777 /root/ build.shbuild_script=/root/build.sh# 最大二进制启动韶光(单位:秒)max_waiting_time=700# Perf 采样时长(单位:秒)(设置采样韶光为 10min)perf_time=600# 检测是否优化成功(1=启用,0=禁用) check_success=1# 构建模式 (Bear、Wrapper) build_mode=Wrapper# auto_kernel_PGO# 针对内核的优化模式,请填写此部分配置# 内核 PGO 模式(arc=只启用 arc profile,all=启用完全的 PGO 优化) pgo_mode=all# 实行阶段(1=编译插桩内核阶段,2=编译优化内核阶段) pgo_phase=1# 内核源码目录(不指定则自动下载) kernel_src=/opt/kernel# 内核构建确当地名(将根据阶段添加"-pgoing"或"-pgoed"后缀) kernel_name=kernel# 内核编译选项(请确保选项修正精确合法,不会造成内核编译失落败) #CONFIG_...=y# 重启前的韶光目录(用于将同一套流程的日志存放在一起)last_time=# 内核源码的 Makefile 地址(用于不自动编译内核的场景) makefile=# 内核配置文件路径(用于不自动编译内核的场景) kernel_config=# 内核天生的原始 profile 目录(用于不自动编译内核的场景) data_dir=

/root/build.sh (参考内容如下)

cd /mysql-8.0.25 rm -rf build mkdir buildcd buildcmake .. -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-pgo -DMYSQL_DATADIR=/data/mysql/data -DWITH_BOOST=/mysql-8.0.25/boost/boost_1_73_0 make -j 96make -j 96 install

反馈编译

1. 第一次编译

可以跳过,直接把 A-FOT 放在有可实行的 mysql 进程 docker 即可

2. 数据采集 (在测试环境实行)

按照如下办法修正/A-FOT/a-fot 文件:对 409,以及 414-416 的函数进行注释

启动mysqld进程,同时压力端开始对mysql发压力,使得mysqld开始处理业务

实行 ./a-fot 屏幕涌现如下回显

成功后可以在对应的/pgo-opt 目录下不雅观察到 profile.gcov 文件

打开后为如下内容

3. 手动合入 Profile 进行编译

cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.26-pgo/ -DMYSQL_DATADIR=/data/mysql/data -DSYSCONFDIR=/usr/local/mysql-5.7.26- pgo/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 - DWITH_PERFSCHEMA_STORAGE_ENGINE=1 - DWITH_BLACKH0LE_ST0RAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 - DDEFAULT_COLLATION=utf8_general_ci - DMYSQL_UNIX_ADDR=/data/mysql/tmp/mysql.sock -DENABLED_LOCAL_INFILE=ON -DENABLED_PROFILING=ON - DWITH_DEBUG=0 -DMYSQL_TCP_PORT=3358 - DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -Wno-dev -DWITH_BOOST=/mysql-5.7.26/boost/boost_1_59_0 -Wno-dev -DCMAKE_CXX_FLAGS="-fbolt-use=Wl,-q" -DCMAKE_CXX_LINK_FLAGS="-Wl,-q"PATH_OF_PROFILE 改成 profile 所在的原始路径7、go的版本升级以及反馈编译

数据库干系代理利用go的才须要操作

7.1 升级golang到1.217.2 Go PGO优化

1.import pprof 程序的代码中添加 import _ "net/http/pprof"

2.启动程序,进行压力测试

3. 压力启动后,实行下面操作,网络 profiling 文件,second 是采集韶光,单位是 s curl -o cpu.pprof http://localhost:8080/debug/pprof/profile?seconds=304、根据天生的 cpu.pprof 重新编译二进制 mv cpu.pprof default.pgo 重新编译程序启用 –pgo 选项 go build –pgo=auto

关于性能的提升情形,Golang官方给出的数据是:

在Go1.21中,一组具有代表性的Go程序的基准测试表明,利用PGO构建可以提高大约2-7%的性能。

作者:京东零售 朱晨

来源:京东云开拓者社区 转载请注明来源

标签:

相关文章

剖析DLL依赖,提示软件运行背后的秘密

随着计算机技术的飞速发展,软件在人们的生活中扮演着越来越重要的角色。在软件运行的过程中,DLL依赖问题却成为了困扰许多开发者和用户...

通讯 2024-12-30 阅读0 评论0

分享8款100w功放电路图_电路_功放

D类100w功放电路先容一款采取普通元件制作的D类100W功放电路,供广大音响爰好者参考。电路如图1所示。元件选择要点:Ic1选用...

通讯 2024-12-30 阅读0 评论0