[Xinchuang] Pasos y resultados de ajuste de JED en Kunpeng (ARM) | Equipo técnico de JD Cloud

Antecedentes del proyecto

Con base en la vigorosa promoción de proyectos de innovación de la información por parte del país, para un desarrollo tecnológico independiente y controlable, los componentes básicos serán reemplazados gradualmente por componentes nacionales. Por lo tanto, a partir de la base de datos, la biblioteca elástica JED se implementa en las máquinas nacionales Huawei Kunpeng (basadas en ARM Arquitectura) para ajuste Excelente comparación de rendimiento con Intel (X86).

Configuración de la máquina física

Fabricante del procesador Diseño arquitectónico modelo de procesador UPC frecuencia turbo frecuencia de memoria Sistema operativo
Huawei BRAZO kunpeng920-7262C 128C ninguno 3200 Tm/s Euler
Intel X86 platino-8338C-3ro 128C encender 3200 Tm/s centenas 8
Intel X86 platino-8338C-3ro 128C encender 3200 Tm/s centenas 8

Configuración de base de datos

Implementar sala de computación Langfang
Método de implementación envase
Configuración de puerta de enlace Disco 16C/12G:/exportación: 30G
esquema de base de datos 1 clúster, un maestro y un esclavo
Configuración de base de datos Disco 8C/24G:/exportación: 512G

Resultados de ajuste

Antes del ajuste: cuando la presión de fondo es del 50%, el rendimiento de lectura de JED en Kunpeng es el 58% del de Intel y su rendimiento de escritura es del 68%.

Después del ajuste: el rendimiento de lectura de JED en Kunpeng alcanza el 99% del de Intel, el rendimiento de escritura alcanza el 121% del de Intel y alcanza el 113% cuando la combinación de lectura y escritura es 7: 3. TP99 y el rendimiento del tiempo de respuesta son mejores, y la base de datos El uso de la CPU alcanza el 100% en este momento. 100%. Los principales escenarios y datos de rendimiento registrados durante el proceso de ajuste son los siguientes:

Proceso de ajuste específico

1. Optimización del BIOS

Es necesario modificar la sala de computadoras y reiniciar la máquina host.

Expectativa: la captación previa de la CPU tiene un impacto en el rendimiento de la base de datos y debe desactivarse ; la política de energía es el rendimiento listo para usar; no es necesario desactivar Smmu

2. Cambie el tamaño de la página del host de 4K a 64K.

Configuración original:

El tamaño de la tabla de páginas tiene un impacto en el rendimiento de la base de datos. Confirme si los tamaños de la tabla de páginas de los sistemas host x86 y Kunpeng son consistentes. Cambiar el tamaño de la tabla de páginas del sistema operativo host requiere recompilar el kernel. Las operaciones en diferentes sistemas operativos son diferentes. Por favor contacte con el equipo de operación y mantenimiento.Cambios de contacto

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. Optimización dentro del sistema operativo host

3.1 Apague el firewall

La máquina en línea se ha cerrado y no se requiere ninguna modificación.

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


3.2 Optimización de los parámetros del kernel de la red (dejará de ser válido después de reiniciar el host)

El rendimiento de lectura y escritura no se ha mejorado significativamente ni se ha modificado.

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 Optimización de parámetros IO

El rendimiento no se ha mejorado ni se ha modificado.

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 Optimización de parámetros de caché

El rendimiento no se ha mejorado ni se ha modificado.

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

3.5 La tarjeta de red interrumpe y une el núcleo

La solución general no se ha implementado, pero se puede modificar la cantidad de colas de tarjetas de red ethxx.

ethtool -l ethxxx Verifique el número de colas de tarjetas de red ethxxx

ethtool -L ethxxx combinado 8 ethxxx El número de colas de tarjetas de red debe establecerse en 8, lo cual es consistente con x86. Después de la modificación, se mejora el rendimiento (todo el tráfico ingresa desde la tarjeta de red 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. Vincular el contenedor empresarial a NUMA (actualizar el programador e implementar el agente de ubicación conjunta)

Antes de implementar la plataforma, si necesita realizar pruebas, puede modificar la configuración de cgroup del contenedor para vincular núcleos y aislar la CPU y la memoria de NUMA donde se encuentra la presión de fondo.

Las operaciones de ejemplo son las siguientes

# 进入业务容器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 editado en software a editado en formato físico para ARM

Compilado en el lado de la base de datos y se puede implementar de manera uniforme

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

Seis, optimización de la compilación de comentarios de mysqld

Compilado en el lado de la base de datos y se puede implementar de manera uniforme

Es necesario confirmar usando openEuler gcc 10.3.1

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

Preparación del entorno (ejecutado en entorno de prueba y entorno de compilación)

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


Modifique el archivo de configuración a-fot.ini (ejecutado en el entorno de prueba y en el entorno de compilación)

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 (el contenido de referencia es el siguiente)

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


Compilación de comentarios

1. Compila por primera vez.

Puede omitirlo y simplemente poner A-FOT en el proceso mysql ejecutable de Docker.

2. Recopilación de datos (ejecutada en un entorno de prueba)

Modifique el archivo /A-FOT/a-fot de la siguiente manera: comente las funciones 409 y 414-416

Inicie el proceso mysqld y, al mismo tiempo, el final de la presión comienza a ejercer presión sobre mysql, lo que hace que mysqld comience a procesar el negocio.

Ejecute ./a-fot y aparecerá el siguiente eco en la pantalla.

Después del éxito, puede observar el archivo perfil.gcov en el directorio /pgo-opt correspondiente.

Después de abrir, aparecerá el siguiente contenido:

3. Fusionarse manualmente con el perfil para la compilación.

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. Vaya a la actualización de la versión y a la compilación de comentarios.

Los agentes relacionados con bases de datos solo necesitan operar si usan go.

7.1 Actualice golang a 1.21

7.2 Ir a optimización de PGO

1. Agregue import _ "net/http/pprof" al código del programa import pprof

2. Inicie el programa y realice una prueba de estrés.

  1. Una vez iniciada la presión, realice las siguientes operaciones para recopilar archivos de perfiles: el segundo es el tiempo de recopilación y la unidad es s curl -o cpu.pprof http://localhost:8080/debug/pprof/profile?segundos=304. Según el cpu.pprof generado Recompile el binario mv cpu.pprof default.pgo Recompile el programa con la opción –pgo go build –pgo=auto

En cuanto a la mejora del rendimiento, los datos oficiales proporcionados por Golang son:

En Go 1.21, los puntos de referencia de un conjunto representativo de programas Go muestran que construir con PGO puede mejorar el rendimiento en aproximadamente un 2-7 %.

Autor: JD Retail Zhu Chen

Fuente: Comunidad de desarrolladores de JD Cloud Indique la fuente al reimprimir

El autor del marco de código abierto NanUI pasó a vender acero y el proyecto fue suspendido. La primera lista gratuita en la App Store de Apple es el software pornográfico TypeScript. Acaba de hacerse popular, ¿por qué los grandes empiezan a abandonarlo? Lista de octubre de TIOBE: Java tiene la mayor caída, C# se acerca Java Rust 1.73.0 lanzado Un hombre fue alentado por su novia AI a asesinar a la Reina de Inglaterra y fue sentenciado a nueve años de prisión Qt 6.6 publicado oficialmente Reuters: RISC-V La tecnología se convierte en la clave de la guerra tecnológica entre China y Estados Unidos. Nuevo campo de batalla RISC-V: no controlado por ninguna empresa o país, Lenovo planea lanzar una PC con Android.
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/10117112
Recomendado
Clasificación