Recentemente um cliente instalou um novo servidor, com tudo do bom e do melhor em termos de hardware, incluindo RAID 10 em SSD.
O Sistema Operacional escolhido foi CentOS 7, para MySQL 5.7, tudo atualizado. Mas mesmo a aplicação sendo a mesma, o desempenho estava sofrível, muito pior do que no servidor antigo.
E qual o sintoma? O MySQL estava cheio de Thread States (as “esperas” do MySQL, que aparecem com o comando SHOW PROCESSLIST), mas todos os recursos do Sistema Operacional estavam sobrando, incluindo CPU. Na maior parte do tempo o uso de CPU estava baixo, e de repente subia, e depois descia de novo. Este padrão se repetia o tempo todo.
Então descobri que a configuração padrão das CPUs no CentOS (que não é o padrão do Oracle Enterprise Linux, não sei qual é o padrão do Red Hat Enterprise Linux) é para economizar energia.
Bem, dane-se a energia.
[root@ServidorDoCliente ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor conservative [root@ServidorDoCliente ~]# cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor conservative [root@ServidorDoCliente ~]# man cpupower [root@ServidorDoCliente ~]# cpupower frequency-set -g performance Setting cpu: 0 Setting cpu: 1 Setting cpu: 2 Setting cpu: 3 Setting cpu: 4 Setting cpu: 5 Setting cpu: 6 Setting cpu: 7 Setting cpu: 8 Setting cpu: 9 Setting cpu: 10 Setting cpu: 11 Setting cpu: 12 Setting cpu: 13 Setting cpu: 14 Setting cpu: 15 Setting cpu: 16 Setting cpu: 17 Setting cpu: 18 Setting cpu: 19 Setting cpu: 20 Setting cpu: 21 Setting cpu: 22 Setting cpu: 23 Setting cpu: 24 Setting cpu: 25 Setting cpu: 26 Setting cpu: 27 Setting cpu: 28 Setting cpu: 29 Setting cpu: 30 Setting cpu: 31 Setting cpu: 32 Setting cpu: 33 Setting cpu: 34 Setting cpu: 35 Setting cpu: 36 Setting cpu: 37 Setting cpu: 38 Setting cpu: 39 [root@ServidorDoCliente ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance [root@ServidorDoCliente ~]#
Esta configuração também é alterada automaticamente com o profile throughput-performance do tuned, e dessa forma persiste após o reboot.
[root@ServidorDoCliente ~]# yum -y install tuned ... Complete! [root@ServidorDoCliente ~]# tuned-adm active Current active profile: virtual-guest [root@ServidorDoCliente ~]# tuned-adm list Available profiles: - balanced - General non-specialized tuned profile - desktop - Optimize for the desktop use-case - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: virtual-guest [root@ServidorDoCliente ~]# tuned-adm profile throughput-performance [root@ServidorDoCliente ~]# tuned-adm active Current active profile: throughput-performance [root@ServidorDoCliente ~]#