Networking Performance Best Practices Priscila Veiga Technical Account Manager May/2014 1
Networking Performance Best Practices Você vai sair dessa discussão com: Entendimento de algumas questões que afetam o desempenho da rede no servidor. Ferramentas que irão lhe ajudar a avaliar a performance da sua rede. Algumas diretrizes para testar no seu ambiente. 2
Avisos Não há recomendações sobre um fabricante ou outro. Não assuma que as configurações mostradas aqui irão funcionar para você sem alguns ajustes. Sempre experimente para encontrar o que funciona melhor para seu ambiente. Para isso use a homologação antes de aplicar na produção. 3
Agenda Por quê? Conceitos básicos: PCI, NUMA, CPU, Kernel Sysctl: Lidando com a janela, A memória, Reduzindo time_wait Ferramentas de investigação: ifconfig, netstat, ethtool, ss Ferramentas de tuning: ethtool, tuned 4
5 Por quê?
Conceitos básicos - PCI Velocidade do slot 10Gb precisa de 8x Ao menos uma Gen2 Multiplos barramentos Procure saber se o slot está amarrado a um node NUMA específico. Conheça os vínculos Distribua a carga Ferramenta: 'setpci' Complicado e perigoso 6
Conceitos básicos - CPU Layout de cache Muda a cada geração: Nem sempre precisa-se de grande um grande cache. O ideal é manter o cache sempre em uso Hyperthread Latency sensitive provavelmente melhor não Aplicações que usam muito I/O possívelmente sim 7
Conceitos básicos CPU Múltiplos cores Frequências variaveis Power management (nem sempre seu amigo) Power saving (cpuspeed governors) Performance Ondemand entropy issue Powersave 8
Conceitos básicos O que é NUMA? Non- Uniform Memory Access 9
Conceitos básicos Hyperthreading e NUMA 10
Conceitos básicos NUMA Tenta usar os CPUs que estão idle sem considerar onde o processo de memória está alocado. O acesso a memoria não local tem maior latência, o que pode degradar a performance. Comandos: numastat numactl # numactl -N1 -m1./command numad Balanceamento automático Em testes no RHEL6.4 11
Conceitos básicos Kernel Use TCP_NODELAY na sua aplicação Garanta que os kernel buffers estão com o tamanho adequado Use ss (Recv-Q Send-Q) Não use 'setsockopt' pois ele degrada o desempenho. getsockopt agora suportando TCP thin-streams Reduz a latência de retransmissões de pacotes perdidos em aplicações time-sensitive. 12
Conceitos básicos Kernel (novas funcionalidades) Receive Flow Steering (RFS) Permite otimizar a CPU para receber dados de rede para uma aplicação específica. The goal of RFS is to increase CPU cache hitrate by steering kernel processing of packets to the CPU where the application thread consuming the packet is currently running - thereby reducing network latency O número de entradas na tabela global de fluxo: /proc/sys/net/core/rps_sock_flow_entries O número de entradas por fila na tabela de fluxo: 13 /sys/class/net/<dev>/queues/tx-<n>/rps_flow_cnt
Conceitos básicos Kernel (novas funcionalidades) Receive Packet Steering (RPS) Quebra o gargalo tento a fila de recebimento da NIC em uma única CPU A lista de CPUs para cada RPS deve encaminhar o trafego pode ser configurada para cada dispositivo e fila de recebimento: /sys/class/net/<dev>/queues/rx-<n>/rps_cpus Útil para single-queue ou device com poucas filas. NUMA não pode ser um problema. 14
Kernel RPS & RFS 15
Sysctl Lidando com a janela net.ipv4.tcp_rmem - TCP read buffer - in bytes Default 87380 = 64k window Anulado pelo core.rmem_max net.ipv4.tcp_wmem - TCP write buffer - in bytes Anulado pelo core.wmem_max net.ipv4.tcp_mem - TCP buffer space Em paginas não bytes tcp_window_scaling tcp_app_win Tamanho máximo de janela para buffer de app. (default 31) tcp_adv_win_scale Contador de buffering overhead (default 1, min -31, max +31) 16
Sysctl A memória net.core.(r/w)mem_max max size of (r/w)x socket buffer net.core.(r/w)mem_default default (r/w)x size of socket buffer net.core.optmem_max maximum amount of option memory buffers net.core.netdev_max_backlog how many unprocessed rx packets before kernel starts to drop them UDP também é impactado! 17
Reduzindo time_wait tcp_max_tw_buckets Número máximo de sockets abertos em time_wait. tcp_tw_reuse Permite o re-uso de sockets em time_wait para novas conexões. tcp_tw_recycle Habilita a reciclagem mais rápida do socket. Requer habilitar o tcp_timestamps tcp_keepalive_intvl tcp_keepalive_time 18
Investigação - ifconfig Ifconfig RX / TX Errors netstat -s Dropped ethtool -S Overruns ==> NIC ring buffer size Frame ethtool -S ==> crc_errors ==> duplex errado no switch 19
Investigação - netstat netstat -taupen TCP UDP Program Extendida (user) Endereço numérico (evita delay por tentativa de resolução de nomes) 20
Investigação - netstat netstat -s Retransmited segments Resets UDP buffer errors TCP sockets finished time wait in fast timer delayed acks sent congestion windows Fast retransmission TCP timeout SACK / DSACK 21
Investigação - ethtool ethtool -S <interface> Cada driver tem suas próprias estatísticas Kernel-source-browser rx_dropped rx_errors rx_crc_errors tx_fragments csum_offload 22
Investigação - ss ss Connection state Recv-Q ==> habilitar o reuso, encurtar o keepalive Send-Q ==> gargalo do outro lado? -t = TCP -n = numeric -u = UDP 23
Tuning - ethtool Offloading features ethtool -k <interface> Para verificar ethtool -K <interface> <feature> <on/off> Para definir Implementação no driver/fw de cada NIC Algoritmos variam entre os fabricantes Suportabilidade depende da versão do driver 24
Tuning - ethtool 25
Tuning - tuned 26
Tuning - tuned 27
Referências Make the NICs Move! Jeremy Eder - Principal Performance Engineer, Red Hat http://rhsummit.files.wordpress.com/2013/07/eder_make_the_nic s_move.pdf Achieving Top Network Performance Mark Wagner - Principal Engineer, Red Hat Inc. http://rhsummit.files.wordpress.com/2012/03/wagner_network_pe rf.pdf#page=10&zoom=auto,-31,483 What is Receive Flow Steering (RFS), and how do I configure it in RHEL? https://access.redhat.com/site/solutions/62885 What is Receive Packet Steering (RPS), and how do I configure it in RHEL? 28 https://access.redhat.com/site/solutions/62869
Dúvidas, comentários: priscila@redhat.com OBRIGADA!!! 29