【信创】 JED on 鲲鹏(ARM) 调优步骤与成果 | 京东云技术团队

news2024/10/6 6:02:05

项目背景

基于国家对信创项目的大力推进,为了自主可控的技术发展,基础组件将逐步由国产组件替代,因此从数据库入手,将弹性库JED部署在 国产华为鲲鹏机器上(基于ARM架构)进行调优,与Intel (X86)进行性能对比。

物理机配置

处理器厂商架构设计CPU型号CPU睿频内存频率操作系统
华为ARMkunpeng920-7262C128C3200 MT/s欧拉
IntelX86platium-8338C-3rd128C开启3200 MT/scentos 8
IntelX86platium-8338C-3rd128C开启3200 MT/scentos 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 --force

3、宿主机OS内优化

3.1 关闭防火墙

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

systemctl status firewalld.service 
systemctl stop firewalld.service 
systemctl disable firewalld.service
systemctl status firewalld.service 



3.2 网络内核参数优化(宿主机重启后会失效)

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

echo 1024 >/proc/sys/net/core/somaxconn
echo 16777216 >/proc/sys/net/core/rmem_max
echo 16777216 >/proc/sys/net/core/wmem_max
echo "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_backlog



3.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_requests



3.4 缓存参数优化

性能未见提升 不改动

echo 5 >/proc/sys/vm/dirty_ratio; 
echo 1 > /proc/sys/vm/swappiness

3.5 网卡中断绑核

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

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

ethtool -L ethxxx combined 8 ethxxx 网卡队列数需要设成8,和x86一致,修改后性能有提升 (所有流量都是从eth 网卡进去的)。

systemctl stop irqbalance
systemctl disable irqbalance

ethtool -L eth0 combined 1 #将网卡eth0的队列配置为 combined 模式,将所有队列合并为一个。 
#eth0 修改为实际使用的网卡设备名 这项参数对性能有影响

# 查看网卡队列信息
ethtool -l ethxxx

netdevice=eth0
cores=31
#查看网卡所属的 NUMANODE
cat /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;done
netdevice=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;done

netdevice=eth1
cores=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.set
echo 0 > mem.set

5、mysql-crc32 软编改成硬编 针对ARM

数据库侧编译,可统一部署

cd /mysql-5.7.26
git apply crc32-mysql5.7.26.patch

6、mysqld反馈编译优化

数据库侧编译,可统一部署

需要确认使用openEuler gcc 10.3.1

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

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

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



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

cd /A-FOT
vim ./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.sh
build_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 build
cd build
cmake .. -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 96
make -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.21
7.2 Go PGO优化

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

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

  1. 压力启动后,执行下面操作,收集 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%的性能。

作者:京东零售 朱晨

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于全息感知的智慧高速IT设施监控运维方案

作为智能交通的重要细分领域,建设智慧高速是实施交通强国战略的重要基础。在信息化时代,交通行业已经依托信息化建设取得了显著的成果,其中以收费网络、办公网络、监控网络和通讯网络为基础的网络架构已经形成,并且正在逐步完善网…

Nginx proxy_set_header参数设置

一、不设置 proxy_set_header Host 不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,参考Module ngx_http_proxy_module 1 2 3 4 5 6 7 8 # cat ngx_header.c…

NIO基础-ByteBuffer,Channel

文章目录 1. 三大组件1.1 Channel1.2 Buffer1.2 Selector 2.ByteBuffer2.1 ByteBuffer 正确使用姿势2.2 ByteBuffer 结构2.3 ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset字符串与 ByteBuffer 互转分散度集中写byteBuffer黏包半包 3. 文件编…

简历石层大海,为何今年秋招那么难?技术面考官想听啥?

上个月发完关于《2023年的IC求职究竟有多难?》文章,后台就出现很多私信,大家都在频繁的问秋招的事情,今年的秋招提前批让很多人直接破防,感觉书读了那么久,学校也还不错,但是为什么企业招聘的简…

单车模型:横向动力学

文章目录 1 模型推导2 参考资料 较高车速下,不能再假设车轮朝向和车轮速度一致。因此运动学模型在这里的误差就会比较大,必须要考虑动力学模型。 现考虑2自由度单车模型,如下图所示。2自由度表示为: 车辆横线位置 y y y&#xff…

2023-2024-1 高级语言程序设计实验一: 选择结构

7-1 古时年龄称谓知多少? 输入一个人的年龄(岁),判断出他属于哪个年龄段 ? 0-9 :垂髫之年; 10-19: 志学之年; 20-29 :弱冠之年; 30-39 &#…

Docker开启远程访问+idea配置docker+dockerfile发布java项目

一、docker开启远程访问 1.编辑docker服务文件 vim /usr/lib/systemd/system/docker.servicedocker.service原文件如下: [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target docker.socke…

【深蓝学院】手写VIO第7章--VINS初始化和VIO系统--笔记

0. 内容 1. VIO回顾 整个视觉前端pipeline回顾: 两帧图像,可提取特征点,特征匹配(描述子暴力匹配或者光流)已知特征点匹配关系,利用几何约束计算relative pose([R|t]),translation只有方向&…

2023年中国睡眠检测仪产量、销量及市场规模分析[图]

睡眠检测仪行业是指生产和销售用于监测和评估人类睡眠质量和睡眠相关指标的设备和工具的行业。睡眠检测仪可以通过监测人体的脑电图、心率、呼吸、体动等生理信号,来评估睡眠的深度、时长、睡眠阶段的分布等信息,帮助人们了解自己的睡眠状况,…

一款轻量级事件驱动型应用程序框架

QP™/C 实时嵌入式框架 (RTEF) 是专为实时嵌入式 (RTE) 系统量身定制的活动对象计算模型的轻量级实现。QP 既是用于构建由活动对象(参与者)组成的应用程序的软件基础结构,也是用于以确定性方式执…

有更新:2023华为HCIA+HCIP最全Datacom题库解析(附全套文档赠送)

2023华为数通Datacom认证考试题库更新,答案解析: 1、所示的BGP/MPLS IP VPN场景,CE和PE之间运行0SPF协议,且区域号为0,当PE1和PE2的域标识符都为NULL时,PE2将向CE2发 送以下哪一类型的LSA? A.Type2 B.T…

了解三层架构:表示层、业务逻辑层、数据访问层

目录 背景: 三层架构 什么是三层: 分层的目的: 三层的结构关系​编辑 三层表现形式:​编辑 三层的优缺点: 总结: 背景: 三层架构是一种软件设计模式,可称为客户端-服务器-架构,把各个功能模块划分…

第二证券:汇金增持有望催化银行板块 白酒企稳信号凸显

昨日,两市股指盘中震动上扬,创业板指、科创50指数一度涨超1%,但沪指午后涨幅逐渐回落。到收盘,沪指涨0.12%报3078.96点,深成指涨0.35%报10084.89点,创业板指涨0.8%报2003.9点,科创50指数涨1.29%…

3.3 数据定义

思维导图: 前言: **核心概念**: - 关系数据库支持**三级模式结构**:模式、外模式、内模式。 - 这些模式中包括了如:模式、表、视图和索引等基本对象。 - SQL的数据定义功能主要包括了模式定义、表定义、视图和索引的定…

AnolisOS升级SSH,不升级SSL

由于ssh有漏洞需要升级,但是为了最小化升级不影响ssl,因为ssl里面带了加密库,系统中很多核心服务的加密都是用ssl进行加密的(像网络服务,系统用户登录等),如果ssl升级出现不兼容,就可…

【Python语义分割】Segment Anything(SAM)模型全局语义分割代码+掩膜保存(二)

我上篇博文分享了Segment Anything(SAM)模型的基本操作,这篇给大家分享下官方的整张图片的语义分割代码(全局),同时我还修改了一部分支持掩膜和叠加影像的保存。 1 Segment Anything介绍 1.1 概况 Meta A…

201、RabbitMQ 之 Exchange 典型应用模型 之 工作队列(Work Queue)

目录 ★ 工作队列介绍代码演示测试注意点1:注意点2: ★ 工作队列介绍 工作队列: 就是让多个消费者竞争消费同一个消息队列的消息,相当于多个消费者共享消息队列。 ▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列 ▲ 消息队…

MS4344:24bit、192kHz 双通道数模转换电路

MS4344 是一款立体声数模转换芯片,内含插值滤波器、 multi-bit 数模转换器、输出模拟滤波器。 MS4344 支持大部分 的音频数据格式。 MS4344 基于一个带线性模拟低通滤波器的 四阶 multi-bit Δ-Σ 调制器,而且本芯片可以通过检测信号频率 和主时钟频…

【Axure高保真原型】冻结固定中继器表格首行+首尾列

今天和大家分享冻结固定中继器表格首行首尾列的原型模板,我们可以滚动或者拖动滚动条上下左右查看表格更多的数据,表格的首行和首尾两列都是固定的,鼠标移入对应行会有高亮显示的效果,点击操作列的删除按钮可以删除该行数据。那这…

智能油烟机 优化烹饪体验

如果说空调是夏天最伟大的发明,那么油烟机则是健康厨房的伟大推进者。随着科技的发展,智能化的油烟机逐渐走进了人们的日常生活。每当我们在爆炒、油炸食物的时候,油烟总能呛得人眼睛痛、鼻子难受,传统的油烟机面前我们还需要手动…