[Xinchhuang] JED em etapas e resultados de ajuste de Kunpeng (ARM) | Equipe técnica da JD Cloud

Antecedentes do projeto

Com base na vigorosa promoção do projeto Xinchhuang pelo país, para o desenvolvimento tecnológico independente e controlável, os componentes básicos serão gradualmente substituídos por componentes domésticos.Portanto, a partir do banco de dados, a biblioteca elástica JED é implantada na máquina doméstica Huawei Kunpeng (baseada em Arquitetura ARM) para ajuste.Excelente comparação de desempenho com Intel (X86).

Configuração física da máquina

Fabricante do processador Projeto de arquitetura Modelo de CPU CPU Frequência turbo frequência de memória sistema operacional
Huawei BRAÇO kunpeng920-7262C 128°C nenhum 3200 MT/s Euler
Informações X86 platium-8338C-3rd 128°C ligar 3200 MT/s centos 8
Informações X86 platium-8338C-3rd 128°C ligar 3200 MT/s centos 8

Configuração do banco de dados

Implantar sala de informática Langfang
Método de implantação recipiente
Configuração do gateway Disco 16C/12G:/exportação:30G
esquema de banco de dados 1 cluster, um mestre e um escravo
Configuração do banco de dados Disco 8C/24G:/exportação:512G

Resultados de ajuste

Antes do ajuste: Quando a pressão de fundo é de 50%, o desempenho de leitura do JED no Kunpeng é de 58% do da Intel e o desempenho de gravação é de 68%.

Após o ajuste: o desempenho de leitura do JED no Kunpeng atinge 99% do da Intel, o desempenho de gravação atinge 121% do da Intel e atinge 113% quando a mistura de leitura e gravação é 7: 3. O desempenho do TP99 e do tempo de resposta é melhor, e o banco de dados O uso da CPU atinge 100% neste momento. 100%.Os principais cenários e dados de desempenho registrados durante o processo de ajuste são os seguintes:

Processo de ajuste específico

1. Otimização do BIOS

A sala de computadores precisa ser modificada e a máquina host precisa ser reiniciada.

Expectativa: a pré-busca da CPU tem impacto no desempenho do banco de dados e precisa ser desativada ; a política de energia é o desempenho pronto para uso; o Smmu não precisa ser desativado

2. Altere o tamanho da página do host de 4K para 64K.

Configuração original:

O tamanho da tabela de páginas tem um impacto no desempenho do banco de dados. Confirme se os tamanhos das tabelas de páginas dos sistemas host x86 e Kunpeng são consistentes. Alterar o tamanho da tabela de páginas do sistema operacional host requer a recompilação do kernel. As operações em sistemas operacionais diferentes são diferentes. Por favor entre em contato com a equipe de operação e manutenção. Mudanças de contato

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. Otimização no sistema operacional host

3.1 Desligue o firewall

A máquina online foi desligada e nenhuma modificação é necessária.

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


3.2 Otimização dos parâmetros do kernel da rede (se tornará inválido após o host ser reiniciado)

O desempenho de leitura e gravação não melhorou significativamente e não foi alterado.

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 Otimização de parâmetros IO

O desempenho não foi melhorado e não foi alterado.

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 Otimização de parâmetros de cache

O desempenho não foi melhorado e não foi alterado.

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

3.5 Placa de rede interrompe e vincula núcleo

A solução geral não foi implementada, mas o número de filas de placas de rede ethxx pode ser modificado.

ethtool -l ethxxx Verifica o número de filas da placa de rede ethxxx

ethtool -L ethxxx combinado 8 ethxxx O número de filas da placa de rede precisa ser definido como 8, o que é consistente com x 86. Após a modificação, o desempenho é melhorado (todo o tráfego entra pela placa de rede 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. Vincule o contêiner de negócios ao NUMA (atualize o agendador e implante o agente de colocalização)

Antes da implantação da plataforma, se precisar testar, você pode modificar a configuração do cgroup do contêiner para vincular núcleos para isolar a CPU e a memória do NUMA onde a pressão de fundo está localizada.

As operações de exemplo são as seguintes

# 进入业务容器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 suavemente para editado permanentemente para ARM

Compilado no lado do banco de dados e pode ser implantado uniformemente

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

6. Otimização de compilação de feedback do mysqld

Compilado no lado do banco de dados e pode ser implantado uniformemente

Precisa confirmar usando openEuler gcc 10.3.1

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

Preparação do ambiente (executada em ambiente de teste e ambiente de compilação)

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


Modifique o arquivo de configuração a-fot.ini (executado no ambiente de teste e ambiente de compilação)

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 (o conteúdo de referência é o seguinte)

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


Compilação de comentários

1. Compile pela primeira vez

Você pode ignorá-lo e apenas colocar A-FOT no processo mysql executável do docker.

2. Coleta de dados (executada em ambiente de teste)

Modifique o arquivo /A-FOT/a-fot da seguinte maneira: comente as funções 409 e 414-416

Inicie o processo mysqld e, ao mesmo tempo, o fim da pressão começa a pressionar o mysql, fazendo com que o mysqld comece a processar negócios

Execute ./a-fot e o seguinte eco aparecerá na tela.

Após o sucesso, você pode observar o arquivo profile.gcov no diretório /pgo-opt correspondente.

Após a abertura, o seguinte conteúdo aparecerá:

3. Mesclar manualmente no perfil para compilação

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. Atualização de versão e compilação de feedback

Os agentes relacionados ao banco de dados só precisam operar se usarem go.

7.1 Atualize o golang para 1.21

7.2 Otimização Go PGO

1. Adicione import _ "net/http/pprof" ao código do programa import pprof

2. Inicie o programa e realize um teste de estresse

  1. Depois que a pressão for iniciada, execute as seguintes operações para coletar arquivos de perfil: o segundo é o tempo de coleta e a unidade é s curl -o cpu.pprof http://localhost:8080/debug/pprof/profile?seconds=304. De acordo com o cpu.pprof gerado Recompile o binário mv cpu.pprof default.pgo Recompile o programa com a opção –pgo go build –pgo=auto

Em relação à melhoria de desempenho, os dados oficiais fornecidos pela Golang são:

No Go 1.21, os benchmarks de um conjunto representativo de programas Go mostram que construir com PGO pode melhorar o desempenho em aproximadamente 2-7%.

Autor: JD Varejo Zhu Chen

Fonte: JD Cloud Developer Community Por favor, indique a fonte ao reimprimir

O autor da estrutura de código aberto NanUI passou a vender aço e o projeto foi suspenso. A lista gratuita número um na App Store da Apple é o software pornográfico TypeScript. Ele acaba de se tornar popular, por que os grandes começam a abandoná-lo ? Lista TIOBE de outubro: Java tem o maior declínio, C # está se aproximando Java Rust 1.73.0 lançado Um homem foi encorajado por sua namorada AI a assassinar a Rainha da Inglaterra e foi condenado a nove anos de prisão Qt 6.6 lançado oficialmente Reuters: RISC-V a tecnologia se torna a chave para a guerra tecnológica sino-americana Novo campo de batalha RISC-V: não controlada por nenhuma empresa ou país, a Lenovo planeja lançar o Android PC
{{o.nome}}
{{m.nome}}

Acho que você gosta

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