|
Este artigo visa demonstrar a possibilidade de otimização de sistemas operacionais, visando mitigar riscos de quebra de disponibilidade dos serviços que utilizam este sistema operacional. Foram utilizadas as ferramentas a seguir para aferição dos dados deste teste:
METODOLOGIAA seguir são descritas todas as etapas da metodologia utilizada nesta análise de otimização de sistemas operacionais. Metodologia da Análise de Otimização | | Identificação | Identificação de quais processos, procedimentos e ativos de tecnologia farão parte do escopo da análise. | | Mapeamento | Mapeamento dos processos, serviços, protocolos, sistemas e suas interdependências, permitindo enumerar quais itens encontrados possuem possibilidades de otimização. | | Enumeração | Enumeração de possibilidades a serem exploradas na análise e classificação qualitativa das possibilidades de otimização encontradas. | | Documentação | Tratamento dos dados obtidos e geração da recomendação. | IDENTIFICAÇÃOOs seguintes componentes da infra-estrutura do sistema foram analisados quanto à possibilidade de melhoria de desempenho. O Foi definido o escopo deste projeto, conforme especificado abaixo. Escopo desta análise | | Método | Ativos | Benchmarking (Aferição) | Debian GNU/Linux 5.0 (64bits) | Distribuição Linux utilizado nos testes. | | Linux 2.6.26 | Kernel Linux utilizado nos testes. | | Third Extended File System (ext3) | Sistemas de arquivo utilizados nos testes. | | ReiserFS | EnumeraçãoForam utilizados os seguintes componentes para realização desta recomendação. | Processador | Intel(R) Xeon(R) CPU Quad-Core (64bits) | | Discos | 2x SAS 72.7 GB SCSI 10k RPM | | RAID | Discos em RAID1 perfazendo um total de 72.7 GB uteis | | BIOS | 64Bits | Ativado | | Virtualização | Ativado | Debian GNU/Linux 5.0 (64bits) | | Distribuição | Livre (Download direto no site oficial da distribuição) | | Licença de Uso | Livre | | Kernel Default | Linux 2.6.26 | Kernel
| | Família do Processador | Core 2 Duo / New Xeon | | Subtipo de Arquitetura | ScaleMP (vSMP) | | Modelo de Kernel | Kernel Integrado (Built In). Drivers adicionais modulares. | | Freqüência do Timer | 250 Hz | | Opções do Processador | PAT Ativo | | Virtualização Ativa | Sistemas de Arquivos | | Ext3 | Third Extended File System (ext3) | | ReiserFS | Reiser File System | RECOMENDAÇÕESHardware- Dar preferência a utilização de dois ou mais processadores ao invés de um único processador de núcleos múltiplos. Mesmo com núcleos múltiplos, alguns componentes internos do processador são compartilhados entre os diversos núcleos, podendo causar fila de processamento nestes recursos compartilhados.
- Dar preferência a estrutura de discos em RAID50 (5+0). Esta forma de RAID aproveita o melhor desempenho do RAID0 com a segurança física do RAID5.
Exemplo de estrutura de discos em RAID50. - Dar preferências a processadores 64bits, pois podem endereçar e processar mais dados por segundo que processadores tradicionais de 32bits. A utilização de processadores 64bits deve ser complementada com a ativação deste recurso nas configurações de BIOS para este recurso funcione de forma nativa.
- Sempre que for necessário utilizar técnicas/métodos de virtualização, como VMWare, XEN, Qemu ou mesmo Java Virtual Machine, é recomendável habilitar a opção de virtualização da BIOS para ativar as estruturas de virtualização do processador, criando assim um processo de virtualização com melhor performance.
Sistema OperacionalAs recomendações abaixo são compatíveis com qualquer distribuição Linux existente. - /etc/nsswitch.conf: O arquivo Network Services Switch determina a ordem das buscas realizadas quando uma certa informação é requisitada. Este arquivo deve estar bem configurado para não gerar um delay para recuperação de dados.
- /proc/sys/vm/bdflush: O bdflush está intimamente relacionado com o funcionamento do subsistema de memória virtual do Kernel Linux e tem pouca influência sobre a utilização do disco. Este arquivo controla o funcionamento do daemon bdflush do Kernel. Ao alterar alguns valores do padrão, o sistema demonstra-se mais responsivo; por exemplo, espera um pouco mais para gravar para o disco e, assim, evita alguns gargalos de acesso ao disco.
- /proc/sys/vm/buffermem: Permite definir utilizar um mínimo de X% da memória para cache de buffer; Limpar apenas quando a porcentagem da memória utilizada pelo buffer chegar a Y%; Permitir que o tamanho da memória do buffer cheque a Z% do tamanho total de memória.
- /proc/sys/fs/file-max: Permite definir o número máximo de arquivos que o Kernel do Linux vai gerenciar. Recomenda-se definir o número de arquivos abertos, aumentando o valor para algo como 256 para cada 4M de memória RAM temos.
- /proc/sys/net/ipv4/tcp_fin_timeout: Esta configuração permite determinar o tempo que deve decorrer antes do TCP/IP liberar uma conexão fechada e reutilizar seus recursos. Durante este estado TIME_WAIT, reabrir a conexão com o cliente custa menos do que estabelecer uma nova ligação. Ao reduzir o valor desta entrada, o TCP/IP pode liberar conexões fechadas mais rapidamente, obtendo mais recursos disponíveis para novas ligações.
- /proc/sys/net/ipv4/tcp_keepalive_time: Esta configuração permite determinar o número de segundos que uma conexão precisa estar ociosa antes de o TCP enviar checagens de keep-alive.
- /proc/sys/net/ipv4/tcp_window_scaling: Esta configuração permite ativar o TCP window scaling previsto pela RFC1323.
- /proc/sys/net/ipv4/tcp_sack: Esta configuração permite ativar o TCP Selective Acknowledgements previsto pela RFC2018.
- /proc/sys/net/ipv4/tcp_timestamps: Esta configuração permite desativar o TCP timestamps, previsto pela RFC1323.
Kernel- Família do Processador: As distribuições Linux vêm com o Kernel compatível a maior quantidade de arquiteturas de processador disponível. Por exemplo: Para arquitetura de 32bits (i386) é comum que o Kernel Linux embutido nas distribuições seja compatível com qualquer processador acima de 386. Isso faz com que o Kernel utilize funções compatíveis a todos os processadores em questão, sem fazer uso de funções exclusivas de novos processadores, que podem gerar um considerável ganho de desempenho. Recomenda-se que o Kernel Linux seja re-compilado para utilizar a família do processador utilizado, visando utilizar todas as funções disponíveis pelo processador.
- Subtipo de Arquitetura: Oferece suporte às extensões de 64bits da arquitetura EMT64 de processadores Intel. vSMP (multiprocessamento virtual simétrico) é um método de SMP (multiprocessamento simétrico), no qual dois ou mais processadores virtuais são mapeados dentro de um único núcleo virtual. Isto torna possível atribuir múltiplos processadores virtuais a uma máquina virtual ou qualquer host tendo pelo menos dois processadores lógicos.
- Modelo de Kernel: O Kernel Linux poder ser utilizado de duas formas básicas:
- Kernel Modular: O Núcleo será composto do mínimo necessário para o funcionamento do sistema. Todos os demais drivers de dispositivos e/ou, sistemas serão carregados como módulos. Este formato de Kernel provê uma flexibilidade para sistemas com a necessidade de inclusão temporária de dispositivos extras.
- Kernel Integrado: O Núcleo é composto por todos os drivers necessários para o funcionamento do sistema, incluindo rede, sistemas de arquivos, controladores de discos, etc. Este formato provê um considerável ganho de desempenho, uma vez que todas as funções necessárias para controlar o hardware já estão embutidas no núcleo do sistema, sem a necessidade de consultar drivers externos.
- Modelo híbrido: É recomendável que o Kernel seja um misto de ambas as formas, cujas principais funções de hardware estejam embutidas no Kernel e drivers adicionais, possivelmente necessários em alguns momentos de manutenção, por exemplo, sejam criados em forma de módulos.
- Freqüência do Timer: É a freqüência com que o temporizador de hardware do sistema é programado para interromper o Kernel. A freqüência do temporizador afeta diretamente uma série de coisas, e em particular, coloca um limite superior sobre a resolução dos temporizadores utilizados com o Kernel. Se 1000HZ os temporizadores terão uma melhor resolução de 1 ms no melhor caso. Se, em vez disso, é de 100 Hz a resolução é de 10ms no melhor caso.
- Opções do Processador: Algumas funcionalidades de processadores novos não vêm ativadas no Kernel Linux, por exemplo, a PAT (Page allocation tables). Esta funcionalidade precisa ser ativada para tirar proveito desta funcionalidade do processador.
Sistemas de ArquivosOpções Genéricas- noatime: O Linux registra informações sobre quando os arquivos foram criados e modificados pela última vez, bem como quando ele foi acessado. Existe um custo associado com a gravação do último acesso. A grande maioria dos sistemas de arquivos possui um atributo que permite ao administrador parametrizá-lo de tal forma, que o último acesso a um arquivo não seja gravado. Isto pode levar a melhorias significativas no desempenho ao acessar arquivos com freqüência.
- nodiratime: Mesmo de “noatime”, porém utilizado para acesso à diretórios.
- data=writeback: A ordenação dos dados não é preservada, os dados podem ser escritos para o sistema de arquivos, antes ou após a gravação no metadados. Este modelo é considerado como sendo o mais alto throughput. Ele garante a integridade interna do sistema de arquivos, no entanto, pode acontecer que os dados antigos apareçam em alguns arquivos após a recuperação de um acidente.
Ext3Sistema de arquivo padrão na grande maioria das distribuições Linux atuais. Provê maior segurança contra perda de dados em caso de falhas devido à técnica de journaling (metadados). Excelente escolha para sistemas mistos, com diversos tipos de aplicações e arquivos de tamanhos maiores. Todas as opções gerais anteriores podem ser utilizadas para otimização deste sistema de arquivos.
ReiserFSSistema de arquivo disponível na maioria das distribuições Linux. Também implementa journaling para prevenção da perda de dados. Este sistema de arquivo é uma escolha excelente para sistemas com grande quantidade de arquivos de tamanhos pequenos e médios, como por exemplo, servidores: Web; Proxys; E-mails; Notícias. Todas as opções gerais anteriores podem ser utilizadas para otimização deste sistema de arquivos. Existem ainda opções específicas para este sistema de arquivo conforme a seguir: - notail: Desabilita o agrupamento de arquivos, o que causa um certo desperdício de espaço em disco, mas melhora o desempenho. Na versão 4 deste sistema de arquivos o agrupamento de arquivos é um recurso embutido, justamente para melhorar o aproveitamento de espaço em disco e melhorar o desempenho (já que os arquivos ficam fisicamente mais próximos). Na versão 3.x, acaba reduzindo o desempenho de leitura em até 5%.
RESULTADOSAlguns testes foram feitos para comprovar o ganho de algumas das recomendações anteriormente descritas. KernelInstruções por Segundo O ganho devido processo de re-compilação do Kernel foi aferido utilizando dois testes que calculam a taxa de Instruções por Segundo no processador. MIPS: Milhões de Instruções por Segundo Mflops: Milhões de Operações de Pontos Flutuantes por Segundo. AplicativosForam realizados testes com aplicativos reais para mensurar o ganho de desempenho. • SQLIte: Tempo necessário para realizar 12.500 inserções em uma base de dados indexada utilizando o aplicativo SQLite.
Tempo necessário para completar a tarefa.
• Super PI: Tempo necessário para calcular o PI com um número de Um Milhão de Digitos.
Tempo necessário para completar a tarefa. Gerência de I/OO ganho devido ao processo de configuração do sistema de arquivos foi aferido utilizando dois testes que calculam respectivamente a taxa de throughput total e a quantidade de operações com arquivos por segundo. Representa a comparação de cada item especificado. Representa a comparação de cada item especificado. ConclusãoPerante os testes realizados, foi alcançado um ganho de 5,75% nos testes referente à re-compilação do Kernel. De acordo com os testes de parametrização do sistema de arquivos, foi alcançado um expressivo ganho de 4.533,09%.
|