[Xinchuang] JED sur les étapes et résultats de réglage de Kunpeng (ARM) | Équipe technique JD Cloud

Contexte du projet

Sur la base de la promotion vigoureuse par le pays des projets d'innovation de l'information, pour un développement technologique indépendant et contrôlable, les composants de base seront progressivement remplacés par des composants nationaux. Par conséquent, à partir de la base de données, la bibliothèque élastique JED est déployée sur les machines domestiques Huawei Kunpeng (basées sur ARM architecture) pour l'ajustement.Excellente comparaison des performances avec Intel (X86).

Configuration de la machine physique

Fabricant de processeur Conception architecturale Modèle de processeur CPU Fréquence turbo fréquence de la mémoire système opérateur
Huawei BRAS kunpeng920-7262C 128C aucun 3200 MT/s Euler
Intel X86 platine-8338C-3ème 128C allumer 3200 MT/s des centaines 8
Intel X86 platine-8338C-3ème 128C allumer 3200 MT/s des centaines 8

Configuration de la base de données

Déployer une salle informatique Langfang
Méthode de déploiement récipient
Configuration de la passerelle Disque 16C/12G :/exportation : 30G
schéma de base de données 1 cluster, un maître et un esclave
Configuration de la base de données Disque 8C/24G :/exportation :512G

Résultats de réglage

Avant le réglage : lorsque la pression de fond est de 50 %, les performances de lecture de JED sur Kunpeng sont de 58 % de celles d'Intel et ses performances d'écriture sont de 68 %.

Après réglage : les performances de lecture de JED sur Kunpeng atteignent 99 % de celles d'Intel, les performances d'écriture atteignent 121 % de celles d'Intel et atteignent 113 % lorsque le mélange de lecture et d'écriture est de 7 : 3. Les performances TP99 et le temps de réponse sont meilleures, et la base de données L'utilisation du processeur atteint actuellement 100 %. 100 %. Les principaux scénarios et données de performances enregistrés pendant le processus de réglage sont les suivants :

Processus de réglage spécifique

1. Optimisation du BIOS

La salle informatique doit être modifiée et la machine hôte doit être redémarrée.

Attente : la prélecture du processeur a un impact sur les performances de la base de données et doit être désactivée ; la politique d'alimentation est prête à l'emploi ; Smmu n'a pas besoin d'être désactivé

2. Modifiez la taille de la page hôte de 4K à 64K.

Configuration d'origine :

La taille de la table de pages a un impact sur les performances de la base de données. Veuillez confirmer si les tailles de table de pages des systèmes hôtes x86 et Kunpeng sont cohérentes. La modification de la taille de la table de pages du système d'exploitation hôte nécessite une recompilation du noyau. Les opérations sur différents systèmes d'exploitation sont différentes. Veuillez contacter l'équipe d'exploitation et de maintenance.

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. Optimisation au sein du système d'exploitation hôte

3.1 Désactivez le pare-feu

La machine en ligne a été arrêtée et aucune modification n'est requise.

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


3.2 Optimisation des paramètres du noyau réseau (deviendra invalide après le redémarrage de l'hôte)

Les performances de lecture et d'écriture n'ont pas été significativement améliorées et n'ont pas été modifiées.

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 Optimisation des paramètres IO

Les performances n'ont pas été améliorées et n'ont pas été modifiées.

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 Optimisation des paramètres du cache

Les performances n'ont pas été améliorées et n'ont pas été modifiées.

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

3.5 La carte réseau interrompt et lie le noyau

La solution globale n'a pas été implémentée, mais le nombre de files d'attente des cartes réseau ethxx peut être modifié.

ethtool -l ethxxx Vérifier le nombre de files d'attente de la carte réseau ethxxx

ethtool -L ethxxx combiné 8 ethxxx Le nombre de files d'attente de la carte réseau doit être défini sur 8, ce qui est cohérent avec x86. Après modification, les performances sont améliorées (tout le trafic entre depuis la carte réseau 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. Liez le conteneur métier à NUMA (mettez à niveau le planificateur et déployez l'agent de colocalisation)

Avant le déploiement de la plate-forme, si vous devez tester, vous pouvez modifier la configuration du groupe de contrôle du conteneur pour lier les cœurs afin d'isoler le processeur et la mémoire de NUMA où se trouve la pression d'arrière-plan.

Des exemples d'opérations sont les suivants

# 进入业务容器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 modifié en dur pour ARM

Compilé côté base de données et peut être déployé uniformément

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

6. Optimisation de la compilation des commentaires mysqld

Compilé côté base de données et peut être déployé uniformément

Besoin de confirmer en utilisant openEuler gcc 10.3.1

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

Préparation de l'environnement (exécuté dans un environnement de test et un environnement de compilation)

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


Modifier le fichier de configuration a-fot.ini (exécuté dans l'environnement de test et l'environnement de compilation)

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 (le contenu de référence est le suivant)

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


Compilation de commentaires

1. Compilez pour la première fois

Vous pouvez l'ignorer et simplement mettre A-FOT dans le processus mysql exécutable du docker.

2. Collecte de données (exécutée dans un environnement de test)

Modifiez le fichier /A-FOT/a-fot comme suit : commentez les fonctions 409 et 414-416.

Démarrez le processus mysqld, et en même temps, la fin de la pression commence à faire pression sur mysql, ce qui amène mysqld à commencer à traiter les affaires

Exécutez ./a-fot et l’écho suivant apparaîtra à l’écran.

Après succès, vous pouvez observer le fichier profile.gcov dans le répertoire /pgo-opt correspondant.

Après ouverture, le contenu suivant apparaîtra :

3. Fusionner manuellement dans le profil pour la compilation

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. Passez à la mise à niveau de la version et à la compilation des commentaires

Les agents liés à la base de données ne doivent fonctionner que s'ils utilisent go.

7.1 Mettre à niveau Golang vers 1.21

7.2 Optimisation Go PGO

1. Ajoutez import _ "net/http/pprof" au code du programme import pprof

2. Démarrez le programme et effectuez un test de résistance

  1. Une fois la pression démarrée, effectuez les opérations suivantes pour collecter les fichiers de profilage. Le deuxième est le temps de collecte, et l'unité est s curl -o cpu.pprof http://localhost:8080/debug/pprof/profile?seconds=304. Selon le cpu.pprof généré Recompilez le binaire mv cpu.pprof default.pgo Recompilez le programme avec l'option –pgo go build –pgo=auto

Concernant l'amélioration des performances, les données officielles fournies par Golang sont :

Dans Go 1.21, des benchmarks sur un ensemble représentatif de programmes Go montrent que la construction avec PGO peut améliorer les performances d'environ 2 à 7 %.

Auteur : JD Retail Zhu Chen

Source : Communauté de développeurs JD Cloud Veuillez indiquer la source lors de la réimpression

L'auteur du framework open source NanUI s'est tourné vers la vente d'acier et le projet a été suspendu. La liste gratuite numéro un dans l'App Store d'Apple est le logiciel pornographique TypeScript. Il vient de devenir populaire, pourquoi les grands commencent-ils à l'abandonner ? Liste TIOBE d'octobre : Java connaît la plus forte baisse, C# se rapproche de Java Rust 1.73.0 publié Un homme a été encouragé par sa petite amie IA à assassiner la reine d'Angleterre et a été condamné à neuf ans de prison Qt 6.6 officiellement publié Reuters : RISC-V la technologie devient la clé de la guerre technologique sino-américaine Nouveau champ de bataille RISC-V : non contrôlé par une seule entreprise ou un seul pays, Lenovo prévoit de lancer un PC Android
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/u/4090830/blog/10117112
conseillé
Classement