Tuned – not just for show – Performance Profiles & System Tuning.

Boa tarde a todos,

Na passada semana, um colega nosso, falou-me numa ferramenta de otimização de sistemas que desconhecia: Tuned

O tuned é uma ferramenta de gestão de perfis de energia e otimização de servidores, desktops e todos o kernels que suportem CPU’s com powerscalling.
Está correntemente a ter o seu desenvolvimento suportado pela Red Hat, estando inclusive o seu principal site alojado no FedoraHosting.

O pressuposto é interessante como o próprio site o indica: A ​tool that performs monitoring and adaptive configuration of the system according to selected profile.

A ideia é ter uma ferramenta que efetua reconfigurações em tempo real de algum hardware (cpu’s e rede) e de parâmetros de kernel que podem melhorar o desempenho ou consumo dos servidores.

Se forem leitores regulares deste blog, já devem saber que sou um utilizador de openSUSE e embora o tuned seja nativo a Red Hat sempre existiram ports para SuSE, Debian e outras distribuições.

A instalação é simples e completamente straight forward:

#zypper install  tuned  tuned-utils  tuned-utils-systemtap tuned-profiles-atomic
#systemctl enable tuned
#systemctl start tuned

Deverão ver agora um novo daemon em execução:

#ps aux | grep -i tuned | grep -v grep
root     28604  0.2  0.0 417156  3168 ?        Ssl  Jun09   2:53 /usr/bin/python -Es /usr/sbin/tuned -l -P

Como referido anteriormente o tuned efetua a sua gestão através de perfis. Para visualizar os existentes efetuar:

# tuned-adm list

Available profiles:
– atomic-guest
– atomic-host
– balanced
– desktop
– latency-performance
– network-latency
– network-throughput
– powersave
– powersave-server
– throughput-performance
– virtual-guest
– virtual-host
Current active profile: virtual-host

Cada perfil define settings de kernel e otimizações ao nível do hardware para a função que cada servidor (ou workstation) tenha. Os nomes são indicadores das capacidades de cada um.

Nota: Após a instalação o setting por defeito é o balanced. Caso desejem mudar efetuar:

# tuned-adm profile powersave-server

Existe ainda a possibilidade de criarmos os nossos próprios perfis ou há mão ou através do utilitário PowerTOP: powertop2tuned $perfil_novo_a_criar

# powertop2tuned testes_homelab
Running PowerTOP, please wait…
Generating shell script /etc/tuned/testes_homelab/script.sh
Generating Tuned config file /etc/tuned/testes_homelab/tuned.conf

#tuned-adm list

Available profiles:
– atomic-guest
– atomic-host
– balanced
– testes_homelab
– desktop
– latency-performance
– network-latency
– network-throughput
– powersave
– powersave-server
– throughput-performance
– virtual-guest
– virtual-host
Current active profile: powersave-server

O ficheiro gerado na demonstração foi algo como:

# cat /etc/tuned/testes_homelab/tuned.conf
# Automatically generated by powertop2tuned tool

[main]
include=powersave-server

[net]
# Wake-on-lan status for device enp4s0
#wake_on_lan=0
# Wake-on-lan status for device enp5s5f0
#wake_on_lan=0
# Wake-on-lan status for device enp5s5f1
#wake_on_lan=0

# Enable Audio codec power management
#timeout=1

[sysfs]
# Autosuspend for USB device Microsoft 5-Button Mouse with IntelliEye(TM) [Microsoft]
# WARNING: For some devices, uncommenting this command can disable the device.
#/sys/bus/usb/devices/3-1.1/power/control=auto

# Autosuspend for USB device PS2toUSB Adapter [GASIA]
#/sys/bus/usb/devices/6-3/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] Family 10h Processor Link Control
/sys/bus/pci/devices/0000:00:18.4/power/control=auto

# Runtime PM for PCI Device Intel Corporation 82546EB Gigabit Ethernet Controller (Copper)
/sys/bus/pci/devices/0000:05:05.1/power/control=auto

# Runtime PM for PCI Device Intel Corporation 82546EB Gigabit Ethernet Controller (Copper)
/sys/bus/pci/devices/0000:05:05.0/power/control=auto

# Runtime PM for PCI Device Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
/sys/bus/pci/devices/0000:04:00.0/power/control=auto

# Runtime PM for PCI Device ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
#/sys/bus/pci/devices/0000:03:00.0/power/control=auto

# Runtime PM for PCI Device ASMedia Technology Inc. ASM1062 Serial ATA Controller
#/sys/bus/pci/devices/0000:02:00.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 5)
/sys/bus/pci/devices/0000:00:0a.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] Family 10h Processor DRAM Controller
#/sys/bus/pci/devices/0000:00:18.2/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] Family 10h Processor Address Map
/sys/bus/pci/devices/0000:00:18.1/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] Family 11h Processor HyperTransport Configuration
#/sys/bus/pci/devices/0000:00:18.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
/sys/bus/pci/devices/0000:00:14.5/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller
#/sys/bus/pci/devices/0000:00:14.3/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
#/sys/bus/pci/devices/0000:00:13.2/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
#/sys/bus/pci/devices/0000:00:13.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
#/sys/bus/pci/devices/0000:00:12.2/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
#/sys/bus/pci/devices/0000:00:12.1/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
#/sys/bus/pci/devices/0000:00:12.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge
#/sys/bus/pci/devices/0000:00:14.4/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 3)
#/sys/bus/pci/devices/0000:00:07.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode]
/sys/bus/pci/devices/0000:00:11.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] Family 11h Processor Miscellaneous Control
#/sys/bus/pci/devices/0000:00:18.3/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 0)
/sys/bus/pci/devices/0000:00:04.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] RS780L [Radeon 3000]
/sys/bus/pci/devices/0000:01:05.0/power/control=auto

# Runtime PM for PCI Device ASUSTeK Computer Inc. AMD RS780/RS880 PCI to PCI bridge (int gfx)
/sys/bus/pci/devices/0000:00:01.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD] RS780 Host Bridge
/sys/bus/pci/devices/0000:00:00.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller
/sys/bus/pci/devices/0000:00:14.0/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller
/sys/bus/pci/devices/0000:00:14.1/power/control=auto

# Runtime PM for PCI Device Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
#/sys/bus/pci/devices/0000:00:13.1/power/control=auto

[powertop_script]
type=script
replace=1
script=script.sh

É possível ainda mais configuração e otimização automática, como por exemplo baixar a velocidade de placas ethernet a GB para 100 mb quando estão em idle poupando bastante energia em custos de operação do homelab, e arrefecendo o equipamento pois está menor energia a ser despendida.

Recomendo que vejam dentro de cada um dos perfis (em openSUSE estão localizados em /usr/lib/tuned) para aprenderem mais sobre cada um deles.
Existem parametros que são extremamente uteis para sistemas virtuais, de software defined storage ou software defined networking.

Efetuei testes dos perfis num dos meus virtualizadores KVM e obtive os seguintes resultados:

index (2)

Entre as 15:00 e as 16:20 tive ativo o perfil powersave-server. Diminuição de calor, e consumo. As VM’s ficaram um pouco mais lentas e toda a rede (uso e1000) ficou a 100mbits.
As 16:20 o perfil usado foi virtual-host. A temperatura subiu 6ºcelcius, e as VM’s ficaram com uma resposta mais pronta e acessivel. Aumento de 5% de consumo.
Das 18:00 o perfil em execução foi o throughput-performance. Consumo de +10% de energia e temperatura mais alta. As VM’s estavam com um comportamento extremamente rápido a todos os níveis.
Para fim do teste, pelas 18:20 coloquei o prefil em powersave-server, com a rede a GB. Consumo ligeiramente mais reduzido que o normal (<3% do que é habitual).

Entre todo o teste não tive cuidado com o que as VM’s estavam a executar, de forma a ter um comportamento real do funcionamento habitual.
Todas as medições energéticas foram efetuadas ao nível do caça watts – ligado a UPS.

Existe diferença palpável no comportamento dos virtualizadores e VM’s com este fine tunig.
Energicamente também existe menor consumo que se traduz numa pegada mais verde do homelab, o que é sempre bom para quando chega a conta da EDP.

Portanto, recomendo. E recomendo vivamente.

Caso tenham duvidas, ou sugestões estão sempre convidados a entrar em contacto comigo através do email nuno at nuneshiggs.com

Abr.
Nuno

Bibliografia:

https://fedorahosted.org/tuned/
http://docs.fedoraproject.org/en-US/Fedora/20/html/Power_Management_Guide/tuned.html