Você está na página 1de 90

Red Hat Enterprise Linux 6 Guia de Ajuste de Desempenho

Otimizando rendimento de subsistema no Red Hat Enterprise Linux 6

Red Hat Peritos do Assunto em Pauta

Red Hat Enterprise Linux 6 Guia de Ajuste de Desempenho Otimizando rendimento de subsistema no Red Hat Enterprise Linux 6

Red Hat Perit os do Assunt o em Paut a

Editado por
Don Domingo Laura Bailey

Nota Legal Copyright 2011 Red Hat, Inc. and others. This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed. Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries. Linux is the registered trademark of Linus Torvalds in the United States and other countries. Java is a registered trademark of Oracle and/or its affiliates. XFS is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. MySQL is a registered trademark of MySQL AB in the United States, the European Union and other countries. Node.js is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project. All other trademarks are the property of their respective owners. 1801 Varsity Drive Raleigh, NC 27 606-207 2 USA Phone: +1 919 7 54 37 00 Phone: 888 7 33 4281 Fax: +1 919 7 54 37 01 Palavras Chave Resumo O Guia de Ajuste de Desempenho descreve como otimizar o desempenho de um sistema executando um Red Hat Enterprise Linux 6. Ele tambm documenta as atualizaes relacionadas ao desempenho no Red Hat Enterprise Linux 6. Embora este guia contenha procedimentos que so testadas em campo e comprovados, a Red Hat recomenda que voc teste corretamente todas as configuraes programadas em um ambiente de teste antes de aplic-lo para um ambiente de produo. Voc tambm deve fazer backup de todos os seus dados e configuraes de pr-ajuste.

ndice

ndice
Prefcio . ............................................................................... 1. Convenes de Documentos 1.1. Convenes T ipogrficas 1.2. Convenes de Pull-Quote 1.3. Notas e Avisos 2. Obtendo Ajuda e Fornecendo Comentrios 2.1. Voc precisa de ajuda? 2.2. Ns precisamos do seu Comentrio Captulo . . . . . . . . . .1. . . Viso . . . . . . Geral .............................................................. 1.1. Pblico Alvo 1.2. Escalabilidade Horizontal 1.2.1. Computao Paralela 1.3. Sistemas Distribudos 1.3.1. Comunicao 1.3.2. Armazenamento 1.3.3. Redes Convergidas Captulo . . . . . . . . . .2. . . Recursos . . . . . . . . . . de . . . Desempenho . . . . . . . . . . . . . . do .... Red . . . . Hat . . . . Enterprise . . . . . . . . . . . .Linux . . . . . .6 ........... 2.1. Suporte de 64-bit 2.2. T icket Spinlocks 2.3. Estrutura da Lista Dinmica 2.4. T ickless Kernel 2.5. Grupos de Controle 2.6. Melhorias de Armazenamento de Sistema de Arquivo Captulo . . . . . . . . . .3. . .Monitorando .............. e. Analisando . . . . . . . . . . . . Desempenho . . . . . . . . . . . . . . de .... Sistema ....................... 3.1. O Sistema de Arquivos Proc 3.2. GNOME e Monitores de Sistema KDE 3.3. Ferramentas de Monitoramento de Linha de Comando Embutida 3.4. T uned e ktune 3.5. Perfis de Aplicativo 3.5.1. SystemT ap 3.5.2. OProfile 3.5.3. Valgrind 3.5.4. Perf 3.6. Red Hat Enterprise MRG Captulo . . . . . . . . . .4. .. CPU .................................................................... T opologia T hreads Interrupes 4.1. T opologia da CPU 4.1.1. CPU e a T opologia NUMA 4.1.2. Ajustando Desempenho de CPU 4.1.2.1. Configurao, Afinidade da CPU com o taskset 4.1.2.2. Controlling NUMA Policy with numactl 4.1.3. numastat 4.1.4. NUMA Daemon de Gerenciamento de Afinidade (numad) 4.1.4.1. Benefcios do numad 4.1.4.2. Modos de operao 4.1.4.2.1. Utilizando o numad como um servio 4.1.4.2.2. Usando o numadcomo um executvel 6 6 6 7 8 8 8 9 10 10 11 12 12 13 14 15 17 17 17 18 18 19 20 23 23 23 24 25 26 27 27 27 28 29 30 30 30 30 31 31 32 34 34 36 38 38 39 39 39

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

4.2. Agendamento da CPU 4.2.1. Polticas de agendamento em T empo Real (Realtime) 4.2.2. Polticas de agendamento normal 4.2.3. Seleo da poltica 4.3. Interrupes e Ajuste de IRQ 4.4. Melhorias do NUMA no Red Hat Enterprise Linux 6 4.4.1. Bare-metal e Otimizaes de Escalabilidade 4.4.1.1. Melhorias no aviso sobre a topologia 4.4.1.2. Melhorias em Sincronizao de Multi-processador 4.4.2. Otimizaoes de Virtualizao Captulo . . . . . . . . . .5. . . Memria .................................................................... 5.1. Buffer de Converso Enorme parte (Huge T LB) 5.2. Huge Pages e T ransparent Huge Pages 5.3. Utilizando o Valgrind para o Uso de Memria de Perfil 5.3.1. Uso de Memria de Perfil com o Memcheck 5.3.2. Uso de Cache de Perfil com o Cachegrind 5.3.3. Heap do Perfil e Espao de Pilha com Massif 5.4. Ajuste de Capacidade 5.5. Ajustando Memria Virtual Captulo . . . . . . . . . .6. . . Entrada/Sada .................................................................... 6.1. Recursos 6.2. Anlises 6.3. Ferramentas 6.4. Configurao 6.4.1. Completely Fair Queuing (CFQ) 6.4.2. Agendador de Prazo de E/S (Deadline I/O Scheduler) 6.4.3. Noop Captulo . . . . . . . . . .7. . . Sistemas . . . . . . . . . . de . . . Arquivos ....................................................... 7.1. Consideraes de ajustes para Sistemas de Arquivo 7.1.1. Formatando Opes 7.1.2. Opes de montagem 7.1.3. Manuteno de sistema de arquivo. 7.1.4. Consideraes de Aplicativos 7.2. Perfis para desempenho de sistema de arquivo. 7.3. Sistemas de Arquivos 7.3.1. Sistema de Arquivo Ext4 7.3.2. O Sistema de Arquivo XFS 7.3.2.1. Ajuste bsico para XFS 7.3.2.2. Ajuste avanado para XFS 7.4. Clustering 7.4.1. Global File System 2 Captulo . . . . . . . . . .8. . . Networking .................................................................... 8.1. Melhorias de Desempenho de Rede . . . . . . . . . Packet Receive . . . . . . . .Steering . . . . . . . . . (RPS) ...................................................... . . . . . . . . . Flow Receive . . . . . Steering .................................................................. . . . . . . . . .de suporte . . . getsockopt . . . . . . . . . . . . para ...... thin-streams . . . . . . . . . . . . . do ...T . .CP ................................ Suporte . . . . . . . . .T . .ransparent . . . . . . . . . . . .Proxy . . . . . . (T . . Proxy) ................................................. 8.2. Configuraes de Rede Otimizadas

40 40 41 41 42 43 43 43 44 44 46 46 46 47 47 48 50 51 54 56 56 56 58 61 62 64 65 68 68 68 69 70 70 70 71 71 72 73 73 76 76 78 78 78 78 79 79 79

Prefcio

Soquete . . . . . . . . . .recebe . . . . . . . tamanho . . . . . . . . . .de . . . buffer .................................................. 8.3. Viso Geral de Recepo de Pacotes Afinidade . . . . . . . . . . .de . . .CPU/cache .................................................................. 8.4. Resolvendo Filas Comuns/ Problemas de Perda de Quadro 8.4.1. Buffer de Hardware NIC 8.4.2. Fila de Soquete 8.5. Consideraes do Multicast . . . . . . . . . . de Histrico . . . Revises ...................................................................

81 81 82 82 83 83 84 86

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Prefcio

Prefcio
1. Convenes de Documentos
Este manual usa diversas convenes para destacar certas palavras e frases e chamar a ateno para informaes especficas. Em PDF e edies de texto, este manual usa tipos de letras retiradas do conjunto Liberation Fonts. O conjunto de Fontes Liberation Fonts, tambm usado em formato HT ML, caso o conjunto esteja instalado em seu sistema. Caso ainda no esteja, como forma alternativa, esto disponveis tipos de letras equivalentes. Nota: O Red Hat Enterprise Linux 5 e verses mais recentes do mesmo, incluem o conjunto Liberation Fonts por padro. 1.1. Convenes T ipogrficas So usadas quatro convenes tipogrficas para realar palavras e frases especficas. Estas convenes, e circunstncias a que se aplicam, so as seguintes: Negrito Espao nico (Mono-spaced Bold) Usada para realar entradas do sistema, incluindo comandos de shell, nomes de arquivos e caminhos. So tambm usadas para realar teclas Maisculas/Minsculas e as combinaes de teclas. Por exemplo: Para ver o contedo do arquivo m y_next_bestselling_novel em sua pasta de trabalho atual, insira o comando cat m y_next_bestselling_novel na janela de solicitao e pressione Enter para executar o comando. O comando acima inclui um nome de arquivo, um comando de shell e uma tecla cap, todos apresentados em Negrito Espao nico (Mono-spaced Bold) e todos distintos, graas ao contedo. As combinaes de tecla podem ser diferenciadas de uma tecla individual pelo sinal positivo que conecta cada parte da combinao da tecla. Por exemplo: Pressione Enter para executar o comando. Pressione Ctrl + Alt+ F2 para trocar ao terminal virtual. A primeira sentena, destaca uma tecla especfica a ser pressionada. A segunda destaca duas combinaes de teclas (cada conjunto de trs teclas Caps com cada um pressionado simultaneamente). Caso o cdigo fonte seja discutido, sero apresentados como acima, os nomes de classe, mtodos, funes, nomes de variantes e valores retornados mencionados em um pargrafo, em Negrito de Espao nico (Mono-spaced Bold). Por exemplo: Classes baseadas em arquivo, incluem filesystem para sistemas de arquivo, file para arquivos, e dir para diretrios. Cada classe possui seu conjunto prprio de permisses associadas. Negrito Proporcional Esta representa as palavras e frases encontradas no sistema, incluindo os nomes de aplicativos, texto de caixa de dilogo, botes rotulados, caixa de seleo e rtulos de boto de opo, ttulos de menus e sub-menus. Por exemplo:

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Escolha Sistema Preferncias Mouse a partir da barra de menu para obter Preferncias de Mouse . Na aba Botes, clique na caixa de seleo Mouse para m o esquerda e clique em Fechar para mudar o boto do mouse anterior da esquerda para a direita (deixando-o assim, mais adequado para o uso do canhoto). Selecione Applications Accessories Character Map a partir da barra de menu principal, com o objetivo de inserir um caractere especial ao arquivo gedit . Em seguida, selecione Search Find a partir da barra do menu Character Map , digite o nome do caractere no campo Search e clique em Next. O caractere pesquisado aparecer destacado no Character T able . Clique duas vezes no caractere destacado para posicion-lo no campo T ext to copy e clique no boto Copy. Retorne ao seu documento e selecione Edit Paste a partir da barra do menu gedit . O texto acima inclui nomes de aplicativos, nomes de menu e itens de todo o sistema, nomes de menu especficos do aplicativo, e botes e textos encontrados na Interface Grfica GUI, todos apresentados em Negrito Proporcional (Proportional Bold) e todos diferenciados de acordo com o contexto. Itlico em Negrito de Espao nico (Mono-spaced Bold Italic) ou Itlico em Negrito Proporcional (Proportional Bold Italic) Sendo o Negrito Espao nico (Mono-spaced Bold) ou Negrito Proporcional (Proportional Bold), os itlicos extras indicam textos substituveis ou variveis. O Itlico denota o texto que voc no inseriu literalmente ou textos exibidos que mudam dependendo das circunstncias. Por exemplo: Para conectar-se uma mquina remota usando o ssh, digite ssh nome do usurio@ domain.name na janela de comandos. Por exemplo, considere que a mquina remota seja exam ple.com e seu nome de usurio nesta mquina seja john, digite ssh john@ exam ple.com . O comando m ount -o rem ount file-system remonta o sistema de arquivo nomeado. Por exemplo, para remontar o sistema de arquivo /hom e , o comando m ount -o rem ount /hom e . Para ver a verso de um pacote instalado, use o comando rpm -q package. Ele retornar um resultado como este: package-version-release. Perceba as palavras em negrito e itlico acima - username, domain.name, file-system, package, version e release. Cada palavra um espao reservado, tanto para o texto que voc insere quando emitindo um comando ou para textos exibidos pelo sistema. Alm de uso padro para apresentar o ttulo de um trabalho, os itlicos denotam a primeira vez que um termo novo e importante usado. Por exemplo: O Publican um sistema de publicao do DocBook. 1.2. Convenes de Pull-Quote Resultado de terminal e listagem de cdigo fonte so definidos visualmente com base no contexto. O resultado enviado um terminal configurado em Rom ano de Espao nico (Mono-spaced Rom an) e apresentado assim:
books books_tests Desktop Desktop1 documentation downloads drafts images mss notes photos scripts stuff svgs svn

As listas de cdigo fonte tambm so configuradas em Rom ano de Espao nico (Mono-spaced

10

Captulo 1. Viso Geral

Rom an), porm so apresentadas e realadas como a seguir:


package org.jboss.book.jca.ex1; import javax.naming.InitialContext; public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } }

1.3. Notas e Avisos E por fim, usamos trs estilos visuais para chamar a ateno para informaes que possam passar despercebidas.

Nota
Uma nota uma dica ou smbolo, ou ainda uma opo alternativa para a tarefa em questo. Se voc ignorar uma nota, provavelmente no resultar em ms consequncias, porm poder deixar passar uma dica importante que tornar sua vida mais fcil.

Importante
Caixas importantes detalham coisas que so geralmente fceis de passarem despercebidas: mudanas de configurao que somente se aplicam sesso atual, ou servios que precisam ser reiniciados antes que uma atualizao seja efetuada. Se voc ignorar estas caixas importantes, no perder dados, porm isto poder causar irritao e frustrao.

Ateno
Um Aviso no deve ser ignorado. Se voc ignorar avisos, muito provavelmente perder dados.

2. Obtendo Ajuda e Fornecendo Comentrios


2.1. Voc precisa de ajuda? Se encontrar dificuldades com o procedimento descrito nesta documentao, voc pode encontrar ajuda visitando o Portal do Cliente da Red Hat em http://access.redhat.com. Voc poder realizar o seguinte

11

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

atravs do portal do cliente: realize buscas ou navegue atravs da base de conhecimento dos artigos de suporte tcnico sobre os produtos da Red Hat. insira o caso de suporte nos Servios de Suporte Global da Red Hat (GSS). acesso a outra documentao da Red Hat. A Red Hat acomoda um grande nmero de listas de correio eletrnico para discusso de software e tecnologias da Red Hat. Voc pode encontrar uma lista contendo as listas pblicas disponveis em https://www.redhat.com/mailman/listinfo. Clique no nome de qualquer lista para subscrever quela lista ou acessar o histrico das listas. 2.2. Ns precisamos do seu Comentrio Se voc encontrar erro ortogrfico neste manual, ou se voc tem uma sugesto para melhoramento deste manual, ns gostaramos muito de ouvir sua opinio. Por favor submita um relatrio em Bugzilla:http://bugzilla.redhat.com/ contra o produto Red Hat Enterprise Linux 6.. Ao submeter um relatrio de erro, certifique-se de mencionar a identificao do manual:docPerformance_Tuning_Guide. Se voc tiver uma sugesto para o melhoramento deste documento, por favor tente ser o mais especfico possvel em sua descrio. Caso voc tenha encontrado um erro, por favor inclua o nmero da seo e alguns detalhes a respeito do texto para a nossa melhor identificao.

12

Captulo 1. Viso Geral

Captulo 1. Viso Geral


O Guia de Ajuste de Desempenho uma referncia compreensiva sobre configurao e otimizao do Red Hat Enterprise Linux. Embora este lanamento tambm contenha informaes sobre as capacidades de desempenho do Red Hat Enterprise Linux 5, todas as instrues fornecidas aqui so especficas para o Red Hat Enterprise Linux 6. Este livro dividido em captulos que discutem subsistemas especficos no Red Hat Enterprise Linux. O Guia de Ajuste de Desempenho foca em trs temas principais por subsistema: Recursos Cada captulo de subsistema descreve recursos de desempenho nicos (ou implementados de forma diferente) do Red Hat Enterprise Linux 6. Estes captulos discutem as atualizaes do Red Hat Enterprise Linux 6 que aprimoraram o desempenho de subsistemas especficos ao longo do Red Hat Enterprise Linux 5. Anlise O livro tambm enumera os indicadores de desempenho para cada subsistema especfico. Valores tpicos para estes indicadores so descritos no contexto de servios especficos, ajudando-o a entender seu significado na produo de sistemas do mundo real. Alm disso, o Guia de Ajuste de Desempenho tambm mostra formas diferentes de recuperar os dados de desempenho (ou seja, perfil) para um subsistema. Note que algumas das ferramentas de perfil demonstradas aqui so documentadas em outros locais em mais detalhes. Configurao T alvez a informao mais importante neste livro seja as instrues sobre como ajustar o desempenho de um subsistema especfico no Red Hat Enterprise Linux 6. O Guia de Ajuste de Desempenho explica como ajustar de forma fina um subsistema do Red Hat Enterprise Linux 6 para servios especficos.

T enha em mente que ao ajustar um desemepnho de subsistema especfico, voc pode afetar o desempenho de outro, as vezes adverso. A configurao padro do Red Hat Enterprise Linux 6 adequada para a maioria dos sevios executando sob cargas moderadas. Os procedimentos enumerados no Guia de Ajuste de Desempenho foram testados extensivamente pelos engenheiros da Red Hat, em laboratrios e em campo. No entanto, a Red Hat recomenda que voc teste corretamente todas as configuraes programadas em um ambiente de teste seguro antes de aplic-lo para um ambiente de produo. Voc tambm deve fazer backup de todos os dados e informaes de configuraes antes de ajustar seu sistema.

1.1. Pblico Alvo


Este livro adequado para dois tipos de leitores: Analistas de Sistema/Negcios Este livro enumera e explica os recursos de desempenho do Red Hat Enterprise Linux 6 a um nvel elevado, fornecendo informaes suficientes sobre como os subsistemas para executar cargas de trabalho especficas (tanto por padro e quando otimizado). O nvel de detalhamento utilizado na descrio dos recursos de desempenho do Red Hat Enterprise Linux 6 ajuda

13

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

clientes em potencial e engenheiros de vendas a entenderem a adequao desta plataforma na prestao de servios intensivos em recursos a um nvel aceitvel. O Guia de Ajuste de Desempenho tambm fornece links para documentao mais detalhada em cada recurso onde seja possvel. Neste nvel de detalhes, os leitores podem entender estes recursos de desempenho suficientes para formar uma estratgia de alto nvel ao implementar e otimizar o Red Hat Enterprise Linux 6. Isto permite que leitores desenvolvam e avaliem as propostas de infraestrutura. Este nvel de recurso focado de documentao adequado para leitores com um alto nvel de conhecimento do subsistema Linux e redes de nvel corporativo. Administrador de Sistemas Os procedimentos enumerados neste livro so adequados aos administradores de sistema com o nvel de qualificaes RHCE [1] ( ou equivalente, ou seja, de 3 5 anos de experincia na implantao e gerenciamento do Linux). O Guia de Ajuste de Desempenho foca em prover o mximo de detalhes possvel sobre os efeitos de cada configurao, ou seja, descrevendo qualquer compensao de desempenho que possa ocorrer. A qualificao subjacente no ajuste de desempenho no depende de como analisar e ajustar um subsistema. Ao invs disso, um administrador de sistema adepto ao ajuste de desempenho, sabe como balancear e otimizar um sistema Red Hat Enterprise Linux 6 system para propsitos especficos. Isto tambm significa saber quais penalidades de ajuste e compensaes so aceitveis para implementar uma configurao criada para aumentar um desempenho de subsistema especfico.

1.2. Escalabilidade Horizontal


Os esforos da Red Hat em aprimorar o desempenho do Red Hat Enterprise Linux 6 foca na escalabilidade. Os recursos de aumento de desempenho so avaliados primeiramente baseados em quanto afetam o desempenho de plataforma em reas diferentes de um spectrum de carga de trabalho ou seja, a partir de servidores de Web solitrios para a mainframe do servidor. Concentrar-se em escalabilidade permite que o Red Hat Enterprise Linux mantenha a sua versatilidade em diferentes tipos de cargas de trabalho e propsitos. Ao mesmo tempo, isso significa que a medida que sua empresa cresce e suas escalas de carga de trabalho aumentam,a re-configurao de seu ambiente de servidor menos proibitiva (em termos de custo e mo de obra) e mais intuitiva. A Red Hat faz melhorias no Red Hat Enterprise Linux, tanto para escalabilidade horizontal quanto para escalabilidade vertical, , no entanto, a escalabilidade horizontal o caso de uso mais geralmente aplicvel. A idia por trsda escalabilidade horizontal a utilizao de vrios computadores padro para distribuir cargas de trabalho pesadas, a fim de melhorar o desempenho e a confiabilidade. Em um farm de servidor tpico, esses computadores padro vm na forma de servidores montados em rack 1U e servidores blade. Cada computador padro pode ser do tamanho de um sistema de dois soquetes simples, embora algumas farms de servidor utilizam sistemas grandes, com mais soquetes. Algumas redes de nvel empresarial misturam sistemas grandes e pequenos, em tais casos, os grandes sistemas so servidores de alto desempenho (por exemplo, servidores de banco de dados) e os pequenos so servidores de aplicao dedicados (por exemplo, servidores de web ou e-mail). Este tipo de escalabilidade simplifica o crescimento de sua infra-estrutura de T I: um negcio de tamanho mdio com uma carga adequada pode s precisar de dois servidores de caixa de pizza para

14

Captulo 1. Viso Geral

atender todas as suas necessidades. medida que a empresa contrata mais pessoas, expande suas operaes, aumenta seu volume de vendas e assim por diante, as suas necessidades de T I aumentam em volume e complexidade. Escalabilidade horizontal permite que a T I simplesmente implante mquinas adicionais com (principalmente) configuraes idnticas, como os seus antecessores. Para resumir, a escalabilidade horizontal adiciona uma camada de abstrao que simplifica a administrao de hardware do sistema. Ao desenvolver a plataforma Red Hat Enterprise Linux para escalar horizontalmente, o aumento da capacidade e o desempenho dos servios de T I podem ser to simples como a adio de novas mquinas, facilmente configurados. 1.2.1. Computao Paralela Os usurios se beneficiam de escalabilidade horizontal do Red Hat Enterprise Linux e no apenas porque ele simplifica a administrao de hardware do sistema, mas tambm porque a escalabilidade horizontal uma filosofia de desenvolvimento adequado, dadas as tendncias atuais no avano hardware. Considere o seguinte: as aplicaes corporativas mais complexas tm milhares de tarefas que devem ser executadas simultaneamente, com diferentes mtodos de coordenao entre as tarefas. Enquanto primeiros computadores tinham um processador single-core para conciliar todas essas tarefas, praticamente todos os processadores disponveis hoje tm mltiplos ncleos. Efetivamente, os computadores modernos colocam mltiplos ncleos em um nico soquete, fazendo at mesmo desktops soquetes individuais ou laptops de sistemas multi-processador. Desde 2010, o padro Intel e AMD esto disponveis com 2-16 ncleos. Esses processadores so prevalentes em caixa de pizza ou servidores blade, que agora podem conter at 40 ncleos. Estes sistemas de baixo custo e de alto desempenho trazem capacidades do sistema de grande porte e caractersticas para o mainstream. Para conseguir o melhor desempenho e a utilizao de um sistema, cada ncleo tem de ser mantido ocupado. Isso significa que 32 tarefas distintas devem estar em execuo para tirar proveito de um servidor blade de 32-ncleos. Se um chassis lmina contm dez dessas lminas 32 ncleos, toda a configurao pode processar um mnimo de 320 tarefas simultaneamente. Se essas tarefas fazem parte de um nico trabalho, elas devem ser coordenados. Red Hat Enterprise Linux foi desenvolvido para se adaptar bem s tendncias de desenvolvimento de hardware e garantir que as empresas podem se beneficiar totalmente deles. Seo 1.3, Sistemas Distribudos explora as tecnologias que permitem escalabilidade horizontal do Red Hat Enterprise Linux em maior detalhes.

1.3. Sistemas Distribudos


Para realizar plenamente a escalabilidade horizontal, a Red Hat Enterprise Linux usa muitos componentes da computao distribuda . As tecnologias que compem a computao distribuda so divididas em trs camadas: Comunicao Escalabilidade horizontal requer muitas tarefas a serem executadas simultaneamente (em paralelo). Como tal, estas tarefas devem ter comunicao de interprocesso para coordenar seu trabalho. Alm disso, uma plataforma com escalabilidade horizontal deve ser capaz de compartilhar tarefas entre vrios sistemas. Armazenamento Armazenamento via discos locais no suficiente para enfrentar as exigncias de

15

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

escalabilidade horizontal. Ser necessria alguma forma de armazenagem compartilhada ou distribuda, uma com uma camada de abstrao que permite que a capacidade de um nico volume de armazenamento cresa de forma integrada com a adio de um novo hardware de armazenamento. Gerenciamento O dever mais importante na computao distribuda a camada de gesto. Esta camada de gerenciamento coordena todos os componentes de software e hardware, gesto eficiente de comunicao, armazenamento e uso de recursos compartilhados.

As seguintes sees descrevem as tecnologias dentro de cada camada em mais detalhes. 1.3.1. Comunicao A camada de comunicao assegura o transporte de dados, e composto de duas partes: Hardware Software A forma mais simples (e mais rpida) de sistemas mltiplos se comunicarem atravs de memria compartilhada. Isto possibilita o uso de leitura de memria familiar/operaes de gravao; memria compartilhada possui uma largura de banda alta, baixa latncia e baixa sobrecarga de leitura de memria comum/operaes de gravao. Ethernet A forma mais comum de comunicao entre computadores sob Ethernet. Hoje, Gigabit Ethernet (GbE) fornecido por padro nos sistemas, e a maioria dos servidores incluem 2-4 portas Gigabit Ethernet. GbE fornece boa largura de banda e latncia. Esta a base da maioria dos sistemas distribudos em uso nos dias de hoje. Mesmo quando os sistemas incluem hardware de rede mais rpida, ainda comum o uso de GbE para uma interface de gerenciamento dedicado. 10GbE Ten Gigabit Ethernet (10GbE) est crescendo rapidamente na aceitao para servidores de alto nvel e at mesmo servidores de nvel mdio. 10GbE fornece dez vezes a largura de banda de GbE. Uma de suas principais vantagens com processadores multi-core modernos, onde se restabelece o equilbrio entre comunicao e computao. Voc pode comparar um sistema de ncleo nico com GbE com um sistema de oito ncleos usando 10GbE. Usado desta forma, o 10GBE especialmente valioso para manter o desempenho geral do sistema e evitar afunilamento de comunicao. Infelizmente, o 10GBE caro. Enquanto o custo de placas de rede 10GbE desceu, o preo da interconexo (especialmente de fibra tica) permanece elevado, e interruptores de rede 10GbE so extremamente caros. Podemos esperar que esses preos caiam ao longo do tempo, mas 10GbE hoje mais fortemente utilizado em suporte principal de sala de servidores e aplicativos de desempenho crtico. Infiniband Infiniband oferece um desempenho ainda mais alto do que 10GbE.Alm das conexes de rede T CP/IP e UDP utilizadas com o Ethernet, o Infiniband tambm suporta comunicao de memria compartilhada. Isto permite que o Infiniband funcione entre sistemas via acesso de memria direto remoto (RDMA). O uso de RDMA permite que o Infiniband mova dados diretamente entre os sistemas sem a sobrecarga

16

Captulo 2. Recursos de D esempenho do Red Hat Enterprise Linux 6

de conexes T CP / IP ou socket. Por sua vez, reduz a latncia, o que fundamental para algumas aplicaes. Infiniband mais comumente usado em aplicativos Computao de Alto Desempenho Tcnico (HPT C), que requerem elevada largura de banda, baixa latncia e baixo custo operacional. Muitas aplicaes de supercomputao beneficiam-se com isso, a ponto de que a melhor maneira de melhorar o desempenho atravs do investimento em Infiniband ao invs de processadores mais rpidos ou mais de memria. RoCCE RDMA over Ethernet (RoCCE) implementa as comunicaes em estilo do Infinibands (including RDMA) sob uma infraestrutura 10GbE. Considerando as melhorias de custo associada ao volume crescente dos produtos 10GbE, razovel esperar uso mais amplo do RDMA e RoCCE em uma classe ampla em uma classe de sistemas e aplicativos. Cada um destes mtodos de comunicao totalmente suportado pelo Red Hat for use with Red Hat Enterprise Linux 6. 1.3.2. Armazenamento Um ambiente que usa computao distribuda usa vrias instncias de armazenamento compartilhado. Isto pode significar uma entre duas coisas: Dados de armazenamento de sistemas mltiplos em um nico local uma unidade de armazenamento (ex.: um volume) composto por equipamentos de armazenamento mltiplos. O exemplo mais conhecido de armazenamento o disco rgido local montado em um sistema. Isto apropriado para operaes de T I, onde todos os aplicativos so hospedados em um hospedeiro, ou at mesmo um pequeno nmero de hospedeiros. No entanto, como as escalas de infra-estrutura para dezenas ou mesmo centenas de sistemas, gesto de tantos discos de armazenamento locais torna-se difcil e complicado. Armazenamento distribudo adiciona uma camada para facilitar e automatizar a administrao de hardware de armazenamento, como as escalas de negcios. T er vrios sistemas que compartilham diversos casos de armazenamento, reduz o nmero de dispositivos que o administrador precisa gerenciar. Consolidar as capacidades de armazenamento de vrios dispositivos de armazenamento em um volume ajuda os usurios e administradores. Este tipo de armazenamento distribudo fornece uma camada de abstrao para pools de armazenamento: os usurios vem uma nica unidade de armazenamento, o que um administrador pode facilmente fazer crescer, adicionando mais hardware. Algumas tecnologias que permitem armazenamento distribudo tambm oferecem benefcios adicionais, tais como failover e vrios caminhos. NFS O Network File System (NFS) permite que mltiplos servidores ou usurios montem e utilizem a mesma instncia de armazenamento remoto via T CP ou UDP. O NFS geralmente utilizado para manter dados compartilhados por diversos aplicativos. tambm conveniente para armazenamento em massa com uma grande quantidade de dados. SAN Rede de rea de Armazenamento (SANs) usa o Canal de Fibra ou o protocolo ou iSCSI para fornecer acesso remoto para armazenamento. A infraestrutura do Canal de Fibra, (tal como o adaptadores do bus do host Canal de Fibra, interruptores e matrizes de armazenamento) combina com o alto

17

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

desempenho, largura de banda alta e enorme armazenamento. O SANs separa o armazenamento do processamento, provando flexibilidade considervel na criao do sistema. As outras vantagens principais do SANs que eles fornecem um ambiente de gerenciamento para realizar tarefas grandes administrativas do hardware de armazenamento . Estas tarefas incluem: Controlando acesso ao armazenamento Gerenciamento de grande quantidade de dados Sistemas de Provisionamento Fazendo um backup e replicando dados T irando snapshots Suportando failover de sistema Garantindo a integridade de dados Migrando dados GFS2 O sistema de arquivo da Red Hat Global File System 2 (GFS2) fornece vrios recursos especializados. A funo bsica do GFS2 fornecer um nico sistema de arquivos, incluindo o concorrente de leitura / gravao de acesso, compartilhados entre vrios membros de um cluster. Isto significa que cada membro do cluster v exatamente os mesmos dados "no disco" no sistema de arquivos GFS2. O GFS2 permite que todos os sistemas possuam acesso simultneo ao "disco". Para manter a integridade de dados, o GFS2 utiliza um Gerenciador de Bloqueio Distribudo (DLM), o qual s permite que um sistema grave em um local especfico por vez. GFS2 se adequa bem especialmente aos aplicativos failover que requerem uma alta disponibilidade de armazenamento. Para mais informaes sobre o GFS2, consulte o Global File System 2. Para mais informaes futuras sobre o armazenamento em geral, consulte o Guia de Administrao do Armazenamento. Ambos esto disponveis em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. 1.3.3. Redes Convergidas A Comunicao sob a rede geralmente feita atravs da Ethernet, com o trfego de armazenamento utilizando um ambiente de Canal de Fibra SAN. comum ter uma rede dedicada ou link em srie para o gerenciamento de sistemas e talvez at heartbeat [2] . Como resultado, um servidor nico est geralmente em diversas redes. Fornecer diversas conexes em cada servidor caro, pesado e complexo de se gerenciar. Isto criou a necessidade de uma forma de consolidar todas as conexes em uma. O Fibre Channel over Ethernet (FCoE) e e Internet SCSI (iSCSI) se referem esta necessidade. FCoE Com o FCoE, comandos de canal de fibra padro e pacotes de dados so transportados atravs de uma infra-estrutura fsica de 10GbE atravs de uma nica placa de rede convergente (CNA). T rfego de ethernet padro T CP/IP e operaes de armazenamento de canal de fibra podem ser transportados atravs do mesmo link. FCoE usa um carto de interface de rede fsica (e um nico cabo) pararedes lgicas mltiplas/conexes de armazenamento. FCoE oferece as seguintes vantagens: Nmero reduzido de conexes

18

Captulo 2. Recursos de D esempenho do Red Hat Enterprise Linux 6

FCoE reduz o nmero de conexes de rede a um servidor pela metade. Voc ainda pode optar por fazer vrias conexes para o desempenho ou a disponibilidade, no entanto, uma nica conexo fornece armazenamento e conectividade de rede. Isso especialmente til para os servidores de caixa de pizza e servidores blade, j que ambos tm um espao muito limitado para os componentes. Custo mais baixo Reduzir nmero de conexes, imediatamente, significa nmero reduzido de cabos, interruptores e outros equipamentos de rede. A histria da Ethernet tambm apresenta grandes economias de escala, o custo das redes cai drasticamente quando o nmero de dispositivos no mercado vai de milhes a bilhes, como foi visto na queda do preo de 100Mb Ethernet e dispositivos Gigabit Ethernet. Da mesma forma, o 10GbE tambm se torna mais barato a medida que os negcios se adaptam ao seu uso. Como o hardware CNA, ele integrado em um nico chip, o uso espalhado tambm aumentar seu volume no mercado, o qual resultar em baixa de preo de forma significativa ao longo do tempo.

iSCSI Internet SCSI (iSCSI) outro tipo de protocolo de rede convergida; uma alternativa para o FCoE. Como o canal de fibra, o canal iSCSI fornece armazenamento de nvel de bloco sob a rede. No entanto, o iSCSI no fornece um ambiente de gerenciamento completo. A principal vantagem do iSCSI sob o FCoE que o iSCSI fornece muito da capacidade e flexibilidade do canal de fibra, mas com um custo menor.

[1] Eng enheiro c ertific ad o d a Red Hat. Para mais info rma es , c o ns ulte o http ://www.red hat.c o m/training /c ertific atio ns /rhc e/. [2] Heartbeat a tro c a d e mens ag ens entre s is temas p ara g arantir q ue c ad a um aind a es t func io nand o . Se um s is tema " p erd e o heartb eat" entend e-s e q ue ele falho u e es t fec had o , c o m o utro s is tema to mand o a lid eran a.

19

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Captulo 2. Recursos de Desempenho do Red Hat Enterprise Linux 6


2.1. Suporte de 64-bit
Red Hat Enterprise Linux 6 suporta processadores de 64 bits; estes processadores podem utilizar teoreticamente at 16 exabytes de memria. Como a Disponiblidade Geral (GA - General Availability), o Red Hat Enterprise Linux 6 testado e certificado para suportar at 8T B de memria fsica. O tamanho da memria suportada pelo Red Hat Enterprise Linux 6 deve crescer durante diversas atualizaes menores, como a Red Hat continua a apresentar e aprimorar mais recursos que habilitam o uso de blocos de memria grandes. Exemplos de tais melhorias (desde o Red Hat Enterprise Linux 6 GA) so: Huge pages e transparent huge pages Melhorias de Acesso de Memria No Uniforme Estas melhorias so descritas em mais detalhes nas sees que se seguem. Huge pages e transparent huge pages A implementao do huge pages no Red Hat Enterprise Linux 6 permite que o sistema gerencie o uso de memria de forma eficiente em diferentes cargas de trabalho de memria. Huge pages usa de forma dinmica as pginas de 2 MB comparado ao tamanho de pgina padro de 4 KB, permitindo aplicativos escalar bem a partir do processamento de gigabytes e at terabytes de memria. As pginas enormes (huge pages) so difceis de criar, gerenciar e utilizar manualmente. Para resolver este problema o Red Hat Enterprise 6 tambm apresenta o uso do transparent huge pages (T HP). O T HP gerencia automaticamente muitas das complexidades envolvidas no uso das pginas enormes. Para mais informaes sobre huge pages e T HP, consulte o Seo 5.2, Huge Pages e T ransparent Huge Pages. Melhorias do NUMA Muitos dos novos sistemas suportam agora Non-Uniform Memory Access (NUMA). NUMA simplifica o desenho e criao de hardware para sistemas de grande porte, no entanto, ele tambm adiciona uma camada de complexidade para o desenvolvimento de aplicativos. Por exemplo, NUMA implementa a memria local e remota, onde a memria remota pode levar muito mais tempo para acessar a memria local. Este recurso (entre outros) possuem muitas implicaes de desempenho que os sistemas operacionais de impacto, aplicativos e configuraes do sistema devem ser implantados. Red Hat Enterprise Linux 6 melhor otimizado para uso do NUMA, graas a vrios recursos adicionais que ajudam a gerenciar usurios e aplicaes em sistemas NUMA. Esses recursos incluem a afinidade da CPU, fixao de CPU (cpusets), numactl e grupos de controle, que permitem que um processo (afinidade) ou aplicao (fixao) para "conectar" a uma CPU especfica ou conjunto de processadores. Para mais informaes sobre o suporte do NUMA no Red Hat Enterprise Linux 6, consulte o Seo 4.1.1, CPU e a T opologia NUMA .

2.2. Ticket Spinlocks


Uma parte chave de qualquer design de sistema assegurar que um processo no altere a memria utilizada pelo outro processo. As mudanas de dados que no podem ser controladas em memria

20

Captulo 2. Recursos de D esempenho do Red Hat Enterprise Linux 6

podem resultar em danos de dados e travamento de sistema. Para evitar isto, o sistema operacional permite que um processo trave uma parte da memria, realize a operao e destrave ou "libere" a memria. Uma implementao comum de trava de memria atravs do spin locks, que permite que um processo continue verificando para ver se uma trava est disponvel e peg-la assim que estiver. Caso exista processos mltiplos competindo por uma mesma trava, a primeira requisio aps ter sido liberada ganha. Quando todos os processos possuirem o mesmo acesso memria, a situao ser "justa" e funcionar bem. Infelizmente, em um sistema NUMA, nem todos os processos tm igualdade de acesso aos bloqueios. Processos no mesmo n NUMA como o bloqueio, possuem uma vantagem injusta na obteno do bloqueio. Processos sobre ns NUMA remotos experimentam a falta de bloqueio e desempenho degradado. Para solucionar este problema, o Red Hat Enterprise Linux implementou o ticket spinlocks. Este recurso adiciona um mecanismo de fila de reserva trava, permitindo que todos os processos obtenham uma trava na ordem com a qual requisitarem -na. Isto elimina os problemas de tempo e vantagens injustas nas requisies de bloqueio. Embora o ticket spinlock possua mais cabealho do que um spinlock comum, ele escala melhor e prov melhor desempenho em sistemas NUMA.

2.3. Estrutura da Lista Dinmica


O sistema operacional requer um conjunto de informaes sobre cada processador do sistema. No Red Hat Enterprise Linux 5, este conjunto de informaes foi atribudo a uma matriz de tamanho fixo na memria. Informaes sobre cada processador individual foi obtido por indexao nessa matriz. Este mtodo rpido, fcil e simples para sistemas que continham relativamente poucos processadores. No entanto, como o nmero de processadores de um sistema cresce, este mtodo produz uma sobrecarga significativa. Como a matriz de tamanho fixo na memria um recurso nico, compartilhado, pode se afunilar medida que mais processadores tentam acess-lo ao mesmo tempo. Para resolver isso, o Red Hat Enterprise Linux 6 utiliza uma estrutura de lista dinmica para obter informaes do processador. Isso permite que a matriz utilizada para informaes sobre o processador seja alocada dinamicamente: se h apenas oito processadores no sistema, ento apenas oito entradas so criadas na lista. Se existirem processadores 2048, ento 2048 so criadas entradas bem. A estrutura de lista dinmica permite bloqueio mais refinado. Por exemplo, se a informao precisa ser atualizado ao mesmo tempo para os processadores de 6, 72, 183, 657, 931 e 1546, isso pode ser feito com maior paralelismo. Situaes como esta, obviamente, ocorrem com muito mais freqncia em sistemas de grande porte e de alto desempenho do que em sistemas pequenos.

2.4. Tickless Kernel


Em verses anteriores do Red Hat Enterprise Linux, o kernel utilizava um mecanismo baseado em tempo, que produzia continuamente uma interrupo de sistema. Durante cada interrupo, o sistema polled; ou seja, ele verificada para ver se havia algum trabalho a ser realizado. Dependendo da configurao, esta interrupo de sistema ou timer tick ocorria diversas vezes por segundo. Isto acontecia a cada segundo, sem considerar a carga de trabalho do sistema. Em um sistema carregado de forma leve, isto impacta o consumo de energia, prevenindo o processador de utilizar os estados de suspenso de forma efetiva. O sistema utiliza o mnimo de energia quando est no estado de suspenso.

21

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

A forma mais efetiva de um sistema operar funcionar o mais rpido possvel, v para o estado de suspenso mais profundo possvel, e deixe-o suspenso durante o mximo de tempo possvel. Para implementar isto, o Red Hat Enterprise Linux 6 utiliza um tickless kernel. Com isto, o relgio de interrupo foi removido do loop ocioso, transformando o Red Hat Enterprise Linux 6 em um ambiente liderado completamente pela interrupo. O kernel tickless permite que o sistema v para o estado de supenso profunda durante os horrios em que se encontra em estado ocioso, e responde prontamente quando h algum trabalho a ser realizado. Para maiores informaes consulte o Guia de Gerenciamento de Energia, available from http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

2.5. Grupos de Controle


Red Hat Enterprise Linux oferece muitas opes teis para ajuste do desempenho. Sistemas de grande porte, que escalam em centenas de processadores, podem ser ajustados para fornecer excelente desempenho. Mas ajuste desses sistemas requer considervel experincia e uma carga de trabalho bem definido. Quando grandes sistemas eram caros e poucos em nmero, era aceitvel dar-lhes um tratamento especial. Agora que esses sistemas so mainstream, so necessrios instrumentos mais eficazes. Para complicar ainda mais as coisas, os sistemas mais poderosos esto sendo usados agora para a consolidao de servio. As cargas de trabalho, que eram executadas em 4-8 servidores mais antigos so agora colocadas num nico servidor. E, como discutido anteriormente Seo 1.2.1, Computao Paralela, muitos sistemas de mdio alcance nos dias de hoje contm mais ncleos do que mquinas antigas de alto desempenho. Muitos aplicativos modernos so projetados para processamento paralelo, usando vrios segmentos ou processos para melhorar o desempenho. No entanto, alguns aplicativos podem fazer uso efetivo de mais de oito threads. Por isso, vrias aplicaes normalmente precisam ser instaladas em um sistema de 32 CPU para maximizar a capacidade. Considere a situao: pequenos sistemas convencionais de baixo custo j esto em paridade com o desempenho das mquinas antigas caras e de alto desempenho. Mquinas de alto desempenho mais baratas ofereceram aos arquitetos de sistemas a capacidade de consolidar mais servios em menos mquinas. No entanto, alguns recursos (tal como E/S e comunicao de rede) so compartilhadas e no crescem to rapidamente quanto a conta de CPU. Como tal, um sistema que acomoda aplicativos mltiplos podem experienciar desempenho geral degradado quando um aplicativo monopoliza demais um nico recurso. Para resolver isso, o Red Hat Enterprise Linux 6 suporta agora os grupos de controle (cgroups). Os Cgroups permitem que os administradores aloquem recursos para tarefas especficas conforme necessrio. Isto significa, por exemplo, ser capaz de alocar 80% dos quatro CPUs, 60GB de memria, e 40% de E/S de disco para um aplicativo de banco de dados. O aplicativo da Web em execuo no mesmo sistema pode ter recebido duas CPUs, 2GB de memria, e 50% da largura de banda de rede disponvel. Como resultado, o banco de dados e os aplictivos da Web fornecem bom desempenho, pois o sistema evita que ambos consumam recursos de sistema excessivamente. Alm disso, muitos aspectos do cgroups so auto-ajustveis,permitindo que o sistema responda de forma adequada mudanas na carga de trabalho.

22

Captulo 3. Monitorando e Analisando D esempenho de Sistema

Um cgroup possui dois componentes principais: Uma lista de tarefas atribudas ao cgroup Recursos alocados a estas tarefas As tarefas atribudas ao cgroup executam dentro do cgroup. Qualquer tarefa filho que eles gerem tambm executam dentro do cgroup. Isto permite que um administrador gerencie um aplicativo todo como uma unidade nica. Um administrador tambm pode configurar alocaes para os seguintes recursos: CPUsets Memria E/S Rede (largura de banda) Dentro das CPUsets, os cgroups permitem que administradores configurem o nmero de CPUs, afinidades para CPUs especficas ou ns [3] , e a quantia de tempo da CPU utilizada por um conjunto de tarefas. O uso dos cgroups para configurar o CPUsets crucial para garantir um desempenho bom geral, prevenindo um aplicativo de consumir recursos de forma excessiva no custo de outras tarefas enquanto garante simultaneamente que o aplicativo no falte durante o tempo de CPU. A largura de banda de E/S e largura de banda de rede so gerenciadas por outros controladores de recursos. Novamente, os controladores de recursos permitem que voc determine quanto de largura de banda as tarefas no cgroup podero consumir, e garantir que as tarefas no cgroup no consumam recursos excessivamente nem fique sem recursos. Os Cgroups permitem que os administradores definam e aloquem, em um alto nvel, os recursos de sistemas que diversos aplicativos precisam (e continuaro) a consumir. O sistema ento gerencia e balnceia automaticamente os diversos aplicativos, entregando um bom desempenho j esperado e otimizando o desempenho do sistema geral. Para mais informaes sobre como utilizar os grupos de controle, consulte o Guia de Gerenciamento de Recursos, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

2.6. Melhorias de Armazenamento de Sistema de Arquivo


O Red Hat Enterprise Linux 6 tambm apresenta diversas melhorias no gerenciamento do armazenamento e sistema de arquivo. Dois avanos entre os mais notveis nesta verso so o ext4 e suporte XFS. Para mais cobertura compreensiva das melhorias de desempenho relacionadas ao armazenamento e sistemas de arquivo, consulte o Captulo 7, Sistemas de Arquivos. Ext4 Ext4 o sistema de arquivos padro para o Red Hat Enterprise Linux 6. a quarta verso da gerao da famlia de sistema de arquivos EXT , apoiando um tamanho mximo terico do sistema de arquivos de 1 exabyte, e tamanho mximo de arquivo nico de 16T B. Red Hat Enterprise Linux 6 suporta um tamanho mximo de arquivo do sistema de 16T B, e um nico tamanho mximo de 16T B. Alm de uma capacidade de armazenamento muito maior, ext4 tambm inclui vrias novas funcionalidades, tais como: Metadados baseados em Extenso Alocao atrasada Dirio do check-summing Para mais informaes sobre o sistema de arquivo ext4, consulte o Seo 7.3.1, Sistema de Arquivo

23

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Ext4. XFS XFS um sistema de arquivo de 64 bits robusto e maduro que suporta arquivos grandes e sistemas de arquivos em um nico host. Este sistema de arquivos foi originalmente desenvolvido pela SGI, e tem uma histrico longo de execuo em servidores extremamente grandes e diretrizes de armazenamento. As caractersticas XFS incluem: Alocao atrasada Inodes alocados de forma dinmica ndice B-tree para escalabilidade de gerenciamento de espao livre. Defragmentao online e crescente sistema de arquivo Algortimos de leitura avanada de metadados sofisticados Embora o XFS escale para exabytes, o tamanho mximo de sistema de arquivo XFS suportado pela Red Hat de 100T B. Para mais informaes sobre o XFS, consulte o Seo 7.3.2, O Sistema de Arquivo XFS. Drives de Inicializao Grandes BIOS tradicional suporta um tamanho mximo do disco de 2.2T B. Os sistemas Red Hat Enterprise Linux 6 que utilizam o BIOS podem suportar discos maiores que 2.2T B usando uma nova estrutura de disco chamado Partition Table global(GPT ). GPT s pode ser utilizado para discos de dados, ele no pode ser utilizada em unidades de inicializao com o BIOS e, portanto, os discos de inicializao podem ser de tamanho mximo de 2.2T B. A BIOS foi criado originalmente para o IBM PC, enquanto BIOS evoluiu consideravelmente para se adaptar ao hardware moderno, o Unified Extensible Firmware Interface (UEFI) foi projetado para suportar hardwares novos e emergentes. O Red Hat Enterprise Linux 6 suporta o UEFI, que pode ser utilizado para substituir o BIOS (ainda suportado). Os sistemas que contm o UEFI e executam o Red Hat Enterprise Linux 6 permitem o uso do GPT e 2.2T B (e maiores) parties para ambas parties de inicializao e partio de dados.

Importante - UEFI para sistemas de 32 bits x86


Red Hat Enterprise Linux 6 no suporta o UEFI para sistemas 32-bit x86.

Importante - UEFI para AMD64 e Intel 64


Note que as configuraes de inicializao do UEFI e BIOS diferem de maneira significante uma da outra. Portanto, o sistema instalado deve inicializar usando o mesmo firmware que era usado durante a instalao. Voc no pode instalar o sistema operacional em um sistema que usa o BIOS e depois inicializar esta instalao em um sistema que usa o UEFI. O Red Hat Enterprise Linux 6 suporta a verso 2.2 das especificaes do UEFI. O Hardware que suporta a verso 2.3 das especificaes do UEFI ou mais recentes, devem inicializar e operar com o Red Hat Enterprise Linux 6, mas a funcionalidade adicional definida por estas especificaes mais recentes no estaro disponveis. As especificaes do UEFI esto disponveis em http://www.uefi.org/specs/agreement/.

24

Captulo 3. Monitorando e Analisando D esempenho de Sistema

[3] Um n g eralmente d efinid o c o mo um c o njunto d e CPUs o u nc leo s d entro d e um s o q uete.

25

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Captulo 3. Monitorando e Analisando Desempenho de Sistema


Este captulo introduz brevemente ferramentas que podem ser utilizadas para monitorar e analisar desempenho de sistema e aplicativo, e aponta situaes nas quais as ferramentas podem ser teis. Os dados coletados por cada ferramenta podem revelar funilamentos ou outros problemas de sistema que contribuem para um desempenho menos adequado.

3.1. O Sistema de Arquivos Proc


O proc "sistema de arquivos" um diretrio que contm uma hierarquia de arquivos que representam o estado atual do kernel do Linux. Ele permite que aplicativos e usurios acessem a visualizao do kernel do sistema. O proc diretrio tambm contm informaes sobre o hardware do sistema, e todos os processos em execuo. A maioria destes arquivos so somente leitura, mas alguns arquivos (principalmente aqueles em /proc/sys) podem ser manipulados por usurios e aplicaes para comunicar as alteraes de configurao com o kernel. Para maiores informaes sobre como visualizar e editar arquivos no diretrio proc , consulte o Deployment Guide, disponvel a partir do http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

3.2. GNOME e Monitores de Sistema KDE


Os ambientes de desktop do GNOME e KDE possuem ferramentas de grfico para assist-lo no monitoramento e modificao do comportamento de seu sistema. Monitor de Sistema GNOME O GNOME System Monitor exibe informaes de sistema bsicas e permite que voc monitore processos de sistema e uso de sistema de arquivo ou recurso. Abra-o com o comando gnom esystem -m onitor no T erminal, ou clique em menu de Applications e selecione System T ools > System Monitor . Monitor de Sistema GNOME possui quatro abas: Sistema Exibe informaes bsicas sobre o hardware e software do computador Processos Mostra processos ativos, e as relaes entre os processos, bem como informaes detalhadas sobre cada processo. Ele tambm permite que voc filtre os processos apresentados, e executar determinadas aes nesses processos (iniciar, parar, matar, alterar a prioridade, etc.) Recursos Exibe o uso de tempo de CPU atual, uso de memria e de espao swap e uso de rede. Sistema de Arquivo Lista todos os sistemas de arquivo montados junto com informaes bsicas sobre cada um, tal como tipo de sistema de arquivo, ponto de montagem e uso de memria.

26

Captulo 3. Monitorando e Analisando D esempenho de Sistema

Para mais informaes sobre o GNOME System Monitor ,consulte o menu Help no aplicativo ou no Deployment Guide, disponvel a partir de http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. Guarda de Sistema KDE O KDE System Guard permite que voc monitore a carga de sistema atual e processos que estejam em execuo. Ele tambm deixa-o realizar aes e processos. Abra-o com o comando ksysguard no T erminal,ou clique em Kickoff Application Launcher and select Applications > System > System Monitor . Existem duas abas em KDE System Guard : T abela de Processo Exibe uma lista de todos os processos em execuo, em ordem alfabtica por padro. Voc tambm pode classificar os processos por uma srie de outras propriedades, incluindo o uso total da CPU, uso da memria fsica ou compartilhado, proprietrio e prioridade. Voc tambm pode filtrar os resultados visveis, procurar processos especficos, ou realizar determinadas aes em um processo. Carga de Sistema Exibe grficos histricos de uso de CPU, memria e uso do espao de troca e uso da rede. Passe o mouse sobre os grficos para uma anlise detalhada e as chaves de grficos.

Para mais informaes sobre o KDE System Guard , consulte o menu Help no aplicativo.

3.3. Ferramentas de Monitoramento de Linha de Comando Embutida


Alm de ferramentas de monitoramento de grficos, Red Hat Enterprise Linux oferece diversas ferramentas que podem ser usados para monitorar um sistema a partir da linha de comando. A vantagem destes instrumentos que eles podem ser utilizadas fora do nvel de execuo 5. Esta seo descreve brevemente cada ferramenta, e sugere os fins para cada ferramenta. top A ferramenta top fornece uma viso dinmica em tempo real dos processos em um sistema em execuo. Ela pode exibir uma variedade de informaes, incluindo um resumo do sistema e as tarefas sendo gerenciadas pelo kernel do Linux. Ela tambm tem uma capacidade limitada para manipular processos. T anto a sua operao quanto as informaes que ela exibe so altamente configurveis e quaisquer detalhes de configurao podem ser feitos para persistir nas reiinicializaes. Por padro, os processos demonstrados so ordenados pela porcentagem do uso da CPU, fornecendo uma viso fcil dos processos que esto consumindo mais recursos. Para mais detalhes sobre como utilizar o top , consulte esta pgina man: m an top . ps A ferramenta ps tira um snapshot de um grupo seleto de processos ativos. Por padro, este grupo limitado a processos de usurios atuais e associados com o mesmo terminal. Ele pode fornecer mais informaes detalhadas sobre os processos alm do top , mas no dinmico.

27

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Para mais informaes detalhadas sobre como utilizar o ps, consulte a pgina man: m an ps. vm stat Os resultados do vmstat (Virtual Memory Statistics) reporta instantaneamente sobre os processos do seu sistema, memria e paginao, E/S de bloco e atividade de CPU. No entanto no dinmico como top , voc pode especificar um intervalo de amostra, o que o deixa observar atividade de sistema em tempo quase real. Para mais informaes detalhadas sobre como utilizar o vmstat , consulte a pgina man: m an vm stat. sar O sar (System Activity Reporter) coleta e reporta informaes sobre as atividades de sistema de hoje. O resultado padro cobre o uso da CPU de hoje em dez minutos de intervalo a partir do incio do dia:
12:00:01 12:10:01 12:20:01 12:30:01 ... AM AM AM AM CPU all all all %user 0.10 0.09 0.09 %nice 0.00 0.00 0.00 %system 0.15 0.13 0.14 %iowait 2.96 3.16 2.11 %steal 0.00 0.00 0.00 %idle 96.79 96.61 97.66

Esta ferramenta uma alternativa til para tentar criar formulrios peridicos em atividades de sistema atravs do top ou ferramentas semelhantes. Para mais informaes detalhadas sobre como utilizar o sar , consulte a pgina man: m an sar .

3.4. Tuned e ktune


T uned um daemon que monitora e coleta de dados no uso de diversos componentes de sistemas, e utiliza esta informao para ajustar a configurao do sistema de forma dinmica. Pode reagir a mudanas no uso da CPU e rede e ajustar configuraes para aprimorar desempenho em dispositivos ativos ou reduzir o consumo de energia em dispositivos inativos. Os parceiros acompanhantes ktune com a ferramenta tuned-adm para fornecer diversos perfis de ajuste que sejam pr-configurados para aprimorar o desempenho e reduzir o consumo de energia em diversos casos de uso especficos. Editar estes perfis ou criar novos perfis para criar solues de desempenho feitas especialmente para seu ambiente. Os perfis fornecidos como parte do tuned-adm incluem: default O perfil de economia de energia padro. Este o perfil de economia de energia mais bsico. Ele permite somente plugins de disco e CPU. Note que este no o mesmo que desligar o tuned-adm, onde ambos tuned e ktune esto desabilitados. latency-performance Um perfil de servidor para um ajuste de desempenho de latncia tpica. Ele desabilita os mecanismos de economia de energia do tuned e ktune . O modo cpuspeed muda para perform ance . O elevador de E/S foi modificado para deadline para cada dispositivo. para a qualidade do gerenciamento de energia do servio, o requerimento cpu_dm a_latencyde valor 0 registrado.

28

Captulo 3. Monitorando e Analisando D esempenho de Sistema

throughput-performance Um perfil de servidor para ajuste de desempenho de rendimento tpico. Este perfil recomendado se o sistema no tiver o armazenamento de classe corporativa. o mesmo que latency-perform ance , exceto: kernel.sched_min_granularity_ns (granularidade preempo mnima de agendador) ajustado para 10 milisegundos. kernel.sched_wakeup_granularity_ns (granularidade de ativao de agendador) ajustado para 15 milisegundos, vm.dirty_ratio (ndice de mquina virtual suja) definido para 40%, e transparent huge page so habilitadas. enterprise-storage Este perfil foi recomendado para configuraes de servidores de tamanho corporativo com armazenamento de classe corporativo, incluindo proteo e gerenciamento de cache de controlador com backup de bateria de um cache em disco. o mesmo que o perfil throughput-perform ance , com uma adio: sistemas de arquivo so re-montadas com o barrier=0 . virtual-guest Este perfil recomendado para configuraes de servidor de tamanho corporativo com armazenamento de classe corporativa, incluindo proteo e gerenciamento de cache de controlador com backup de bateria de um cache em disco. o mesmo que o perfil desem penho de rendim ento , exceto: O valor readahead ajustado para 4 x, e sistemas de arquivo no root/boot so montados com o barrier=0 . virtual-host Baseado no perfil enterprise-storage, o virtual-host tambm deminui a troca de memria virtual e habilita um write-back mais agressivo de pginas sujas. Este perfil est disponvel no Red Hat Enterprise Linux 6.3 e posteriores, e o perfil recomendado para os hosts de virtualizao, incluindo ambos KVM e hosts Red Hat Enterprise Virtualization.

Consulte o Red Hat Enterprise Linux 6 Power Management Guide, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/, para informaes futuras sobre tuned e ktune .

3.5. Perfis de Aplicativo


Profiling o processo de coleta de informaes sobre o comportamento de um programa que executado. Voc analisa um aplicativo para determinar quais reas de um programa podem ser otimizadas para aumentar a velocidade geral do programa, reduzir o uso de memria, etc. As ferramentas da criao de perfil do aplicativo ajudam a simplificar este processo. Existem trs ferramentas da criao de perfil suportadas para serem usadas com o Red Hat Enterprise Linux 6: SystemT ap , OProfile e Valgrind . Documentar essas ferramentas de perfil est fora do

29

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

escopo deste guia, no entanto, esta seo fornece links para mais informaes e uma breve descrio das tarefas para as quais cada criador de perfil adequado. 3.5.1. SystemT ap SystemT ap uma ferramenta de rastreamento e sondagem que permite aos usurios monitorar e analisar as atividades do sistema operacional (particularmente as atividades do kernel) em grande detalhe. Ele fornece informaes semelhantes sada de ferramentas como netstat , top , ps e iostat , mas inclui filtragem adicional e opes de anlise para as informaes que so coletadas. SystemT ap fornece uma anlise mais profunda, mais precisa de atividades do sistema e o comportamento do aplicativo para que voc possa identificar os afunilamentos do sistema e de aplicativos. O plugin da funo callgraph para o Eclipse usa SystemT ap como um back-end, permitindo-lhe controlar completamente o status de um programa, incluindo chamadas de funo, retorno, os horrios e as variveis de espao de usurio, e exibir as informaes visualmente para facilitar a otimizao. Para maiores informaes sobre o SystemT ap consulte o Guia de Iniciantes do SystemTap, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. 3.5.2. OProfile OProfile ( oprofile ) uma ferramenta de monitoramento de desempenho de todo o sistema. Ele usa hardware dedicado de monitoramento de desempenho do processador para obter informaes sobre o kernel e do sistema de arquivos executveis, como quando a memria referenciada, o nmero de pedidos do cache L2 e o nmero de interrupes de hardware recebido. T ambm pode ser utilizado para determinar a utilizao do processador, e as aplicaes e servios que so mais utilizadas. Oprofile tambm pode ser usado com o Eclipse via Oprofile Eclipse plug-in. Este plug-in permite aos usurios determinar facilmente as reas mais demoradas de seu cdigo, e executar todas as funes de linha de comando do OProfile com rica visualizao dos resultados. No entanto, os usurios devem estar cientes de diversas limitaes do OProfile: As amostras de controle de desempenho podem no ser precisas - porque o processador pode executar instrues fora de ordem, uma amostra pode ser gravada a partir de uma instruo prxima, ao invz da instruo que gerou a interrupo. Como o OProfile todo o sistema e espera que os processos iniciem e parem vrias vezes, amostras de vrias execues so autorizadas a acumular. Isso significa que voc pode precisar limpar os dados da amostra de execues anteriores. Ele se concentra na identificao de problemas com os processos de CPU-limitados e, portanto, no identifica os processos que esto inativos enquanto esperam em bloqueios para outros eventos. Para mais informaes sobre como utilizar o OProfile, consulte o Guia de Implementao, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/, ou a documentao oprofile em seu sistema, localizada em /usr/share/doc/oprofile-<version>. 3.5.3. Valgrind Valgrind fornece uma srie de ferramentas de deteco e perfil para ajudar a melhorar o desempenho e a correo de suas aplicaes. Essas ferramentas podem detectar memria e erros relacionados aos threads, bem como heaps, pilha e saturao de matrizes, o que lhe permite localizar e corrigir erros em seu cdigo de aplicao facilmente. Eles tambm podem criar perfis no cache, heaps, e ramo de previso para identificar os fatores que podem aumentar a velocidade de aplicao e minimizar o uso de memria do aplicativo.

30

Captulo 4. CPU

Valgrind analisa o pedido de execuo em uma CPU sinttico e instrumentar o cdigo do aplicativo existente como ele executado. Em seguida, imprime "comentrio" identificando claramente cada processo envolvido na execuo da aplicao de um descritor especificado pelo usurio, arquivo, ou tomada de rede. O nvel de instrumentao varia dependendo da ferramenta Valgrind em utilizao, e as suas configuraes, mas importante notar que a execuo do cdigo instrumentada pode levar 4-50 vezes maior do que a execuo normal. Valgrind pode ser usado em seu aplicativo como est, sem recompilao. No entanto, como o Valgrind utiliza informaes de depurao para identificar problemas em seu cdigo, se o seu aplicativo e bibliotecas de apoio no foram compilados com informaes de depurao ativada, recompilar para incluir esta informao altamente recomendado. Desde o Red Hat Enterprise Linux 6.4, o Valgrind integra com o gdb (GNU Project Debugger) para aprimorar eficincia de depurao. Mais informaes sobre o Valgrind esto disponveis em Guia do Desenvolvedor,disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/, ou utilizando o comando m an valgrind quando o pacote valgrind for instalado. Documentao extra pode tambm ser encontrada em: /usr/share/doc/valgrind-<version>/valgrind_m anual.pdf /usr/share/doc/valgrind-<version>/htm l/index.htm l Para informaoes sobre como o Valgrind pode ser utilizado para a memria do sistema, consulte o Seo 5.3, Utilizando o Valgrind para o Uso de Memria de Perfil . 3.5.4 . Perf O perf ferramenta fornece um nmero de contadores de desempenho teis que permitem ao usurio avaliar o impacto de outros comandos em seu sistema: perf stat Este comando fornece estatsticas globais para eventos de desempenho comuns, incluindo instrues executadas e ciclos de clock consumido. Voc pode usar os sinalizadores de opo para reunir estatsticas sobre outros do que os eventos de medio padro de eventos. A partir do Red Hat Enterprise Linux 6.4, possvel usar perf status para filtrar monitoramento baseado em um ou mais grupos de controle especificados (cgroups). Para mais informaes, leia a pgina man: hom em perf-stat . perf record T his command records performance data into a file which can be later analyzed using perf report. For further details, read the man page: m an perf-record . perf report T his command reads the performance data from a file and analyzes the recorded data. For further details, read the man page: m an perf-report. perf list T his command lists the events available on a particular machine. T hese events will vary based on the performance monitoring hardware and the software configuration of the system. For further information, read the man page: m an perf-list.

31

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

perf top T his command performs a similar function to the top tool. It generates and displays a performance counter profile in realtime. For further information, read the man page: m an perftop .

Mais informaes sobre o perf esto disponveis no Red Hat Enterprise Linux Developer Guide, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

3.6. Red Hat Enterprise MRG


Componente Realtime do Red Hat Enterprise MRG inclui T una , uma ferramenta que permite aos usurios ajustar os valores ajustveis de seus sistemas e ver os resultados dessas mudanas. Embora tenha sido desenvolvido para utilizao com o componente em tempo real, ele tambm pode ser usado para sintonizar sistemas padro do Red Hat Enterprise Linux. Com o T una, voc pode ajustar ou desabilitar atividades de sistemas desnecessrios, incluindo: Parmetros BIOS relacionados ao gerenciamento de energia, deteco de erros e interrupes de gerenciamento de sistema; configuraes de rede, tais como unio de interrupo e o uso do T CP; atividade de agendamento nos sistemas de arquivo de agendamento; autenticao de sistema; se a interrupo e processos de usurio so manuseados por uma CPU especfica ou uma classe de CPUs; se o espao swap utilizado; e como lidar com excees sem memria Para obter informaes conceituais mais detalhadas sobre o ajuste do Red Hat Enterprise MRG com a interface T una, consulte o "Sintonia Geral do Sistema" captulo do Guia de Ajuste Realtime. Para obter instrues detalhadas sobre como usar a interface T una, consulte o Guia do Usurio Tuna. Ambas as guias esto disponveis http://access.redhat.com/site/documentation/Red_Hat_Enterprise_MRG/.

32

Captulo 4. CPU

Captulo 4. CPU
O termo CPU, o que significa unidade central de processamento , um equvoco para a maioria dos sistemas, uma vez que centro implica nico, enquanto que a maioria dos sistemas modernos tm mais de uma unidade de processamento, ou o ncleo. Fisicamente, as CPUs esto contidas num pacote ligado a uma placa-me em um soquete. Cada soquete na placa-me tem vrias conexes:com outros soquetes da CPU, controladores de memria, controladores de interrupo e outros dispositivos perifricos. O soquete para o sistema operacional um agrupamento lgico de recursos de CPUs e associados. Este conceito central para a maioria das nossas discusses sobre o ajuste da CPU. O Red Hat Enterprise Linux mantm uma riqueza de estatsticas sobre os eventos de CPU do sistema, estas estatsticas so teis no planejamento de uma estratgia de ajuste para melhorar o desempenho da CPU. Seo 4.1.2, Ajustando Desempenho de CPU discute algumas das estatsticas mais teis, onde encontr-las, e como analis-las para ajuste de desempenho.

Topologia
Computadores mais antigos tinham relativamente poucas CPUs por sistema, o que permitia uma arquitetura conhecida como Symmetric Multi-Processor (SMP). Isto significa que cada CPU no sistema semelhante (ou simtrico) tinha acesso memria disponvel. Nos ltimos anos, a contagem de CPU por soquete cresceu at ao ponto que a tentativa de dar acesso a toda a memria RAM simtrica no sistema tornou-se muito dispendiosa. Mais elevados sistemas de contagem de CPU estes dias possuem uma arquitetura conhecida como Non-Uniform Memory Access (NUMA) ao invs de SMP. Os processadores AMD tinham este tipo de arquitetura durante algum tempo com suas interconexes Hyper Transport (HT ), enquanto a Intel comeou a implementar NUMA em suas criaes de Interconexo de Caminho Rpida (QPI). O NUMA e SMP so ajustados de forma diferente, pois voc precisa levar em conta a topologia do sistema ao alocar recursos para um aplicativo.

Threads
Dentro do sistema operacional Linux, a unidade de execuo conhecida como um thread . T hreads tem um contexto de registro, uma pilha e um segmento de cdigo executvel, o qual eles executam em uma CPU. o trabalho do sistema operacional (OS) de agendar esses tpicos sobre as CPUs disponveis. O OS maximiza a utilizao da CPU de balanceamento de carga dos threads por ncleos disponveis. Uma vez que o sistema operacional principalmente preocupado com a manuteno de CPUs ocupados, ele pode no tomar decises adequadas com relao ao desempenho do aplicativo. Mover um segmento do aplicativo para a CPU em outro soquete pode piorar o desempenho mais do que simplesmente esperar a CPU atual se tornar disponvel, uma vez que as operaes de acesso memria podem diminuir drasticamente atravs de sockets. Para aplicaes de alto desempenho, geralmente melhor o designer determinar onde os tpicos devem ser colocados. O Seo 4.2, Agendamento da CPU discute a melhor forma de alocar a CPU e memria para melhor executar threads da aplicao.

Interrupes
Um dos eventos de sistema menos bvios (mas importante) que podem afetar o desempenho do aplicativo a interrupo (tambm conhecida como IRQs em Linux). Estes eventos so tratados pelo sistema operacional, e so utilizados pelos perifricos para sinalizar a chegada de dados ou a concluso de uma operao, como a gravao de rede ou um evento timer. A maneira pela qual o sistema operacional ou processador que est executando o cdigo do aplicativo

33

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

lida com uma interrupo no afeta a funcionalidade do aplicativo. No entanto, pode afetar o desempenho da aplicao. Este captulo tambm discute dicas sobre preveno de interrupes que impactam negativamente o desempenho do aplicativo.

4.1. Topologia da CPU


4 .1.1. CPU e a T opologia NUMA Os primeiros processadores de computador foram uniprocessadores , o que significa que o sistema tinha uma nica CPU. A iluso de executar processos em paralelo foi feita pelo sistema operacional mudando rapidamente o nico CPU de um thread de execuo (processo) para outro. Na procura de aumentar o desempenho do sistema, os criadores notaram que o aumento da taxa de relgio para executar instrues mais rpido funcionava apenas at um ponto (geralmente as limitaes ao criar uma forma de onda de relgio estvel com a tecnologia actual). Em um esforo para obter um desempenho mais geral do sistema, os criadores acrescentaram outra CPU para o sistema, permitindo duas correntes paralelas de execuo. Esta tendncia de adicionar processadores tem continuado ao longo do tempo. Sistemas multiprocessadores mais antigos foram projetados de modo que cada CPU tinha o mesmo caminho lgico para cada local de memria (geralmente um barramento paralelo). Isto deixa cada CPU acessar qualquer local de memria na mesma quantidade de tempo, como qualquer outra CPU no sistema. Esse tipo de arquitetura conhecida como um sistema multi-processador (SMP) simtrico. SMP bom para algumas CPUs, mas uma vez que a contagem de CPU fica acima de um certo ponto (8 ou 16), o nmero de rastreamentos paralelos necessrios para permitir a igualdade de acesso memria, usa muito do estado real da placa disponvel, deixando menos espao para perifricos. Dois novos conceitos combinados para permitir um nmero maior de CPUs em um sistema: 1. Barramentos em srie 2. T opologias NUMA Um barramento de srie um caminho de comunicao de um nico fio com uma taxa muito elevada de relgio, que transfere dados como intermitncias em pacotes. Criadores de hardware comearam a usar barramentos seriais como interconexes de alta velocidade entre as CPUs, e entre os processadores e controladores de memria e outros perifricos. Isto significa que, em vez de exigir entre 32 e 64 rastreamentos na placa de cada CPU para o subsistema de memria, agora existe um rastreamento, reduzindo substancialmente a quantidade de espao necessria na placa. Ao mesmo tempo, os criadores de hardware empacotavam mais transistores no mesmo espao reduzindo tamanhos de matrizes. Em vez de colocar CPUs individuais diretamente na placa principal, eles comearam a empacot-las em um pacote de processador como processadores multi-core. Ento, em vez de tentar proporcionar igualdade de acesso memria de cada pacote do processador, os criadores recorreram a estratgia de acesso de memria no-uniforme (NUMA), onde cada combinao de pacote / socket possui um ou mais rea de memria dedicada para acesso de alta velocidade. Cada socket tambm possui uma interconexo com outras bases de acesso mais lento memria dos outros sockets. Como um exemplo simples do NUMA, suponha que temos uma placa-me de dois soquetes, onde cada soquete foi preenchido com um pacote de quad-core. Isso significa que o nmero total de processadores no sistema de oito; quatro em cada tomada. Cada tomada tambm tem um banco de memria anexado a quatro gigabytes de RAM, para uma memria total do sistema de oito gigabytes. Como propsito deste exemplo, processadores 0-3 esto em soquete 0, e as CPUs 4-7 esto no socket 1. Cada socket neste exemplo tambm corresponde a um n NUMA.

34

Captulo 4. CPU

Pode levar trs ciclos de relgio para que a CPU 0 acesse a memria do banco 0: um ciclo para apresentar o endereo ao controlador de memria, um ciclo para configurar o acesso no local de memria, e um ciclo para ler ou gravar no local. No entanto, pode levar seis ciclos de relgio para a CPU 4 acessar a memria do mesmo local, pois como est em um soquete separado, ele deve passar por dois controladores de memria: o controlador de memria local no socket 1, e, em seguida, o controlador de memria remoto no soquete 0. Se a memria contestada naquele local (ou seja, se mais de uma CPU estiver tentando acessar o mesmo lugar ao mesmo tempo), controladores de memria precisaro arbitrar e serializar o acesso memria, por isso o acesso memria demorar mais tempo. Adicionando consistncia de cache (garantindo que caches da CPU locais contenham os mesmos dados para o mesmo local da memria) complica ainda mais o processo. Os processadores de alta tecnologia mais recentes, tanto da Intel (Xeon) quanto da AMD (Opteron), possuiem topologias NUMA. Os processadores AMD utilizam uma interconexo conhecida como HyperT ransport, ou HT , enquanto a Intel usa um chamado QuickPath Interconnect, ou QPI. As interconexes diferem na forma como se conectam fisicamente com outras interconexes, memria ou dispositivos perifricos, mas na verdade eles so a chave que permite o acesso transparente para um dispositivo conectado a partir de outro dispositivo conectado. Neste caso, o termo 'transparente' se refere ao facto de que no h nenhuma API de programao especial necessria para utilizar a interconexo, no a opo "sem custo". Como as arquiteturas de sistema so to diversas, impraticvel caracterizar especificamente a penalidade de desempenho imposto ao acessar a memria no-local. Podemos dizer que cada hop em uma interconexo impe pelo menos alguma perda de desempenho relativamente constante por hop, assim referenciando uma posio de memria que seja duas interconexes a partir da CPU atual, impe pelo menos 2N + tempo de ciclo de memria unidades para acessar tempo, onde N a penalidade por hop. Dada essa penalidade de desempenho, os aplicativos de desempenho sensveis devem evitar acessar regularmente a memria remota em um sistema de topologia NUMA. O aplicativo deve ser configurado para que ele permanea em um n privado e que aloque memria daquele n. Para fazer isto, existem algumas coisas que este aplicativo precisar saber: 1. Qual a topologia do sistema? 2. Onde o aplicativo est executando atualmente? 3. Onde est o banco de memria mais prximo? 4 .1.2. Ajustando Desempenho de CPU Leia esta seo para entender como ajustar para obter melhor desempenho de CPU, NUMA foi originalmente usado para conectar um nico processador com vrios bancos de memria. A medida que os fabricantes de CPU refinaram seus processos e os tamanhos de dados encolheram, mltiplos ncleos de CPU puderam ser includos em um pacote. Esses ncleos foram agrupados de modo que cada um deles tinha tempo de acesso igual a um banco de memria local, e o cache pde ser compartilhado entre os ncleos, no entanto, cada 'hop' em uma interligao entre o ncleo, memria, e cache envolve uma pequena perda de desempenho. O sistema de exemplo em Figura 4.1, Acesso Remoto e Local de Memria em topologia NUMA contm dois ns NUMA. Cada n tem quatro processadores, um banco de memria, e um controlador de memria. Qualquer CPU em um n tem acesso direto ao banco de memria nesse n. Seguindo as setas no n 1, os passos so como se segue: 1. Uma CPU (qualquer um dos 0-3) apresenta o endereo de memria para o controlador da memria local.

35

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

2. O controlador de memria define o acesso ao endereo de memria. 3. A CPU executa a leitura ou gravao de operaes naquele endereo de memria.

Figura 4 .1. Acesso Remoto e Local de Memria em topologia NUMA

No entanto, se uma CPU em um n precisa acessar o cdigo que reside no banco de memria de um n NUMA diferente, o caminho que deve tomar menos direto: 1. Uma CPU (qualquer um dos 0-3) apresenta o endereo de memria remota ao controlador da memria local. a. A requisio da CPU para o endereo de memria remota passado para um controlador de memria remota, local para o n que contm o endereo de memria. 2. O controlador de memria remota define o acesso ao endereo de memria remota. 3. A CPU executa a leitura ou gravao de operaes naquele endereo de memria remota. T oda ao precisa passar por vrios controladores de memria, para que o acesso possa demorar mais do que o dobro do tempo ao tentar acessar endereos de memria remota. A principal preocupao com o desempenho em um sistema de vrios ncleos , portanto, garantir que a informao viaje to eficientemente quanto possvel, atravs do mais curto, ou mais rpido, caminho. Para configurar um aplicativo para o melhor desempenho da CPU, voc precisa saber: a topologia do sistema (como os seus componentes esto conectados), o ncleo no qual o aplicativo executado, e

36

Captulo 4. CPU

a localizao do banco de memria mais prximo. O Red Hat Enterprise Linux 6 apresentado com uma srie de ferramentas para ajud-lo a encontrar essas informaes e ajustar o seu sistema de acordo com suas necessidades. As sees a seguir fornecem uma viso geral das ferramentas teis para ajuste do desempenho da CPU. 4 .1.2.1. Configurao, Afinidade da CPU com o taskset O taskset recupera e define a afinidade de CPU de um processo em execuo (por processo de ID). Ele tambm pode ser usado para iniciar um processo com uma determinada afinidade da CPU, que vincula o processo especificado uma CPU especificada ou conjunto de CPUs. No entanto, taskset no vai garantir a alocao de memria local. Se voc precisar dos benefcios de desempenho adicionais de alocao de memria local, recomendamos numactl sobre taskset , veja Seo 4.1.2.2, Controlling NUMA Policy with numactl para mais detalhes. A CPU afinidade representado como um bitmask. O bit de ordem mais baixa corresponde primeira CPU lgica, e o bit de ordem mais alta corresponde ltima CPU lgica. Estas mscaras so normalmente fornecidas em hexadecimal, assim o 0x00000001 representa o processador 0, e o 0x00000003 representa processadores 0 e 1. Para definir a afinidade da CPU de um processo em execuo, execute o seguinte comando, substituindo mask pela mscara do processador ou processadores que voc quer que o processo se vincule, e pid pelo ID do processo do processo cuja afinidade que voc deseja alterar.
# taskset -p mask pid

Para iniciar um processo com uma determinada afinidade, execute o seguinte comando, substituindo mask pela mscara do processador ou processadores que voc quer que o processo se vincule, e program pelo programa , opes e argumentos do programa que voc deseja executar.
# taskset mask -- program

Em vez de especificar os processadores como uma mscara de bits, voc tambm pode usar o -c opo para fornecer uma lista delimitada por vrgulas de processadores separados, ou uma variedade de processadores, assim:
# taskset -c 0,5,7-9 -- myprogram

Outras informaes sobre taskset est disponvel na pgina de man: hom em taskset . 4 .1.2.2. Controlling NUMA Policy with numactl num actl executa processos com um agendamento especfico ou poltica de colocao de memria. A poltica selecionado est definido para o processo e todos os seus filhos. num actl pode tambm definir uma poltica persistente de segmentos de memria compartilhada ou arquivos e definir a afinidade da CPU e afinidade de memria de um processo. Ele usa o / sys sistema de arquivos para determinar a topologia do sistema. O / sys sistema de arquivos contm informaes sobre como CPUs, memria e dispositivos perifricos so conectados via NUMA interconexes. Especificamente, o / sys / devices /system /cpu contm informaes sobre como CPUs de um sistema esto ligados um ao outro. O / sys / devices / system / node contm informaes sobre os ns NUMA no sistema, e as distncias relativas entre os ns. Num sistema NUMA, quanto maior a distncia entre um processador e um banco de memria, mais lento

37

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

o acesso do processador para que banco de memria. Aplicaes sensveis ao desempenho deve ser configurado de forma que eles alocar memria o mais prximo possvel do banco de memria. Desempenho aplicaes sensveis devem tambm ser configurado para executar em um determinado nmero de ncleos, particularmente no caso de aplicaes multi-threaded. Porque caches de primeiro nvel so geralmente pequenas, se vrios segmentos executar em um ncleo, cada segmento potencialmente expulsar os dados em cache acessados por um fio anterior. Quando o sistema operacional tenta multitarefa entre estes tpicos, e os fios continuam a despejar uns dos outros dados em cache, uma grande porcentagem de seu tempo de execuo gasto em substituio linha de cache. Este problema conhecido como cache de goleada . Portanto, recomenda-se ligar uma aplicao multithreaded para um n ao invs de um nico ncleo, uma vez que este permite que os fios para compartilhar linhas de cache em vrios nveis (cache de primeira,, segunda e ltimo nvel) e minimiza a necessidade de armazenar em cache encher operaes. No entanto, a ligao de um aplicativo para um nico ncleo pode ser performance se os tpicos esto acessando os mesmos dados em cache. numactl permite vincular um aplicativo para um ncleo especfico ou n NUMA, e alocar a memria associada a um ncleo ou conjunto de ncleos para esse aplicativo. Algumas opes teis fornecidas pelos numactl so: --show Mostrar as definies de poltica NUMA do processo atual. Este parmetro no necessita de outros parmetros, e pode ser usado assim: num actl - espetculo . --hardware Exibe um inventrio de ns disponveis no sistema --membind Somente alocar memria dos ns especificados. Quando esta estiver em uso, a alocao falhar se a memria nesses ns insuficiente. Uso para este parmetro num actl m em bind = ns programa , onde ns a lista de ns que voc quer para alocar memria e programa o programa cujos requisitos de memria deve ser alocado a partir desse n. Nmeros n pode ser dada como uma lista delimitado por vrgulas, um intervalo, ou uma combinao dos dois. Mais detalhes esto disponveis no numactl pgina man: hom em num actl . --cpunodebind S executar um comando (e seus processos filhos) em CPUs que pertencem ao n especificado (s). Uso para este parmetro num actl - cpunodebind = ns programa , onde ns a lista de ns a cuja CPUs o programa especificado ( programa ) deve estar vinculado. Nmeros n pode ser dada como uma lista delimitado por vrgulas, um intervalo, ou uma combinao dos dois. Mais detalhes esto disponveis no numactl pgina man: m an num actl . --physcpubind Somente execute um comando (e seus processos filho) em CPUs especificadas. O uso para este parmetro num actl --physcpubind= cpu program, onde cpu uma lista separada por vrgulas de nmeros de CPU fsicos como exibido nos campos do processador do/proc/cpuinfo , e program o programaque deve executar somente naqueles CPUs. Os CPUs podem tambm ser especificados dependendo do cpuset atual. Consulte a pgina man do numactl para obter mais informaes: m an num actl .

38

Captulo 4. CPU

--localalloc Especifica se a memria deve sempre ser alocada no n atual. --preferred Sempre que possvel, a memria alocada no n especificado. Se a memria no pode ser alocada no n especificado, cair de volta para os outros ns. Esta opo tem apenas um nico nmero de n, assim: num actl - preferred = n . Consulte a pgina man numactl para mais informaes: hom em num actl .

O libnuma biblioteca includa no numactl pacote oferece uma interface de programao simples para a poltica NUMA suportado pelo kernel. til para mais ajuste refinado do que o numactl utilidade. Mais informaes esto disponveis na pgina do homem: o homem NUMA (3) . 4 .1.3. numastat

Importante
Anteriormente, a ferramenta numastat era um script do Perl escrito por Andi Kleen. Ele foi reescrito de forma significante para o Red Hat Enterprise Linux 6.4. Embora o comando padro (num astat, sem nenhuma opo ou parmetro) mantm a compatibilidade severa com as verses anteriores da ferramenta, note que as opes ou parmetros fornecidos este comando, muda significantemente o contedo de resultado e seu formato. O numastat exibe a estatstica de memria (tal como as alocaes de acertos e erros) para processos e o sistema operacional baseado em n de NUMA. Por padro, executar o num astat exibe como muitas pginas de memria esto ocupadas pelas seguintes categorias de evento para cada n. O desempenho da CPU adequado indicado por baixo num a_m iss e valores num a_foreign . Esta verso atualizada do numastat tambm mostra se a memria do processo distribuida em um sistema ou centralizada em ns especficos utilizando o numactl. O resultado de referncia cruzada donumastat com o resultado top por CPU, para verificar se os threads do processo esto executando no mesmos ns para o qual a memria foi alocada. Categorias de Rastreamento Padro numa_hit O nmero de tentativas de alocaes neste ns que foram bem sucedidas. numa_miss O nmero de tentativas de alocaes em outro n que foram alocadas neste n porcausa da baixa memria no n pretendido. Cada evento num a_m iss possui um evento num a_foreign correspondente em outro n. numa_foreign O nmero de alocaes pretendidas inicialmente para este n que foram alocadas outro n.

39

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Cada evento num a_foreign possui um evento num a_m iss correspondente em outro n. interleave_hit O nmero de tentativas de alocaes de polticas de intercalao neste n que foram bem sucedidas. local_node O nmero de vezes que um processo neste n alocou memria com sucesso neste n. other_node O nmero de vezes que um processo em outro n alocou memria neste n.

Fornecer qualquer outra mudana muda as unidades exibidas em megabytes de memria (arredondadas para dois decimais) e modifica outros comportamentos especficos do numastat como descrito abaixo. -c Horizontalmente condensa a tabela da informao exibida. Isso til em sistemas com um elevado nmero de ns NUMA, mas a largura da coluna e do espaamento entre colunas so um tanto imprevisveis. Quando esta opo utilizada, a quantidade de memria arredondado para o prximo megabyte. -m Exibe as informaes de uso de memria em todo o sistema baseado por n, semelhante informao encontrada em /proc/m em info . -n Exibe a mesma informao que o comando original num astat (numa_hit, numa_miss, numa_foreign, interleave_hit, local_node, e other_node), com um formato atualizado, utilizando megabytes como unidade de medida. -p pattern Exibe informaes por n para o modelo especfico. Se o valor para o modelo composto de dgitos, o numastat entende que seja um identificador de processo numrico. Caso contrrio, o numastat procura por linhas de comando do processo para um modelo em especfico. Os argumentos de linha de comando inseridos aps o valor da opo -p devem ser modelos adicionais para o qual filtrar. Modelos adicionais expandem, ao em vez de estreitarem o filtro. -s Filtra os dados exibidos em ordem descendente para que os maiores consumidores de memria (de acordo com a coluna total ) so listados primeiro. Opcionalmente, voc pode especificar o node, e a tabela ser filtrada de acordo com a coluna do node.Ao utilizar esta opo, o valor do nodedeve seguir a opo -s imediatamente, como demonstrado aqui:

40

Captulo 4. CPU

numastat -s2

No inclui o espao em branco entre a opo e seu valor. -v Exibe mais informaes de verbosidade. De modo que as informaes do processo para processos mltiplos exibiro informaes detalhadas para cada processo. -V Exibe as informaes da verso numastat . -z Omite a faixa da tabela e colunas com valores zero de informaes exibidas. Note que alguns valores quase zero que so arredondados para zero para exibir propsitos, no sero omitidos do resultado exibido.

4 .1.4 . NUMA Daemon de Gerenciamento de Afinidade (numad) numad um daemon de gerenciamento de afinidade do NUMA automtico. Ele monitora a topologia do e uso de recursos dentro de um sistema para aprimorar a alocao e gerenciamento de recurso do NUMA de forma dinmica (e assim o desempenho do sistema). Dependendo da carga de trabalho do sistema, numad pode fornecer as melhorias de desempenho do parmetro de comparao do numad acessa informaes periodicamente a partir do sistema de arquivo do /proc para monitorar recursos de sistemas disponveis por n. O daemon ento tenta colocar processos significativos em ns do NUMA que possuam memria alinhada suficientes e recursos de CPU para o desempenho adequado do NUMA. Limites atuais para o gerenciamento do processo so de ao menos 50% de uma CPU e de ao menos 300 MB de memria. O numad tenta manter um nvel de uso de recurso e rebalancear alocaes quando necessrias, movendo processos entre ns de NUMA. O numad tambm fornece um servio de conselho de pr-colocao que pode ser pesquisado por diversos sistemas de gerenciamento de empregos para fornecer assistncia com a vinculao inicial de recursos da CPU e memria para seus processos. Este servio de conselho de pr-colocao est disponvel no importando se o numad est executando como um daemon em um sistema. Consulte as pginas man para detalhes futuros sobre a utilizao da opo -w para o aconselhamento de prcolocao: m an num ad . 4 .1.4 .1. Benefcios do numad O numad beneficia primeiramente os sistemas com processos de longa durao que consomem quantidades significativas de recursos, especialmente quando esses processos esto contidos em um subconjunto do total de recursos do sistema. numad tambm pode beneficiar aplicativos que consomem ns NUMA que valem os recursos. No entanto, os benefcios que o numad fornece, diminui a medida que a porcentagem de recursos consumidos em um sistema aumenta. improvvel que o numad melhore o desempenho quando os processos so executados por apenas alguns minutos, ou no consomem muitos recursos. Sistemas com padres contnuos imprevisveis memria de acesso, como grandes bancos de dados na memria, so tambm susceptveis de

41

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

beneficiar do uso do NUMAD . 4 .1.4 .2. Modos de operao

Nota
Estatsticas de contabilidade de memria do kernel podem se contradizer depois de grandes quantidades de fuso. Como tal, o NUMAD pode ser confuso quando o daemon KSM mescla grandes quantidades de memria. O daemon KSM ser mais focado em NUMA em verses futuras. No entanto, atualmente, se o seu sistema tem uma grande quantidade de memria livre, voc pode atingir um melhor desempenho, desligando e desabilitando o daemon KSM. numad pode ser utilizado de duas formas: como um servio como um executvel 4 .1.4 .2.1. Utilizando o numad como um servio Enquanto o servio numad executado, ele tentar ajustar de forma dinmica o sistema baseado em sua carga de trabalho. Para iniciar um servio, execute:
# service numad start

Para fazer com que o servio persista em reinicializaes, execute:


# chkconfig numad on

4 .1.4 .2.2. Usando o numadcomo um executvel Para usar o numad como um executvel, execute somente o:
# numad

numad ser executado at que seja interrompido. Enquanto estiver em execuo, suas atividades sero autenticadas em /var/log/num ad.log . Para restringir o gerenciamento do numad um processo especfico, inicie-o com as seguintes opes.
# numad -S 0 -p pid

-p pid Adiciona o pid especificado uma lista de incluso explcita. O processo especificado no ser gerenciado at que ele atenda ao limite de significncia do processo do numad . -S mode O parmetro do -S especifica o tipo de escaneamento do processo. Configur-lo para 0 como demonstrado, limita o gerenciamento do numad para processos explicitamente includos.

42

Captulo 4. CPU

Para interromper o numad , execute:


# numad -i 0

Interromper o numad no remove as mudanas que fez para aprimorar a afinidade do NUMA. Se o sistema utilizar mudanas de forma significativa, a execuo do numad novamente ir ajustar a afinidade para aprimorar o desempenho sob as novas condies. Para informaes futuras sobre as opes do numad disponveis, consulte a pgina man numad : m an num ad .

4.2. Agendamento da CPU


O agendador responsvel em manter as CPUs ocupadas no sistema. O agendador do Linux implementa um nmero de polticas de agendamento, que determina quando e por quanto tempo uma thread foi executada em um ncleo da CPU em especfico. As polticas de agendamento so divididas em duas categorias principais: 1. Polticas em T empo Real (Realtime) SCHED_FIFO SCHED_RR 2. Polticas Normais SCHED_OT HER SCHED_BAT CH SCHED_IDLE 4 .2.1. Polticas de agendamento em T empo Real (Realtime) As threads em tempo real so agendadas primeiro, e threads normais so agendadas depois que todas as threads em tempo real serem agendadas. As polticas tempo real so utilizadas para tarefas de horrio crtico que devem ser concludas sem interrupes. SCHED_FIFO Esta poltica tambm mencionada como agendamento de prioridade esttica, pois ela define uma prioridade fixa (entre 1 e 99) para cada thread. O agendador copia uma lista de threads SCHED_FIFO para o thread de maior prioridade que esteja pronto para ser executado. Esta thread executada at que seja bloqueada, ou tenha admitido preempo por um thread de prioridade maior que esteja pronto para ser executado. At mesmo a thread em tempo real com a prioridade mais baixa ser agendada antes do que qualquer thread com uma poltica no-tempo real; Se somente existir threads em tempo real, o valor de prioridade SCHED_FIFO no importar. SCHED_RR Uma variante de repetio alternada (round-robin) da poltica SCHED_FIFO . As threads do SCHED_RR tambm recebem uma prioridade fixa entre 1 e 99. No entanto, as threads com a mesma prioridade so agendadas em estilo repetio alternada dentro de um certo quantum, ou frao de tempo. A chamada do sistema sched_rr_get_interval(2) retorna o valor de frao de tempo, mas a durao da frao de tempo no pode ser estabelecida por um

43

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

usurio. Esta poltica til se voc precisa executar threads mltiplas na mesma prioridade.

Para mais informaes detalhadas sobre a semntica definida das polticas de agendamento em tempo real, consulte o IEEE 1003.1 POSIX standard Sob Interfaces de Sistema Realtime, a qual est disponvel em http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html. A melhor forma de definir a prioridade de threads comear com uma prioridade baixa e aumentar quando uma latncia legitima for identificada. As threads Realtime threads nopossuem o tempo fraccionado como threads normais; As threads SCHED_FIFO funcionam at que sejam bloqueadas, retiradas ou pr-esvaziadas por uma thread com uma prioridade maior. Configurar uma prioridade de 99 portanto desencorajado, pois isto colocaria seus processos no mesmo nvel de prioridade que a thread de migrao e as threads watchdog. Se estas threads forem bloqueadas porque sua thread entrou no loop computacional, estes no sero executados. Os sistemas de uniprocessador ser bloqueado neste caso. No kernel do Linux, a poltica SCHED_FIFO inclui o mecanismo do pacote de largura de banda. Isto projeta programadores de aplicativos de realtime de tarefas realtime que podem monopolizar a CPU. Este mecanismo pode ser ajustado atravs dos seguintes parmetros de sistema de arquivo /proc : /proc/sys/kernel/sched_rt_period_us Define o perodo de tempo a ser considerado cem porcento da largura de banda de CPU, em microsegundos ('us' sendo o texto simples mais prximo de 's'). O valor paro de 1000000s, ou 1 segundo. /proc/sys/kernel/sched_rt_runtim e_us Define o perodo de tempo a ser devotado a threads de realtime em execuo, em microsegundos ('us' sendo o texto simples mais prximo de 's'). O valor paro de 950000s, ou 0.95 segundos.

4 .2.2. Polticas de agendamento normal Existem trs polticas de agendamento normais: SCHED_OT HER , SCHED_BAT CH e SCHED_IDLE . No entanto, as polticas SCHED_BAT CH e SCHED_IDLE pretendem ser direcionadas para trabalhos com baixa prioridade, e como tal, so de interesse limitado em um guia de ajuste de desempenho. SCHED_OT HER , ou SCHED_NORMAL A poltica de agendamento padro. Esta polcia utiliza o Agendador T otalmente Justo (Completely Fair Scheduler - CFS) para fornecer perodos de acesso justos para todas as threads utilizando esta poltica. Os CFS estabelecem uma lista de prioridades dinmicas baseadas em partes no valor niceness de cada thread do processo. (Consulte o Guia de Implementao para mais detalhes sobre este parmetro e o sistema de arquivo /proc .) Isto fornece aos usurios um nvel indireto de controle sob a prioridade de processo, mas a lista de prioridade dinmica pode somente ser modificada diretamente pelo CFS.

4 .2.3. Seleo da poltica Selecionar a poltica do agendador correta para threads de uma aplicao nem sempre uma tarefa simples. Em geral, as polticas em tempo real deve ser usada para o tempo de tarefas crticas ou importantes que tm de ser agendados de forma rpida e no serem executados por perodos de

44

Captulo 4. CPU

tempo prolongados. Polticas normais geralmente trazem melhores resultados do que as polticas de transferncia de dados em tempo real porque eles permitem que o agendador execute segmentos de forma mais eficiente (ou seja, eles no precisam reagendar para a preempo como sempre). Se voc estiver gerenciando um grande nmero de threads e estiver preocupado principalmente com o rendimento de dados (os pacotes de rede por segundo, gravaes de disco, etc) ento utilize o SCHED_OT HER e deixe o sistema gerenciar o uso da CPU para voc. Se voc estiver preocupado com o tempo de resposta do evento (latncia), use o SCHED_FIFO . Caso voc tenha um nmero de threads pequeno, considere isolar um soquete de CPU e mover suas threads para aqueles ncleos de soquete, assim no existiro outras threads competindo por tempo nos ncleos.

4.3. Interrupes e Ajuste de IRQ


Uma requisio de interrupo (IRQ) uma requisio para servio, enviada em nvel de hardware. Interrupes podem ser enviadas por linhas de hardware dedicadas ou atravs de um bus de hardware como um pacote de informaes(um Message Signaled Interrupt, ou MSI). Quando as interrupes so habilitadas, o recebimento de um IRQ solicita uma troca para contexto de interrupo. O cdigo de expedio de interrupes do Kernel recupera o nmero do IRQ e sua lista de associados de Rotinas de Servio de Interrupao (ISRs) registradas, e chama cada ISR. O ISR consciente das interrues e ignora interrupes redundantes do mesmo IRQ, depois enfileira um manuseador deferido para terminar o processamento de interrupes e evitar que o ISR ignore interrupes futuras. O arquivo /proc/interrupts relaciona o nmero de interrupes por CPU por dispositivo de E/S. Ele exibe o nmero de IRQ, o nmero daquela interrupo manipulada por cada ncleo da CPU, o tipo de interrupo, e uma lista delimitada por vrgulas de motoristas que esto registrados para receber essa interrupo. (Consulte a pgina de manual proc (5) para mais detalhes: m an 5 proc ) Os IRQs possuem uma propriedade de "afinidade" associada, smp_affinity, que define os ncleos da CPU que podem executar o ISR para aquele IRQ. Esta propriedade pode ser usada para aprimorar o desempenho de aplicativo atribuindo a afinidade de interrupo e a afinidade do thread do aplicativo para um ou mais ncleos especficos. Isto permite o compartilhamento da linha do cache entre interrupes especificadas e threads de aplicativo. O valor da afinidade de interrupo para um nmero do IRQ especfico armazenado no arquivo associado /proc/irq/IRQ_NUMBER/sm p_affinity, que pode ser visualizado e modificado pelo usurio root. O valor armazenado neste arquivo um bit-mask hexadecimal representando todos os ncleos da CPU no sistema. Por exemplo, para configurar a afinidade de interrupo para o driver Ethernet em um servidor com quatro ncleos CPU, determine primeiro o nmero IRQ associado ao driver Ethernet:
# grep eth0 /proc/interrupts 32: 0 140 45

850264

PCI-MSI-edge

eth0

Use o nmero IRQ para localizar o arquivo smp_affinity apropriado:


# cat /proc/irq/32/smp_affinity f

O valor padro para o smp_affinity f , ou seja, o IRQ pode ser atentido em qualquer CPU no sistema.

45

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Configurar este valor para 1 , como se segue, significa que somente a CPU 0 pode atender esta interrupo:
# echo 1 >/proc/irq/32/smp_affinity # cat /proc/irq/32/smp_affinity 1

Vrgulas podem ser utilizadas para delimitar valores smp_affinity para grupos discretos de 32 bits. Isto necessrio em sistemas com mais do que 32 ncleos. Por exemplo, o seguinte exemplo demonstra que o IRQ 40 atendido em todos os ncleos de um sistema de ncleo de 64:
# cat /proc/irq/40/smp_affinity ffffffff,ffffffff

Para atender ao IRQ 40 somente acima de 32 ncleos de um sistema de ncleo 64, voc deve fazer o seguinte:
# echo 0xffffffff,00000000 > /proc/irq/40/smp_affinity # cat /proc/irq/40/smp_affinity ffffffff,00000000

Nota
Nos sistemas que suportam direcionamento de interrupo, modificar o smp_affinity de um IRQ define o hardware para que a deciso de atenter uma interruo com uma CPU especfica seja feita em nvel de hardware, sem interveno do kernel.

4.4. Melhorias do NUMA no Red Hat Enterprise Linux 6


O Red Hat Enterprise Linux 6 inclui uma srie de melhorias para aproveitar todo o potencial de hardware altamente escalvel de hoje. Esta seo d uma viso geral de alto nvel das mais importantes melhorias de desempenho relacionados ao NUMA, fornecidos pela Red Hat Enterprise Linux 6. 4 .4 .1. Bare-metal e Otimizaes de Escalabilidade 4 .4 .1.1. Melhorias no aviso sobre a topologia As seguintes melhorias permitem que o Red Hat Enterprise Linux detecte hardware de baixo nvel e detalhes de arquiteturas, aprimorando sua habilidade para otimizar automaticamente o processamento em seu sistema. deteco de topologia aprimorada Isto permite que o sistema operacional detecte os detalhes do hardware de baixo nvel (tais como CPUs lgicas, threads hiper, ncleos, sockets, ns de NUMA e tempos de acesso entre ns) durante a inicializao, e otimizar o processamento em seu sistema. agendador totalmente justo Este novo modo de agendamento assegura que o tempo de execuo seja compartilhado entre os processos elegveis. Combinado a isto, a deteco da topologia permite os processos serem agendados nas CPUs dentro do mesmo soquete para evitar a necessidade por acesso

46

Captulo 5. Memria

de memria remota cara, e assegurar que o contedo do cache est preservado onde for possvel. m alloc m alloc agora otimizado para assegurar que as regies da memria que esto alocadas a um processo estejam o mais prximas fisicamente o possvel do ncleo no qual o processo est sendo executado. Isto aumenta a velocidade do acesso de memria. Alocao de buffer de E/S do skbuff Da mesma forma que o m alloc , isto agora otimiza o uso de memria que esteja fisicamente prxima da CPU manuseando as operaes de E/S como interrupes de dispositivo. afinidade de interrupto de dispositivo Informaes gravadas pelos drivers de dispositivo sobre o qual a CPU manuseia quais interrupes podem ser usadas para restringir manuseio de interrupo em CPUs dentro do mesmo soquete fsico, preservando afinidade de cache e limitando comunicao de soquete cruzado de alto volume.

4 .4 .1.2. Melhorias em Sincronizao de Multi-processador Coordenar as tarefas entre processadores mltiplos requer operaes de consomem tempo frequentes para garantir que os processos que esto executando em paralelo no comprometam a integridade de dados. O Red Hat Enterprise Linux inclui as seguintes melhorias para aprimorar desempenho nesta rea: Bloqueios de Read-Copy-Update (RCU) Geralmente, 90% dos bloqueios so adquiridos somente para leitura. O bloqueio de RCU remove a necessidade de obter bloqueio de acesso exclusivo quando os dados que estiverem sendo acessados no sejam sendo modificados. Este modo de bloqueio agora usado em alocao de memria de cache de pgina: bloqueio agora usado somente para operaes de alocao e desalocao. algortimos per-CPU e per-socket Muitos algoritmos foram atualizados para realizar a coordenao de bloqueio entre CPUs cooperando na mesma soquete para permitir mais bloqueio refinado. Diversos spinlocks globais foram substitudos por mtodos de bloqueio per-socket e zonas de alocador de memria atualizadas e listas de pginas de memrias relacionadas permietem alocao lgica para atravessar um subconjunto mais eficiente das estruturas de dados de mapeamento de memria ao executar operaes de alocao ou desalocao.

4 .4 .2. Otimizaoes de Virtualizao Como o KVM utiliza a funcionalidade do kernel, os convidados virtualizados baseados em KVM se beneficiam imediatamente de todas as otimizaes bare-metal. O Red Hat Enterprise Linux tambm inclui uma srie de melhorias para permitir que os convidados virtualizados se aproximem do nvel de desempenho de um sistema bare-metal. Essas melhorias se concentram no caminho de E/S no armazenamento e acesso rede, permitindo que as cargas de trabalho, mesmo intensivas, tais como banco de dados e arquivo de servio, faam uso da implantao virtualizada. Melhorias especficas ao

47

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

NUMA que melhoram o desempenho dos sistemas virtualizados incluem: Fixao de CPU Convidados virtuais podem ser vinculados para executar em um soquete especfico para otimizar o uso do cache local e remover a necessidade de comunicaes inter-soquete caras e acesso de memria remota. transparent hugepages (T HP) Com o T HP habilitado, o sistema realiza automaticamente as requisies de alocao de memria do NUMA para quantias contnuas grandes de memria, reduzindo a conteno de bloqueio e o nmero de operaes de gerenciamento de memria do translation lookaside buffer (T LB) necessrias e gerando um crescente desempenho de at 20% em convidados virtuais. Implementao de E/S baseado no kernel O subsistema de E/S de convidado virtual foi implementado no kernel, reduzindo imensamente o custo de comunicao entre-n e acesso de memria, evitando uma alta quantia de mudana de contexto e sobrecarga de sincronizao e comunicao.

48

Captulo 5. Memria

Captulo 5. Memria
Leia este captulo para obter uma viso geral dos recursos de gerenciamento de memria disponveis no Red Hat Enterprise Linux, e como utilizar estes recursos de gerenciamento para otimizar o uso de memria em seu sistema.

5.1. Buffer de Converso Enorme parte (Huge TLB)


Endereos de memria fsica so traduzidos para endereos de memria virtual como parte do gerenciamento de memria. A relao mapeada de endereos virtuais para fsicas armazenada numa estrutura de dados conhecida como a tabela de pgina. Como a leitura da tabela de pginas para cada endereo de mapeamento seria demorado e recursos caros, h um cache para os endereos usados recentemente. Esse cache chamada de Buffer de Converso parte (T LB). No entanto, a T LB s pode armazenar em cache tantos mapeamentos de endereo. Se um mapeamento de endereo solicitado no est na T LB, a tabela de pginas ainda deve ser lida para determinar o fsico para o mapeamento de endereo virtual. Isto conhecido como um "T LB miss". Aplicativos com grandes requerimentos de memria so mais propensos a ser afetados por falhas de T LB do que aplicativos com requerimento mnimo de memria, por causa da relao entre os seus requerimentos de memria e o tamanho das pginas usadas para mapeamentos de endereo de cache na T LB. Uma vez que cada falta envolve leitura da tabela de pgina, importante para evitar a falha destes sempre que possvel. O Buffer Enorme de Converso parte (Huge T LB) permite que a memria seja gerenciada em grandes segmentos para que mais mapeamentos de endereos possam ficar em cache de uma s vez. Isto reduz a probabilidade das falhas de T LB, o que por sua vez aprimora o desempenho em aplicativos com grandes requerimentos de memria. Informaes sobre a configurao do HugeT LB pode ser encontrado na documentao do kernel: /usr/share/doc/kernel-doc-version/Docum entation/vm /hugetlbpage.txt

5.2. Huge Pages e Transparent Huge Pages


A memria gerenciada em blocos conhecidos como pages. Uma pgina tem 4096 bites. 1MB de memria igual a 256 pginas; 1 GB de memria igual a 256,000 pginas, etc. As CPUs possuem uma unidade de gerenciamento de memria que contm uma lista destas pginas, com cada pgina referenciada atravs de uma entrada de tabela de pgina. Existem duas formas de habilitar o sistema para gerenciar grandes quantias de memria: Aumente o nmero de entradas de tabela de pginana unidade de gerenciamento de memria de hardware Aumente o tamanho da pgina O primeiro mtodo caro, j que a unidade de gerenciamento de memria hardware de um processador moderno suporta apenas centenas ou milhares de entradas de tabela de pgina. Alm disso, o hardware e os algoritmos de gerenciamento de memria que funcionam bem com milhares de pginas (megabytes de memria) podem ter dificuldade para realizar bem com milhes (ou at bilhes) de pginas. Isso resulta em problemas de desempenho: quando um aplicativo precisa usar mais pginas de memria do que a unidade de gesto de memria suporta, o sistema retorna mais lento, gerenciamento de memria baseado em software, o que faz com que todo o sistema funcionar mais devagar. Red Hat Enterprise Linux 6 implementa o segundo mtodo via uso de huge pages.

49

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Colocando de uma forma simples, huge pages so blocos de memria de 2MB e 1GB de tamanho. As tabelas de pginas usadas pelas pginas de 2MB so adequadas para gerenciar gigabytes mltiplos de memria, onde as tabelas de pginas com 1GB so melhores para escalar para terabytes de memria. Huge pages devem ser atribudas durante a inicializao. Elas tambm so difceis de gerenciar manualmente, e geralmente requerem mudanas significativas no cdigos para serem utilizados de forma efetiva. Como tal, o Red Hat Enterprise 6 tambm implementou o uso do transparent huge pages (T HP). O T HP uma camada de abstrao que automatiza a maioria dos aspectos de criao, gerenciamento e uso de huge pages. T HP esconde muito da complexidade do uso do huge pages de administradores e desenvolvedores do sistema. Como o objetivo de T HP melhorar o desempenho, seus desenvolvedores (tanto da comunidade e Red Hat) j testaram e otimizaram T HP atravs de uma ampla gama de sistemas, configuraes, aplicativos e cargas de trabalho. Isto permite que as configuraes padro de T HP melhorem o desempenho da maioria das configuraes do sistema. Note que o T HP pode mapear atualmente somente regies de memria annimas, assim como espaos de heap e pilha.

5.3. Utilizando o Valgrind para o Uso de Memria de Perfil


Valgrind um quadro que fornece instrumentao para binrios do espao do usurio. Ele vem com uma srie de ferramentas que podem ser usadas para o perfil e analisar o desempenho do programa. As ferramentas apresentadas nesta seo fornecem uma anlise que pode auxiliar na deteco de erros de memria, tais como o uso de memria no inicializada e alocao ou desalocao de memria imprprios. T odos esto includos no valgrind pacote, e pode ser executado com o seguinte comando:
valgrind --tool=toolname program

Substitua toolname pelo nome da ferramenta que voc deseja usar (para perfil de memria, m em check, m assif , ou cachegrind ), e program com o programa que voc deseja realizar o perfil com o Valgrind. T enha em mente que a instrumentao do Valgrind far com que o seu programa execute mais vagarosamente do que o normal. Uma viso geral das capacidades do Valgrind fornecida emSeo 3.5.3, Valgrind. Maiores detalhes, incluindo informaes sobre os plugins disponveis para o Eclipse, esto includos no Developer Guide, disponvel a partir dohttp://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. A documentao que acompanha pode ser visualizada com o comando m an valgrind quando o pacote valgrind estiver instalado, ou encontrado nos seguintes locais: /usr/share/doc/valgrind-version/valgrind_m anual.pdf , and /usr/share/doc/valgrind-version/htm l/index.htm l . 5.3.1. Uso de Memria de Perfil com o Memcheck Memcheck a ferramenta padro do Valgrind, e pode ser executado com valgrind programa, sem especificar -- tool=m em check . Ele detecta e relata uma srie de erros de memria que podem ser difceis de detectar e diagnosticar, assim como o acesso memria que no deve ocorrer, o uso de valores indefinidos ou no inicializado, memria heap liberada incorretamente, sobrepondo ponteiros, e vazamentos de memria. Os programas funcionam de dez trinta vezes mais lentamente com Memcheck que quando executado normalmente. Memcheck retorna erros especficos, dependendo do tipo de problemas que detectar. Estes erros so

50

Captulo 5. Memria

descritos em detalhes nos documentos includos no Valgrind /usr/share/doc/valgrind-version/valgrind_m anual.pdf . Note-se que Memcheck s pode denunciar esses erros no pode impedir que eles ocorram. Se o seu programa acessa a memria de uma forma que normalmente resultaria em uma falha de segmentao, a falha de segmentao ainda ocorre. No entanto, Memcheck ir registrar uma mensagem de erro imediatamente antes da falha. Memcheck proporciona opes de linha de comando que podem ser usadas para focar o processo de verificao. Algumas das opes disponveis so: --leak-check Quando ativado, Memcheck procura por vazamentos de memria quando termina o programa cliente. O valor padro sum m ary, que gera o nmero de vazamentos encontrados. Outros valores possveis so yes e full , sendo que ambos do detalhes de cada vazamento individual, e no , que desativa a verificao de vazamento de memria. --undef-value-errors Quando ativado (definido para yes), Memcheck relata erros quando os valores indefinidos so usados. Quando desativado (definido para no ), os erros de valor indefinido no so relatados. Isso ativado por padro. Desativar ele ir acelerar Memcheck. --ignore-ranges Permite que o usurio especifique uma ou mais faixas que o Memcheck deva ignorar durante a verificao de endereamento. Mltiplas faixas so delimitadas por vrgulas, por exemplo, -ignore-ranges=0xPP-0xQQ,0xRR-0xSS .

Para uma lista completa de opes consulte a documentao includa em /usr/share/doc/valgrind-version/valgrind_m anual.pdf . 5.3.2. Uso de Cache de Perfil com o Cachegrind Cachegrind simula a interao do seu programa com a hierarquia de cache de uma mquina e (opcionalmente) ramificao preditora. Ele controla o uso da instruo de primeiro nvel simulada e caches de dados para detectar a interao do cdigo pobre com este nvel de cache; e o cache de ltimo nvel, mesmo que seja um segundo ou terceiro nvel de cache, a fim de controlar o acesso principal memria. Como tal, os programas so executados com Cachegrind funcionam 20-100 vezes mais lentos do que quando executados normalmente. Para executar o Cachegrind, execute o seguinte comando, substituindo o program pelo programa que voc deseja realizar o perfil com o Cachegrind.
# valgrind --tool=cachegrind program

O Cachegrind pode reunir as seguintes estatsticas para todo o programa, e para cada funo no programa: as leituras de Cache de instruo de primeiro nvel (ou as instrues executadas) e falta de leituras, e falta de leitura de instruo de cache de ltimo nvel; leituras de cache de dados (ou leituras de memria), falta de leituras, e falta de leituras de dados do cache de ltimo nvel;

51

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

gravaes de cache de dados (ou gravaes de memria), falta de gravaes, e falta de gravaes de ltimo nvel ramificaes condicionais executadas e mal previstas; e ramificaes indiretas executadas e mal previstas. O Cachegrind imprime as informaes de resumo sobre estas estatsticas no console e grava informaes mais detalhadas de perfil em um arquivo (cachegrind.out.pidpor padro, onde pid o ID do processo do programa no qual voc executou o Cachegrind). Este arquivo pode ser processado mais tarde acompanhado da ferramenta cg_annotate , como abaixo:
# cg_annotate cachegrind.out.pid

Nota
cg_annotate pode produzir linhas maiores do que 120 caracteres, dependendo do comprimento do caminho. Para tornar a sada mais clara e fcil de ler, recomendamos fazer a sua janela de terminal pelo menos desta largura antes de executar o comando acima mencionado. Voc tambm pode comparar os arquivos de perfil criados pelo Cachegrind para facilitar o desempenho do programa da tabela antes e depois de uma mudana. Para fazer isto, use o comando cg_diff substituindo first pelo arquivo de resultado do perfil inicial, e second pelo arquivo de resultado de perfil subsequente:
# cg_diff first second

Este comando produz um arquivo de resultado combinado, que pode ser visualizado em mais detalhes com o cg_annotate . Cachegrind suporta um nmero de opes para focar seu resultado. Algumas das opes disponveis so: --I1 Especifica o tamanho, associatividade e tamanho da linha do cache de instruo de primeiro nvel, separado por vrgulas: --I1= size,associativity,line size. --D1 Especifica o tamanho, associatividade e tamanho da linha do cache de dados de primeiro nvel, separado por vrgulas: --D1= size,associativity,line size. --LL Especifica o tamanho, associatividade e tamanho da linha do cache ltimo nvel, separado por vrgulas: --LL= size,associativity,line size. --cache-sim Habilita ou desabilita a coleo de acesso a cache e contas faltando. O valor padro yes (habilitado). Note que desabilitar este e --branch-sim deixa o Cachegrind sem informaes para coletar.

52

Captulo 5. Memria

--branch-sim Habilita ou desabilita a coleo de instrues de ramificao e contas mal previstas. Isto definido para no (desabilitado) por padro, pois ele desacelera o Cachegrind em aproximadamente 25 porcento. Note que desabilitar este e --cache-sim deixa o Cachegrind sem informaes para coletar.

Para uma lista completa de opes consulte a documentao includa em /usr/share/doc/valgrind-version/valgrind_m anual.pdf . 5.3.3. Heap do Perfil e Espao de Pilha com Massif Massif mede o espao de pilha usado por um programa especfico, tanto o espao til quanto qualquer espao adicional alocado para fins de contabilidade e alinhamento. Ele pode ajud-lo a reduzir a quantidade de memria utilizada pelo seu programa, o que pode aumentar a velocidade do seu programa, e reduzir a probabilidade de que seu programa ir esgotar o espao de troca da mquina em que ele executa. Massif tambm pode fornecer detalhes sobre quais partes do seu programa so responsveis pela alocao de memria heap. Programas executados com Massif so executados com cerca de vinte vezes mais lentido do que a sua velocidade de execuo normal. Para realizar o perfil do uso do heap de um programa, especifique o m assif como uma ferramenta Valgrind que voc deseja utilizar:
# valgrind --tool=massif program

Dados de perfil coletados pelo Massif so gravados em um arquivo, que por padro chamado de m assif.out.pid, onde pid o ID de processo do programa especificado. Estes dados de perfil tambm podem ser grafados com o comando m s_print, assim como:
# ms_print massif.out.pid

Isso produz um grfico que mostra o consumo de memria sobre a execuo do programa, e informaes detalhadas sobre os locais responsveis pela alocao em vrios pontos do programa, incluindo no ponto de alocao de memria de pico. Massif fornece um nmero de opes de linha de comando que podem ser usados para dirigir a sada da ferramenta. Algumas das opes disponveis so: --heap Especifica se deve realizar perfil de heap. Este valor padro yes. O perfil do Heap pode ser desabilitado configurando esta opo para no . --heap-adm in Especifica o nmero de bytes por bloco a usar para a administrao quando um perfil de heap for habilitado. O valor padro 8 bytes por bloco. --stacks Especifica se deve criar o perfil da pilha. O valor padro no (desabilitado). Para habilitar perfis de pilha, definir esta opo para yes, mas esteja ciente de que isso desacelera o Massif.

53

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Observe tambm que Massif assume que a pilha principal tem tamanho zero na inicializao para indicar melhor o tamanho da poro da pilha sobre a qual o programa que est sendo perfilado tem controle. --tim e-unit Especifica a unidade de tempo utilizado para a criao de perfil. H trs valores vlidos para esta opo: instrues executadas (i ), o valor padro, que til na maioria dos casos, tempo real (m s, em milissegundos), que pode ser til em certos casos, e bytes alocados / desalocado na pilha e / ou stack (B ), que til para os programas de muito curto prazo, e para fins de teste, porque o mais reproduzvel em mquinas diferentes. Esta opo til ao criar grficos de resultado de Massif com m s_print.

Para uma lista completa de opes consulte a documentao includa em /usr/share/doc/valgrind-version/valgrind_m anual.pdf .

5.4. Ajuste de Capacidade


Leia esta seo para obter um esboo de memria, kernel e capacidade do sistema de arquivos, os parmetros relacionados a cada um, e os dilemas para ajustar esses parmetros. Para definir esses valores temporariamente durante o ajuste, copie o valor desejado para o arquivo adequado no sistema de arquivos proc. Por exemplo, para definir overcommit_memory temporariamente para 1 , execute:
# echo 1 > /proc/sys/vm/overcommit_memory

Note que o caminho para o parmetro no sistema de arquivos proc varia dependendo do sistema afetado pela mudana. Para definir estes valores de forma persistente, voc precisar utilizar o comando sysctl . Para maiores detalhes, consule o Deployment Guide, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. Ajustes de Memria relacionados com a Capacidade Cada um dos parmetros a seguir est localizado sob /proc/sys/vm / no sistema de arquivo do proc. overcommit_memory Define as condies que determinam se uma requisio de memria grande aceita ou negada. Existem trs valores possveis para este parmetro: 0 A configurao padro. O kernel realiza o overcommit heurstico do kernel, manuseando isto atravs da estimativa da quantia de memria disponvel e queda de requisies que sejam totalmente invlidas. Infelizmente, como a memria alocada utilizando um heurstico ao invs de um algortimo preciso, esta configurao pode as vezes permitir que a memria disponvel no sistema seja sobrecarregada. 1 O kernel no faz manuseio de overcommit de memria. Sob esta configurao, o potencial para sobrecarga de memria aumenta, como tambm o desempenho para tarefas intensivas de memria. 2 T he kernel nega requisies para memrias iguais ou maiores do que a quantia de swap total disponvel e a porcentagem de RAM fsica especificada em overcommit_ratio.

54

Captulo 5. Memria

Esta configurao a melhor se voc quiser diminuir o risco de overcommit de memria.

Nota
Esta configurao recomendada somente para sistemas com reas de swap maiores do que sua memria fsica.

overcommit_ratio Especifica a porcentagem da RAM fsica considerada quando o overcommit_memory est definido para 2 . O valor padro 50 . max_map_count Define o nmero mximo de reas de mapa de memria que um processo pode utilizar. Na maioria dos casos, o valor padro de 65530 adequado. Aumente este valor se seu aplicativo precisar mapear mais do que este nmero de arquivos. nr_hugepages Define o nmero de hugepages configurado no kernel. O valor padro 0. possvel alocar (ou desalocar) hugepages, somente se existirem pginas livres contnuas fisicamente no sistema. As pginas reservadas por este parmetro no podem ser utilizadas para outros propsitos. Mais informaes podem ser obtidas da documentao instalada: /usr/share/doc/kerneldoc-kernel_version/Docum entation/vm /hugetlbpage.txt

Ajustes de Kernel relacionados com a Capacidade Cada um dos parmetros a seguir est localizado sob o sistema de arquivo do proc /proc/sys/kernel/ no sistema de arquivo do proc. msgmax Define o tamanho permitido em bites de qualquer mensagem nica em uma fila de mensagem. Este valor no deve exceder o tamanho da fila (msgmnb). O valor padro 65536 . msgmnb Define o tamanho mximo em bites de uma nica fila de mensagem. O valor padro 65536 bytes. msgmni Define o nmero mximo de identificadores de filas de mensagens (e portanto o nmero mximo de filas). O valor padro em mquinas com arquitetura 64-bit de 1985 ; for 32-bit architecture, the default value is 1736 . shmall Define a quantia total de memria compartilhada em bites que possa ser utilizada no sistema de uma s vez. O valor padro para mquinas com arquitetura de 64-bit de 4 294 967296 ;

55

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

para arquiteturas 32-bit o padro de 2684 354 56 . shmmax Define o segmento mximo de memria compartilhada pelo kernel, em bites. O valor padro em mquinas com arquitetura de 64-bit de 687194 76736 ; para arquitetura de 32-bit, o valor padro de 4 294 967295 . Note, no entanto, que o kernel suporta valores muito maiores do que este. shmmni Define o nmero mximo de amplitude de sistema de sementos de memria compartilhada. O valor padro de 4 096 em ambas arquiteturas de 64-bit e 32-bit. threads-max Define o nmero mximo de amplitude de sistema de discusses (tarefas) a serem utilizadas pelo kernel de uma s vez. O valor padro igual ao valor max_threads do kernel. A formula em uso :
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE )

O valor mnimo dethreads-max de 20 .

Ajustes de Sistema de Arquivo Relacionada com a Capacidade Cada um dos parmetros a seguir est localizado sob o sistema de arquivo proc /proc/sys/fs/. aio-max-nr Define o nmero mximo permitido de eventos em todos os contextos de E/S assncrona. O valor padro de 65536 .Note que ao modificar este valor, voc no pr-aloca ou redimensiona qualquer estrutura de dados do kernel. file-max Lista o nmero mximo de manuseio de arquivo que o kernel aloca. O valor padro coincide com o valor de files_stat.max_files no kernel, o qual est definido para o valor maior entre os (m em pages * (PAGE_SIZE / 1024 )) / 10 , ou NR_FILE (8192 in Red Hat Enterprise Linux). Aumentar este valor pode resolver erros causados pela falta de manuseios de arquivos disponveis.

Ajustes Out-of-Memory Kill Out of Memory (OOM) se refere a um estado de computao onde todas as memrias, incluindo o espao swap, foi alocada. Por padro, esta situao faz com que o sistema trave e pare de funcionar como deveria. No entanto, configurar o parmetro /proc/sys/vm/panic_on_oom para 0 instrui o kernel a chamar a funo oom _killer quando ocorrer o OOM. Geralmente o oom _killer pode eliminar processos invasores e o sistema sobrevive. O parmetro a seguir pode ser definido por processo, fornecendo maior controle sobre quais processos so eliminados pela funo oom _killer . Est localizada em /proc/pid/ no sistema de

56

Captulo 6. Entrada/Sada

arquivo do proc, onde pid o ID do processo. oom_adj Define um valor a partir de-16 at 15 que ajuda a determinar o oom_score de um processo. Quanto maior o valor do oom_score maior a probabilidade do processo ser eliminado pelo oom _killer . Configurar um valor oom_adj de -17 desabilita o oom _killer para aquele processo.

Importante
Qualquer processo gerado pelo processo ajustado, ir herdar o oom_score daquele processo. Por exemplo, se um processo sshd protegido da funo oom _killer , todos os processos iniciados pela sesso SSH tambm sero protegidas. Isto pode afetar a habilidade das funes do oom _killer para salvar o sistema se ocorrer um OOM.

5.5. Ajustando Memria Virtual


A memria virtual geralmente consumida pelos processos, caches de sistema de arquivo e kernel. O uso da memria virtual depende de uma srie de fatores, que podem ser afetados pelos seguintes parmetros: swappiness Um valor de 0 100 que controla o grau para o qual o sistema altera. Um valor alto d prioridade ao desempenho do sistema, alterando os processos de forma agressiva fora da memria fsica quando eles no esto ativos. Um valor baixo d prioridade interao e evita processos de alterao fora da memria fsica o quanto de tempo for possvel, o que diminui a latncia de resposta. O valor padro 60 . min_free_kbytes O nmero mnimo de kilobytes para manter livre em todo o sistema. Este valor usado para calcular um valor de marca d'gua para cada zona de baixa memria, que recebem um nmero de pginas livres reservadas proporcionalmente ao seu tamanho.

Valores extremos podem quebrar seu sistema


Seja cauteloso ao configurar este parmetro, pois tanto valores muito baixos como muito altos podem causar danos. Configurao min_free_kbytes muito baixo previne o sistema de reclamar memria. Isto pode resultar em travamento de sistema e processos mltiplos de OOM-killing. No entanto, configurar este parmetro para um valor que seja muito alto (5-10% do total de memria de sistema) causar uma falta de memria em seu sistema imediatamente. O Linux foi criado para utilizar todas as RAM disponveis para realizar um cache dos dados de sistema de arquivo. Configurar um valor alto de min_free_kbytes resulta em uma perda de tempo quando o sistema reclama memria.

57

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

dirty_ratio Define um valor de porcentagem. Limpeza de dados sujos inicia com (via pdflush ) quando os dados sujos comprimem esta porcentagem da memria de sistema total. O valor padro 20 . dirty_background_ratio Define um valor de porcentagem. Limpeza de dados sujos inicia no pano de fundo (via pdflush ) quando os dados sujos comprimem esta porcentagem da memria de sistema total. O valor padro 10 . drop_caches Configurar este valor para 1 , 2 , or 3 faz com que o kernel derrube diversas pginas de combinao cache e cache de slab. 1 O sistema invalida e libera todas as memrias de cache de pgina. 2 O sistema libera toda a memria no utilizada de cache de slab. 3 O sistema libera toda a memria de cache de pgina e cache de slab.

Esta no uma operao destrutiva. Como os objetos sujos no podem ser liberados, recomenda-se executar o sync antes de configurar este valor de parmetro.

Importante
O uso do drop_caches para liberar memria no recomendado em um ambiente de produo.

Para definir estes valores temporariamente durante o ajuste, copie o valor desejado no arquivo apropriado no sistema de arquivo proc. Por exemplo, para definir swappiness temporariamente para 50 , execute:
# echo 50 > /proc/sys/vm/swappiness

Para configurar este valor persistentemente, voc ir precisar usar o comando sysctl . Para mais informaes consulte o Deployment Guide, disponvel em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

58

Captulo 6. Entrada/Sada

Captulo 6. Entrada/Sada
6.1. Recursos
O Red Hat Enterprise Linux 6 apresenta diversas melhorias de desempenho na pilha de E/S: Discos de estado slido (SSDs) agora so reconhecidos automaticamente, e o desempenho do agendador de E/S ajustado para tirar vantagem das E/S altas por segundo (IOPS) que estes dispositivos podem realizar. Foi adicionado um suporte descartado no kernel para reportar classes de blocos no utilizadas para armazenamento adjacente. Isto ajuda o SSDs com seus algortimos de nivelamento por uso. Isto tambm ajuda o armazenamento que suporta provisionamento de blocos lgicos (um tipo de espao de endereo virtual para armazenamento) po manter as marcaes mais perto na quantia atual do armanzenamento em uso. A implementao da barreira do sistema de arquivo foi sobreposta no Red Hat Enterprise Linux 6.1 para torn-la mais til. pdflush foi substitudo pelas discusses de flusher por dispositivo de backup, que aprimora muito a escalabilidade do sistema em configuraes com contas LUN grandes.

6.2. Anlises
O ajuste do desempenho de pilha de armazenamento requer um conhecimento de como os dados fluem atravs do sistema, assim como conhecimento profundo dos armazenamentos adjacentes e como ele funciona sob cargas de trabalho que variam. Isto tambm requer um conhecimento do prprio ajuste da carga de trabalho Sempre que voc implantar um novo sistema, uma boa idia analisar o armazenamento de baixo para cima. Inicie com LUNs e discos brutos e avalie seus desempenhos utilizando E/S direta que cruza o cache da pgina do kernel). Isto o teste mais bsico que voc pode realizar e ser padro pelo qual voc medir o desempenho de E/S na pilha. Inicie com um gerador de carga de trabalho bsica (tal como o aio-stress) que produz leituras e gravaes aleatrias e sequenciais em toda a variedade de tamanhos da E/S e profundidade de fila. Segue abaixo um grfico das sries de execues aio-stress, cada qual desempenhando quatro estgios: gravaes sequenciais, leituras sequenciais, gravaes aleatrias e leituras aleatrias. Neste exemplo, a ferramenta configurada para executar na classe de tamanho de histrico (o x axis) e profundidade de fila (uma por grfico). A profundidade da fila representa o nmero total de operaes de E/S em progresso em um determinado perodo.

59

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

O y axis mostra a largura da banda em megabytes por segundo. O x axis mostra o T amanho da E/S em kilobytes. Figura 6.1. aio-stress output for 1 thread, 1 file

Note como a linha produtividade tem a tendncia do canto esquerdo inferior para o direito superior. T ambm note que, para um dado tamanho de histrico, voc pode obter mais produtividade do armazenamento aumentando o nmero de E/S em progresso. Ao executar essas cargas de trabalho simples em seu armazenamento, voc compreender como o seu armazenamento realiza sob carga. Mantenha os dados gerados por esses testes de comparao quando analisar as cargas de trabalho mais complexos. Se voc utilizar mapeador de dispositivo ou md, adicione para a camada no prximo e repita os testes. Se houver uma grande perda de desempenho, assegure-se que ele esperado, ou que pode ser explicado. Por exemplo, uma queda de desempenho pode ser esperada se uma camada de checksumming raid for adicionada pilha. T rava inesperada no desempenho inesperado pode ser causada por operaes de E/S desalinhadas. Por padro, o Red Hat Enterprise Linux alinha parties e metadados do mapeador de dispositivo adquadamente. No entanto, nem todos os tipos de armazenamento reportam seus alinhamentos adequados, e por isso pode exigir um ajuste manual. Aps adicionar o mapeador de disposibito ou camada md, adicione o sistema de arquivo em cima do dispositivo de bloco e teste nele, ainda utilizando a E/S direta. Compare resultados com os testes anteriores e assegure-se de que voc entende as discrepncias. E/S de Gravaes diretas geralmente funciona melhor em arquivos pr-alocados, para assegurar que voc pr-alocou arquivos antes de testar o desempenho. Geradores de carga de trabalho sintticos que voc pode achar teis incluem: aio-stress iozone fio

60

Captulo 6. Entrada/Sada

fio

6.3. Ferramentas
Existem diversas ferramentas disponveis para ajduar nos problemas com o desempenho de diagnose no subsistema de E/S. O vmstat prov uma viso geral do desempenho do sistema. As colunas a seguir so as mais relevantes para a E/S: si (swap in), so (swap out), bi (block in), bo (block out), e wa (E/S tempo de espera). si e so so teis quando o espao swap estiver no mesmo dispositivo que sua partio de dados, e como um indicador de presso de memria generalizada. O si e bi so operaes de leitura, enquanto o so e bo so operaes de gravao. Cada uma destas categorias reportada em kilobytes. O wa o tempo ocioso, ele indica qual poro de fila de execuo est bloqueada esperando pela E/S ser concluda. Analisar seu sistema com o vmstat lhe dr uma idia de se o subsistema da E/S deve ser responsvel ou no pelos problemas de desempenho. As colunas free, buff, e cache tambm valem ser observadas. O valor cache crescendo junto do valor boseguido de uma cada de sistema cache e um aumento no free indica que o sistema est realizando um write-back e invalidao do cache da pgina. Observe que os nmeros de E/S reportados pelo vmstat so agregados de todos os E/S em todos os dispositivos. Depois que voc determinou que pode existir o gap de desempenho no subsistema de E/S, voc pode examinar o problema mais detalhadamente com o iostat , que dividir a reportagem da E/S por dispositivo. Voc tambm pode recuperar mais informaes detalhadas, tal como a mdia do tamanho da requisio, o nmero e gravaes por segundo e a quantia de mesclagem de E/S que est ocorrendo. Utilizando a mdia de tamanho de requisio e a mdia de tamanho de fila avgqu-sz), voc poder estimar sobre como o armazenamento deveria funcionar utilizando grficos que voc gerou ao caracterizar o desempenho de seu armazenamento. Algumas generalizaes se aplicam: por exemplo, se a media de tamanho de requisio de 4KB e a mdia de tamanho de fila de 1, a produtividade pode no ser to til. Se os nmeros de desempenho no mapeiam o desempenho que voc espera, voc pode realizar uma anlise mais refinada, com o blktrace . O suite de utilitrios do blktrace fornece informaes refinadas sobre quanto tempo se gasta no subsistema de E/S. O resultado do blktrace um conjunto de arquivos de trao binrios que podem ser processados posteriormente por outros utilitrios tal como blkparce . blkparse o utilitrio companheiro doblktrace . Ele l resultados brutos do trao e produz uma verso textual resumida. Este um exemplo do resultado do blktrace :

61

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 wl_type:2 8,64 3 8,64 3 8,64 3 8,64 3 8,64 3 8,64 1

1 0 2 3 4 0 0 0 5 0 0 0 0 0 0 6 1

0.000000000 0.000012707 0.000013433 0.000015813 0.000017347 0.000018632 0.000019655 0.000021945 0.000023460 0.000025761 0.000027137 0.000028588 0.000029468 0.000031359 0.000032306 0.000032735 0.004276637

4162 0 4162 4162 4162 0 0 0 4162 0 0 0 0 0 0 4162 0

Q m G P I m m m U m m m m m m D C

RM N RM N R N N N N N N N N N N R R

73992 + 8 [fs_mark] cfq4162S / alloced 73992 + 8 [fs_mark] [fs_mark] 73992 + 8 [fs_mark] cfq4162S / insert_request cfq4162S / add_to_rr cfq4162S / idle=0 [fs_mark] 1 cfq workload slice:300 cfq4162S / set_active wl_prio:0 cfq4162S / fifo=(null) cfq4162S / dispatch_insert cfq4162S / dispatched a request cfq4162S / activate rq, drv=1 73992 + 8 [fs_mark] 73992 + 8 [0]

Como voc pode ver, o resultado denso e difcil de se ler. Voc pode dizer quais processos so responsvel a fim de expressar E/S para seu dispositivo, o qual utilizado mas o blkparse pode lhe fornecer informaes adicionais de formato fcil em seu sumrio. As informaes do sumrio do blkparse so impressas no final do resultado:
Total (sde): Reads Queued: Read Dispatches: Reads Requeued: Reads Completed: Read Merges: IO unplugs:

19, 19, 0 19, 0, 20,087

76KiB 76KiB

Writes Queued: 142,183, 568,732KiB Write Dispatches: 25,440, 568,732KiB Writes Requeued: 125 76KiB Writes Completed: 25,315, 568,732KiB 0KiB Write Merges: 116,868, 467,472KiB Timer unplugs: 0

O resumo demonstra a mdia de taxas de E/S, mescla de atividades e compara a carga de trabalho de leitura com a carga de trabalho de gravao. Para a maior parte, no entanto, o resultado do blkparse muito volumoso para ser til sozinho. Felizmente, existem diversas ferramentas para assistir na visualizao de dados. btt fornece uma anlise da quantia de tempo que a E/S gasta em diferentes reas da pilha de E/S. So estas as reas: Q Uma E/S de bloco Enfileirada G Obtenha Requisio Uma E/S de bloco enfileirada recentemente, no foi um candidato para mesclar com qualquer requisio existente, portanto uma requisio de camada de bloco nova alocada. M Uma E/S de bloco Mesclada com uma requisio existente. I Uma requisio inserida na fila dos dispositivos. D Uma requisio enviada ao Dipositivo C Uma requisio concluda pelo motorista P A fila do dispositivo de bloco Ligada, para permitir a agregao de requisies. U A fila de dispositivo Desligada, permitindo que as requisies agregadas sejam enviadas ao dispositivo. btt divide em tempo gasto em cada uma destas reas, assim como o tempo gasto transicionando entre eles, assim como:

62

Captulo 6. Entrada/Sada

Q2Q tempo entre requisies enviadas camada de bloco. Q2G quanto tempo leva do tempo que uma E/S de bloco enfileirada at o tempo que ela obtm uma requisio alocada para isto. G2I quanto tempo leva desde que um pedido atribudo at o momento em que inserido na fila do dispositivo Q2M quanto tempo leva desde quando um bloco de E/S foi enfileiirado at que se mescle com um pedido existente I2D quanto tempo demora a partir do momento que um pedido inserido na fila do dispositivo at que seja realmente emitido para o dispositivo M2D quanto tempo leva desde que um bloco E/S seja mesclado com um pedido de sada at que o pedido seja emitido para o dispositivo D2C tempo de servio da requisio por dispositivo Q2C tempo total gasto em camada de bloco para uma requisio Voc pode deduzir muito de uma carga de trabalho a partir da tabela acima. Por exemplo, se Q2Q muito maior do que Q2C, isso significa que o aplicativo no est emitindo E/S em sucesso rpida. Assim, todos os problemas de desempenho que voc tem podem no estar relacionados ao subsistema de E/S. Se D2C muito elevado, ento o dispositivo est demorando muito para servir as requisies. Isto pode indicar que o dispositivo simplesmente est sobrecarregado (que pode ser devido ao fato de que um recurso compartilhado), ou pode ser devido carga de trabalho enviada para o dispositivo ser sub-ptima. Se Q2G muito alto, isso significa que h um grande nmero de solicitaes na fila ao mesmo tempo. Isso pode indicar que o armazenamento incapaz de manter-se com a carga de E/S. Finalmente, o seekwatcher consome dados de binrios do blktrace e gera conjuntos de plotagens, incluindo o Logical Block Address (LBA), rendimento, procuras por segundo, e I/Os Per Second (IOPS).

63

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Figura 6.2. Exemplo de resultado do seekwatcher

T odos os lotes utilizam o tempo como o eixo X. A plotagem mostra as leituras e gravaes em cores diferentes. interessante observar a relao entre os grficos de rendimento e procura/por seg. Para o armazenamento sensvel busca, existe uma relao inversa entre as duas plotagens. O grfico IOPS til se, por exemplo, voc no est recebendo o rendimento que se espera de um dispositivo, mas voc est batendo suas limitaes IOPS.

6.4. Configurao
64

Captulo 6. Entrada/Sada

Uma das primeiras decises que voc precisar tomar escolher qual agendador de E/S utilizar. Esta seo prov uma viso geral de cada um dos agendadores principais para ajud-lo a decidir qual o melhor para sua carga de trabalho. 6.4 .1. Completely Fair Queuing (CFQ) CFQ tenta fornecer alguma justia nas decises de agendamento de E/S com base no processo que iniciou a E/S. T rs classes de agendamento diferentes so fornecidos: em tempo real (Reat T ime - RT ), de melhor esforo (Best-Effort -BE), e ocioso. A classe de agendamento pode ser atribuda manualmente a um processo com o comando ionice , ou programaticamente atribuda atravs da chamada de sistema ioprio_set. Por padro, os processos so colocados na classe de agendamento de melhor esforo. As classes de agendamento em tempo real e de melhor esforo so subdivididos em oito prioridades de E/S dentro de cada classe, sendo a prioridade 0 a mais alta e 7 a mais baixa. Processos na classe de agendamento em tempo real esto programados muito mais agressivamente do que em processos em melhor esforo ou inativo, portanto, qualquer E/S de tempo real programada sempre realizada antes da E/S de melhor esforo ou ocioso. Isto significa que a prioridade de E/S em tempo real pode desaparecer com as classes de melhor esforo e ociosas. O agendamento do melhor-esforo a classe de agendamento padro e 4 a prioridade padro nesta classe. Processos na classe de agendamento de repouso so apenas notados quando no h nenhuma outra E/S pendente no sistema. Assim, muito importante definir apenas a classe de agendamento de E/S de um processo para ocioso se a E/S do processo no for necessria para fazer quaisquer progressos futuros. CFQ fornece equidade pela atribuio de um intervalo de tempo para cada um dos processos realizando E/S. Durante seu intervalo de tempo, um processo pode ter (por padro), at 8 pedidos em vo de cada vez. O agendador tenta antecipar se um aplicativo emitir mais E/S em um futuro prximo com base em dados histricos. Caso seja esperado que um processo ir emitir mais E/S, ento o CFQ ser ocioso, esperando por aquela E/S, mesmo se houver E/S de outros processos espera de ser emitido. Por causa da ociosidade realizada pelo CFQ, que muitas vezes no uma boa opo para hardware que no sofrem de uma grande penalidade de busca, como matrizes de armazenamento externos rpidas ou discos de estado slido. Se o uso do CFQ em tal armazenamento uma exigncia (por exemplo, se voc tambm deseja usar o agendador cgroup de E/S de peso proporcional), voc ter que ajustar algumas configuraes para melhorar o desempenho do CFQ. Defina os seguintes parmetros nos arquivos de mesmo nome localizada no /sys/block/device/queue/iosched/:
slice_idle = 0 quantum = 64 group_idle = 1

Quando o group_idle est configurado para 1, existe ainda o potencial para interrupes de E/S (onde o armazenamento do backend no cheio devido ociosidade). No entanto, estas interrupes sero menos frequentes do que a ociosidade em cada fila no sistema. CFQ um agendador de E/S de conservao de folga, o que significa que pode ser ocioso, mesmo quando existem solicitaes pendentes (como vimos acima). O empilhamento de programadores de conservao de folga pode introduzir grandes latncias no caminho de E/S. Um exemplo deste tipo de empilhamento o uso do CFQ alm de um controlador RAID hardware baseado em host. O controlador RAID pode implementar o seu prprio agendador de conservao de folga, causando atrasos em dois nveis na pilha. Conservao de folga funciona melhor quando tm dados suficientes para basear as suas decises. No caso de empilhamento desses algoritmos de escalonamento, o agendador mais inferior s vai ver o que o agendador superior envia para baixo. Assim, a camada inferior ver um padro de E/S que no representativo do volume de trabalho real.

65

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Ajustveis back_seek_max Buscas revertidas so geralmente ruins para o desempenho, pois podem incorrer em maiores atrasos no reposicionamento dos cabealhos do que as buscas normais. No entanto, o CFQ ainda vai realiz-las, se elas forem pequenas o suficiente. Este ajuste controla a distncia mxima em KB que o agendador de E/S permitir a procura revertida. O padro 16 KB. back_seek_penalty Devido ineficincia da procura revertida, uma penalidade est associada a cada um. A pena um multiplicador, por exemplo, considere a posio da cabea do disco de 1024 KB. Suponha que existem dois pedidos na fila, um de 1008KB e outro em 1040KB. Os dois pedidos esto equidistantes da posio da cabea atual. No entanto, depois de aplicar a pena de procura invertida (padro: 2), a requisio em uma posio futura em discos estar agora duas vezes mais perto do que as requisies anteriores. Assim, a cabea mover para frente. fifo_expire_async Este ajuste controla quanto tempo uma requisio assncrona (gravao de buffer) pode ficar sem servios. Aps o tempo de expirao (em milisegundos), uma requisio assncrona faltando ser movida para a lista de expedio. O padro 250 ms. fifo_expire_sync Este o mesmo que o ajuste fifo_expire_async, para requisies em sincronia (leitura e gravao de O_DIRECT ). O padro 125 ms. group_idle Quando definido, o CFQ ficar em ocioso no ltimo processo emitindo a E/S em um cgroup. Isto deve ser definido para 1 ao usar o cgroup de E/S de peso proporcional e configurando o slice_idle to 0 (geralmente feito em armazenamento rpido). group_isolation Se a isolao de grupo estiver ativada (definida para 1 ), ela fornecer uma isolao mais forte entre grupos a custo de rendimento. Em geral, se a isolao de grupo estiver desativada, a fairness fornecida para cargas de trabalho sequenciais somente. A ativao da isolao de grupo, proporcionar fairness para ambas cargas de trabalho aleatria e sequencial. O valor padro 0 ) (desabilitado). Consulte o Docum entation/cgroups/blkiocontroller.txt para mais informaes. low_latency Quando uma latncia baixa ativada (definida para 1 ), o CFQ tenta fornecer um mximo de tempo de espera de 300 ms para cada processo emitindo E/S em um dispositivo. Isto favorece o fairness sobre o rendimento. Desabilitar a latncia baixa (definindo-a para 0 ) ignora a latncia de alvo, permitindo que cada processo no sistema obtenha uma faixa o tempo integral. Baixa latncia ativada por padro. quantum O quantum controla o nmero de E/Ss que o CFQ ir enviar ao armazenamento por vez,

66

Captulo 6. Entrada/Sada

principalmente limitando a profundidade da fila do dispositivo. Por padro, isto definido para 8 . O armazenamento pode suportar filas muito mais produndas, mas aumentar o quantum tambm ter um impacto negativo na latcia, especialmente na presena de cargas de trabalho de gravao sequencial grandes. slice_async Este ajuste controla a parte de tempo alocada para cada processo que emite E/S assncronas (gravao em buffer). Por padro ele ajustado para 4 0 ms. slice_idle Isto especifica quanto tempo o CFQ deve ficar ocioso enquanto espera por novas solicitaes. O valor padro no Red Hat Enterprise Linux 6.1 e anteriores a ele de 8 ms. No Red Hat Enterprise Linux 6.2 e posteriores a ele, o valor padro 0 . O valor zero melhora a taxa de transferncia de armazenamento RAID externo, removendo todos os ociosos da fila e nvel de rvore de servio. No entanto, um valor de zero pode degradar o rendimento da armazenagem no RAID interna, uma vez que aumenta o nmero total de procura. Para o armazenamento no-RAID, recomendamos uma slice_idle valor que maior do que 0. slice_sync Este ajuste dita a faixa de tempo alocada para um processo emitindo E/S assncronas (leitura ou gravao diretas). O padro 100 ms.

6.4 .2. Agendador de Prazo de E/S (Deadline I/O Scheduler) O Agendador de Prazo de E/S (Deadline I/O scheduler) tenta fornecer uma latncia garantida para requisies. importante notar que a medio de latncia s comea quando os pedidos descem para o agendador de E/S (esta uma distino importante, pois um aplicativo pode ficar inativo esperando por descritores de requisies para ser liberado). Por padro, as leituras so prioridade sobre gravaes, uma vez que as aplicaes so mais propensas a bloquear a leitura de E/S. Prazos de reparos de E/S em lotes. Um lote uma seqncia de E/S de leitura ou gravao, que esto em ordem crescente de LBA (o elevador de uma s mo). Aps o processamento de cada lote, o agendadorde E/S verifica se os pedidos de gravao faltaram por muito tempo, e ento decide se pretende iniciar um novo lote de leitura ou gravao. A lista FIFO de pedidos s verificada para os pedidos expirados no incio de cada lote, e depois para a direo desse lote de dados. Assim, se um lote de gravao selecionado, e h uma solicitao de leitura expirada, a requisio de leitura no ser atendida at que o lote de gravao seja concludo. Ajustveis fifo_batch Isto determina o nmero de leituras e gravaes a serem emitidos em uma nica vez. O padro 16 . Configurar este nmero para um valor maior resultar em melhor rendimento mas tambm aumentar a latncia. front_merges Voc pode definir este ajuste para 0 se voc souber se sua carga de trabalho vai gerar alguma mesclagem de frente. A no ser que voc tenha medido o cabealho desta verificao, recomenda-se deix-lo como a configurao padro. (1 ).

67

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

read_expire Este ajuste permite que voc ajuste o nmero de milisegundos no qual a requisio de leitura deve ser atendida. Por padro isto definido para 500 ms (meio segundo). write_expire Este ajuste permite que voc defina o nmero de milisegundos no qual uma requisio de gravao deve ser atendida. Por padro ele definido para 5000 ms (cinco segundos). writes_starved Este ajuste controla quantos grupos de leituras podem ser processados antes de processar um nico grupo de gravao. Quanto maior o ajuste mais preferncia dada leitura.

6.4 .3. Noop O agendador Noop E/S implementa algortimos simples de First-in-first-out (FIFO). A mesclagem de requisies acontece em uma camada de bloco genrica mas um cache simples de ltimo toque. Se um sistema limitado CPU e o armazenamento rpido, este agendador de E/S pode ser o melhor a utilizar. Segue abaixo ajustes disponveis para a camada de bloco. /sys/block/sdX/queue tunables add_random Em alguns casos, o cabealho de eventos de E/S que contribuem para o pool de entropia para /dev/random mensurvel. Em alguns casos, pode ser melhor ajustar este valor para 0. max_sectors_kb Por padro, o tamanho mximo de requisio para disco de 512 KB. Este ajuste pode ser utilizado tanto para aumentar ou diminuir o valor. O valor mnimo limitado por tamanho de bloco lgico; o valor mximo limitado pelo max_hw_sectors_kb. Existem alguns SSDs que possuem um pior desempenho quando os tamanhos de E/S excedem o tamanho de bloco de remoo interno. Em alguns casos recomendamos ajustar o max_hw_sectors_kb para baixo para apagar o tamanho do bloco. Voc pode testar isto utilizando um gerador de E/S tal como o iozone ou aio-stress, variando o tamanho de histrico, por exemplo, de 512 bytes para 1 MB. nomerges Este ajuste inicialmente um assistente de depurao. A maioria de cargas de trabalhos de mesclagem de requisio (at mesmo em armazenamento mais rpido tal como SSDs). Em alguns casos, no entanto, deseja-se desabilitar a mesclagem, tal como quando voc v quantos IOPS um backend de armazenamento pode processar sem desabilitar o cabealho de leitura ou realizando uma E/S aleatria. nr_requests Cada fila de requisio tem um limiete no nmero total de descritores de requisio que pode ser alocado para cada uma das E/Ss das leituras e gravaes. Por padro, o nmero 128 , o que significa 128 leituras e 128 gravaes que podem ser enfileiradas uma por vez antes de

68

Captulo 7. Sistemas de Arquivos

colocar um processo em inativo. O processo inativo o prximo a tentar alocar uma requisio, no necessariamente o processo que tenha alocado todas as requisies disponveis. Se voc possui aplicativo de latncia sensvel, voc deve considerar diminuir o valor do nr_requests em sua fila de requisies e limitar a profundidade da fila de comando no armazenamento para um nmero mais baixo (at mesmo to baixo quanto 1 ), para que a E/S writeback no possa alocar todos os descritores de requisies disponveis e preencher a fila de dispositivo com uma E/S de gravao. Uma vez que o nr_requests tenha sido alocado, todos os outros processos que esto tentando realizar uma E/S sero transformados em inativos para esperar por requisies a ficarem disponveis. Isto torna as coisas mais justas, pois as requisies so ento distribudas em uma moda de repetio alternada (ao invs de deixar um processo consum-los todos em sucesso rpida). Note que este o nico problema ao utilizar a data limite ou agendadores de noop, pois a configurao CFQ padro protege contra esta situao. optimal_io_size Em algumas circunstncias o armazenamento adjacente ir reportar um tamanho de E/S adequado. Isto mais comum em hardware e software RAID, onde o tamanho da E/S adequada o tamanho da faixa. Se este valor reportado, os aplicativos devem emitir uma E/S alinhada e em mltiplos do tamanho de E/S adequado sempre que possvel. read_ahead_kb O sistema operacional pode detectar quando um aplicativo est lendo dados seqencialmente de um arquivo ou de disco. Nesses casos, ele executa um algoritmo inteligente de leitura antecipado, em que mais dados do que solicitado pelo usurio lido a partir do disco. Assim, nas prximas tentativas do usurio de ler um bloco de dados, ele j o far no cache da pgina do sistema operacional. A desvantagem que o sistema operacional pode ler mais dados do disco do que o necessrio, o que ocupa espao no cache de pgina at que ele seja expulso por causa da alta presso de memria. Depois de vrios processos realizando leituras falsas futuras, aumentaria a presso de memria nesta circunstncia. Para os dispositivos de mapeador, recomenda-se aumentar o valor do read_ahead_kb para um nmero maior, tal como 8192 . A razo que um mapeador de dispositivo geralmente criado de dispositivos adjacentes mltiplos. Configurar este valor para um padro (128 KB) multiplicado pelo nmero de dispositivos que voc est mapeando um bom comeo para ajuste. rotational Discos rgidos tradicionais so rotacionais (feitos de discos rodopiantes). Os SSDs no entanto, no. A maioria de SSDs promovero isto adequadamente. Se, no entanto, voc encontar um dispositivo que no promova esta bandeira adequadamente, pode ser necessrio configurar o rotacional para 0 manualmente; quando o rotacional estiver desabilitado, o elevador de E/S no usar lgica, que significa reduzir buscas, uma vez que existe pouca penalidade para busca de operaes em mdia no rotacional. rq_affinity Concluses de E/S podem ser processadas em uma CPU diferente daquela que emitiu a E/S. Configurar o rq_affinity para 1 faz com que o kernel entregue concluses para a CPU na qual a E/S foi emitida. Isto pode aprimorar a efetividade do cache de dados de CPU.

69

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

70

Captulo 7. Sistemas de Arquivos

Captulo 7. Sistemas de Arquivos


Leia este captulo para obter uma viso geral dos sistemas de arquivos suportados para uso com o Red Hat Enterprise Linux, e como otimizar seus desempenhos.

7.1. Consideraes de ajustes para Sistemas de Arquivo


Existem diversas consideraes de ajustes comuns a todos os sistemas de arquivo: formatar e montar opes selecionadas em seu sistema, e aes disponveis para aplicativos que podem aprimorar seu desempenho em um sistema especfico. 7.1.1. Formatando Opes T amanho de bloco de sistema de arquivo O tamanho do bloco pode ser selecionado no tempo m kfs. A classe de tamanhos vlidos depende do sistema: o limite acima o tamanho mximo da pgina do sistema host, equanto o limite mais baixo depende do sistema de arquivo utilizado. O tamanho do bloco padro adequado para a maioria dos casos de uso. Se voc espera criar muitos arquivos menores do que o tamanho do bloco padro, voc pode definir o tamanho do bloco menor para minimizar a quantia de espao disperdiada no disco. Note que no entanto, ao configurar um tamanho de bloco menor voc poder limitar o tamanho mximo do sistema de arquivo, e pode causar cabealho de tempo de execuo adicional, especialmente para arquivos maiores do que o tamanho de bloco selecionado. Geometria de Sistema de Arquivo Se seu sistema utiliza armazenamento em faixas tal qual o RAID, voc poder aprimorar o desempenho, alinhando os dados e metadados com a geometria de armazenamento adjacente no tempo m kfs. Para o RAID software (LVM ou MD) e alguns armazenamentos de hardware corporativos, esta informao enfileirada e definida automaticamente, mas em muitos casos o administrador precisa especificar esta geometria manualmente com o m kfs na linha de comando. Consulte o Storage Administration Guide para mais informaes sobre criar e manter estes sistemas de arquivo. Dirios externos Cargas de trabalho de metadados intensivos significa que a seo de log de um sistema de arquivo de agendamento (como o ext4 e XFS) atualizado muito frequentemente. Para minimizar o tempo de busca do sistema de arquivos do dirio, voc pode colocar o dirio no armazenamento dedicado. Note, no entanto, que a colocao do dirio em armazenamento externo mais lenta que o sistema de arquivos primrio possa anular qualquer vantagem potencial associado com o uso de armazenamento externo.

Ateno
Certifique-se de que o dirio externo confivel. A perda de um dispositivo de dirio externo causar danos no sistema de arquivo. Dirios externos so criados no tempo m kfs, com os dispositivos de dirio sendo especificados no tempo de montagem. Consulte as pginas man m ke2fs(8), m kfs.xfs(8), e m ount(8) para maiores informaes.

71

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

7.1.2. Opes de montagem Barreiras Uma barreira de gravao um mecanismo do kernel usado para assegurar que os metadados do sistema de arquivos foi gravado corretamente e ordenado em armazenamento persistente, mesmo quando os dispositivos de armazenamento com gravaes de caches volteis perdem o poder. Os sistemas de arquivos com barreiras de gravao ativadas tambm garantem que todos os dados transmitidos via fsync () persistem atravs de uma queda de energia. O Red Hat Enterprise Linux permite barreiras por padro em todos os hardwares que as suportam. No entanto, permitir que as barreiras de gravao diminui significativamente algumas aplicaes, especificamente, aplicativos que usam fsync () pesadamente, ou que cria e apaga muitos arquivos pequenos. Para o armazenamento, sem o cache de gravao voltil, ou no caso raro onde as inconsistncias do sistema de arquivos e perda de dados aps uma perda de potncia aceitvel, barreiras podem ser desativadas usando a opo de montagem nobarrier. Para mais informaes, consulte o Guia de Administrao de Armazenamento . T empo de Acesso (noatime) HIstricamente, quando um arquivo lido, o tempo de acesso (atime) para aquele arquivo deve ser atualizado no metadado inode, que involve E/S de gravaes adicionais. Se os metadados forem precisos atime no forem necessrios, monte o sistema de arquivo com a opo noatime para eliminar estas atualizaes de metadados. Na maioria dos casos, no entanto, o atime no um cabealho grande devido ao comportamento do atime relativo padro (ou relatime) no kernel do Red Hat Enterprise Linux 6. O comportamente do relatime atualiza somente o atime se o atime for mais vejo do que o tempo de modificao (mtime) ou tempo de mudana de status (ctime).

Nota
Habilitar a opo noatime tambm habilita o comportamento do nodiratime; no h necessidade de definir ambos noatimee nodiratime. Aumento de suporte do read-ahead (leitura antecipada) O Read-ahead acelera acesso de arquivo buscando antecipadamente dados e carregando-os no cache de pgina para que possa estar disponvel antes na memria ao invs de vir do disco. Algumas cargas de trabalho, tais como aquelas que envolvem transmisso contnua pesada de E/S sequencial, se beneficiam de valores altos de read-ahead. A ferramenta tuned e o uso da faixa de LVM eleva o valor da leitura antecipada, mas isso nem sempre suficiente para algumas cargas de trabalho. Alm disso, o Red Hat Enterprise Linux nem sempre capaz de definir um valor de leitura antecipada correto baseado no que ele pode detectar do seu sistema de arquivos. Por exemplo, se uma matriz de armazenamento poderosa se apresenta para o Red Hat Enterprise Linux como um nico LUN potente, o sistema operacional no ir trat-lo como uma matriz LUN potente, e, portanto por padro, no far pleno uso das vantagens de leitura antecipada disponveis para o armazenamento. Use o comando blockdev para visualizar e editar o valor read-ahead. Para visualizar o valor readahead atual para um dispositivo de bloco particular, execute:
# blockdev -getra device

72

Captulo 7. Sistemas de Arquivos

Para modificar o valor read-ahead para aquele dispositivo de bloco, execute o comando a seguir. N representa o nmero de setores de 512 bites.
# blockdev -setra N device

Note que o valor selecionado com o comando blockdev no persistir entre as inicializaes. Ns recomendados criar um nvel de execuo do script init.d para definir este valor durante a inicializao. 7.1.3. Manuteno de sistema de arquivo. Descartar blocos no utilizados Operaes de descarte em Lote e online so recursos de sistemas de arquivos montados que descartam blocos que no esto sendo utilizados pelo sistema de arquivo. Estas operaes so teis para ambos drives de estado slido e armazenamento finalmente provisionado. Operaes de Discard em Lote so executadas pelo usurio com o comando fstrim . Este comando descarta todos os blocos no usados em um sistema de arquivo que coincida com os critrios de usurio. Ambos os tipos de operao so suportados para uso com o XFS e os sistemas de arquivo ext4 no Red Hat Enterprise Linux 6.2 e posteriores, desde que o dispositivo de bloco adjacente ao sistema de arquivo suporte as operaes de discard fsicas. As operaes de Discard Fsico so suportadas se o valor de /sys/block/device/queue/discard_m ax_bytes no for zero. O Operaes de Discard online so especificadas no tempo de montagem com a opo -o discard (tanto no /etc/fstab quanto como parte do comando m ount), e executados em tempo real sem a interveno do usurio. As operaes de discard somente descartam blocos que esteja transitando de um usado para um livre. As operaes discard so suportadas nos sistemas de arquivo ext4 no Red Hat Enterprise Linux 6.2 e posteriores, e nos sistemas de arquivo XFS no Red Hat Enterprise Linux 6.4 e posteriores. A Red Hat recomenda as operaes de discard em lote a no ser que a carga de trabalho do sistema seja tanta que o discard em lote no seja possvel, ou se as operaes de discard online forem necessrias para manter o desempenho. 7.1.4 . Consideraes de Aplicativos Pr-alocao Os sistemas de arquivo ext4, XFS, e GFS2 apoiam a pr-alocao eficiente do espao atravs da chamada glibc fallocate (2). Nos casos em que os arquivos possam tornar-se muito fragmentados devido aos padres de gravao, levando a m performance de leitura, a pr-alocao de espao pode ser uma tcnica til. Pr-alocao marca de espao em disco como se tivesse sido alocado para um arquivo, sem gravar nenhum dado naquele espao. At que os dados reais sejam gravados em um bloco pr-alocado, as operaes de leitura retornaro como zeros.

7.2. Perfis para desempenho de sistema de arquivo.


A ferramenta tuned-adm permite que usurios troquem facilmente entre um nmero de perfis que foram criados para melhorar desempenho para casos de uso especfico. Os perfis que so especialmente teis em aprimorar o desempenho do armazenamento so: desempenho de latncia Um perfil de servidor para latncia tpica de ajuste de desempenho. Ele desabilita os

73

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

mecanismos de economia de energia do tuned e ktune . Os modos cpuspeed mudam para perform ance . O elevador de E/S modificado para deadline para cada dispositivo. O parmetro cpu_dma_latency registrado com um valor de 0 (a latncia menor possvel) para qualidade de servio de gerenciamento de energia para limitar a latncia onde for possvel. desempenho de rendimento Um perfil de servidor para um ajuste de desempenho de rendimento tpico. Este perfil recomendado se o sistema no tiver o armazenamento de classe corporativa. o mesmo que latency-perform ance , exceto: kernel.sched_min_granularity_ns (granularidade mnima de agendador) definida para 10 milisegundos, kernel.sched_wakeup_granularity_ns (granularidade de ativao de agendador) definida para 15 milisegundos, vm.dirty_ratio (taxa suja de mquina virtual) definida para 40%, e pginas transparentes enormes so habilitadas. enterprise-storage Este perfil recomendado para configuraes de servidor de tamanho corporativo com armazenamento de classe corporativa, incluindo proteo e gerenciamento de cache de controlador com backup de bateria de um cache em disco. o mesmo que o perfil desem penho de rendim ento , exceto: o valor readahead definido para 4 x, e sistemas de arquivo non root/boot so remontados com barrier=0 .

Mais informaes sobre tuned-admest disponvel na pgina man (m an tuned-adm ),ou em Guia de Gerenciamento de Energia disponvel a partir do link http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

7.3. Sistemas de Arquivos


7.3.1. Sistema de Arquivo Ext4 O sistema de arquivo ext4 uma extenso escalvel do sistema de arquivo ext3 padro disponvel noRed Hat Enterprise Linux 5. O Ext4 agora o sistema de arquivo padro para Red Hat Enterprise Linux 6 e suportado por um tamanho mximo de arquivo do sistema de 16T B, e um nico tamanho mximo de 16T B.Isto tambm remove o limite de sub-diretrio de 32000 presente no ext3.

Nota
Para sistemas de arquivo maiores do que 16T B, recomendamos o uso do sistema de arquivo de alta capacidade escalvel tal como XFS. Para mais informaes, veja Seo 7.3.2, O Sistema de Arquivo XFS. O padro do sistema de arquivo ext4 adequado para a maioria das cargas de trabalho, mas se a anlise de desempenho mostra que o comportamento de sistema de arquivo est impactando o

74

Captulo 7. Sistemas de Arquivos

desempenho, diversas opes de ajuste esto disponveis: Inicializao de tabela do Inode Para sistemas de arquivo muito grandes, o processo m kfs.ext4 pode levar um longo tempo para inicializar todas as tabelas de inodes no sistema de arquivo. Este processo pode ser deferido com a opo -E lazy_itable_init=1. Se for utilizado, os processos do kernel continuaro a inicializar o sistema de arquivo aps ser montado. A taxa na qual esta inicializao acontece pode ser controlada com a opo -o init_itable=n para o comando m ount, onde a quantia de tempo gasta na realizao n esta inicializao de fundo mais ou menos 1/n. O valor padro para n de 10 . Comportamento auto-fsync Como alguns aplicativos nem sempre realizam o fsync() adequadamente aps renomear um arquivo existente, ou truncado e regravado, o padro do ext4 a sincronizao automtica de arquivos aps operaes de substituio via renome e substituio via truncar. Este comportamento altamente consistente com comportamentos de sistema de arquivo ext3 mais velhos. No entanto, as operaes de fsync() podem consumir bastante tempo, portanto se este comportamento automtico no for necessrio, use a opo -o noauto_da_alloc com o comando m ount para desabilit-lo Isto significa que o aplicativo dever utilizar explicitamente o fsync() para assegurar persistncia de dados. Prioridade de E/S de Dirio Por padro, a E/S de comprometimento de dirio recebe uma prioridade uma pouco mais alta do que uma E/S normal. Esta prioridade pode ser controlada com a opo journal_ioprio=n do comando m ount. O valor padro 3 . Valores vlidos variam desde 0 7, sendo 0 a E/S com prioridade mais alta. Para outras opes m kfs e ajuste, veja as pginas man m kfs.ext4 (8) e m ount(8) assim como o arquivo Docum entation/filesystem s/ext4 .txtno pacote kernel-doc. 7.3.2. O Sistema de Arquivo XFS XFS um sistema de arquivo de 64 bits, altamente escalvel e robusto. Ele baseado inteiramente em extenso, portanto ele suporta tamanhos bem grandes de arquivos e sistemas de arquivos. O nmero de arquivos que um sistema XFS pode suportar limitado somente disponibilidade de espao no sistema de arquivo. O XFS suporta agendamento de metadados, o qual facilita a recuperao de travamento rpida. Os sistemas de arquivo XFS tambm podem ser desfragmentados e expandidos enquanto so montados e ativados. Alm disso, o Red Hat Enterprise Linux 6 suporta o backup e recperaes de utlitrios especficos ao XFS. O XFS usa a alocao baseada em extenso, e apresenta um nmero de esquemas de alocao tais como alocao atrasada e pr-alocao explcita. A alocao baseada em extenso fornece um mtodo de rastreamento de espao utilizado em um sistema de arquivo mais compacto e eficiente, e aprimora o desempenho de arquivos grandes reduzindo a fragmentao e o espao consumido pelo metadado. A alocao atrasada aprimora a chance que um arquivo ter de ser gravado em um grupo contguo de blocos, reduzindo a fragmentao e aprimorando o desempenho. A pr-alocao pode ser usada para prevenir fragmentao de um modo geral em casos onde o aplicativo sabe a quantidade de dados que precisa para gravar antecipadamente. O XFS fornece escalabilidade de E/S excelente, utilizando b-trees para indexar todos os dados de usurios e metadados. As contagens de objetos crescem a medida que todas as operaes em ndices herdam a escalabilidade de logartimos de b-trees adjacentes. Algumas opes de ajuste de XFS em tempo m kfs variam em profundidade de b-trees, que modificam as caractersticas de escalabilidade de subsistemas diferentes.

75

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

7.3.2.1. Ajuste bsico para XFS Em geral, o formato do XFS padro e opes de montagem para a maioria de cargas de trabalho so adequadas; a Red Hat recomenda que os valores padro sejam utilizados a no ser em mudanas de configurao especificas esperadas para beneficiar a carga de trabalho do sistema de arquivo. Se o software RAID estiver em uso, o comando m kfs.xfs configura automaticamente a si prprio com a unidade de faixa correta e profundidade para alinhar com o hardware. Isto pode precisar ser configurado manualmente se o hardware RAID estiver em uso. A opo de montagem inode64 altamente recomendada para sistemas de arquivo em muli-terabyte, exceto onde o sistema de aquivo for exportado via NFS e clientes NFS de 32 bits de legacia, que requerem acesso ao sistema de arquivo. A opo de montagem logbsize recomendada para sistemas de arquivo que so modificados frequentemente, ou em intermitncias. O valor padro de MAX (32 KB, unidade de faixa de log), e o tamanho mximo 256 KB. O valor de 256 KB recomendado para sistemas de arquivo que passam por modificaes pesadas. 7.3.2.2. Ajuste avanado para XFS Antes de mudar os parmetros de XFS, voc precisar entender porque os parmetros de XFS padro esto causando problemas de desempenho. Isto envolve compreenso do que seu aplicativo est fazendo, e como o sistema de arquivo est reagindo quelas operaes. Os problemas de desempenho observveis que podem ser corrigidos ou reduzidos atravs do ajuste so geralmente causados pela fragmentao de arquivo ou conteno de recursos no sistema de arquivo. Existem formas diferentes de enderear estes problemas e em alguns casos reparar o problema ir requerer que o aplicativo, ao invs da configurao de sistema de arquivo, seja modificado. Se voc no passou por este processo anteriormente, recomenda-se que voc entre em contato com o engenheiro de suporte da Red Hat para obter assistncia. Otimizao para um nmero grande de arquivos. O XFS impe um limite arbitrrio para o nmero de arquivos que um sistema de arquivos pode conter. Em geral, esse limite alto o suficiente para que ele nunca seja atingido. Se voc sabe que o limite padro ser insuficiente antes do tempo, voc pode aumentar a percentagem de espao do sistema de arquivo permitido para inodes com os m kfs.xfs. Se voc encontrar o limite do arquivo aps a criao do sistema de arquivos (normalmente indicado por erros ENOSPC ao tentar criar um arquivo ou pasta, apesar de espao livre disponvel), voc poder ajustar o limite com os xfs_growfs . Otimizao para um grande nmero de arquivos em um diretrio nico O tamanho do bloco do diretrio fixado para a vida de um sistema de arquivos, e no pode ser alterado, salvo mediante a formatao inicial com m kfs. O bloco mnimo de diretrio o tamanho do bloco do sistema de arquivos, o qual tem como padro MAX (4 KB, o tamanho do arquivo de bloco do sistema). De um modo geral, no h nenhuma razo para reduzir o tamanho do bloco de diretrio. Como a estrutura de diretrio baseado b-tree, mudar o tamanho do bloco afeta a quantidade de informaes de diretrio que podem ser recuperadas ou modificados por E/S fsica. Quanto maior o diretrio se torna, mais E/S cada operao ir requerer em um determinado tamanho do bloco. No entanto, quando maiores tamanhos de bloco de diretrio esto em uso, mais CPU consumida por cada operao de modificao em relao mesma operao em um sistema de arquivos com um diretrio de menor tamanho do bloco. Isto significa que para tamanhos pequenos de diretrio, blocos

76

Captulo 7. Sistemas de Arquivos

grandes de diretrios iro resultar em menor desempenho modificao. Quando o diretrio atinge um tamanho onde E/S o fator limitante do desempenho, tamanhos grandes de diretrios de bloco possuem um melhor desempenho. A configurao padro de um tamanho de bloco de sistema de aquivo de 4 KB e um tamanho de bloco de diretrio de 4 KB o melhor para diretrios com at 1-2 milhes de entradas com um comprimento de nome de bytes 20-40 por entrada. Se o seu sistema de arquivos requer mais entradas, maiores tamanhos de bloco de diretrio tendem a ter um melhor desempenho - um tamanho de bloco 16 KB melhor para sistemas de arquivos com 1-10.000.000 entradas de diretrio e um tamanho de bloco 64 KB melhor para sistemas de arquivos com mais de 10 milhes de entradas de diretrio. Se a carga de trabalho usa pesquisas de diretrio aleatrias mais do que modificaes (ou seja, as leituras de diretrio so muito mais comuns e importantes do que as gravaes de diretrio), ento os limiares acima para aumentar o tamanho do bloco de aproximadamente uma ordem de magnitude menor. Otimizao para simultaneidade Ao contrrio de outros sistemas de arquivos, o XFS pode realizar vrios tipos de operaes de alocao e desalocao simultaneamente, desde que as operaes estejam ocorrendo em objetos nocompartilhados. Alocao ou desalocao de extenses podem ocorrer simultaneamente, desde que as operaes simultneas ocorram em diferentes grupos de alocao. Da mesma forma, a alocao ou desalocao de inodes podem ocorrer simultaneamente, desde que as operaes simultneas afetem diferentes grupos de alocao. O nmero de grupos de alocao torna-se importante quando a utilizao de mquinas com uma elevada contagem de CPU e aplicativos multi-threaded que tentam executar operaes simultaneamente. Se existir apenas quatro grupos de atribuio, ento operaes de metadados paralelas e sustentadas sero dimensionadas somente at aquelas quatro CPUs (o limite de simultaneidade fornecida pelo sistema). Para os sistemas de arquivos pequenos, assegure que o nmero de grupos de atribuio suportado pela simultaneidade fornecida pelo sistema. Para sistemas de arquivos grandes (dezenas de terabytes e maiores) as opes de formatao padro geralmente criam grupos de alocao suficientes para no limitar a simultaneidade. Os aplicativos devem estar cientes de pontos nicos de conteno, a fim de usar o paralelismo inerente estrutura do sistema de arquivos XFS. No possvel modificar um diretrio ao mesmo tempo, portanto os aplicativos que criam e removem grandes quantidades de arquivos devem evitar o armazenamento de todos os arquivos em um nico diretrio. Cada diretrio criado colocado em um grupo de alocao diferente, portanto, tcnicas, tais como arquivos de hash sobre mltiplos subdiretrios fornecem um padro de armazenamento escalvel em relao ao uso de um nico diretrio grande. Otimizao para aplicativos que utilizam atributos estendidos. XFS pode armazenar pequenos atributos diretamente no inode se houver espao disponvel. Se o atributo encaixa no inodo, ento ele pode ser recuperado e modificado sem a necessidade de E/S adicionais para recuperar blocos de atributos distintos. O diferencial de desempenho entre os in-line e atributos out-of-line podem facilmente ser uma ordem de magnitude mais lenta para os atributos de outof-line. Para o tamanho do inode padro de 256 bytes, cerca de 100 bytes de atributo de espao est disponvel, dependendo do nmero de apontadores de extenso de dados tambm armazenados no inode. O tamanho de inodo padro realmente til apenas para armazenar um nmero pequeno de pequenas atributos. Aumentando o tamanho do inode em tempo mkfs pode aumentar a quantia de espao disponvel para

77

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

armazenar atributos in-line. Um tamanho de inode de 512 bytes aumenta o espao disponvel para cerca de 350 bytes. Um inode de 2 KB possui cerca de 1900 bytes de espao disponvel. Existe, no entanto, um limite para o tamanho dos atributos individuais que podem ser armazenados inline - existe um limite mximo de tamanho de 254 bytes para o nome de atributo e o valor (isto , um atributo com um comprimento de nome de 254 bytes e um comprimento de 254 bytes valor ficar inline). Exceder esses limites de tamanho obriga os atributos de linha, mesmo que no tenha espao suficiente para armazenar todos os atributos do inode. Otimizao para modificaes de metadados sustentados. O tamanho do log o principal fator na determinao do nvel possvel de modificao de metadados sustentados. O dispositivo de log circular, portanto, antes da parte final poder ser sobrescrita, todas as modificaes no registro devem ser gravadas no local real no disco. Isto pode envolver uma quantidade significativa de procura para reproduzir todos os metadados sujos. A configurao padro escala o tamanho do log em relao ao tamanho do sistema de arquivos em geral, assim, na maioria dos casos o tamanho do log no vai precisar de ajuste. Um dispositivo de log pequeno ir resultar em write-back de metadados muito freqente - o registro ser constantemente empurrado em sua parte final para liberar espao e assim metadados freqentemente modificados sero freqentemente gravados no disco, fazendo com que as operaes sejam lentas. Aumentar o tamanho do log aumenta o perodo de tempo entre eventos que empurram sua parte final. Isso permite uma melhor agregao de metadados sujos, resultando em melhores padres de writeback de metadados, e menos de write-back de metadados frequentemente alterados. O compromisso que os logs maiores requeiram mais memria para acompanhar todas as mudanas pendentes na memria. Se voc tem uma mquina com memria limitada, ento logs grandes no so benficos porque restries de memria causaro write-back de metadados muito antes de obter benefcios de um grande log. Nestes casos, os registros menores, em vez de maiores, muitas vezes, fornecem um melhor desempenho porque write-back de metadados a partir do registro a falta de espao mais eficiente que o write-back impulsionado pela recuperao da memria. Voc deveria tentar sempre alinhar o log com a unidade de faixa adjacente que contenha o sistema de arquivo. O m kfs faz isto por padro para os dispositivos MD e DM, mas para o hardware RAID possvel que precise ser especificado. Configur-lo corretamente evita todas as possibilidades do log de E/S causar uma E/S desalinhada e operaes subsequentes de leitura-modificar-gravao ao gravar as modificaes em disco. Operao de log pode ser melhorada atravs da edio de opes de montagem. Aumentar o tamanho dos buffers de log na memria (ogbsize ) aumenta a velocidade com que as mudanas podem ser gravadas no log. O tamanho do buffer de log padro MAX (32 KB, unidade de faixa de log), e o tamanho mximo de 256 KB. Em geral, um maior valor resulta em desempenho mais rpido. No entanto, sob cargas de trabalho fsync-pesadas, buffers de log pequenos podem ser visivelmente mais rpidos do que os grandes buffers grandes com um grande alinhamento da unidade de faixa. A opo de montagem delaylog tambm melhora o desempenho de modificao de metadados sustentados, reduzindo o nmero de alteraes no log. Ela consegue isso atravs da agregao de mudanas individuais na memria antes de grav-los no log: metadados modificados freqentemente gravado no log periodicamente em vez de em cada modificao. Essa opo aumenta o uso de memria de rastreamento de metadados sujos e aumenta as operaes de perdas potenciais quando ocorre um travamento, mas pode melhorar a velocidade de modificao de metadados e escalabilidade por uma ordem de magnitude ou mais. O uso desta opo no reduz a dados ou a integridade de metadados

78

suporte de getsockopt para thin-streams do TCP

quando fsync , fdatasync ou sync so usados para garantir que os dados e metadados sejam gravados no disco.

7.4. Clustering
Armazenamento em cluster fornece uma imagem do sistema de arquivos consistente em todos os servidores em um cluster, permitindo que os servidores leiam e gravem em um nico sistema de arquivos compartilhado. Isso simplifica a administrao de armazenamento, limitando tarefas como instalao de reparos e aplicativos em um sistema de arquivos. Um sistema de arquivos em todo o cluster tambm elimina a necessidade de cpias redundantes de dados de aplicativos, simplificando o backup e a recuperao de desastres. Red Hat's High Availability Add-On fornece armazenamento em cluster em conjunto com o Red Hat Global File System 2 (parte do Resilient Storage Add-On). 7.4 .1. Global File System 2 Global File System 2 (GFS2) um sistema de arquivos nativos que interage diretamente com o sistema de arquivos do kernel Linux. Ele permite que vrios computadores (ns) compartilhem simultaneamente o mesmo dispositivo de armazenamento em cluster. O sistema de arquivos GFS2 em grande parte auto ajustvel, mas o ajuste manual possvel. Esta seo descreve as consideraes de desempenho ao tentar ajustar o desempenho manualmente. A Red Hat Enterprise Linux 6.4 apresenta melhorias no gerenciamento de fragmentao de arquivo no GFS2. Os arquivos criados pelo Red Hat Enterprise Linus 6.3 ou anteriores tinham a tendncia fragmentao de arquivo se mltiplos arquivos fossem gravados ao mesmo tempo por mais de um processo. Esta fragmentao fez com que tudo ficasse mais lento, especialmente em cargas de trabalhos envolvendo grandes arquivos. Com o Red Hat Enterprise Linux 6.4, as gravaes simultneas resultam em menos fragmentaes de arquivos e portanto em melhor desempenho para estas cargas de trabalho. Embora no exista uma ferramenta de desfragmentao para GFS2 no Red Hat Enterprise Linux, voc pode desfragmentar arquivos individuais, identificando-os com a ferramenta filefrag , copi-los para arquivos temporrios, e renomear os arquivos temporrios para substituir os originais. (Este procedimento tambm pode ser feito em verses anteriores a 6.4, enquanto que a gravao feita sequencialmente.) Como o GFS2 usa um mecanismo de bloqueio global que potencialmente requer a comunicao entre os ns de um cluster, o melhor desempenho ser alcanado quando o sistema projetado para evitar uma conteno de arquivo e diretrio entre esses ns. Alguns mtodos para evitar conteno so os seguintes: Arquivos pr-alocados e diretrios com o fallocate onde possvel, para otimizar o processo de alocao e evitar a necessidade de bloquear pginas fonte. Minimizar as reas do sistema de arquivos que so compartilhadas entre vrios ns para minimizar a invalidao do cache cross-n e melhorar o desempenho. Por exemplo, se vrios ns montarem o mesmo sistema de arquivos, mas acessarem diferentes sub-diretrios, voc provavelmente vai conseguir um melhor desempenho movendo um subdiretrio para um sistema de arquivo separado. Escolha um tamanho de grupo de recursos ideal e nmero. Isso depende de tamanhos de arquivo tpicos e espao livre disponvel no sistema, e afeta a probabilidade de que vrios ns tentaro usar um grupo de recursos simultaneamente. Muitos grupos de recursos podem retardar a alocao de blocos, enquanto o espao de alocao localizado, enquanto muito poucos grupos de recursos podem causar conteno de bloqueio durante a desalocao. Em geral, melhor testar vrias configuraes para determinar o que melhor para a sua carga de trabalho.

79

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

No entanto, a conteno no o nico problema que pode afetar o desempenho de sistema de arquivo GFS2. Outras prticas para aprimorar o desempenho geral so: Selecione seu hardware de armazenamento de acordo com os modelos de E/S esperados dos ns de cluster e os requerimentos de desempenho do sistema de arquivo. Use armazenamento de estado slido onde possvel para diminuir tempo de busca. Crie um sistema de arquivos de tamanho apropriado para o seu trabalho, e assegure-se que o sistema de arquivos nunca est em mais de 80% da capacidade. Sistemas de arquivos menores tero o tempo de backup proporcionalmente mais curtos, e requerem menos tempo e memria para o controle do sistema de arquivos, mas esto sujeitos a elevada fragmentao caso sejam pequenos demais para a sua carga de trabalho. Defina tamanhos de dirios maiores para cargas de trabalho de metadados intensivo, ou quando dados com dirio estiver em uso. Embora este use mais memria, ele melhora o desempenho, pois mais espao dirio est disponvel para armazenar dados antes de uma gravao ser necessria. Assegure-se de que o relgico nos ns de GFS2 esto sincronizados para evitar problemas com os aplicativos em rede. Recomendamos o uso do NT P (Network T ime Protocol). A menos que os tempos de acesso de arquivo ou diretrio sejam crticos para a operao de seu aplicativo, monte o sistema de arquivo com as opes de montagem noatim e e nodiratim e .

Nota
Red Hat recomenda o uso da opo noatim e com o GFS2. Se voc precisar usar quotas, tente reduzir a freqncia das operaes de sincronizao de cota ou usar a sincronizao de quota difusa para evitar problemas de desempenho decorrentes de atualizaes de arquivos de quotas constantes.

Nota
A conta de cotas "difusas" (fuzzy) pode permitir que usurios ou grupos excedam um pouco do limite de cota. Para minimizar isto, o GFS2 reduz o perodo de sincronizao, de forma dinmica quando um usurio ou grupo se aproxima do limite de cota. Para mais informaes sobre os aspectos do ajuste de desempenho do GFS2 consulte o Global File System 2 guide, available from http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

80

Soquete recebe tamanho de buffer

Captulo 8. Networking
Com o tempo, pilha de rede do Red Hat Enterprise Linux foi atualizada com inmeros recursos de otimizao automatizadas. Para a maioria das cargas de trabalho, as configuraes de rede autoconfigurados proporcionam desempenho otimizado. Na maioria dos casos, problemas de desempenho de rede so realmente causados por um defeito no hardware ou infra-estrutura deficiente. T ais causas esto alm do escopo deste documento, os problemas de desempenho e solues discutidas neste captulo so teis na otimizao de sistemas perfeitamente funcionais. Networking um subsistema delicado, contendo partes diferentes com conexes sensveis. por isso que a comunidade open source e Red Hat investem muito trabalho na implementao de formas de otimizam automaticamente o desempenho da rede. Como tal, dado a maioria das cargas de trabalho, voc pode nunca precisar reconfigurar a rede para o desempenho.

8.1. Melhorias de Desempenho de Rede


Red Hat Enterprise Linux 6.1 fornece as seguintes melhorias de desempenho de rede:

Receive Packet Steering (RPS)


RPS permite que uma nica fila de NIC rx tenha sua recepo de carga de trabalho softirq distribuda entre diversas CPUs. Isto ajuda a prevenir trfego em rede de ser afunilado em uma nica fila de hardware NIC. Para permitir um RPS, especificamente os nomes de CPU de alvo em /sys/class/net/ethX/queues/rx-N/rps_cpus, substituindo ethX pelo nome de dispositivo correspondente do NIC (por exemplo, eth1 , eth2 ) e rx-Npela fila de recepo do NIC especificada. Isto permitir que as CPUs especificadas no arquivo processem dados de uma fila rx-N em ethX. Ao especificar CPUs, consider o cache affinity da fila
[4] .

Receive Flow Steering


RFS uma extenso do RPS, permitindo que o administrador configure uma tabela hash que preenchido automaticamente quando receber aplicaes de dados e so interrogados pela pilha de rede. Isso determina quais aplicativos esto recebendo cada pedao de dados de rede (com base na fonte: informaes sobre a rede de destino). Com o uso desta informao, a pilha de rede pode agendar a CPU ideal para receber cada pacote. Para configurar RFS, use os seguintes ajustveis: /proc/sys/net/core/rps_sock_flow_entries Isto controla o nmero mximo de soquetes/fluxos que o kernel pode conduzir em direo a qualquer CPU especfica. Isto um limite compartilhado com todo o sistema. /sys/class/net/ethX/queues/rx-N/rps_flow_cnt Isto controla o nmero mximo de soquetes/fluxos que o kernel pode conduzir em direo a qualquer CPU especfica. (rx-N) em um NIC (ethX). Note que o resumo de todos os valores por fila para este ajustvel em todos os NICs deve ser igual ou menor do que /proc/sys/net/core/rps_sock_flow_entries.

81

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Ao contrrio de RPS, o RFS permite tanto a fila de recebimento e a aplicao de compartilhar a mesma CPU durante o processamento de fluxos de pacotes. Isto pode resultar em melhor desempenho em alguns casos. No entanto, tais melhorias so dependentes de fatores como a hierarquia de cache, a carga de aplicao, e semelhantes.

suporte de getsockopt para thin-streams do T CP


Thin-stream um termo usado para caracterizar protocolos de transportes onde os aplicativos enviam dados com taxas to baixas que os mecanismos de retransmisso de protocolo no ficam totalmente saturados. Os aplicativos que utilizam os protocolos thin-stream geralmente transportam via protocolos confiveis como o T CP; na maioria dos casos, tais aplicativos fornecem servios sensveis ao tempo (por exemplo, stock trading, online gaming, sistemas de controle). Para servios sensveis ao tempo, a perda de pacote pode ser devastadora para a qualidade de servio. Para ajudar a prevenir isto, a chamada getsockopt foi aprimorada para suportar duas opes extras: T CP_T HIN_DUPACK Este Booleano habilita o disparo dinmico de retransmisso aps um dupACK para thin streams. T CP_T HIN_LINEAR_T IMEOUT S Este Booleano habilita o disparo dinmico de limite de tempo linear para thin streams.

Ambas opes so ativadas especificamente pelo aplicativo. Para mais informaes sobre estas opes, consulte o file:///usr/share/doc/kerneldoc-verso/Docum entation/networking/ip-sysctl.txt. Para mais informaes sobre o thinstreams, consulte o file:///usr/share/doc/kerneldoc-verso/Docum entation/networking/tcp-thin.txt.

Suporte T ransparent Proxy (T Proxy)


O kernel pode agora lidar com bound no local IPv4 T CP e soquetes UDP para suportar proxies transparentes. Para habilitar isto, voc ter de configurar iptables adequadamente. Voc tambm ir precisar habilitar e configurar o roteamento de poltica adequadamente. Para mais informaes sobre os proxies transparentes, consulte o file:///usr/share/doc/kernel-doc-version/Docum entation/networking/tproxy.txt.

8.2. Configuraes de Rede Otimizadas


Ajuste de desempenho normalmente feito de forma preventiva. Muitas vezes, ns ajustamos variveis conhecidas antes de executar um aplicativo ou implantao de um sistema. Se o ajuste revela-se ineficaz, tentamos ajustar outras variveis. A lgica por trs desse pensamento que por padro, o sistema no est operando em um nvel ideal de desempenho e, como tal, pensamos que preciso ajustar o sistema de acordo. Em alguns casos, podemos faz-lo atravs de palpites calculados. Como mencionado anteriormente, a pilha de rede auto-otimizvel. Alm disso, ajustar a rede de maneira efetiva requer um conhecimento profundo no apenas de como a pilha de rede funciona, mas tambm as necessidades de recursos de rede do sistema especfico. Configurao de desempenho de rede incorreta pode realmente levar a degradao do desempenho.

82

Afinidade de CPU/cache

Por exemplo, considere o problema bufferfloat. O aumento da profundidade da fila do buffer resulta em conexes T CP que tm janelas de congestionamento maior do que o link iria permitir (devido ao buffer profundo). No entanto, essas conexes tambm tm valores RT T enormes, pois as estruturas gastam tanto tempo em fila. Isto, por sua vez, realmente resulta em produo sub-ptima, uma vez que seria impossvel detectar os congestionamentos. Quando se trata de desempenho da rede, aconselhvel manter as configuraes padro a menos que um problema de desempenho particular, torne-se aparente. Estas questes incluem a perda de estrutura, o rendimento significantemente reduzido, e semelhantes. Mesmo assim, a melhor soluo muitas vezes uma que resulta de um minucioso estudo do problema, ao invs de simplesmente ajustar as configuraes para cima (aumento de buffer/comprimentos de fila, reduo a latncia de interrupo, etc.) Para diagnosticar adequadamente um problema de desempenho de rede, use as seguintes ferramentas: netstat Um utilitrio de linha de comando que imprime conexes de rede, tabelas de roteamento, estatsticas de interface, conexes mascaradas e associaes de multicast. Ele recupera informaes sobre subsistemas de rede a partir do sistema de arquivo /proc/net/. Estes arquivos incluem: /proc/net/dev (Informaes de dispositivo) /proc/net/tcp (Informaes de soquete T CP) /proc/net/unix (Informaes de soquete de domnio Unix) Para mais informaes sobre netstate seus arquivos de referncia de /proc/net/, consulte a pgina man netstat: m an netstat. dropwatch Um utilitrio de monitoramento que monitora pacotes despejados pelo kernel. Para mais informaes, consulte a pgina man dropwatch : m an dropwatch . ip Um utilitrio para gerenciar e monitorar rotas, dispositivos, roteamento de poltica e tneis. Para mais informaes consulte a pgina man ip : m an ip . ethtool Um utilitrio para exibir e modificar as configuraes do NIC. Para mais informaes, consulte a pgina man ethtool : m an ethtool . /proc/net/snmp Um arquivo que exibe dados ASCII necessrios para bases de informaes de gerenciamento IP, ICMP, T CP e UDP para um agente snm p . Ele tambm exibe estatsticas de tempo real de UDP-lite.

O SystemTap Beginners Guide contm diversos scripts de amostra que voc pode usar para o desempenho de rede do perfil e do monitor. Este guia est disponvel a partir do link http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.

83

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Aps a coleta de dados relevantes sobre um problema de desempenho de rede, voc deve ser capaz de formular uma teoria e, felizmente, uma soluo. [5] Por exemplo, um aumento de erros de entrada UDP em /proc/net/snm p indica que um ou mais soquetes que recebem filas esto cheias quando as pilhas de rede tentam enfileirar novas estruturas no soquete de um aplicativo. Isso indica que os pacotes so afunilados pelo menos em uma fila de socket, o que significa que a fila do soquete drena pacotes muito lentamente, ou o volume de pacotes muito grande para aquela fila de soquete. Se for o ltimo caso, ento verifique os logs de qualquer aplicao de rede intensiva, a procura de perda de dados - para resolver isso, voc precisa para otimizar ou reconfigurar o aplicativo ofensivo.

Soquete recebe tamanho de buffer


Soquete enviam e recebem tamanhos que so ajustados dinamicamente, de modo que raramente precisam ser editadas manualmente. Se uma anlise mais aprofundada, como a anlise apresentada no exemplo de rede SystemT ap, sk_stream _wait_m em ory.stp , sugere que a taxa de dreno da fila de soquete muito lenta, ento voc pode aumentar a profundidade da fila de soquete do aplicativo. Para fazer isso, aumente o tamanho de buffers de recepo por utilizados por soquetes, configurando um dos seguintes valores: rmem_default Um parmetro de kernel que controla o tamanho do default de buffers de recepo usados pelo soquete. Para configurar isto, execute o seguinte comando:
sysctl -w net.core.rmem_default=N

Substitua o N pelo tamanho de buffer desejado, em bytes. Para determinar o valor para este parmetro de kernel, visualize /proc/sys/net/core/rm em _default. T enha em mente que o valor de rm em _default deve ser maior do que rm em _m ax (/proc/sys/net/core/rm em _m ax); se necessrio, aumente o valor de rm em _m ax. SO_RCVBUF A opo de soquete que controla o tamanho mximo de buffers de recepo de soquete, em bytes. Para mais informaes sobre SO_RCVBUF , consulte a pgina man para mais detalhes: m an 7 socket. Para configurar SO_RCVBUF , use o utilitrio setsockopt. Voc pode recuperar o valor atual SO_RCVBUF com o getsockopt. Para mais informaes utilizando ambos utilitrios, consulte a pgina man setsockopt: m an setsockopt.

8.3. Viso Geral de Recepo de Pacotes


Para melhor analisar os funilamentos da rede e problemas de desempenho, voc precisa entender como funciona a recepo de pacotes. Recepo de pacotes importante para o ajuste de desempenho de rede, pois o caminho de recepo onde as estruturas so muitas vezes perdidas. Estruturas perdidas no caminho de recepo pode causar uma penalidade significativa para o desempenho da rede.

84

Afinidade de CPU/cache

Figura 8.1. Diagrama de caminho de recepo de rede

O kernel do Linux recebe cada estrutura e sujeita-as a um processo de quatro passos: 1. Recepo de Hardware: a placa de interface de rede (NIC) recebe a estrutura a cabo. Dependendo de sua configurao do driver, o NIC tranferir a estrutura para uma memria de buffer de hardware interno ou para um buffer de anel especificado. 2. Hard IRQ: o NIC declara a presena de uma estrutura de rede ao interromper a CPU. Isto faz com que o driver do NIC perceba a interrupo e agende a operao IRQ leve. 3. Soft IRQ: este estgio implementa o processo de estrutura de recepo e executado no contexto de softirq . Isto significa que o estgio pr esvazia todos os aplicativos que esto executando em uma CPU especfica, mas ainda permite que os IRQs rgidos a serem declarados. Neste contexto (em execuo na mesma CPU como IRQ rgido, minimizando sobrecarga de bloqueio), o kernel realmente remove o quadro dos buffers de hardware NIC e o processa atravs da pilha de rede. A partir da, o quadro encaminhado, descartado ou passado para um soquete de escuta de alvo. Quando passado para um soquete, o quadro anexado ao aplicativo que possui o soquete. Este processo feito de forma iterativa at que o buffer de hardware NIC no tenha mais quadros, ou at que o peso do dispositivo ( dev_weight ). Para mais informaes sobre o peso do dispositivo, consulte o Seo 8.4.1, Buffer de Hardware NIC 4. Recepo de Aplicativo: o aplicativo recebe o quadro e desinfileira-o de qualquer posse de soquete via chamadas POSIX padro (read , recv, recvfrom ). Neste ponto, os dados recebidos sob a rede no existem mais na pilha de rede.

Afinidade de CPU/cache
Para manter o rendimento alto no caminho de recepo, recomendado que voc mantenha o cache L2 hot. Como descrito anteriormente, os buffers de rede so recebidos na mesma CPU como o IRQ que sinalizou a presena dos mesmos. Isto significa que os dados de buffer estaro no cache L2 daquela CPU que est recebendo. Para aproveitar isto, coloque a afinidade do processo em aplicativos que devero receber o maior nmero de dados sobre a NIC que compartilha o mesmo ncleo que o cache L2. Isto ir maximizar as chances de um acerto de cache, e, assim, melhorar o desempenho.

8.4. Resolvendo Filas Comuns/ Problemas de Perda de Quadro


O motivo mais comum para a perda de quadros uma saturao de fila. O ncleo define um limite para o comprimento de uma fila, e, em alguns casos, a fila enche mais rapidamente do que drena. Quando isso ocorre por muito tempo, os quadros comeam a ser descartados. Como ilustrado em Figura 8.1, Diagrama de caminho de recepo de rede, existem duas grandes filas no caminho de recepo: o buffer de hardware NIC ea fila do socket. Ambas as filas precisam ser configurados adequadamente, para proteger contra saturao de filas.

85

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

8.4 .1. Buffer de Hardware NIC O NIC enche seu buffer de harware com quadros; o buffer drenado pelo softirq , o qual declara o NIC via uma interrupo. Para interrogar o status desta fila, use o seguinte comando:
ethtool -S ethX

Substitua ethX pelo nome de dispositivo correspondente do NIC. Isto ir exibir quantos quadros foram despejados dentro do ethX. Geralmente, um despejo ocorre porque a fila no possui mais espao de buffer no qual armazena quadros. Existem formas diferentes de resolver este problema, assim como: T rfego de entrada Voc pode ajudar a evitar saturao de fila diminuindo a velocidade do trfego de entrada. Voc pode fazer isto filtrando, reduzindo o nmero de grupos de multicast unidos, abaixando o trfego de transferncia e assim por diante. Comprimento da Fila Como forma alternativa voc tambm pode aumentar o comprimento da fila. Isto envolve aumentar o nmero de buffers na fila especfica para qualquer mximo que o driver permitir. Para fazer isto, edite os parmetros de anel rx/tx de ethX usando:
ethtool --set-ring ethX

Anexe os valores de rx ou tx apropriados. Para mais informaes, consulte m an ethtool . Peso do dispositivo T ambm possvel aumentar a taxa na qual uma fila seja drenada. Para fazer isso, ajuste o peso do dispositivo do NIC adequadamente. Este atributo refere-se ao nmero mximo de quadros que a placa de rede pode receber antes do contexto softirq ter que render a CPU e se reagendar. controlada pela varivel /proc/sys/net/core/dev_weight.

A maioria dos administradores tm uma tendncia a escolher a terceira opo. No entanto, tenha em mente que existem consequncias para faz-lo. Aumentar o nmero de quadros que podem ser recebidos a partir de um NIC em uma iterao implica ciclos extra de CPU, durante o qual nenhum aplicativo pode ser programado naquela CPU. 8.4 .2. Fila de Soquete Como a fila de hardware NIC, a fila de socket preenchida pela pilha de rede a partir do contexto softirq . Os aplicativos ento drenam as filas de seus soquetes correspondentes atravs de chamadas para read , recvfrom , e assim por diante. Para monitorar o status desta fila, use o utilitrio netstat; a coluna Recv-Q exibe o tamanho da fila. Geralmente falando, saturaes em filas de soquete so gerenciadas da mesma forma que as saturaes de buffer de hardware NIC (ex.: Seo 8.4.1, Buffer de Hardware NIC): T rfego de entrada A primeira opo diminuir o trfego de entrada, configurando a taxa na qual se enche a fila. Para isso, voc pode filtrar quadros ou despej-los de forma pr-vazia. Voc tambm pode desacelerar o trfego de entrada, diminuindo o peso do dispositivo
[6 ] .

86

Histrico de Revises

Profundidade da Fila Voc tambm pode evitar saturao de fila de soquete aumentando a profundidade da fila. Para fazer isto, aumente o valor do parmetro do kernel rm em _default ou a opo de soquete SO_RCVBUF . Para mais informaes sobre ambos, consulte Seo 8.2, Configuraes de Rede Otimizadas. Frequncia de chamada de aplicativo Sempre que possvel, otimize o aplicativo para realizar realizar chamadas com mais freqncia. T rata-se de modificar ou reconfigurar o aplicativo de rede para realizar chamadas POSIX mais freqentes (como recv, read ). Isso permite que um aplicativo drene a fila mais rpidamente.

Para muitos administradores, aumentar a profundidade da fila a soluo prefervel. Esta a soluo mais fcil, mas nem sempre pode funcionar a longo prazo. A medida que as tecnologias de rede ficam mais rpidas, as filas de soquete continuam a encher mais rapidamente. Com o tempo, isso significa ter de voltar a ajustar a profundidade da fila de acordo. A melhor soluo aumentar ou configurar o aplicativo para drenar dados do kernel mais rapidamente, mesmo que isso signifique enfileiramento dos dados no espao de aplicao. Isso permite que os dados sejam armazenados de forma mais flexvel, uma vez que pode ser trocado e paginado novamente quando necessrio.

8.5. Consideraes do Multicast


Quando vrias aplicaes escutam um grupo de multicast, o cdigo do kernel que lida com quadros multicast exigido pelo projeto para duplicar os dados da rede para cada soquete individual. Esta duplicao demorada e ocorre no contexto softirq . Adicionar vrios ouvintes em um nico grupo multicast, portanto, tem um impacto direto sobre o tempo de execuo do contexto softirq . Adicionar um ouvinte a um grupo multicast implica que o kernel deve criar uma cpia adicional para cada quadro recebido para esse grupo. O efeito disto mnimo em baixo volume de trfego e nmeros ouvinte pequenos. No entanto, quando soquetes mltiplas escutam um grupo de multicast de alto trfego, o aumento do tempo de execuo do contexto softirq pode levar a despejos de quadros, tanto na placa de rede quanto na fila de socket. Aumento de tempos de execuo do softirq traduzi em uma reduo de oportunidade para que aplicaes sejam executados em sistemas fortemente carregados, por isso a taxa em que os quadros multicast so perdidos aumenta medida que o nmero de aplicaes de escuta de grupos de multicast de alto volume aumenta. Resolva esta perda de quadro otimizando suas filas de sockets e buffers de hardware NIC, como descrito em Seo 8.4.2, Fila de Soquete or Seo 8.4.1, Buffer de Hardware NIC. Como forma alternativa, voc poder otimizar o uso de um soquete de aplicativo. Para fazer isto, configure o aplicativo para controlar um soquete nico e disseminar os dados de rede recebidos rapidamente para outros processo de espao de usurio.

[4] As s eg urar o c ac he affinity entre uma CPU e NIC s ig nific a c o nfig ur-lo s p ara c o mp artilhar d o mes mo c ac he L2. Para mais info rma es , c o ns ulte o Se o 8 .3, Vis o G eral d e Rec ep o d e Pac o tes . [5] Se o 8 .3, Vis o G eral d e Rec ep o d e Pac o tes c o ntm uma vis o g eral d o p ac o te d e viag em, o q ue d eve ajud -lo a lo c aliz ar e map ear as reas p ro p ens as a funilamento na p ilha d e red e.

87

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

[6 ] Pes o d o d is p o s itivo d o NIC c o ntro lad o via /p ro c/sys/n et/co re/d ev_wei g h t. Para mais info rma es s o b re o p es o d o d is p o s itivo e as imp lic a es d e ajus t-lo , c o ns ulte Se o 8 .4.1, Buffer d e Hard ware NIC .

88

Histrico de Revises

Histrico de Revises
Reviso 4 .0-22.2 pt-BR translation completed Wed Jun 26 2013 Glaucia Cintra

Reviso 4 .0-22.1 T hu Apr 18 2013 Chester Cheng T raduo de arquivos sincronizados com a verso 4.0-22 de fontes do XML Reviso 4 .0-22 Fri Feb 15 2013 Publicao para Red Hat Enterprise Linux 6.4. Laura Bailey

Reviso 4 .0-19 Wed Jan 16 2013 Laura Bailey Correes mnimas para obteno de consistncia (BZ #868404). Reviso 4 .0-18 T ue Nov 27 2012 Publicao para Red Hat Enterprise Linux 6.4 Beta. Reviso 4 .0-17 Mon Nov 19 2012 Foi adicionada a seo SME feedback re. numad (BZ #868404). Reviso 4 .0-16 T hu Nov 08 2012 Foi adicionada a seo de rascunho em numad (BZ #868404). Laura Bailey

Laura Bailey

Laura Bailey

Reviso 4 .0-15 Wed Oct 17 2012 Laura Bailey Aplicando o feedback do SME para o descarte de bloco e foi movida a seo para uma subseo de Mount Options (BZ #852990). Descries de perfil de desempenho foram atualizadas (BZ #858220). Reviso 4 .0-13 Wed Oct 17 2012 Laura Bailey Descries de perfil de desempenho foram atualizadas (BZ #858220). Reviso 4 .0-12 T ue Oct 16 2012 Navegao de livro foi aprimorada (BZ #854082). Foi corrigida a definio de file-max (BZ #854094). Foi corrigida a definio de threads-max (BZ #856861). Laura Bailey

Reviso 4 .0-9 T ue Oct 9 2012 Laura Bailey Foram adicionadas recomendaes do FST RIM no captulo de Sistemas de Arquivos (BZ #852990). Descrio do parmetro threads-max foi atualizada de acordo com o feedback do cliente (BZ #856861). Uma nota sobre as melhorias de gerenciamento da fragmentao do GFS2 foi atualizada BZ #857782). Reviso 4 .0-6 T hu Oct 4 2012 Laura Bailey Foi adicionada uma nova seo no utilitrio do numastat (BZ #853274). Reviso 4 .0-3 T ue Sep 18 2012 Laura Bailey Foi adicionada uma nota de capacidades do re. new perf (BZ #854082). Foi corrigida a descrio do parmetro file-max (BZ #854094). Reviso 4 .0-2 Mon Sep 10 2012 Laura Bailey

89

Red Hat Enterprise Linux 6 Guia de Ajuste de D esempenho

Foi adicionada uma seo do BT RFS e introduo bsica ao sistema de arquivo (BZ #852978). Integrao do Valgrind foi anotada com o GDB (BZ #853279). Reviso 3.0-15 T hursday March 22 2012 Laura Bailey Foi adicionada e atualizada as descries de perfis tuned-adm (BZ #803552). Reviso 3.0-10 Friday March 02 2012 Laura Bailey Foram atualizadas as descries dos parmetros threads-max e file-max (BZ #752825). Foi atualizado o valor padro do parmetro slice_idle (BZ #785054). Reviso 3.0-8 T hursday February 02 2012 Laura Bailey Foi reestruturado e adicionado detalhes sobre o taskset e CPU de binding e alocao de memria com o numactl em Seo 4.1.2, Ajustando Desempenho de CPU (BZ #639784). Foi corrigido o uso de links internos (BZ #786099). Reviso 3.0-5 T uesday January 17 2012 Laura Bailey Correes pequenas em Seo 5.3, Utilizando o Valgrind para o Uso de Memria de Perfil (BZ #639793). Reviso 3.0-3 Wednesday January 11 2012 Laura Bailey Consistncia confirmada entre hiperlinks internos e externos (BZ #752796). Adicionado Seo 5.3, Utilizando o Valgrind para o Uso de Memria de Perfil (BZ #639793). Adicionado Seo 4.1.2, Ajustando Desempenho de CPUe reestruturado Captulo 4, CPU (BZ #639784). Reviso 1.0-0 Friday December 02 2011 Lanamento para o GA do Red Hat Enterprise Linux 6.2. Laura Bailey

90