Red Hat Enterprise Linux
Performance Tuning
Rodrigo MissiaggiaPlatform Technical LeaderRed Hat [email protected]@rmissiaggia
Agenda
● Introdução
● O que é Performance Tuning?
● Só se pode “Tunar” o que se pode medir
● Teoria das Filas.
● Interdependência de componentes.
● Componentes “Tunáveis”
● Colhendo informações e acionando o suporte o suporte.
Objetivo do “Performance Tuning”
● Atingir o comportamento desejado;● Neste caso é necessário definir o que é desejado...
Objetivo do “Performance Tuning”
● Atingir o comportamento desejado;● Neste caso é necessário definir o que é desejado...
● Compensar características físicas do Hardware balanceando:
● Menor tempo de resposta vs Alto Thoughput;● Performance percebida vs Eficiência no uso de recursos;● Redistribuir o Workload durante diferentes períodos do dia;
Objetivo do “Performance Tuning”
● Atingir o comportamento desejado;● Neste caso é necessário definir o que é desejado...
● Compensar características físicas do Hardware balanceando:
● Menor tempo de resposta vs Alto Thoughput;● Performance percebida vs Eficiência no uso de recursos;● Redistribuir o Workload durante diferentes períodos do dia;
● Encontrar e minimizar Gargalos;● Eventualmente restringindo recursos de certas aplicações;
Objetivo do “Performance Tuning”
● Atingir o comportamento desejado;● Neste caso é necessário definir o que é desejado...
● Compensar características físicas do Hardware balanceando:
● Menor tempo de resposta vs Alto Thoughput;● Performance percebida vs Eficiência no uso de recursos;● Redistribuir o Workload durante diferentes períodos do dia;
● Encontrar e minimizar Gargalos;● Eventualmente restringindo recursos de certas aplicações;
●Ajustar o sistema ao fator humano;● O que é lento, o que é rápido?
Só se pode “tunar” o que se pode medir
●É necessário medir o desempenho e tempo de resposta;
● Bandwidth (fixa) vs Throughput (dados úteis)
●Ter informações confiáveis sobre o comportamento de cada componente;
●Preferencialmente os “Workloads” devem ser reproduzíveis para medir as melhorias realizadas;
Ferramentas para Medir a Performance
CPUCPU
CPU Tools1 – top2 – vmstat3 – ps aux4 – mpstat -P all5 – sar -u6 – iostat7 – oprofile8 – gnomesystem-monitor9 – KDE-monitor10 – /proc11 - perf
Ferramentas para Medir a Performance
Storage/Disco
Storage/Disco
Disk Tools1 – iostat -x2 – vmstat - D3 – sar -DEV #4 – nfsstat5 - dstat
Ferramentas para Medir a Performance
MemóriaMemóriaMemory Tools1 – top2 – vmstat -s3 – ps aur4 – ipcs5 – sar -r -B -W6 – free7 – oprofile8 – gnomesystem-monitor9 – KDE-monitor10 – /proc
Ferramentas para Medir a Performance
Processos Processos
Process Tools1 – top2 – ps -o pmem3 – gprof4 – strace,ltrace5 – sar
Ferramentas para Medir a Performance
RedeRede
Network Tools1 – tcpdump2 – wireshark3 – netstat4 – iptraf5 – dstat6 – ethtool...
Ferramentas para Medir a Performance
MemóriaMemória
RedeRede
Processos ProcessosStorage/Disco
Storage/Disco CPUCPU
Conjunto1 – dstat2 – sar3 – oprofile4 – ...
Teoria das Filas
Lei de Little
Desenvolvida por John Little no início dos anos 60. A Lei de Little relaciona o número de clientes no sistema com o tempo médio despendido no sistema por cada um deles.
Teoria das Filas
Utilização = Número de requisições * Tempo de Serviço
Exemplo: saída do iostat -x sda 5
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrqsz avgqusz await svctm %util
Sda 0,00 5293,60 0,00 76,00 0,00 65598,40 863,14 54,58 905,83 7,12 54,10
Utilização = (0.00 + 76.00) * 7.12 ms / 1000 ms = 54,10%
Teoria das Filas
Número Máximo de Novas transações = 1 / Tempo de Serviço
Exemplo:
Utiliza-se o Tempo de Serviço quando a Utilização esta a 100%.
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrqsz avgqusz await svctm %util
sda 0,00 21958,40 0,00 165,20 0,00 169164,80 1024,00 129,63 711,42 6,05 100,00
Número Máximo de Novas transações = 1 segundo / 6.05 ms = 165.28 IOs
Qualquer volume maior que este de novas requisições tende a gerar filas de espera crescentes!
Teoria das Filas
Número Máximo de Novas transações = 1 / Tempo de Serviço
Usuário diz: “O SISTEMA ESTA LENTO!!!!”
Leis de Little (e limites físicos também)
Utilização = Número de requisições * Tempo de Serviço
Número Máximo de Novas transações = 1 / Tempo de Serviço
Ou diminuímos (“tunamos”) o Tempo de Serviço ( = Execução + espera” )ou redistribuímos a carga.
Teoria das Filas
Teoria das filas e a Lei de Little afetam todas as aplicações e Subsistemas Participantes.
– Escrita em disco envolve RAM, CPU, spindle, BUS, controladoras e sistema de arquivos.
O mais eficiente é pensarmos em camadas;– Infra-estrutura, Hardware, SO, Aplicação, Negócios
E então se deve criar um modelo para cada camada:– Estabelecer um máximo “teórico” vs “medido”– Incongruências podem indicar problemas...
Exemplo de Modelo de Aplicação
Exemplo de Modelo de Hardware
Storage / Disco IO
O Disco é, normalmente, um equipamento com peças móveis e esta sujeito, a maiores latências e limitações de crescimentos.
Cálculo de IOPs de um disco rígido:
Model: XXX SAS
Rotational speed: 10,000 RPM
Average latency: 4 ms (0.004 seconds)
Average seek time: 4.2 (r)/4.7 (w) = 4.45 ms (0.0045 seconds)
Número de IOPs calculado para este disco: 1/(0.004 + 0.0045) = ~ 117 IOPS
Storage / Disco IO
Como melhorar a performance de um “Disco”?
Podemos redistribuir a carga ou trocá-los..
Método comum, criação de RAID:
Impacto do uso de RAID no I/o
Níveo de RAID
Read Write
0 1 1
1 ou 10 1 2
5 1 4
6 1 6
Storage / Disco IO
Caso: Necessito de 1000 IOPs por segundo para a aplicação X. Sendo 50% leitura e 50% escrita. Quantos discos preciso para cada nível de RAID?
Alguns dados: http://www.techrepublic.com/blog/datacenter/calculate-iops-in-a-storage-array/2182
(900 * 50%) + (900 * 50% / 2) = 450 + 225 = 675
Nível de RAID Write (TOTAL IOps × % READ)+ ((TOTAL IOps × % WRITE) ×RAID Penalty)
0 1 ((1000 * 0.5) + (1000 *0.5) * 1) = 1000 IOPS
1000 / 150 = 7 discos
1 ou 10 2 ((1000 * 0.5) + (1000 *0.5) * 2) = 1500 IOPS
1500 / 150 = 10discos
5 4 ((1000 * 0.5) + (1000 *0.5) * 4) = 2500 IOPS
2500 / 150 = 17 discos
6 6 ((1000 * 0.5) + (1000 *0.5) * 6) = 3500 IOPS
3500 / 150 = 24discos
Storage / Disco IO●Interface de Interconexão
● SATA até 300MiB/s● SCSI até 320MiB/s● Fibre Channel até 256MiB/s (4Gib/s)● Fibre Channel até 512MiB/s (8Gib/s)
Storage / Disco IO●Interface de Interconexão;
●Tamanho, distribuição e alinhamento de Disco;● Nível de RAID;● Formatação correta em relação ao blocos físicos do
disco:
4K 4K 4K 4K 4K 4K 4K 4K 4K 4K
4K 4K 4K 4K 4K 4KAlinhado
4K 4K 4K 4K 4K 4K 4K 4K 4K 4K
4K 4K 4K 4K 4K 4KDesalinhado
Para ler 4KB é necessário ler 8KB
Para ler 4KB é necessário ler 4KB
Storage / Disco IO●Interface de Interconexão;
●Tamanho, distribuição e alinhamento de Disco;
●Parametrização dos discos;
●Scheduler de Disco;● CFQ -. Divide o IO igualmente por processo
● Deadline – Otimiza os tempos de leitura e escrita das filas. Requisições devem ser atendidas quando o tempo de expiração é atingido
● NOOP – Filas do tipo FIFO
Storage / Disco IO
●Escolha correta de Filesystem;
●Tipos, tamanho e localização de Journal;
●Opções de montagem de Filesystem;● Ext3 = Mais maduro;● Ext4 = Melhor performance na maioria dos casos em
relação ao Ext3;● XFS = Melhor para grandes arquivos, tem problemas
com pequenos;● GFS/GFS2 = Sistema de arquivos para Cluster.
Melhor para grandes arquivos;● NFSv2,3,4 = Multi-plataforma, via rede, necessita um
filesystem para oferecer os arquivos;
Storage / Disco IO●Interface de Interconexão;
●Tamanho, distribuição e alinhamento de Disco;
●Parametrização dos discos;
●Scheduler de Disco;
●Escolha correta de Filesystem;
●Tipos, tamanho e localização de Journal;
●Opções de montagem de Filesystem;
●Fragmentação;
●Tuning de Buffer e Caches
Memória
O gerenciamento de memória é extremamente parametrizável. Permitindo ajustar o comportamento para condições muito particulares de uso.
Memória
Quanta memória temos disponível?
free total used free shared buffers cached
Mem: 8086612 5222256 2864356 0 185616 2388244
/+ buffers/cache: 2648396 5438216
Swap: 10190840 100224 10090616
Memória e áreas de “Defesa”
● Quanto devo manter de memória livre? # cat /proc/sys/vm/min_free_kbytes 67584
Definido em Kbytes, procura definir uma marca d'água de quanta memória RAM deve ser mantida livre. A partir dai busca encontrar memória de maneira agressiva.
Memória vs Swap
● A memória RAM tende a ser 40000 vezes mais rápida que o SWAP (ms vs ns);
● Para melhor performance crie partições de SWAP distribuídos em vários discos, preferencialmente no início do disco, e com prioridades idênticas (quando os discos tiverem a mesma performance;
● O VM (Virtual Memory) pode ser parametrizada para utilizar SWAP com + ou – agressividade por default o sistema vem configurado para “uso geral”;
Memória vs Swap
● Quem controla o SWAP? # cat /proc/sys/vm/swappiness 60Quanto mais perto de 100 maior é a predisposição
a usar SWAP, quanto mais perto de 0 menor é a predisposição.
swap_tendency = mapped_ratio/2 + distress + vm_swappiness
Memória vs Swap
●Quanto mais perto de 100 maior é a predisposição a usar SWAP, quanto mais perto de 0 menor é a predisposição.
swap_tendency = mapped_ratio/2 + distress + vm_swappiness
Se “swap_tendency > 100” então “Tente reclamar página des memória inativas e utilize swap
se necessário...”
Senão “Libere páginas de cache/buffer...”
Memória vs Swap
swap_tendency = mapped_ratio/2 + distress + vm_swappiness
Mapped_ratio = quantos % da memória alocados?This is a measure of the percentage of total system memory that is taken up with mapped pages. It is computed
as (numbermappedpages)/(totalpages) * 100
distress = O quão difícil é recuperar memória em cache?
This is a measurement of how much difficulty the VM is having reclaiming pages. Each time the VM tries to reclaim memory, it scans 1/nth of the inactive lists in each zone in an effort to reclaim pages. Each time a pass over the list is made, if the number of inactive clean + free pages in that zone is not over the low water mark, n is decreased by one. Distress is measured as 100 >> n
Swappiness = “O fator humano”
Memória vs Swap
swap_tendency = mapped_ratio/2 + distress + vm_swappiness
Conta de padeiro:
Minha máquina tem 64GB de RAM e estou alocando 48GB. Está fácil recuperar memória de cache (distress = 0) e swappiness = 60
swap_tendency = 48/64*100/2 + 0 + 60
swap_tendency = 37.5 + 0 + 60 = 97.5
97.5 < 100 então prefiro não usar swap...
Memória vs Cache
●Como influenciar a alocação do cache:
# cat /proc/sys/vm/dirty_ratio
40 dirty_ratio = indica que quando o sistema tiver mais do que 40% da memória alocada para dados que devem
ser escritos em disco (páginas “sujas”), qualquer processo que faça uma nova escrita em disco vai esperar que o sistema termine de escrever as páginas pendentes.
# cat /proc/sys/vm/dirty_background_ratio
10 dirty_background_ratio = 10 faz com que o sistema comece a escrever em segundo plano as páginas “sujas”
assim que estas passem de 10% da memória. Desta forma se obtém mais rapidamente memória que pode ser realocada para outros processos ou liberada.
Memória vs Cache
●Como influenciar a alocação do cache:
# cat /proc/sys/vm/dirty_expire_centisecs
2999dirty_expire_centisecs = indica quantos centésimos de segundo uma informação poderá ficar em cache sem ser
persistida em disco. 2999 = 29,99 segundos.
# cat /proc/sys/vm/dirty_writeback_centisecs
499 dirty_writeback_centisecs = indica a cada quantos centésimos de segundo os daemons de pdflush “acordam”
para analisar páginas não escritas em disco com idade maior que “distry_expire_centisecs”.
Memória vs Cache
●Como influenciar a alocação do cache:
# cat /proc/sys/vm/vfs_cache_pressure
100 vfs_cache_pressure = faz com que o sistema também libere memória alocada para informações de inodes e
directory entries quando precisar liberar memória. Valores maiores que 100 liberam memória mais facilmente...
Memória
● Também podem ser ajustados, tamanhos de caches diversos do sistema para resoluções de tabela ARP, número de conexões de rede suportadas, slabcache (cache de inodes, entradas de diretório, …)
Pergunta: Quanta memória eu preciso ter no meu servidor para garantir que, com o Workload atual, eu terei 99,999% de chance de não exaurir a memória?
Memória
● Também podem ser ajustados, tamanhos de caches diversos do sistema para resoluções de tabela ARP, número de conexões de rede suportadas, slabcache (cache de inodes, entradas de diretório, …)
Pergunta: Quanta memória eu preciso ter no meu servidor para garantir que, com o Workload atual, eu terei 99,999% de chance de não exaurir a memória?
Resposta:
# cat /proc/meminfo | grep Comm
CommitLimit: 14234144 kB
Committed_AS: 3547652 kB
Memória
Melhore a performance da memória e o TLB utilizando Hugepages sempre que possível.
CPU
● Ajustar o Scheduler de CPU para perfomance ou on-demand;
● Utilizar o comando “taskset” para “pinar” um processo/tarefa a um conjunto de CPUs
● Isolar CPUs do sistema indicando quais podem ser usadas para tarefas do SO e quais serão reservadas para aplicações;
● Habilitar a IRQ affinity, fazendo com que as IRQs seja processadas num conjunto de CPUs e aproveita consistência de cache;
Rede
●Estratégias para melhorar a performance;
●Evitar autonegociação de rede;
●Utilizar técnicas de bonding – agregação de link;
●Ajustar tamanhos de buffer de envio e recebimento de rede baseados na latência da rede.
Rede
Ajuste fino de recursosGerenciamento de recursos
Possibilidade de priorizar recursos entre diferentes usuários e processos via Control Groups (Cgroups).
Benefício: Garantir Qualidade de Serviço
Cgroups Pode ser usado para controlar: cpu memória rede
Ajuste fino de recursos
Sem restriçãode recursos.
Ou 32 cores de CPU.
2 CPUS
4 CPUS
8 CPUS
14 CPUS
Permite a realocação de recursos entre processos
ou máquinas virtuais “a quente” sem paradas!
Colhendo informações
Sempre que abrir um chamado de suporte, adicione informações extras para oferecer subsídios para o pessoal de Suporte.
Rode o comando:
#sosreport
Anexe o resultado no chamado de suporte.
https://access.redhat.com/support/offerings/production/sla.html
Agilizando a resolução de problemas com o ABRT*
* Automatic bug detection and reporting tool
* Automatic bug detection and reporting tool
Agilizando a resolução de problemas com o ABRT*
Encurtando Caminhos com o ABRT
Seleciona-se o “travamento” da aplicação no qual
se deseja abrir um Ticket de suporte.
Encurtando Caminhos com o ABRT
Seleciona-se RHTSupportpara abrir um chamado na sua
conta do RHN.
Encurtando Caminhos com o ABRT
Após análise das informaçõesautorize o uso dos dados para
análise.
Encurtando Caminhos com o ABRT
Adicione informações, se possível,das maneiras de reproduzir
o problema.
Encurtando Caminhos com o ABRT
Verifique as informações e aprove, ou não, a abertura
do chamado..
Encurtando Caminhos com o ABRTO chamado será aberto automaticamente e os
dados do backtrace serão anexados ao chamado.
O link para o chamado será disponibilizado a seguir e você receberá dados a respeito dele
no seu email.
Encurtando Caminhos com o ABRTVocê pode editar os dados do
chamado, alterar prioridades etc.
Perguntas?
11/9/10
Ciclo de Suporte
https://access.redhat.com/support/policy/updates/errata/
O suporte por até 10 anos per o planejamento adequado da migração de sistemas legados e preserva investimentos.
http://www.redhat.com/rhel/compare/
Escalabilidade e limites suportados
http://www.redhat.com/rhel/compare/
Escalabilidade e limites suportados
http://www.redhat.com/rhel/compare/
Escalabilidade e limites suportados(sob virtualização)
Ecossistema de Software
http://www.redhat.com/rhel/compatibility/software/
Ecossistema de Hardware
Milhares de combinações de Hardware suportadas
https://hardware.redhat.com/