27 - Desempenho_fev_2007

84
#27 02/07 R$ 13,90 7,50 9 771806 942009 00027 A REVISTA DO PROFISSIONAL DE TI # 27 Fevereiro 2007 WWW.LINUXMAGAZINE.COM.BR HOMENAGEM NO RIO p.22 Câmara dos Vereadores carioca homenageia a Linux Magazine AO GOSTO DO CLIENTE p.24 Unisys reconhece a importância corporativa do Linux CEZAR TAURION p.27 As vantagens do desenvolvimento aberto » Servidores: Os 44 mandamentos p.29 » Benchmarks de vídeo e sistemas p.34 » Programas mais velozes com Intel VTune p.42 DESEMPENHO p.28 VEJA TAMBÉM NESTA EDIÇÃO: » Curso LPI, Aula 2 p.51 » Otimização de scripts Python p.37 » Hotplug: backups móveis em seu laptop p.61 » Slackware 11: a melhor versão até hoje p.47 MONITORAMENTO GRÁFICO DE REDES p.67 Use o Nagios para assegurar a estabilidade dos serviços GOOGLE WEB TOOLKIT p.75 De Java para Ajax em poucos cliques MAIOR PRODUTIVIDADE, MENOS PROBLEMAS, MESMO HARDWARE exemplar de Assinante venda proibida http://supertuxbr.blogspot.com
  • Upload

    -
  • Category

    Documents

  • view

    273
  • download

    12

description

# 27 Fevereiro 2007 VEJA TAMBÉM NESTA EDIÇÃO: De Java para Ajax em poucos cliques MAIOR PRODUTIVIDADE, MENOS PROBLEMAS, MESMO HARDWARE » Curso LPI, Aula 2 p.51 » Otimização de scripts Python p.37 » Hotplug: backups móveis em seu laptop p .61 » Slackware 11: a melhor versão até hoje p.47 WWW.LINUXMAGAZINE.COM.BR CEZAR TAURION p.27 As vantagens do desenvolvimento aberto AO GOSTO DO CLIENTE p.24 Unisys reconhece a importância corporativa do Linux A REVISTA DO PROFISSIONAL DE TI 00027

Transcript of 27 - Desempenho_fev_2007

Page 1: 27 - Desempenho_fev_2007

#27 02/07

R$ 13,90 € 7,50

97

71

80

69

42

00

9

00

02

7

A REVISTA DO PROFISSIONAL DE TI

# 27

Fe

vere

iro

200

7

WWW.LINUXMAGAZINE.COM.BR

HOMENAGEM NO RIO p.22Câmara dos Vereadores carioca homenageia a Linux Magazine

AO GOSTO DO CLIENTE p.24Unisys reconhece a importância corporativa do Linux

CEZAR TAURION p.27As vantagens do desenvolvimento aberto

» Servidores: Os 44 mandamentos p.29

» Benchmarks de vídeo e sistemas p.34

» Programas mais velozes com Intel VTune p.42

DESEMPENHO p.28

VEJA TAMBÉM NESTA EDIÇÃO:» Curso LPI, Aula 2 p.51» Otimização de scripts Python p.37» Hotplug: backups móveis em seu laptop p.61» Slackware 11: a melhor versão até hoje p.47

MONITORAMENTO GRÁFICO DE REDES p.67

Use o Nagios para assegurar a estabilidade dos serviços

GOOGLE WEB TOOLKIT p.75

De Java para Ajax em poucos cliques

MAIOR PRODUTIVIDADE, MENOS PROBLEMAS, MESMO HARDWARE

ex

em

pla

r d

e

Ass

inan

teve

nd

a

pro

ibid

a

http://supertuxbr.blogspot.com

Page 2: 27 - Desempenho_fev_2007

http://supertuxbr.blogspot.com

Page 3: 27 - Desempenho_fev_2007

3

Prezados leitores da Linux Magazine,

Produzir mais gastando menos. Esse é um dos objetivos comuns a qualquer empresa, e também a muitas pessoas. Na realidade, ser efi ciente é uma exigência natural; seres vivos devem ser capazes de maximizar suas atividades ingerindo um mínimo de alimento.

Na computação corporativa não poderia ser diferente. É extrema-mente desejável, para as empresas, que seu gasto com hardware seja minimizado, sem afetar o desempenho das máquinas. A virtualiza-ção, examinada em profundidade na edição 24 da Linux Magazine, contribui de forma marcante para o uso efi ciente dos recursos com-putacionais no ambiente corporativo. A possibilidade de se utilizar o mesmo hardware, que antes via raros picos de utilização, para abrigar diversos servidores é altamente atraente. No outro lado da moeda en-contra-se a otimização de processos. Se um programa puder realizar a mesma tarefa de duas formas diferentes, uma delas consumindo um menor tempo, memória, enfi m, menos recursos, então é obrigatório que essa solução seja preferida em lugar das alternativas mais “caras”. Da mesma forma, um servidor que efetue buscas semelhantes de for-ma repetitiva se benefi cia fortemente do uso de um cache para essa tarefa. Aplicações confi guradas de forma otimizada tendem a realizar suas tarefas com menor consumo.

Mas as empresas possuem recursos além dos computacionais. O gasto de energia elétrica, por exemplo, também deve sempre ser mini-mizado. Não é surpreendente ver os últimos lançamentos e campanhas publicitárias dos principais fabricantes de microprocessadores enfati-zarem a produtividade por watt consumido. O emprego corporativo cada vez maior de thin clients, associados a servidores mais poderosos, se justifi ca pela redução dos custos computacionais e energéticos, e já há diversos relatos de importantes economias desfrutadas por em-presas que adotaram esse tipo de arquitetura.

A fl exibilidade do Software Livre e de Código Aberto transparece também nesse ponto; nenhuma outra tecnologia permite tamanho nível de ajuste nas variáveis, programas e confi gurações de uma má-quina ou sistema. Todavia, todo esse poder é inútil se o administrador não souber utilizá-lo apropriadamente. Nesse ponto, sabemos que in-felizmente ainda é raro encontrarmos a humildade esperada nesses profi ssionais, que difi cilmente admitem não saber realizar uma tarefa - afi nal, todas as informações estão on-line.

Você pode até não acreditar no aquecimento global, ou na sua contribuição individual para esse fenômeno profundamente desagra-dável, mas decerto sua empresa saberá apreciar as reduções de custo e o aumento de desempenho. Assim como na natureza, somente os mais efi cientes sobrevivem à ferrenha competição do mercado.

Pablo HessEditor

P.S.: Seguindo nossa recente mudança de foco e projetos gráfi co e editorial, Rafael Peregrino da Silva afasta-se do processo de pro-dução da Linux Magazine, dedicando-se agora ao setor comercial e de relacionamento. Espero substituí-lo à altura nessa nobre tarefa. Boa leitura!

Efi ciência ED

ITOR

IAL

Expediente editorialDiretor Geral Rafael Peregrino da Silva [email protected] Editorial e Diretor de Arte Luciano Hagge Dias [email protected] Tadeu Carmona [email protected] Pablo Hess [email protected]ção e Revisão Livea Marchiori [email protected] de Arte Renan Herrera [email protected] de Competência Centro de Competência em Software: Oliver Frommel: [email protected] Kristian Kißling: [email protected] Peter Kreussel: [email protected] Marcel Hilzinger: [email protected] Andrea Müller: [email protected]

Centro de Competência em Redes e Segurança: Achim Leitner: [email protected] Jens-Christoph B.: [email protected] Hans-Georg Eßer: [email protected] Thomas L.: [email protected] Max Werner: [email protected]

Correspondentes & Colaboradores Achim Leitner, André Vilela, Augusto Campos,

Badran Farwati, Carsten Schnober, Cezar Tau-rion, Charly Kühnast, Jens-Christoph Brendel, Jörg Fritsch, Klaus Knopper,Luciano Siqueira, Marcel Hilzinger, Michael Hebenstreit, Mirko Dölle, Peer Heinlein, Piter Punk, Ralf Hilde-brandt, Ramon Wartala, Stefan Schwarzer, Tim Schürmann, Volker Lendecke e Zack Brown.

Anúncios: Rafael Peregrino da Silva (Brasil) [email protected] Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410 Osmund Schmidt (Alemanha, Áustria e Suíça) [email protected] Brian Osborn (Outros países) [email protected]: www.linuxnewmedia.com.br [email protected] Internet: www.linuxmagazine.com.br – Brasil www.linux-magazin.de – Alemanha www.linux-magazine.com – Portal Mundial www.linuxmagazine.com.au – Austrália www.linux-magazine.ca – Canadá www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linux-magazin.ro – RomêniaApesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais impre-cisões nela contidas ou por conseqüências que advenham de seu uso. A utilização de qualquer material da revista ocorre por conta e risco do leitor.Nenhum material pode ser reproduzido em qual-quer meio, em parte ou no todo, sem permissão expressa da editora. Assume-se que qualquer correspondência recebida, tal como cartas, emails, faxes, fotografi as, artigos e desenhos, são forneci-dos para publicação ou licenciamento a terceiros de forma mundial não exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado.Linux é uma marca registrada de Linus Torvalds.Linux Magazine é publicada mensalmente por:Linux New Media do Brasil Editora Ltda. Av. Fagundes Filho, 134 Conj. 53 – Saúde 04304-010 – São Paulo – SP – Brasil Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410Direitos Autorais e Marcas Registradas © 2004 - 2006:Linux New Media do Brasil Editora Ltda.Distribuição: DistmagImpressão e Acabamento: ParmaISSN 1806-9428 Impresso no Brasil

em processo de filiaçãoINSTITUTO VERIFICADOR DE CIRCULAÇÃO

Linux Magazine #27 | Fevereiro de 2007http://supertuxbr.blogspot.com

Page 4: 27 - Desempenho_fev_2007

4 http://www.linuxmagazine.com.br

CAPAEconomia através da eficiência 28

A otimização de velocidade de softwares para Linux é eco-

nômica e ecologicamente correta. Em vez de lançar mão

de novos hardwares indiscriminadamente, o melhor é des-

cobrir os travamentos nos condutores do sistema.

Os 44 mandamentos do servidor 29

A homepage da empresa está conectada ao Slashdot

desde as 11:20h; a nova massa de emails deve sair e

o banco de dados tem que retornar os dados solicita-

dos em tempo recorde. Este artigo mostra quais técni-

cas o servidor pode utilizar para vencer a sobrecarga.

O que dizem os números 34

A melhor referência para uma decisão de compra são tes-

tes e benchmarks de fontes confiáveis. Quem não acredita

em propagandas, mas prefere testar por si próprio e publi-

car os resultados, acaba caindo em um campo minado de

licenças, proibições de teste e trapaças dos fabricantes.

Bem no alvo 37

Todos querem programas com os quais se possa trabalhar de

forma prática. Softwares não são acelerados por otimizações

globais, e sim por pequenas otimizações nos locais certos. Este

artigo mostra como acertar o alvo em programas Python.

ÍND

ICE

http://supertuxbr.blogspot.com

Page 5: 27 - Desempenho_fev_2007

5

COLUNASAugusto Campos 10Charly Kühnast 12Klaus Knopper 14Zack Brown 16

NOTÍCIASSegurança 18➧ Firefox, Thunderbird e Seamonkey

➧ Bind

➧ kdelibs

➧ Mono

➧ OpenSSL

➧ Asterisk

➧ PHP

➧ Qt

➧ ClamAV

➧ Screen

Geral 20➧ Homenagem na Câmara dos Vereadores do Rio

➧ Second Life abre o código

➧ Desenvolvimento de SL na USP

➧ Documentação do Ubuntu em vídeo

➧ Firefox mais seguro e mais usado em 2006

➧ Linux no PS3

CORPORATENotícias 22➧ Motorola adota Linux amplamente

➧ Segundo UE, SL é mais econômico

➧ Nokia N800 roda Linux

➧ Red Hat firma parceria com VMware

➧ Economia de 50% com Linux

➧ Servidores de virtualização da Unisys

➧ Lançado o Java SE 6

➧ Mandriva no Classmate PC

Entrevista: Unisys 24Coluna: André Vilela 26Coluna: Cezar Taurion 27

ANÁLISESob a lupa 42 Os processadores de hoje em dia reúnem diversas informações so-

bre como executar comandos de máquina; o que permite diversos ní-veis de customização no hardware: Veja como fazer isso com o VTune.

Melhor com o tempo 47 Na versão mais recente do Slackware, somos presenteados com uma

seleção de pacotes ainda maior que a de costume. A grande novidade fica por conta do kernel 2.6, que ainda não é padrão, porém vem em duas versões. O Slackware envelhece mantendo sua saúde e disposição.

TUTORIALLPI nível 1: Aula 2 51 A aula de hoje trata do importantíssimo ambiente de linha de

comando, além de sistemas de arquivos e outros assuntos.

Conexão pessoal 61 Um conhecimento mais profundo do sistema de hotplug do

Linux abre as portas da inovação e automação. Veja como criar uma solução personalizada de backup para laptops.

SYSADMINAvaliação postal 63 Se o servidor de email está muito lento, os usuários fi-

cam revoltados. Mas quem quer otimizar o servidor pre-cisa de medições confiáveis da velocidade do MTA. Para produzir a carga necessária e compilar os resultados, con-tamos com a ajuda do programa de benchmark Postal.

Sempre Alerta 67 O crescimento do número de servidores e serviços em uma rede

pode levar o administrador à loucura. O Nagios é o software mais conhecido para monitoramento de redes, mas possui uma configura-ção complexa. Veja como instalá-lo e configurá-lo apropriadamente.

PROGRAMAÇÃOÁrvores coloridas 69 O que os esquilos e o kernel Linux têm em comum? Ambos percor-

rem árvores para armazenar coisas e depois reencontrá-las. Mas nessa comparação o kernel Linux trabalha melhor – por exemplo ao lidar de maneira bem peculiar com árvores pintadas de duas cores.

Ferramentas do Google 75 O Google Web Toolkit permite o desenvolvimen-

to de aplicativos Web complexos completamente em Java, e converte-os automaticamente para AJAX.

SERVIÇOSEditorial 03Emails 06Linux.local 78Eventos 80Índice de anunciantes 80Preview 82

Linux Magazine #27 | Fevereiro de 2007

| ÍNDICELinux Magazine 27

http://supertuxbr.blogspot.com

Page 6: 27 - Desempenho_fev_2007

6 http://www.linuxmagazine.com.br

✎ Alvorada do Linux?Tomando conhecimento do sucesso crescente, através da Internet, das versões Linux Kurumin e Ubuntu, no Brasil e no exterior, obtive por download CDs do Kurumin 6.1 e do Ubuntu 6.10. Testando-os, com sucesso, na modalidade Live CD ROM, en-tusiasmei-me e passei a procurar suporte técnico, em revistas e até com pessoas, para ajuda nas configurações da Internet, as quais não consegui efetuar. A revista Linux Magazine número 25 adquirida decepcionou-me, visto que não cita nada acerca de Kurumin, Ubuntu e até de outras versões antigas que ainda estão sendo usadas nos PCs da Positivo (Mandriva e Conectiva 10). A única utilidade na revista, então, foi a seção Linux.local, na página 78, onde encontrei o telefone de duas empresas, uma delas a Mandriva Conectiva, no Paraná. Contactando-a, fui informado de que apenas estão atendendo o Linux Mandriva, visto que o Conetiva 10 já “morreu”, e ainda não conhecem Kurumin nem Ubuntu!

No meu entender, face minha grande experiência, por idade e conhecimento na área de Informática, por ser ex-Analista de Sistemas formado pela IBM, onde trabalhei 20 anos, sugiro: 1: Reduzir as inúmeras versões de Linux, para obter uma

ou duas que concentrem boa qualidade e abrangência para funcionar com hardwares e softwares atuais.

2: Bom suporte, atualizações e otimização periódica dos drivers para novos hardwares.

É melhor concentrar os esforços globais para utilizar o S.O. Linux do que ter inúmeras versões que acabam “mor-rendo” e decepcionando os usuários que desejam abandonar os sistemas da Microsoft; não adianta ser grátis e complicado de usar! Seria melhor ser cobrado um valor razoável, por um produto eficiente e fácil de usar!

Espero um dia ver uma boa “Alvorada” e não “Crepús-culos” para o Linux

R. AlvesPrezado R. Alves,A Linux Magazine se caracteriza como uma “revista para

o profissional de TI”, como diz seu slogan, na capa. De fato, a instalação e configuração de distribuições Linux não é coberta pela publicação, pois isso compreenderia um afastamento de nosso público alvo. Na Linux Magazine, abordamos assun-tos pertinentes à administração de sistemas e redes, além de técnicas de programação para os iniciados e tutoriais para resolver questões avançadas do sistema operacional. No en-tanto, é importante ressaltar que a revista EasyLinux é desti-nada justamente ao público a que você se refere, ou seja, os usuários iniciantes e os entusiastas não profissionais de Li-nux. Nela há sempre tutoriais de configuração de seções do sistema muito úteis à maioria dos usuários, até mesmo aos já experientes, às vezes.

Quanto ao número de distribuições de Linux, infeliz-mente a Linux Magazine não pode fazer qualquer coisa para ajudá-lo. O melhor que podemos fazer é explicar que essa diversidade é inerente ao processo de desenvolvimento aberto que caracteriza o Software Livre. Da diversidade surgem novas idéias, que, dependendo de seus méritos, são executadas ou abandonadas. Em relação ao suporte a hardware, o melhor a fazer é utilizar uma distribuição com boa detecção automática, exatamente como as que você experimentou, além de algumas outras. As distribui-ções voltadas aos usuários inexperientes costumam ser bas-tante eficientes nessa área. É importante que você veja a multiplicidade de distribuições como um fato positivo: se houvesse apenas uma distribuição, seria impossível que

sanj

a gj

ener

o –

ww

w.s

xc.h

u

Emails para o editor

Permissão de EscritaSe você tem dúvidas sobre o mundo Linux, críticas ou sugestões que possam ajudar a melhorar a nossa revista, escreva para o seguinte endereço: [email protected]. Devido ao volume de correspondência, é impossível responder a todas as dúvidas sobre aplicativos, configurações e problemas de hardware que chegam à Redação, mas garantimos que elas são lidas e analisadas. As mais interessantes são publicadas nesta seção.

EM

AIL

S

http://supertuxbr.blogspot.com

Page 7: 27 - Desempenho_fev_2007

www.itautecshop.com.brC O M P R E D I R E T A M E N T E D O F A B R I C A N T E

0800 121 444D e 2 ª a 6 ª , d a s 8 h à s 2 0 h . S á b a d o , d a s 9 h à s 1 8 h .

PRESENTE EM MAISDE 2.700 CIDADES.

Ofertas válidas até 28/2/2007 ou enquanto durarem os estoques. Celeron, Celeron Inside, Centrino, o logotipo Centrino, Core Inside, Intel, o logotipo Intel, Intel Core, Intel Inside, o logotipo Intel Inside, Intel Viiv, Intel vPro, Itanium, Itanium Inside,Pentium, Pentium Inside, Xeon e Xeon Inside são marcas comerciais ou marcas registradas da Intel Corporation ou de suas subsidiár ias nos Estados Unidos ou em outros países. *Garantia balcão de um ano para partes, peças e serviços. Parapossibilitar o acesso à internet são necessários uma linha telefônica ou banda larga e um provedor à sua escolha. A velocidade d e comunicação de 56 Kbps depende e pode variar de acordo com o tipo e a qualidade da linha telefônica utilizada.Preços com impostos inclusos para São Paulo. Frete não incluso. Demais características técnicas e de comercialização estão disponíveis em nosso site e no Televendas. Fica ressalvada eventual retificação das ofertas aqui veiculadas. Quantidade: 10unidades de cada. Empresa/produto beneficiado pela Lei de Informática. Fotos meramente ilustrativas.

DPZ

Foto

ilu

stra

tiva

.

Foto

ilu

stra

tiva

.

SEJA LIBRIX NA RUA, SEJA LIBRIX EM CASA,SEJA LIBRIX NO TRABALHO.

Itautec MinitorreCódigo da oferta: IN-554

IDEAL PARA TRABALHO E ENTRETENIMENTO.

• Processador Intel® Celeron® D 315 (256 KB L2 cache, 2.26 GHz, 533 MHz) • Sistema Operacional Librix - Distribuição Linux Itautec • 256 MB de memória • HD SATA 80 GB • Gravador de CD • Monitor de 15”• Floppy • Mouse óptico • Teclado em português • Placa de rede integrada • Placa de áudio e vídeo integrada• Microfone e caixas acústicas • Fax/Modem 56 Kbps • 1 ano de garantia balcão*

Financiamento pelo cartão BNDES

ou R$ 999,00 à vista

Agora, além do Librix (Linux da Itautec), a sua empresa podecontar com o melhor e mais estável pacote de hardware e software do mercado, testado e homologado pela Itautec.

Toda a liberdade que você precisa para trabalhar com maismobilidade, usando a internet sem fio, e ainda operar comsoftware livre.

É mais segurança, porque a Itautec oferece suporte técnicoespecializado via internet ou pelo telefone, serviços de tuninge configuração e ainda atendimento nacional on site.

Tem alta tecnologia para os aplicativos como editor de textos,planilha eletrônica, editor de imagens e apresentações. É maisfacilidade e maior flexibilidade no seu dia-a-dia. Na hora detrabalhar, não se sinta preso. Seja Librix.

Itautec InfoWay Note W7630Código da oferta: IN-553

IDEAL PARA QUEM PRECISA DE MOBILIDADE,MAS NÃO ABRE MÃO DE ECONOMIA.

• Processador Intel® Celeron® M 380 (1 MB L2 cache, 1.60 GHz, 400 MHz)• Sistema Operacional Librix - Distribuição Linux Itautec• 512 MB de memória • Tela widescreen de 15,4” • Placa de rede wireless• HD 40 GB • Combo (DVD + CD-RW) • Placa de vídeo integrada• Maleta inclusa • 1 ano de garantia balcão*

Financiamento pelo cartão BNDES

ou R$ 2.199,00 à vista

• Librix• Tela widescreen de 15,4”• Combo (grava CD e toca DVD)

• Librix• Monitor de 15”

• Gravador de CD

Cyan Magenta Yellow Black

Os: 608425 Form: 204x275 Operador: EdinhoAgência: DPZ Cliente: DPZ Mac: Premedia_7Mídia: Anúncio Perfil: Analógico Prova: Chromedot

608425_204x275U 1/15/07 6:55 PM Page 1

http://supertuxbr.blogspot.com

Page 8: 27 - Desempenho_fev_2007

8 http://www.linuxmagazine.com.br

todos os usuários gostassem dela por completo – afinal, seres humanos sempre discordam uns dos outros. Com distribuições variadas, o usuário tem a possibilidade de experimentar quantas quiser, até encontrar aquela mais adequada a suas expectativas e necessidades.

Em relação às atualizações periódicas do sistema opera-cional e dos drivers, ultimamente temos tido uma nova versão do kernel Linux a cada poucos meses. Como é nele que os dri-vers se incluem, podemos dizer que o Linux é um sistema bas-tante atualizado, senão o mais atualizado de todos. Também em relação ao suporte a hardware, Linux é o campeão atual nesse quesito, entre todos os sistemas operacionais existentes. Infelizmente, alguns fabricantes de hardware para PCs ainda não perceberam a importância de criar drivers para Linux, ou simplesmente de mostrar publicamente as especifi cações de seus produtos, o que resulta em uma certa defi ciência de suporte a alguns itens de hardware.

Se você deseja, como afi rma em seu email, pagar uma pequena quantia em troca de suporte técnico (respondendo a “efi ciente e fácil de usar”), então fi que satisfeito em saber que a maioria das distribuições possui algum tipo de suporte cobrado de altíssima qualidade. Aliás, essa é mais uma das vantagens do Software Livre, e conseqüentemente também do Linux: o fabricante do sistema não é o único capaz de prestar suporte a ele, pois o código-fonte é aberto a todos. E a diver-sidade de distribuições também se mostra positiva mais uma vez, neste ponto, pois é possível escolher uma distribuição de acordo com o suporte técnico oferecido a ela por seu fabricante ou qualquer outra empresa.

Fico feliz também em informar que o Linux já está vivendo sua Alvorada. Como você informa no início de seu email, o Linux está presenciando um “sucesso crescente” já há alguns anos, e ainda há bastante terreno a conquistar. Ou seja, o ce-nário é altamente positivo. ■

✎ HowtoAntes de começar, quero dizer que sempre fui e continuarei sendo assinante da revista, pois a Linux Magazine é a melhor revista de Linux que eu conheço.

Minha única crítica é em relação aos tutoriais. Eles es-tão bem distantes de tutoriais. Entendo que haja diferentes “sabores” de Linux, mas vários artigos são escritos sob o pres-suposto de um nível de conhecimento que, se a pessoa já soubesse tudo o que se pressupõe, difi cilmente precisaria do artigo. Por exemplo, em relação a confi gurar um fi ltro em uma bridge com o proxy Squid, as instruções dizem que “O próximo passo é modifi car os arquivos de confi guração do Squid de acordo com suas necessidades.” Mas que arquivos são esses? Quais confi gurações do Squid? Somente as ACLs? Isso também me chateia porque dentro do mesmo artigo há o outro extremo, como especifi car o comando brctrl addif br0 eth0, totalmente satisfatório.

Minha opinião é essa. Normalmente eu uso seus artigos como ponto de partida, mas nunca consigo usá-los como um verdadeiro guia. Sou obrigado a buscar instruções mais específi cas na Internet. Seria interessante conseguir usar sua revista como um verdadeiro tutorial. Se o foco é o usuário corporativo, use Red Hat, CentOS, Suse, White Hat ou Fe-dora Core. Obrigado pela atenção.

Jose HernandezCaro Jose, obrigado por sua opinião. Concordamos que,

em alguns casos, nossos artigos talvez não sejam tudo que se precisa para realizar uma tarefa por completo, especialmente no caso de confi gurações complexas de servidores, com neces-sidade de vários componentes. Nós entendemos que a Linux Magazine tem o papel importantíssimo de publicar infor-mações sobre Linux e Software Livre, mas não pretendemos substituir os tutoriais e Howtos, páginas de manual e outras formas de documentação.

Nossos artigos são lidos por uma ampla gama de usuários, desde iniciantes até especialistas, e nosso objetivo é sempre oferecer alguma informação útil e que valha a pena para cada leitor. Nossa missão é auxiliar os leitores a ampliar e, ao mesmo tempo, aprofundar seu conhecimento sobre Linux. Ajudamos a ampliar informando sobre novas ferramentas que eles talvez não conheçam, novas atualizações, e novas técnicas baseadas em ferramentas que eles já utilizam; e aprofundamos seus conhecimentos examinando em profundidade os sistemas, componentes e protocolos que operam por trás das interfaces gráfi cas e linhas de comando. Esses objetivos freqüentemente nos fazem descrever etapas de confi guração bastante específi cas, mas às vezes há possibilidades demais a serem abordadas na discussão, o que impediria a publicação em um artigo único. Nós tentamos sempre listar fontes de informação no quadro “Mais informações”, ao fi nal dos artigos. ■

EMAILS | [email protected]

Errata Na edição 26 da Linux Magazine, o quadro “O autor” da maté-ria sobre Port Knocking foi omitido: Flávio do Carmo Júnior ([email protected]), 23, cursa atualmente o 3º ano de Siste-mas de Informações na UNOESTE, possui certifi cação LPIC-1, é responsável pelo setor de TI da empresa Bebidas Asteca Ltda. e consultor em software básico e aplicações em redes pelo grupo “Kemi – Soluções para empresas em Tecnologia de Informação”. É também integrante da equipe de suporte em Linux e softwares livres do canal #LinuxAjuda, situado na rede Brasnet de IRC.

������������������������������������� �������������������������������������������������� ������������������������������������������������ ������������������������������������������ ���������������������������������������������� �������������������������������������� �����

����������������������������������������������������������������������������������������

��������������� � ���� �������

���

����

���

����

���

���

����

���

��

��� �������������

������������������������������������������

����������������������������������������������

����������������������������������������������

��������������������������������������������������

� �� ������ �� ������

� � � � �

�������������� �������������������������€ ����� ���������

http://supertuxbr.blogspot.com

Page 9: 27 - Desempenho_fev_2007

�������������������������������������������������������������������������

����������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������������������������

�������������������������������������������������������������������������������������������������������������������

���������������������������

���������������� ���������������������

http://supertuxbr.blogspot.com

Page 10: 27 - Desempenho_fev_2007

10

CO

LUN

A

http://www.linuxmagazine.com.br

Cumprir os compromissos e obrigações é importante para todos nós, mas é especialmente importante para os administradores de sistemas, porque muitos

dos seus compromissos são com máquinas e equipamentos que, por mais bem projetados que sejam, não têm flexibi-lidade ou inteligência para lidar com problemas causados por esses descumprimentos – em especial nos casos de ausência das manutenções obrigatórias.

Existem muitas ferramentas para ajudar o administrador a se lembrar das suas pendências, mas poucas delas são eficazes quando você deixa para pensar nisso no último dia antes das férias, ou às 19 horas de uma sexta-feira antes de um feriado prolongado. Muitas vezes a paz de espírito depende mais do planejamento do que da tecnologia, e

feliz o administrador de sistemas que consegue ter a disci-plina de usar a ferramenta mais adequada à sua realidade – mesmo que seja um bloco e uma caneta – para capturar e registrar seus compromissos, e depois consegue dar o passo além – muito mais raro – de consultar essa ferra-menta na hora certa para não deixar nada sem resolver, nem nada atrasado.

Já escrevi aqui nesta coluna sobre ferramentas para ge-renciar listas de pendências e atividades, que constituem um dos horizontes do registro e controle de compromissos. Mas hoje quero dedicar este espaço a outro horizonte, pos-sivelmente ainda mais essencial: a checklist. Nas minhas ati-vidades, há muito adotei a checklist como ferramenta básica para garantir escopo e qualidade de projetos, e a cada nova checklist volto a comprovar a eficácia dessa medida.

Uma checklist não é nada além de uma lista de condi-ções ou passos necessários para concluir uma determinada atividade. Você já deve ter visto em filmes aquela rotina básica – e obrigatória – de verificação pré-vôo, em que o

piloto e o co-piloto de uma aeronave se alternam entre ler e confirmar uma série de condições necessárias para iniciar seus procedimentos: combustível, alimentação elétrica, calibragem dos instrumentos e assim por diante. Esse é o exemplo mais completo de checklist, incluindo até mesmo um procedimento formal de verificação.

É claro que os itens da checklist acima não foram agru-pados aleatoriamente, e nem são os mesmos para qualquer avião, ou para qualquer situação. Vôos transatlânticos, vôos noturnos, vôos de carga e vôos para lançamento de pára-quedistas têm suas próprias exigências, e a lista de um Cessna monomotor não inclui os mesmos itens da checklist de um Boeing 747.

Este exemplo serve para ilustrar o papel que as checklists podem assumir nas suas rotinas do datacenter: pode-se ter checklists para substituição de servidores, para ativação de novos uplinks, para verificações de início e final de turno, para faltas de energia prolongadas e para outras situações que exijam operações complexas, porém repetitivas, no que diz respeito a seus detalhes essenciais.

É difícil encontrar uma checklist pronta que possa ser adotada imediatamente no seu ambiente. E aposto que você já deve ter pensado, após terminar um desligamen-to de emergência do CPD, que da próxima vez você vai anotar tudo o que fez, para não ter que pensar tanto nem se estressar nas vezes futuras. E é aí que está o segredo: não espere a próxima vez, comece cada uma de suas checklists antes de chegar a próxima situação em que ela venha a ser necessária. Anote antes, e aproveite a próxima ocorrência para validá-la.

Mais importante ainda, não tente transformar suas checklists em documentos formais, estáticos, gravados em bronze. Faça com que elas sejam facilmente editá-veis, expansíveis, adequáveis e flexíveis. Providencie para que elas estejam à mão de todas as pessoas que possam vir a necessitar delas, e cuidado com a disponibilidade: não adianta ter a checklist em um servidor inacessível; documentos sobre manutenção precisam ter cópias im-pressas atualizadas.

Para completar, crie uma checklist especial para o fi-nal de expediente em feriados prolongados, e nunca mais fique na dúvida. ;-) ■

Seguindo o plano

Augusto CamposPrever e registrar as rotinas ajuda o administrador de sistemas a dormir mais tranqüilo.

Não espere a próxima vez, comece cada uma de suas checklists antes de chegar a próxima situação em que ela venha a ser necessária.

O autorAugusto César Campos é administra-dor de TI e, desde 1996, mantém o site BR-linux.org, que cobre a cena do Soft-ware Livre no Brasil e no mundo.

http://supertuxbr.blogspot.com

Page 11: 27 - Desempenho_fev_2007

���������������������������������������������������������������������������������������� ������ ������������������������������ �������� ���������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������� ���������� ����������������� ������� ���������� ������������������������������������������������������������������������������������������������������������������������������������� ������ ������������������������������ �������� ���������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������� ���������� ����������������� ������� ���������� ������������������������������������������������������������������������������������������������������������������������������������� ������ ������������������������������ �������� ���������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������� ���������� �������

http://supertuxbr.blogspot.com

Page 12: 27 - Desempenho_fev_2007

12

CO

LUN

A

http://www.linuxmagazine.com.br

Se você utiliza o Spamassassin, o plugin FuzzyOCR é uma boa ferramenta para avaliação de imagens. O FuzzyOCR não é difícil de instalar, exceto por

suas dependências. Certifique-se de que sua versão do Spamassassin seja a mais atual possível; é claro que ela sempre deve estar atualizada, mas a versão 3.1.4 é funda-mental. Também são necessárias a ferramentas NetPBM, do binário convert do Imagemagick, a Giflib, dois módulos de Perl e o gocr para reconhecimento óptico de caracteres. Essas exigências podem parecer exageradas, mas a maioria das distribuições as oferece normalmente, e o comando a seguir baixa os módulos de Perl automaticamente:

cpan -i Digest::MD5String::Approx

Com um pouco mais, já é possível avaliarmos imagens: só precisamos do FuzzyOcr.cf, além do FuzzyOcr.pm no dire-tório do Spamassassin, /etc/mail/spamassassin. O FuzzyO-CR fornece um dicionário de exemplo, FuzzyOcr.words, que contém os termos que se deseja que o FuzzyOCR busque

nas imagens. É possível modificar a lista para adequá-la às necessidades do usuário. Mais uma vez, é necessário criar esse arquivo para o diretório do Spamassassin.

O próximo passo é definir o caminho para os arquivos de registro e de dicionário em FuzzyOcr.cf. Depois disso, o FuzzyOCR já deve estar pronto para entrar na briga, pois o Spamassassin verá o módulo em seu caminho de inicialização, integrando-o automaticamente.

Imagem e açãoApesar de o FuzzyOCR vir com alguns arquivos de spam de exemplo, para fins de teste, é muito mais divertido testá-lo na sua pasta de lixo. A Web é um local estranho e maravilhoso: o spam pode vir em qualquer formato de imagem comum, e os tipos MIME freqüentemente são declarados de forma incorreta para causar ainda mais confusão – GIFs fingindo ser JPEGs, por exemplo. O FuzzyOCR reage a estratégias de ofuscamento conferindo pontos negativos adicionais.

Os spammers muitas vezes se utilizam de GIFs anima-dos, principalmente os que mostram pixels desorganizados antes de revelar sua mensagem. Aparentemente, muitos spammers esperam que os mecanismos de OCR anali-sem somente a primeira fase da animação; felizmente, o FuzzyOCR não pára aí.

Crime e castigoÉ hora de ajustar o FuzzyOcr.cf. Se você possuir uma versão do Spamassassin superior à 3.1.4, precisará especificar a entrada focr_pre314 = 1. Configurar as pontuações que o FuzzyOCR confere quando encontra algo suspeito é ainda mais impor-tante. O programa é bastante draconiano por padrão.

Por exemplo, uma mensagem com uma imagem anexa que coincida com duas entradas do dicionário recebe qua-tro pontos, e mais um ponto e meio são adicionados caso o tipo MIME esteja incorretamente declarado. Dois pontos e meio ainda serão acrescentados no caso de imagens cor-rompidas, e cinco se o erro for incorrigível. Os pontos são somados para chegar a um total final, como mostrado na figura 1. Configurações estritas aumentam o risco de falsos positivos: não esqueça que o Spamassassin provavelmente notará mais alguns problemas em mensagens de spam, o que pode levar a pontuações incrivelmente altas. Minha recomendação é reduzir as pontuações para a metade dos valores encontrados em FuzzyOcr.cf.

E depois? Apenas sente e relaxe, esperando para ver o que os spammers inventarão a seguir. ■

OCR no combate ao spam

Charly KühnastA última moda é ocultar o spam em imagens. A resposta do administrador: uma ferramenta de reconhecimento óptico de caracteres (OCR) que extrai os textos e utiliza-os no filtro de spam.

Figura 1: O FuzzyOCR detecta textos em arquivos de imagem, e confere pontos de penalidade ao encontrar palavras indesejáveis.

O autorCharly Kühnast é administrador de sis-temas Unix no datacenter Moers, per-to do famoso rio Reno, na Alemanha. Lá ele cuida, principalmente, dos firewalls.

Mais Informações[1] FuzzyOCR: http://users.own-hero.net/

~decoder/fuzzyocr/

Aparentemente, muitos spammers esperam que os mecanismos de OCR analisem somente a primeira fase da animação; felizmente, o FuzzyOCR não pára por aí.

http://supertuxbr.blogspot.com

Page 13: 27 - Desempenho_fev_2007

http://supertuxbr.blogspot.com

Page 14: 27 - Desempenho_fev_2007

14

CO

LUN

A

http://www.linuxmagazine.com.br

Migração de confi guraçõesTenho o seguinte problema: meu antigo servidor Web ro-dava também servidores SQL e de email, numa máquina Pentium II. Agora atualizei o hardware para um Pentium 4 de núcleo duplo e uma placa-mãe com controladora RAID integrada.

Minha pergunta é: como faço para migrar meus dados e confi gurações para a máquina nova? Tenha em mente que meu kernel atual é 2.4, e agora terei que migrar para o 2.6.16, que é o único que reconhece minha controla-dora RAID.

Resposta:Mover o sistema operacional, as aplicações e os dados

para uma máquina nova é uma tarefa comum, embora nem sempre seja fácil encontrar a melhor estratégia para isso.

A estratégia rápida (mover todos os dados, incluindo o sistema e as bibliotecas), só é possível se a arquitetura de hardware não tiver mudado de forma a impedir os aplicativos de funcionarem. Ao mudar de um Pentium II, em seu exemplo, para um Pentium 4, isso não deve ser um problema. A única coisa que se precisa fazer é confi gurar e compilar o novo kernel de acordo com seu novo hardware.

Ao mudar do kernel 2.4 para o 2.6, será necessário atualizar pelo menos seus modutils (modprobe, insmod, rmmod). É claro que você poderia usar um kernel está-tico com tudo que é necessário compilado dentro dele, em vez de carregar módulos sob demanda. A abordagem que eu recomendo é compilar estaticamente tudo que for necessário para montar o sistema de arquivos raiz, elimi-nando a necessidade de um ramdisk inicial (initrd).

Um Live CD com o kernel 2.6 pode ser muito útil para colocar em funcionamento o sistema recém-copiado caso você tenha esquecido alguma parte (veja abaixo).

Então, a seqüência seria: ➧ Copiar tudo para a nova máquina, seja com uma có-

pia exata (1:1) de seu disco rígido, ou remotamente para partições recém-formatadas e montadas em seu novo servidor. Recomendo o comando:

rsync -Hav antigo_dir_raiz [root@máquina_remota:] novo_dir_raiz

como root em ambos os casos, naturalmente. ➧ Compilar um novo kernel na nova máquina, e atualizar

ao menos os modutils. Pode ser útil fazer um chroot para a nova partição da nova máquina, para então já trabalhar “dentro” do sistema copiado, caso você não consiga iniciar diretamente com o kernel antigo, ou se o novo ainda não estiver funcionando direito por você ter esquecido algo na confi guração.

A “forma correta”, que eu recomendo, consiste da reins-talação de um sistema operacional, seguida da migração dos arquivos de confi guração e dos dados. Esse método oferece uma inicialização limpa e permite livrar-se de programas obsoletos (com potenciais falhas de segurança) e obter um sistema atualizado, que é mais fácil de manter. No entanto, é necessário mais trabalho, principalmente quando os arquivos de confi gurção tiverem tido sua localização e sintaxe alteradas. Além disso, descobrir quais arquivos devem ser transferidos e quais sofreram mudanças em relação à confi guração padrão nem sempre é fácil, caso você não tenha feito um registro das alterações ocorridas nos últimos anos.

Usando essa estratégia, você primeiro particionaria o novo sistema e instalaria o sistema a partir do zero, incluin-do todos os programas e serviços de que você necessita. Use dpkg -l ou rpm -qa em sua máquina antiga para ver o que está instalado, e anote todos os pacotes que serão necessários. Normalmente essa lista é longa.

Depois que seu novo sistema estiver funcionando direito, você deverá transferir e provavelmente reescrever os arquivos de confi guração dos serviços. Recomendo que você faça isso, opção por opção, em cada arquivo de confi guração, pois, se você também mudou do Apache 1.3 para o 2.x, por exemplo, a sintaxe e a localização dos arquivos de confi guração deverá ser alterada. Arquivos como certifi cados SSL, assim como chaves de autenticação, não podem ser esquecidos.

Após terminar os arquivos de confi guração, você já pode copiar os dados dos usuários, como bancos de dados, caixas de email e diretórios home. Certifi que-se de que os usuários e grupos na nova máquina estão como na antiga.

Ao fi nal, teste exaustivamente cada um dos serviços, examinando todos os seus arquivos de log. Apesar de esse método ser mais trabalhoso que a “forma rápida”, é o que oferece a maior fl exibilidade e segurança, e pode econo-mizar muitas preocupações durante atualizações. ■

Pergunte ao Klaus!

Klaus KnopperEsta coluna é baseada na seção “Ask Klaus!”, publicada na Linux Magazine International.

O autorKlaus Knopper é o criador do Knop-pix e co-fundador do evento Linux-Tag. Atualmente ele trabalha como pro-fessor, programador e consultor.

Esse é o método que eu recomendo para se ter uma inicialização limpa.

http://supertuxbr.blogspot.com

Page 15: 27 - Desempenho_fev_2007

http://supertuxbr.blogspot.com

Page 16: 27 - Desempenho_fev_2007

16

CO

LUN

A

http://www.linuxmagazine.com.br

Benchmarks de sistemas de arquivosTestes iniciais indicaram que o Ext4 é mais rápido ao gravar dados no disco do que o Ext3 e o Reiser4. Houve grande interesse geral por esses resultados, embora os testes te-nham tido alguns problemas (o responsável pelos testes acreditava que a alocação atrasada – delayed allocation – era parte do Ext4, quando na realidade esse recurso nem foi incorporado à árvore de Andrew Morton).

Vários desenvolvedores pediram que os testes fossem expandidos para incluir outros sistemas de arquivos; e

Theodore Ts’o sugeriu que eles fossem transformados em algum teste automatizado, para futuras comparações entre recursos de sistemas de arquivos individuais. Porém, reconheceu que isso pode exigir bastante trabalho. O au-tor dos testes confi rmou que a tarefa de automatizá-los parecia grande demais, e por isso mesmo ele só realizou aqueles poucos que foram mostrados.

Confusão do ReiserFSApós os eventos recentes a respeito de Hans Reiser, a ques-tão da continuação do desenvolvimento surgiu na lista de discussão do kernel. Alexander Lyamin, da Namesys, em-presa de Hans Reiser, se ofereceu para resolver o impasse. Ele afi rmou que o código do ReiserFS 3 já está bastante estável, podendo entrar em modo de correção de falhas, embora os desenvolvedores do Suse tenham acrescenta-do novos recursos, como o suporte a ACLs. Portanto, o ReiserFS continuaria como antes.

A respeito do Reiser4, no entanto, Alexander e outros desenvolvedores disseram estar cuidando de aspectos téc-nicos e continuando o trabalho no sistema, principalmen-te com Andrew Morton, em sua árvore do kernel 2.6. O plano de desenvolvimento do ReiserFS para os próximos seis meses é continuar nesse ritmo, buscando, ao mesmo tempo, oportunidades de negócios para obter fi nancia-mento para o projeto.

A longo prazo, diz Alexander, o plano depende do que ocorrer com Hans. Se ele for solto, os desenvolvedores pretendem continuar como antes. Caso contrário, Ale-xandre imagina que os desenvolvedores tentarão escolher um líder interino.

Status do sysctlSeguindo as afi rmações de Linus Torvalds de que nunca é aceitável quebrar o espaço do usuário, Albert Cahalan se ofereceu para manter o código do sysctl caso ele não fosse eliminado. Mas Linus disse que, na realidade, ne-nhum programa utiliza o sysctl, o que signifi ca que essa ferramenta poderia ser eliminada sem se quebrar o espaço do usuário. Andrew Morton concordou, lembrando que o melhor momento para eliminar o sysctl seria agora, jus-tamente por não se quebrar nada.

Então, a menos que surja algo como uma importante aplicação do espaço do usuário que dependa profunda-mente do sysctl, parece que seu código será eliminado do kernel. Enquanto isso, podemos esperar um lento processo de obsolescência, juntamente com uma busca por aplicativos que dependam do sysctl.

Um resultado interessante e irônico advindo dessa atenção dada ao sysctl é que seu código está melhorando, justamente agora que ele está mais próximo de ser intei-ramente removido do kernel.

MantenedoresPierre Ossman enviou um patch que o especifi cava como mantenedor do subsistema de Multimedia Card, já que Russell King deixou o cargo e marcou o driver como órfão. Pierre também tomou a liberdade de renomear o driver para “multimedia card and secure digital subsystem”.

Jiri Slaby acrescentou uma entrada ao arquivo MAINTAI-NERS para o driver de placas seriais Moxa SmartIO/Indus-tIO, nomeando-se mantenedor. Ele também acrescentou uma entrada para o driver da placa Multitech Multiport, novamente se dizendo mantenedor.

Jiri já submeteu diversos patches para esses drivers, portanto faz sentido que ele os mantenha, caso deseje. Nenhum outro desenvolvedor do kernel jamais se ofere-ceu para ocupar esse cargo. ■

Crônicas do kernel

Zack BrownEsta coluna é baseada na seção “Zack’s Kernel News”, publicada na Linux Magazine International, e sintetiza o imenso tráfego da lista de discussão do kernel.

O autorA lista de discussão Linux-Kernel é o núcleo das atividades de desenvolvimento do kernel. Zack Brown consegue se perder nesse oceano de mensagens e extrair signifi cado! Sua newslet-ter Kernel Traffi c já está completando 5 anos.

Linus disse que, na realidade, nenhum programa utiliza o sysctl, o que signifi ca que essa ferramenta poderia ser eliminada sem se quebrar o espaço do usúario.

http://supertuxbr.blogspot.com

Page 17: 27 - Desempenho_fev_2007

ILIMITADA É A VANTAGEM DE CONTAR COM A PLUG IN.Somente uma empresa como a PLUG IN, uma das líderes do mercado de webhosting no Brasil, pode oferecer aos profissionais de internet as melhores opções para hospedagem de sites com preços e franquias imbatíveis. Oferece ainda Data Centers de última geração e uma equipe 100% focada em atender as demandas do mercado digital.

Capitais e Regiões Metropolitanas: 4003 1001Outras Regiões: 0800 881 1001

www.plugin.com.br

Gab

arit

o

Internet para Profissionais de Internet

Plano SQLTransferência: 100GB • Espaço: 1GB

E-mail 1GB

Plano TerabyteTransferência: 1TB • Espaço: 3GB

Plano IlimitadoTransferência: ilimitada • Espaço: 5GB

Plano StandardTransferência: 50GB • Espaço: 500MB

R$36,10R$36,10

R$0,900,900,R$0,90

R$250,00250,00250,R$250,00R$135,00135,00135,R$135,00

R$25,70R$25,70

A partir de

Plano SQLTransferência: 100GB • Espaço: 1GB

E-mail 1GB

Plano TerabyteTransferência: 1TB • Espaço: 3GB

Plano IlimitadoTransferência: ilimitada • Espaço: 5GB

Plano StandardTransferência: 50GB • Espaço: 500MB

http://supertuxbr.blogspot.com

Page 18: 27 - Desempenho_fev_2007

18

SE

GU

RA

A

http://www.linuxmagazine.com.br

➧ BindBind é um aplicativo servidor DNS de Código Aberto. O servidor DNS Bind é vulnerável ao problema recentemente descoberto de verificação de assinatura RSA do OpenSSL (CVE-2006-4339). O Bind utiliza criptografia RSA como par-te de sua implementação do DNSSEC. Portanto, para resolver essa falha de segu-rança, esses pacotes devem ser atualizados. Além disso, os registros de tipos KEY e DNSKEY, caso as chaves atualmente em uso tenham sido geradas com o expoen-te padrão de 3, novas chaves RSASHA1 e RSAMD5 precisam ser geradas com a opção -e do dnssec-keygen.

Pode-se verificar se suas chaves são vulneráveis conferindo o algoritmo (1 ou 5) e os três primeiros caracteres da chave RSA codificada em Base64. As chaves RSAMD5 (1) e RSASHA1 (5) que se iniciam com AQM, AQN, AQO ou AQP são vulneráveis. ■Referência no Mandriva: MDKSA-2006:207

Referência no Slackware: SSA:2006-310-01

Referência no Suse: SUSE-SR:2006:026

➧ kdelibsO pacote kdelibs fornece bibliotecas para o ambiente gráfico KDE.

A biblioteca khtml do KDE utiliza a Qt de uma forma que permite que parâ-metros não confiáveis sejam passados para a Qt, acionando o estouro. Um agressor poderia, por exemplo, criar uma página web maliciosa que, ao ser visualizada por uma vítima com o navegador Konqueror, faria o navegador travar ou executar códi-go arbitrário com os privilégios da vítima (CVE-2006-4811). ■Referência no Mandriva: MDKSA-

2006:186

Referência no Red Hat: RHSA-2006:0720-5

➧ OpenSSLOpenSSL é um sistema de protocolos seguros de rede. O Doutor S. N. Henson, da equipe central do OpenSSL e também do Open Network Security, recentemente desenvolveu um conjunto de testes ASN1 para a NISCC (www.niscc.gov.uk).

Quando o conjunto de testes foi executa-do com o OpenSSL, duas vulnerabilidades de negação de serviço foram reveladas.

Durante o processamento de certas es-truturas ASN1 inválidas, uma condição de erro recebe tratamento incorreto. Isso pode resultar em um laço infinito, o que consome a memória do sistema (CVE-2006-2937).

Alguns tipos de chaves públicas podem levar um tempo desproporcional para ser processadas. Isso poderia ser usado por um agressor em um ataque de negação de serviço (CVE-2006-2940).

Tavis Ormandy e Will Drewry, da equipe de segurança do Google, desco-briram um estouro de buffer na função utilitária SSL_get_shared_ciphers, que é utilizada por aplicativos como o Exim e o MySQL. Um agressor poderia enviar uma lista de cifras que seria capaz de es-tourar um buffer (CVE-2006-3738).

Tavis Ormandy e Will Drewry revelaram também uma possível vulnerabilidade a ataques de negação de serviço no código do cliente sslv2. Se um aplicativo cliente utilizar OpenSSL para estabelecer uma conexão SSLv2 com um servidor malicioso, isso poderia causar o travamento do cliente (CVE-2006-4343). ■Referência no Debian: DSA-1195-1

Referência no Ubuntu: USN-353-2

➧ AsteriskAsterisk é uma implementação em Có-digo Aberto de um private branch ex-change (PBX).

O Asterisk contém estouros de buffer em channels/chan_mgcp.c, do driver MGCP, e em channels/chan_skinny.c, do driver de canal Skinny para telefones SCCP. Ele também processa de forma perigosa as variáveis controladas pelo cliente para de-terminar os nomes de arquivos na função Record(). Finalmente, o driver de canal SIP em channels/chan_sip.c pode utilizar mais recursos do que o necessário, em situações não especificadas.

Um agressor remoto seria capaz de executar código arbitrário enviando uma resposta audit endpoint (AUEP) maliciosa-mente criada, enviando um pacote Skinny excessivamente grande antes mesmo da autenticação, ou utilizando especificadores de nomes de formato através das variáveis controladas pelo cliente. Um agressor tam-bém seria capaz de causar uma negação de serviço por consumo de recursos, através do driver de canal SIP. ■Referência no Gentoo: GLSA 200610-15

➧ ClamAVClamAV é uma ferramenta antivírus de Código Aberto. Foi encontrado um estouro de inteiros em uma versão antiga do Cla-mAV. Essa falha poderia permitir que um agressor remoto causasse uma negação de serviço e executar um código arbitrário atra-vés de um arquivo PE (Portable Executable) (CVE-2006-4182).

Outra vulnerabilidade poderia permitir que um agressor causasse uma negação de serviço através de um arquivo HTML compactado (CHM) malicioso, que faria o ClamAV ler uma localização inválida de memória (CVE-2006-5295). ■Referência no Debian: DSA-1196-1

Referência no Gentoo: GLSA 200610-10

Referência no Mandriva: MDKSA-2006:184

Referência no Suse: SUSE-SA:2006:060

➧ Firefox, Thunderbird e SeamonkeyMozilla Firefox é um navegador web de Código Aberto. Esses pro-blemas também afetam o cliente de email Mozilla Thunderbird e o conjunto de aplicativos de Internet Mozilla Seamonkey.

Diversas falhas foram encontradas na forma como o Firefox processa certos códigos Javascript mal formados. Uma página web maliciosa poderia causar a execução de Javascript de forma a fazer o Firefox travar ou executar código arbitrário como o usuário rodando o Firefox (CVE-2006-5463, CVE-2006-5747, CVE-2006-5748).

Várias falhas foram encontradas na maneira como o Firefox renderiza páginas web. Uma página maliciosa poderia fazer o navegador travar ou possivelmente executar código arbitrário como o usuário executando o Firefox (CVE-2006-5464).

Outra falha foi encontrada no método de verificação de assinaturas RSA do Firefox. Para chaves com expoente 3, é possível a um

agressor forjar uma assinatura que seria incorretamente verificada pela biblioteca NSS. O Firefox, da forma como é disponibilizado, confia em diversas autoridades certificadoras que utilizam expo-ente 3. Um agressor poderia criar um certificado SSL que seria incorretamente confiável quando um site fosse visitado por uma vítima desavisada. Pensou-se que esta falha houvesse sido corrigi-da no Firefox 1.5.0.7, no entanto Ulrich Kuehn descobriu que a correção estava incompleta (CVE-2006-5462). ■Referência no Debian: DSA-1225-1

Referência no Mandriva: MDKSA-2006:205

Referência no Red Hat: RHSA-2006:0733-4

Referência no Slackware: SSA:2006-313-01

Referência no Suse: SUSE-SA:2006:068

Referência no Ubuntu: USN-381-1

http://supertuxbr.blogspot.com

Page 19: 27 - Desempenho_fev_2007

| NOTÍCIASSegurança

����������������������������

�����

Postura das principais distribuições Linux quanto à segurançaDistribuição Referência de Segurança Comentários

Conectiva Info: distro2.conectiva.com.br/ Lista: [email protected] e distro2.conectiva.com.br/lista Referência: CLSA-... 1

Possui uma página específica; não há link para ela na página prin-cipal. Os alertas são sobre segurança, mas distribuídos através de emails assinados com a chave PGP da empresa para assegurar sua autenticidade. Contém também links para os pacotes atualiza-dos e para fontes de referência sobre o problema sendo corrigido.

Debian Info: www.debian.org/security Lista: lists.debian.org/debian-security-announce Referência: DSA-… 1

Alertas de segurança recentes são colocados na homepage e dis-tribuídos como arquivos HTML com links para os patches. O anún-cio também contém uma referência à lista de discussão.

Gentoo Info: www.gentoo.org/security/en/glsa Fórum: forums.gentoo.org Lista: www.gentoo.org/main/en/lists.xml Referência: GLSA: … 1

Os alertas de segurança são listados no site de seguran-ça da distribuição, com link na homepage. São distribuí-dos como páginas HTML e mostram os comandos necessá-rios para baixar versões corrigidas dos softwares afetados.

Mandriva Info: www.mandriva.com/security Lista: www1.mandrdrivalinux.com/en/flists.php3#2security Referência: MDKSA-… 1

A Mandriva tem seu próprio site sobre segurança. Entre outras coisas, inclui alertas e referência a listas de discussão. Os aler-tas são arquivos HTML, mas não há links para os patches.

Red Hat Info: www.redhat.com/errata Lista: www.redhat.com/mailing-lists Referência: RHSA-… 1

A Red Hat classifica os alertas de segurança como “Erratas”. Proble-mas com cada versão do Red Hat Linux são agrupados. Os alertas são distribuídos na forma de páginas HTML com links para os patches.

Slackware Info: www.slackware.com/security Lista: www.slackware.com/lists (slackware-security) Referência: [slackware-security] … 1

A página principal contém links para os arquivos da lis-ta de discussão sobre segurança. Nenhuma informação adi-cional sobre segurança no Slackware está disponível.

Suse Info: www.novell.com/linux/security Lista: www.novell.com/linux/download/updates Referência: suse-security-announce Referência: SUSE-SA … 1

Após mudanças no site, não há mais um link para a página so-bre segurança, que contém informações sobre a lista de discus-são e os alertas. Patches de segurança para cada versão do Suse são mostrados em vermelho na página de atualizações. Uma cur-ta descrição da vulnerabilidade corrigida pelo patch é fornecida.

1 Todas as distribuições indicam, no assunto da mensagem, que o tema é segurança.

http://supertuxbr.blogspot.com

Page 20: 27 - Desempenho_fev_2007

20

NO

TÍC

IAS

http://www.linuxmagazine.com.br

No dia 14 de dezembro, às 18:30, foi realizada na Câmara dos Verea-dores da Cidade do Rio de Janei-

ro uma cerimônia de premiação inédita no mundo. Os vereadores, em conjunto

com a ABRASOL (Associação Brasileira de Software Livre), agraciaram com belas placas de aço inox alguns personagens julgados importantíssimos quanto à uti-lização e disseminação do Software Livre e de Código Aberto (SL/CA).

Na solenidade de entrega dos prêmios, estavam presentes, além dos premiados e organizadores, representantes de ins-tituições nem sempre lembradas como apoiadoras do Software Livre, como a Fundação de Amparo à Pesquisa do Es-tado do Rio de Janeiro (FAPERJ).

A vereadora Aspásia Camargo, autora da lei que propõe o uso preferencial de SL/CA

pelo poder público municipal, comandou o início da solenidade (figura 1). Antes de iniciar seu discurso, a vereadora afirmou que diversos outros vereadores manifesta-ram solidariedade à causa e à premiação. Em seguida, explicou à platéia (figura 2) a definição de Software Livre, de acordo com a FSF (Free Software Foundation), citando as quatro liberdades defendidas por Richard Stallman. Prosseguiu relatan-do o processo pelo qual passa a referida lei, que, após ser aprovada pela Câmara e vetada pelo prefeito, foi novamente apro-vada pela Câmara, o que seria suficiente para que entrasse em vigor, mas foi con-siderada inconstitucional pelo prefeito, impedindo sua efetivação.

Logo após, o Presidente da ABRASOL, Jayme Alvares, prestou uma homenagem à vereadora em nome da ABRASOL, por seu empenho em disseminar o uso e os

valores do SL/CA.Ana Batista, secretária da Agenda 21 e

terceira componente da mesa (figura 1), falou ainda a respeito da democratização da informação, lembrando a importância do SL/CA nesse aspecto.

O prêmio de destaque na área de Gover-no foi entregue a Djalma Valois (figura 3), do ITI (Instituto Nacional de Tecnologia da Informação), que representava Renato Martini, presidente do órgão. O prêmio foi em reconhecimento ao importante trabalho realizado pelo ITI na ampliação da adoção de SL/CA no país. Djalma lem-

➧ Homenagem na Câmara dos Vereadores do Rio

brou a história da FSF e do próprio Linux, e relatou brevemente as atividades do ITI, com especial ênfase no CDTC (Centro de Difusão de Tecnologia e Conhecimento), um modelo de curso idealizado e efeti-vado pelo órgão para levar à população, gratuitamente, a educação em TI, pelo qual já passaram mais de 40 mil alunos. Djalma fechou seu discurso de agradeci-mento reafirmando ainda o compromisso do ITI com o SL/CA: “Tudo o que o ITI faz tem licença pública”.

Breno Guimarães (figura 4) foi home-nageado na categoria de Comunidades, devido a seu envolvimento com os Rio Perl Mongers, o grupo carioca de usuários e desenvolvedores dessa linguagem que é reconhecida justamente por sua vibrante comunidade. Breno explicou aos presen-

Figura 1: A vereadora Aspásia Camargo (à esquerda) coordenou o início da cerimônia de premiação, acompa-nhada de Ana Miranda (centro) e Jayme Alvares (direita).

Figura 2: O público presente à cerimônia era composto principalmente por pessoas envolvidas com Linux e Software Livre.

Figura 3: Djalma Valois representou Renato Martini, presidente do ITI, ao receber o prêmio de destaque na área de Governo.

Figura 4: O líder dos Rio Perl Mongers, grupo de usuários e desenvol-vedores dessa linguagem, Breno Guimarães, foi premiado na categoria de comunidades.

Figura 5: Rafael Peregrino, Diretor editorial da Linux New Media do Brasil, foi representado pelo editor da Linux Magazine, Pablo Hess, na entrega do prêmio na categoria de revista técnica.

http://supertuxbr.blogspot.com

Page 21: 27 - Desempenho_fev_2007

21

| NOTÍCIASGerais

Linux Magazine #27 | Fevereiro de 2007

tes o que é a linguagem Perl, além dos motivos para esta ser apelidade de “cola da Internet”, e agradeceu bem-humo-rado a todos por usarem a linguagem, mesmo aos que não sabiam que a utilizavam.

O prêmio de melhor revista técnica foi destina-do a Rafael Peregrino da Silva, Diretor Editorial da Linux New Media do Bra-sil. Rafael recebeu ainda uma moção em virtude

de sua marcante atuação em prol do SL/CA e do desenvolvimento tecnológico do Brasil, e também em reconhecimento à importância e à qualidade da Linux Magazine. Em seu lugar, o editor da Linux Maga-zine, Pablo Hess, recebeu os prêmios (figura 5). No seu discurso, Pablo explicou as atividades da editora, ressaltando a importância de levar a informação de qualidade a tantas pessoas quantas forem possíveis, “des-de aquelas que acabaram de adquirir seus primeiros computadores até os executivos de TI de grandes corporações”, sempre “com o objetivo de fomentar a inovação”.

Sérgio Amadeu, ex-presidente do ITI e personagem importante na difusão das idéias do SL/CA na esfera federal, embora ausente, foi ho-menageado com o prêmio por contribuição altamente relevante.

Júlio Cesar Neves, professor da Uni-Rio e articulador do SL/CA na Dataprev, recebeu o quinto e último prêmio (figura 6), como destaque acadêmico, por sua inestimável contribuição com o SL/CA dentro desse ambiente. Em seus agradecimentos, complementou as afirmações de Pablo Hess, lembrando que a categoria dos prefeitos e políticos em geral também compõe um público importante a ser informado sobre os ideais da liberdade do software.

O fechamento da solenidade ficou por conta de Ana Batista, que relembrou a importância da democratização da informação e também da mobilização da comunidade, responsável pela apro-vação da lei de incentivo ao uso de SL/CA após o veto por parte do prefeito do Rio.

Após o evento, homenageados e organizadores juntaram-se em uma calorosa confraternização (figura 7). As animadas conversas enfatizavam principalmente a importância do evento, o primeiro no mundo em que personagens do cenário do SL/CA receberam honras oficiais de representantes da administração pública. A mo-bilização foi levantada como um fator imprescindível para que o SL/CA receba uma maior atenção por parte de todos.

Ao final, o evento foi marcado pelo sentimento de reco-nhecimento por parte dos homenageados, e de incentivo e recom-pensa por parte dos organizadores.

A Linux New Media do Brasil manifesta sua enorme satisfação em receber o prêmio de melhor revista técnica especializada, e mais uma vez agradece à Câ-mara dos Vereadores do Rio de Janeiro. ■

Figura 6: Júlio Neves recebeu o prêmio de destaque acadêmico, e ressaltou a importância de se transmitir informação de alta qualidade aos tomadores de decisão e gestores públicos.

Figura 7: Após a cerimônia, os organizadores juntaram-se aos homenageados e à platéia para uma confraternização.

➧ Second Life abre o códigoO mundo virtual Second Life é um dos mais famosos e fre-qüentados. A empresa Liden Lab, criadora do mundo virtual, anunciou a abertura do código-fonte do programa cliente que faz a ligação dos habitantes desse mundo virtual (os jogadores) ao mundo virtual propriamente dito. A abertura será aplica-

da aos clientes do jogo para sistemas Windows®, Mac e Linux. Com essa medida, os criadores pretendem acelerar o desenvolvimento dos clientes, utilizando a consagrada meto-dologia de desenvolvimento co-laborativo inerente aos projetos de código aberto. ■

➧ Desenvolvimento de SL na USPCom o objetivo maior de propiciar a redução do déficit da balan-ça comercial brasileira em relação a softwares, a USP liberou, em dezembro último, verbas para a construção do Centro de Com-petência em Software Livre (CCSL). O novo centro será ligado ao Instituto de Matemática e Estatística (IME) da Universidade, e será abrigado em um novo prédio a ser construído. Por ano, o instituto forma 50 alunos de graduação e 25 de pós-graduação, mas o professor Fabio Kon (foto) diz que pretende fazer mais pela in-dústria nacional de software, que, na opinião do professor, ainda sofre de má qualidade.

O CCSL promoverá a interação de graduandos e pós-graduandos em Ciência da Computação, abrigando os laboratórios que estejam envolvidos com Software Livre. Além de local de pesquisa e ensino, o centro também prestará assessoria a qualquer interessado que deseje obter informações, de todos os níveis, sobre Software Livre. ■

NotasDocumentação do Ubuntu em vídeoA equipe de documentação do Ubuntu iniciou um movimento de fomen-to à produção de documentação em vídeos do tipo screencast. Usuários são incentivados a gravar suas ações na tela de forma a demonstrar como re-alizar tarefas específicas no Ubuntu. Por ser mais rápida, prática e dinâmi-ca que a leitura de tutoriais escritos, a documentação em vídeo é altamen-te valorizada e eficiente, especialmente entre os usuários iniciantes.

Firefox mais seguro e mais usado em 2006O jornal americano Washington Post publicou uma análise de diversos relatórios de segurança de navegadores web em 2006, e concluiu que o Firefox foi o mais seguro do ano, apresentando falhas sem correção durante apenas nove dias, en-quanto o concorrente Internet Explorer, da Microsoft, esteve sujeito a falhas críti-cas durante 284 dias no mesmo período. Como resultado, o navegador de código aberto manteve seu crescimento em número de usuários, atingindo 14% de fatia de mercado, mesmo com o lançamento da versão 7 do navegador da Microsoft.

Linux no PS3A última versão beta do Live CD do Gentoo Linux já funciona adequa-damente no Playstation 3. Feito para a arquitetura PowerPC de 64 bits, o CD roda também nos PowerMacs G5, e contém um ambiente Gno-me com os principais softwares para Internet e edição multimídia.

http://supertuxbr.blogspot.com

Page 22: 27 - Desempenho_fev_2007

22

CO

RP

OR

ATE

http://www.linuxmagazine.com.br

CORPORATE | Notícias

➧ Motorola adota Linux amplamente

Em sua nova linha de telefones celulares, a Motorola confirmou suas promessas de adotar Linux em todas as novas linhas de aparelhos celulares. O Motorizr Z6 substitui o Motorokr E2, e possui grandes capacidades multimídia, porém

abandona a antiga arquitetura P2K em troca de um design do tipo slide. As parcerias com a Microsoft e a Warner Music buscam garantir novas funcionalidades para o usu-ário, como baixar as músicas e tocá-las tanto no telefone quanto no Windows Media Player, o reprodutor multimídia do Windows®.

Outras características do aparelho incluem o suporte a troca de dados por Bluetoo-th, assim como o uso de acessórios com essa tecnologia, como fones de ouvido, por exemplo. Uma câmera de 2 megapixels também está incluída, além de um encaixe para cartões de memória MicroSD. O aparelho é capaz de reproduzir músicas nos formatos WMAv10, MP3, AAC, AAC+, AAC+ enhanced, AMR NB, WAV e XMF, e grava filmes em h.263 e MPEG4. ■

➧ Segundo UE, SL é mais econômicoNo estudo intitulado “Economic impact of open source software on inno-vation and the competitiveness of the Information and Communication Technologies (ICT) sector in the EU”, a União Européia debate sobre a já antiga discussão acerca da comparação dos custos de soluções de software proprietárias e abertas. Analisando a questão em profundidade, o estudo con-siderou impactos diretos e indiretos da adoção e uso de tecnologias abertas, e de forma pouco chamativa concluiu que os benefícios para os usuários são melhores interoperabilidade, produtividade e economia de custos.

O estudo foi realizado por pesquisadores de cinco universidades européias, e analisou seis instituições tanto públicas quanto privadas, que realizaram a transição para Software Livre e de Código Aberto (SL/CA). Verificou-se que, embora os custos de migração sejam elevados, o software proprietário possui um custo de aquisição significativamente maior, enquanto os cus-tos de manutenção são semelhantes, com o SL/CA sendo um pouco mais caro em alguns casos. Em relação ao Custo Total de Propriedade (TCO), o estudo verificou que, em cinco das seis instituições, esse custo é menor com o uso de SL/CA do que com software proprietário. ■

➧ Nokia N800 roda LinuxO sucessor do smartphone N770, da Nokia, foi apresentado no Consumer Electronics Show (CES) 2007, em Las Vegas, EUA. O novo modelo N800 possui os recursos mais desejados em dispositivos da categoria, como Wi-Fi, Bluetooth, email, VoIP e alto-falantes estereofônicos. A grande tela LCD touchscreen de alta resolução abriga os botões, que não existem mais fisica-

mente em outra parte do dispositivo, e só são mostra-dos quando necessário. Esse recurso ajudou também a reduzir ainda mais o tamanho do aparelho. Um aspecto curioso é que, embora o Instituto Nokia de Tecnologia, localizado em Recife, Pernambuco, tenha desenvolvido o framework VoIP Tapioca, a empresa finlandesa optou pelo software Skype para a realização de chamadas telefônicas via Internet. ■

NotasMySQL muda licenciamentoA MySQL AB, fabricante de um dos bancos de dados livres mais utilizados, o MySQL, alterou os termos de licenciamento da licença desse software. Com o objetivo de tornar a versão da licença GPL tam-bém uma opção - já que a GPLv3 será lançada em breve, cercada por controvérsias - a empresa passou a adotar o texto “licenciado sob a GPLv2”, em vez de “licenciado sob a GPLv2 ou posterior”.

Audi adota Linux para CAEA montadora de automóveis alemã Audi iniciou a migração de seus servidores de Engenharia Auxilia-da por Computadores (Computer-Aided Engineering, ou CAE) para Linux. Os sistemas x86 que a empresa já adotava serão progressivamente substituídos por máquinas x86-64, para agilizar e melhorar a precisão nas tarefas de simulação, visualização 3D, projetos de peças e componentes, entre outras. De acordo com Florian Kienast, relações-públicas da Audi, a mon-tadora está cada vez mais próxima de um parque composto totalmente por máquinas x86-64 rodan-do Linux, tanto nas estações como nos servidores.

Linux no Banco do BrasilO jornal Gazeta Mercantil publicou uma maté-ria tratando do uso de Software Livre pelo Ban-co do Brasil. Entre as vantagens advindas desse uso, o artigo relata a economia de R$ 89 milhões nos últimos quatro anos, desde que foi iniciada a migração para SL, simplesmente devido à au-sência de pagamentos de licenças de software.

Nova versão do BaculaFoi lançada a versão 2.0 do software de backup de redes Bacula, em versões para Linux, Unix, Windows® e MacOS X. Entre as novidades da última versão está a possibilidade de migração de dados entre siste-mas de arquivos diferentes. Há a possibilidade de se contratar suporte corporativo a partir do fabricante.

http://supertuxbr.blogspot.com

Page 23: 27 - Desempenho_fev_2007

23

| CORPORATENotícias

Linux Magazine #27 | Fevereiro de 2007

➧ Mandriva no Classmate PCO computador portátil fabricado pela Intel para auxiliar o processo educacional de estudantes de países em desenvol-vimento, Classmate PC, virá com o Mandriva Linux 2007 pré-instalado.

As duas empresas já vêm trabalhando na solução conjunta há vários meses, na busca de uma melhor integração de drivers ao hardware das máquinas, entre outros fatores.

Os exemplares definitivos do computador deverão estar disponíveis para a comercialização com escolas no segundo semestre de 2007, e serão equipados com processador Celeron-M 900 MHz, 256 MB de memória e até 2 GB de memória flash, pesando ao todo 1,3 kg.

Posteriormente, o Classmate PC deverá ser comercializado também na Índia e no México, com o mesmo sis-tema operacional. ■

➧ Economia de 50% com LinuxOs Infocentros Acessa São Paulo, centros comunitários de acesso à Internet no Estado de São Paulo, realizaram a migração de algumas de suas estações de acesso para Linux. A solução anterior, baseada em rich clients com sistema operacional da Microsoft, foi integralmente substituída por thin clients da brasileira Tecnoworld, rodan-do Linux. Com isso, a Prodesp, coordena-dora técnica do projeto Infocentros Acessa São Paulo, relatou uma economia de 85% nos custos da solução. Cada novo aparelho, possui menor custo, pois a necessidade de hardware é menor que a modelo anterior, e a manutenção também foi facilitada, com uma economia de 40% por conta da possibilidade de acesso remoto. ■

➧ Red Hat firma parceria com VMwareA Red Hat, fabricante de uma das distribuições comerciais Linux mais utilizadas em ambientes corporativos, fechou uma parceria com a VMwa-re, empresa que desenvolve o sistema de virtuali-zação de mesmo nome. O acordo visa ampliar a parceria que já existia anteriormente, oferecendo agora suporte aos fabricantes e ISVs que desejarem utilizar ambos os softwares em conjunto, de forma a melhorar sua interoperabilidade.

É interessante observar a ocorrência desse acordo pouco depois de circularem rumores de que a Novell - principal concorrente da Red Hat no mercado de Linux corporativo - estaria interessada em adquirir uma empresa de softwares de virtualização, com su-gestões de que se trataria da XenSource, fabricante do Xen. Esse software de código aberto costumava ser a aposta da Red Hat para a virtualização em Li-nux. Porém, com a Novell adotando uma estratégia mais agressiva de aquisição da empresa, é possível que a empresa do chapéu vermelho tenha se visto obrigada a buscar alternativas. ■

➧ Lançado o Java SE 6Após mais de dois anos de desenvolvimento, a Sun lançou o Java Pla-tform Standard Edition 6, junto com uma nova versão do ambiente de desenvolvimento NetBeans 5.5. O download é gratuito, embora a licença adotada ainda não seja a GPL. A última versão do Java in-clui ligações (bindings) para outras linguagens populares, como PHP, Python, Ruby e JavaScript. Essas novidades são decorrentes da adoção de um framework para linguagens de script, sobre o qual é possível implementar os “Scripting Engines”, coleções de classes de APIs para interagir com outras linguagens, liberado sob a licença BSD. Os scrip-ting engines são baseados no “Rhino JavaScript Engine”, que já vem integrado e configurado.

O NetBeans também contém diversos avanços importantes, como um novo componente de gerenciamento de layout (apelidado ante-riormente de “Matisse”), que facilita o desenvolvimento de interfaces com o usuário.

De acordo com a Sun, o suporte ao Windows® Vista também foi melhorado nessa versão. ■

NotasMandriva Club no BrasilAté o último mês, para ingressar no Mandriva Club, era necessário que os usuários possuíssem cartão de cré-dito internacional, pois a inscrição somente era possível através do site internacional do Mandriva Club. Agora a Mandriva Store brasileira, em www.mandrivastore.com.br, já permite a compra através de boleto bancário e cartão de crédito brasileiro. O Mandriva Club oferece acesso ao download antecipado de softwares, como imagens de CDs e DVDs de instalação das últimas ver-sões do Mandriva Linux, além de descontos na Man-driva Store, participação no desenvolvimento da dis-tribuição e acesso a plugins e softwares comerciais.

Linux nos caças americanosA Lockheed Martin, fabricante de aeronaves para a For-ça Aérea Americana, equipará dois de seus caças F-16 com dispositivos avançados de gráficos 3D e geração de imagens. As empresas selecionadas para fornecer a so-lução de software e hardware, Parallax Capital Partners e Concurrent, essa última especializada em sistemas Linux de tempo real para missão crítica, implementarão a solu-ção com uso do RedHawk Real-time Linux, a distribuição da Concurrent baseada no Red Hat Enterprise Linux 4.

Java Application Server no UbuntuA Sun se aproximou da Canonical, fabricante do Ubuntu, para oferecer oficialmente o Java Enterprise Edition 5 Application Server para essa distribuição. A Sun também está buscando homologar o Ubuntu em seus servidores Opteron, e já o fez na linha Niagara.

➧ Servidores de virtualização da Unisys

A Unisys começou a comercializar no Brasil os ser-vidores corporativos ES7000/one. Equipados com processadores Xeon 7100, de núcleo duplo, essas má-quinas são especialmente voltadas à implementação de virtualização, o que aumenta a eficiência e reduz custos de operação. De acordo com o fabricante, esta será a primeira geração de máquinas capazes de rodar os sistemas operacionais Linux, Windows®, Unisys OS 2200 e MCP simultaneamente. ■

http://supertuxbr.blogspot.com

Page 24: 27 - Desempenho_fev_2007

Hilary Quinn - www.sxc.hu

24

CO

RP

OR

ATE

http://www.linuxmagazine.com.br

CORPORATE | Entrevista

A Unisys é uma das empresas de Tec-nologia da Informação atuantes há mais tempo no mercado, e também

uma das mais importantes mundialmente. Na era da computação em mainframes, até a década de 1980, a empresa se desta-cou na produção dessas máquinas. Com a mudança do foco movendo-se para os serviços em TI, no início da década de 1990, a Unisys continuou ocupando um lugar de destaque no cenário de TI. Nos últimos anos, com o crescimento dos sis-temas de Código Aberto, principalmente o Linux, a empresa americana passou a oferecer também suporte a essa platafor-ma, percebendo sua importância para o mercado corporativo.

Linux Magazine» Qual a estratégia da Unisys para o Software Livre?André Vilela» Enxergamos o Linux e o Código Aberto como uma plataforma bastante interessante do ponto de vista do mercado, mas não somos uma empresa

especificamente de Soft-ware Livre. Como não possuímos uma bandeira específica em relação a plataformas abertas ou proprietárias, somos ca-pazes de oferecer nossos produtos, serviços e solu-ções em qualquer am-biente corporativo. Par-tindo do princípio de que nossos clientes têm total propriedade para decidir qual plataforma desejam, a Unisys não tenta forçá-los a percorrer algum caminho contra sua vontade. Porém, ob-servamos que o Software Livre é uma boa solução para diversas empresas e,

justamente por isso, criamos um programa estratégico mundial para oferecer softwares de código aberto em qualquer ambiente corporativo. Oferecemos soluções de TI para que nossos clientes disponham de um ambiente de negócios seguro.

LM» Que parcerias a empresa desenvol-veu desde que começou a trabalhar com tecnologias de Código Aberto?AV» Nós criamos, em conjunto com di-versas outras empresas internacionais, um grupo mundial dedicado ao Código

Aberto, que vai muito além do Linux. Esse grupo tem como objetivo esclare-cer ao mercado corporativo as caracte-rísticas do Software Livre. As empresas realmente se interessam em conhecer a plataforma de código aberto, estudar e avaliar seus benefícios e desvantagens, e nosso grupo tem justamente o papel de difundir as informações e o conheci-mento acerca dessa área.

LM» Como você enxerga o futuro do Có-digo Aberto no ambiente corporativo?AV» Os consultores de mercado apontam que o principal foco de crescimento do Linux será como substituto do Unix, em suas diversas variações. Mas aqui cabe uma pequena digressão sobre a história do Unix: o Unix foi introduzido comer-cialmente sob a chancela de Open Sys-tems, 0 que se mostrou, simplesmente,

uma tentativa de suplantar uma empresa já estabelecida. O sistema não era uma plataforma aberta de fato e, exatamente por esse motivo acabou por aprisionar seus clientes, o chamado “vendor lock-in”, prestando na realidade um desserviço. As tão propaladas interoperabilidade e compatibilidade jamais foram alcança-das, com o sistema tornando-se refém de uma indústria.

Na Unisys, acreditamos que o Linux tenha um grande potencial como catali-sador da migração de antigas variantes do

Unix para uma nova plataforma moderna, aberta, e independente de fornecedor. Por isso mesmo, nos esforçamos para não prender nossos clientes usuários de Có-digo Aberto a nossos produtos proprietá-rios, pois é importante que eles se sintam confortáveis com suas escolhas. E por isso mesmo percebemos que o maior espaço para o Linux é no ambiente corporativo, e não nos desktops domésticos, onde as necessidades do usuário são diversas de-mais, como alvos móveis.

LM» O que o Linux e o Software Li-vre agregaram ao modelo de negócios praticados pela Unisys?AV» A empresa traz a experiência corpora-tiva. Isso significa que conhecemos os ca-minhos a percorrer no mundo corporativo para realizar a adoção de um sistema de forma ampla. Simplesmente ter técnicos

André Vilela, diretor do Programa de Marketing de Sistemas e Tecnologia da Unisys Brasil

Ao gosto do clienteA Unisys é especializada em serviços de TI. Como tal, precisa oferecer suporte aos principais sistemas operacionais para o mercado corporativo. A recente inclusão do Linux entre os sistemas suportados pela empresa confirma as observações de que o pingüim não apenas é importante nesse mercado, como sua presença já se faz sentir entre seus principais players.por Pablo Hess

Figura 1 André Vilela é diretor do Programa de Marketing de Sistemas e Tecnologia da Unisys Brasil.

Os consultores de mercado apontam que o principal foco de crescimento do Linux será como substituto do Unix, em suas diversas variações.

http://supertuxbr.blogspot.com

Page 25: 27 - Desempenho_fev_2007

25

| CORPORATEEntrevista

Linux Magazine #27 | Fevereiro de 2007

desenvolvendo software não é o bastante; o conteúdo do software deve atender a expectativa da indústria. É exatamente sobre esse ponto que se construiu a his-tória de nossa empresa. Nós tivemos o cuidado de não adotar uma única ban-deira em relação ao ambiente operacio-nal, e estabelecemos parcerias com Red Hat e Novell. O fator mais importante nesse mercado é termos certeza de que esses sistemas operacionais dispõem de um suporte adequado no ambiente cor-porativo: é necessário assegurar a oferta de suporte técnico, o cumprimento de prazos, a qualidade dos softwares e solu-ções, e ainda oferecer interoperabilidade estável e sem conflitos. Acima de tudo, é fundamental que todos esses requisitos sejam respondidos por uma única em-presa; caso contrário, a multiplicidade de fontes de informação elimina a pra-ticidade da solução.

LM» Que produtos e serviços a Unisys de-senvolve e disponibiliza com o Linux?AV» Temos parcerias com a Red Hat, e já havíamos firmado também uma com a JBoss antes de sua aquisição pela primeira, com o intuito de garantir que os ambientes de Código Aberto fossem suportados no ambiente corporativo. Na área de bancos de dados, temos parcerias sólidas com a Oracle, para suporte e teste de performance. Se alguém desejar implementar serviços, soluções e aplicações que façam uso desses componentes, ou também com o uso de bancos de dados de Código Aberto, como MySQL e PostgreSQL, nós seremos a empresa a responder por todas as etapas dessa implemen-tação, além da manutenção e suporte, naturalmente. Por exemplo, a Unisys dispõe de consultores especializados na realização de ambientes Websphe-re para JBoss.

Nós buscamos suportar todos os com-ponentes de Código Aberto do âmbito corporativo suportados pela Unisys, e va-mos até a adequação do hardware, com a fabricação e comercialização de servi-dores, nos quais testamos o desempenho em conjunto com Software Livre.

LM» A Unisys é membro do OSDL. Que contribuição a empresa faz para o desenvolvimento de softwares de Có-digo Aberto?AV» Além dos OSDL, a Unisys faz parte de diversos fóruns e iniciativas relacio-nados ao Código Aberto. Temos contri-buído com código de forma consistente;

por exemplo, já portamos diversas ferra-mentas que antes existiam somente em mainframes, e agora rodam também so-bre Linux. Escrevemos também o código para o particionamento físico de nossos servidores para que esse recurso seja dis-ponibilizado também em Linux.

LM» Como você avalia o uso do Có-digo Aberto em ambientes de missão crítica?AV» Nós possuímos um aplicativo para controlar sistemas de transporte aéreo, chamado Air Core. Essa aplicação foi desenvolvida em um sistema proprietá-rio, e agora foi portada para o Linux pela Unisys. Com esse exemplo, demonstra-mos a qualidade do Código Aberto para lidar com sistemas de missão crítica. Nos-sos sistemas para telefonia constituem outro importante exemplo de aplicação de missão crítica que roda sobre Soft-ware Livre.

LM» Na sua visão, exis-tem barreiras para a adoção do Linux no am-biente corporativo?AV» Acredito que o fato de o Unix ser fechado é o grande freio na migra-ção, pois dificulta o uso no Linux dos mesmos softwares. Entretanto, ao mesmo tempo, isso também a es-timula. O que vejo como empecilho para uma maior adoção do Linux é a percepção, por parte das empresas e gestores de TI, de que o Código Aber-to é maduro, seguro, e de que há em-presas com as quais se pode contar de forma absolutamente confiável para essa adoção.

Especificamente em respeito à segu-rança, é fato que os ambientes complexos, ou seja, aqueles com diversos tipos de ser-vidores, são mais difíceis de mantermos seguros. Por isso, criamos o Application Defender, um software escrito para am-bientes de Código Aberto que protege aplicações Java rodando sobre plataformas abertas, evitando assim o acesso direto de hackers aos servidores.

LM» Que vantagens o Linux oferece como plataforma de desenvolvimento e de serviços para a Unisys?AV» Essa pergunta é muito importante. No Linux, nós desenvolvemos em Java. Possuímos uma linguagem de quarta geração (ABS – Agile Business Suite), que usamos em nossos mainframes. No

ambiente corporativo, é fundamental gerar código bem documentado e de forma rápida. Originalmente, a ABS gerava somente código em COBOL, mas desenvolvemos módulos para a ge-ração de código em .NET e Java. Hoje conseguimos desenvolver programas de Código Aberto usando o mesmo tipo de tecnologia que é aplicada aos mainframes, e com documentação abrangente e precisa.

Com isso podemos desenvolver, por exemplo, um sistema de vendas pela Internet, sem sabermos em que plata-forma ele rodará: mainframes, Código Aberto, plataforma Microsoft... Ao final, basta selecionarmos a plataforma dese-jada, assim como o sistema de banco de dados, e teremos o código gerado para a solução. Se mudarmos a plataforma ou o banco de dados, basta gerarmos nova-mente o código.

LM» Como você encara a competição no segmento corporativo?AV» Nossos principais concorrentes estão comprometidos demais com o Unix, en-quanto nós não precisamos, de forma alguma, defendê-lo. Isso nos traz uma profunda inde-pendência de plataforma, muito importante nessa competição pelo mercado.

Acho importante ressaltar que nossa posição no mercado é absolutamente isenta no que diz respeito à escolha de plataformas abertas ou proprietárias, e acreditamos ser esse o nosso principal diferencial em relação à concorrência. Algumas empresas apóiam Linux pra derrubar a Microsoft, mas nós não.

LM» Que vantagens são oferecidas por sistemas de ponto-de-venda que rodem sobre a plataforma Linux, como é o caso do Calypso?AV» O Calypso é um caso bastante particu-lar em nossos softwares. Embora seja um sistema de missão crítica, ele é completa-mente diferente do Air Core, por exemplo, e sua plataforma de desenvolvimento e execução, o Linux, foi escolhida por mé-ritos puramente técnicos. ■

Algumas empresas apóiam Linux para derrubar a Microsoft, mas nós não.

http://supertuxbr.blogspot.com

Page 26: 27 - Desempenho_fev_2007

26

CO

RP

OR

ATE

http://www.linuxmagazine.com.br

Velocidade, capacidade, agilidade e rendimento são características que definem o desempenho de ta-refas, iniciativas, trabalhos e projetos. Na área de

Tecnologia da Informação, o exercício de medir desem-penho é árduo. Como atividade-meio, destinada a ofere-cer condições para que uma empresa atinja suas metas, torna-se difícil o cálculo dos seus resultados principais. Afinal, invariavelmente o foco da avaliação centra-se na atividade-fim. Com o surgimento dos sistemas de Código

Aberto em contraponto ao software proprietário, a medi-ção tornou-se uma prática ainda mais espinhosa. Por ou-tro lado, ampliou-se a importância da gestão tecnológica dentro das organizações.

O crescimento dos sistemas de Código Aberto é ex-ponencial e irreversível no mundo. O Software Livre é a mais significativa inovação tecnológica apresentada nos últimos tempos. O fenômeno irá impulsionar ainda mais as empresas desenvolvedoras de software no país, já protagonistas de um crescimento anual de 20%, índice significativamente maior comparado ao de outros seg-mentos de TI, como hardware e serviços. Por outro lado, o software proprietário chegou a um nível de maturidade muito grande. Os grandes fornecedores de programas no mundo são precursores do desenvolvimento da Tecno-logia da Informação, ou melhor, da Informática, como era chamado comumente todo e qualquer conjunto de conhecimento na área.

Nas empresas há uma ferrenha discussão sobre a ado-ção de software proprietário, em oposição aos benefícios da adoção do software de Código Aberto. Para usar, copiar e redistribuir o software proprietário, é preciso pagar ou solicitar uma permissão ao seu fabricante. Os sistemas de Código Aberto, ao contrário, permitem que o usuá-rio efetue livremente, sem ônus algum, modificações no programa original.

O ponto nevrálgico dessa questão está na confiabilida-de dos sistemas e redes de computadores. Hoje, este item lidera a preocupação — e os investimentos — das empre-sas em TI. E na implementação de softwares, o que mais se pergunta é sobre sua vulnerabilidade. E os softwares proprietários levam (ainda) ligeira vantagem neste aspecto. Porém, no debate da questão, é importante analisar que cada corporação tem a sua estratégia e visão de trabalho, de acordo com as suas necessidades e, principalmente, interesse no desenvolvimento dos negócios.

Tais referências constroem o modelo de gestão tecno-lógica da organização. Porém, são itens de princípio, que podem ser alterados a qualquer momento. Aliás, a flexibi-lidade é uma das maiores virtudes da gestão de qualquer área. No caso do segmento de Tecnologia da Informação, a prática legitima as ações. Assim, com relação ao software proprietário e ao Software Livre, o que se observa é que ambos podem coexistir nos projetos de TI das empresas. Não há mal nisso. Em ambos os casos, o que se deve ve-rificar é a sua performance, aliada ao custo-benefício: ou seja, preço e aproveitamento. E isso só se resolve com lúcido e equilibrado discernimento das iniciativas de TI a serem empreendidas. ■

Código aberto ou proprietário por André Vilela

O autorAndré Vilela é diretor do Programa de Marke-ting de Sistemas e Tecnologia da Unisys Brasil.

O Software Livre é a mais significativa inovação tecnológica apresentada nos últimos tempos.

http://supertuxbr.blogspot.com

Page 27: 27 - Desempenho_fev_2007

27Linux Magazine #27 | Fevereiro de 2007

CO

RP

OR

ATEOutro dia, conversando com um CIO, ele se mos-

trou apreensivo quanto à qualidade do código dos softwares de Código Aberto. Sua dúvida era

se esses softwares teriam qualidade adequada às necessi-dades de um exigente ambiente corporativo. Parodiando a campanha de contrapropaganda de uma conhecida empresa de software, vamos aos fatos.

Existem dois métodos básicos de desenvolvimento de software: os princípios catedral e bazar. Esses nomes foram cunhados a partir do célebre trabalho “The Cathedral and the Bazaar” (A Catedral e o Bazar) [1], de Eric Raymond. O método batizado de catedral é baseado no planejamento centralizado, com evolução top-down e rígido relaciona-mento entre a gerência e os desenvolvedores, quanto a prazos, metodologias adotadas e tarefas, dentro de uma hierarquia organizacional. O desenvolvimento é interno à empresa e apenas nos ciclos de teste alfa e beta que o produto é exposto ao mercado, através de uma restrita e controlada comunidade de usuários (individuais ou em-presas clientes) que se prontificam a cooperar nos testes e depurações. Mas todo o código-fonte é proprietário e fechado ao mundo externo, e restrito apenas aos olhos dos desenvolvedores da empresa que produz o software. É o método tradicionalmente adotado pela indústria de soft-ware em seus produtos comerciais. Seu nome deriva do processo de construção das catedrais na Idade Média.

O princípio bazar, como o nome indica, é baseado em uma forma de desenvolvimento mais livre, sem centraliza-ção do seu planejamento e execução. É o modelo típico do Código Aberto. O desenvolvimento é efetuado em rede, por uma comunidade de desenvolvedores voluntários, na maioria das vezes sem vínculos entre si, em uma organi-zação informal. A comunicação é efetuada pela Internet, virtualmente e sem fronteiras geográficas, e apenas existem alguns princípios que regulam o trabalho. A liderança do projeto não é definida de maneira prévia e formal, mas emerge naturalmente pelos méritos de um determinado membro da comunidade de voluntários.

Essa é uma característica diferenciadora do movimento de Código Aberto: a sua exploração de forma inteligente do poder da produção colaborativa. O que torna esse poder extraordinário é a capacidade de melhorar com o tempo, curando-se organicamente, como se o enorme exército de colaboradores de um projeto como o Linux fosse um sistema imunológico, sempre vigilante e ágil na reação a qualquer ameaça ao organismo.

E apesar dos receios naturais causados por um mo-delo de desenvolvimento inovador para os padrões tra-dicionais, os projetos de Código Aberto não descambam para a anarquia; pelo contrário, mantêm uma coesão impressionante.

Os códigos são revisados pelos próprios pares e geral-mente o melhor código é selecionado (meritocracia). Como não existe um departamento de marketing influenciando prazos, o ritmo de desenvolvimento é direcionado pela dis-ponibilidade de tempo e dedicação dos desenvolvedores voluntários. O método bazar gera uma forte tendência à produção de código de alta qualidade. O código é lido e analisado por diversos desenvolvedores, às vezes na esca-la das centenas, o que acelera o processo de depuração e correção de erros. Além disso, não existe pressão de pra-zo, o que permite mais ciclos de depuração. A decisão de

liberar o código é fruto de consenso do grupo, e não uma imposição de marketing, como muitas vezes ocorre em um projeto comercial.

O resultado é um software de alta qualidade, como inúmeros estudos independentes têm demonstrado. Por-tanto, a preocupação do CIO, basicamente, decorre prin-cipalmente do desconhecimento sobre o que é realmente o Código Aberto, e não de fatos reais. ■

Código Aberto: modelo para software de qualidade

Cezar Taurion

O autorCezar Taurion é Gerente de Novas Tecnologias Aplicadas da IBM.

Mais Informações[1] The Cathedral and the Bazaar (em inglês): http://catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/

[2] (em português): http://www.geocities.com/Col-legePark/Union/3590/pt-cathedral-bazaar.html

Essa é uma característica diferenciadora do movimento de Código Aberto: a sua exploração de forma inteligente do poder da produção colaborativa.

http://supertuxbr.blogspot.com

Page 28: 27 - Desempenho_fev_2007

CA

PA

http://www.linuxmagazine.com.br

A matéria de capa deste mês mostra como os autores divergem em relação aos meios para se alcançar o aumento do desem-penho de um sistema: enquanto um deles aconselha ativar o

registro detalhado, o outro discorda, sugerindo justamente o con-trário. Ambos têm razão; na realidade, uma análise dos registros revela alguns gargalos. Infelizmente a tarefa de registrar demanda tempo, pois requer a gravação de dados no disco rígido.

Se o servidor rodar de maneira estável e não houver qualquer outro freio a ser eliminado, então a desativação do registro é alta-mente benéfica. Nesse caso, vale a pena ponderar sobre a neces-sidade do registro. Mas atenção: quem não costuma documentar seus procedimentos fatalmente ficará de mãos vazias no caso de uma falha ou após uma queda, para identificar os culpados.

Informações exatas sobre cavalos-vapor ocultos e freios de mão ativados são fornecidos por um padrão de testes virtual. Seus bench-marks são uma faca de dois gumes, pois medições podem facilmente fornecer uma sensação errônea de certeza e precisão. De qualquer forma, avaliações são indispensáveis. As páginas de informações dos fabricantes não servem como alternativa, pois freqüentemente trazem meias-verdades, mentiras, ou omitem detalhes importantes. Algumas dessas curiosidades são listadas pelo artigo à página 34 (artigo de benchmarking), que também sugere que as discrepâncias sejam imediatamente informadas ao público. De uma forma geral, as condições de licenciamento de muitos fabricantes proíbem a publicação de testes incômodos aos fabricantes.

O artigo da página 37 (artigo Python) esclarece como progra-madores Python buscam segmentos de código a serem otimizados para acelerar seus scripts com o menor esforço possível. O processo sistemático apresentado serve para todas as linguagens.

Ganhe desempenho para seus sistemas e servidores

Economia através da eficiênciaA otimização de velocidade de softwares para Linux é econômica e ecologicamente correta. Em vez de lançar mão de novos hardwares indiscriminadamente, o melhor é descobrir os travamentos nos condutores do sistema. Esta edição será útil tanto para administradores que desejem obter o maior desempenho possível de seus servidores sem alterar seu hardware como para desenvolvedores em busca de técnicas para acelerar seus softwares.por Achim Leitner

ÍNDICEOs 44 Mandamentos do servidorCinco especialistas dão dicas e sugestões de como fazer servidores de email, Web, banco de dados e de arquivos funcionarem mais rápido. pág. 29

Exemplos de benchmarkNão acredite em relatórios - apenas benchmarks e avaliações con-fiáveis dizem realmente do que um produto é capaz. pág. 34

Python otimizadoMuitos programas são desenvolvidos nessa linguagem interpreta-da; por isso, a otimização desses softwares é obrigatória. pág. 37

28http://supertuxbr.blogspot.com

Page 29: 27 - Desempenho_fev_2007

Benjamin Earwicker e Esther Groen - www.sxc.hu

29

| CAPAAções gerais

Linux Magazine #27 | Fevereiro de 2007

CA

PA

A otimização de servidores é uma questão de sobrevivência. A partir de uma determinada carga de uso,

sua eficiência despenca. Se mais solici-tações forem feitas, aumentando ainda mais a pressão sobre ele, todo o sistema também quebra. Mas é possível evitar a queda de um serviço crítico da empresa. A melhor solução nem sempre é empregar hardwares mais rápidos. Uma otimização da configuração do sistema do servidor, assim como dos serviços que rodam nele, pode fazer milagres. Cinco profissionais contam o que os administradores de sis-tema devem fazer para manter o fluxo de dados em seus servidores web, de email, de banco de dados ou Samba.

Independentemente do tipo de servi-dor, há algumas regras que todo admi-nistrador de sistemas deveria observar. Ralf Spenneberg, autor e docente na área de Administração de Sistemas Li-nux, conta que, para um desempenho otimizado, deve-se levar em considera-ção o seguinte: ➧ Fique atento às combinações! Para

cada serviço há ao menos um fator que define o desempenho: CPU, E/S ou uso da memória. Por isso faz sen-tido dividir os serviços, que também tenham o mesmo fator determinante de desempenho, de tal maneira que dois serviços não rodem na mesma máquina (figura 1).

Na maioria das vezes, o gargalo do desempenho do servidor de emails lo-caliza-se no disco rígido ou na latência de rede. Caso um antivírus não exija tempo adicional do processador, a CPU de um servidor responsável pela entrega de mensagens tem tempo suficiente para realizar outras tarefas. ➧ Seja observador! Somente com uma

observação precisa e duradoura pode-se determinar quais são os fatores determinantes de performance, e quais as faixas normais de uso de CPU, E/S e memória. Os comandos de diagnóstico vmstat e sar analisam o fluxo de disco; top, htop, uptime e sar ajudam a supervisionar a CPU; ps, top e sar são úteis na determina-ção do uso de memória.

Situações de carga total levam esses valores além dos normais. Uma supervisão através de SNMP (por exemplo, por meio do Zabbix [1] ou do Nagios) avisa, além disso, sobre catástrofes eminentes. Se fo-rem localizadas áreas vulneráveis, registros supérfluos devem ser desativados. ➧ Partições de swap são um perigo para

o administrador de sistemas. Muitos servidores permitem determinar o li-mite para o número máximo de instân-cias rodando num mesmo momento. Como a manipulação de memória através da swap torna extremamente demorados outros acessos ao disco,

cada vez mais processos esperam pelo cumprimento de suas ordens de E/S, o que leva a um ciclo horrendo de consumo progressivo de swap.

Todos os serviços juntos não devem produzir um número de instâncias supe-rior ao armazenável na memória física do disco da máquina servidor.

RAM ou disco? ➧ Não se deve deixar a memória do ser-

vidor ociosa! Em diversos servidores ela também fica menor: vale a pena carregar apenas módulos necessá-

Otimização de servidores Apache, Postfix, Oracle/MySQL e Samba

Os 44 mandamentos do servidorA homepage da empresa está conectada ao Slashdot desde as 11:20h; a nova massa de emails deve sair e o banco de dados tem que retornar os dados solicitados em tempo recorde. Este artigo mostra quais técnicas o servidor pode utilizar para vencer a sobrecarga.por Badran Farwati, Peer Heinlein, Ralf Hildebrandt, Charly Kühnast e Volker Lendecke

Figura 1: Elefante no buraco da agulha: diferentes solicita-ções de dois serviços referentes a tempo de CPU, memória e E/S provavelmente usam melhor a capacidade total do servidor quando executados como solicitações concorrentes.

E/S RAM CPU E/S RAM

Serviço 1

Serviço 2

Serviço 1

Serviço 2

CPU

http://supertuxbr.blogspot.com

Page 30: 27 - Desempenho_fev_2007

30 http://www.linuxmagazine.com.br

CAPA | Ações gerais

rios, o que também é válido para a recompilação de pacotes. Com isso, reduz-se o espaço ocupado na RAM. Normalmente o Apache carrega vários módulos desneces-sários na configuração padrão. No Postfix, em algumas circunstâncias, não faz sentido gerar binários sem suporte a MySQL, TLS ou LDAP. O espaço de memória ocupado pelo CDB é muito menor que o do Berkeley DB.

➧ As partições de dados, sistema e log devem ficar claramente sepa-radas! Partições distintas permi-tem escolher o melhor sistema de arquivos para cada tarefa (por exemplo Ext3 para a de sistema e XFS para a partição de dados). Discos próprios ou sistemas RAID evitam que a cabeça de leitura do disco em acessos concorrentes se movimente exageradamente, o que degrada o desempenho.

➧ Use um sistema de log! Sem um log do sistema, nenhum dado para análise ou busca de erros pode ser disponibilizado. Um - diante do nome do arquivo de log em /etc/syslog.conf ativa a es-crita assíncrona dos arquivos de log e diminui a carga no sistema de arquivos.

Armazenagem segura ➧ Deve-se sempre proteger a con-

figuração atual de alterações! Pequenas alterações podem de-teriorar inesperadamente o de-sempenho do servidor. Até o motivo ser encontrado, perde-se um tempo precioso. Por isso, o administrador de sistemas deve utilizar um controle de versões

para arquivos de configuração, ou ao menos fazer um backup das alterações. Assim ele pode reagir rapidamente quando os clientes começarem a reclamar de uma repentina queda de velocidade.

➧ Tudo que não sofrer alterações deve ficar no cache! O cache auxilia em muitas situações: proxies reversos (Squid, por exemplo) diante de sis-temas CMS reduzem a carga sobre o banco de dados. Servidores DNS com caching (por exemplo Dns-Ca-che e Bind) economizam solicitações DNS desnecessárias em analisadores de log e servidores de email. O ca-che integrado ao antivírus Amavisd New evita a repetição de análise do mesmo conteúdo.

Perguntar ao porteiro ➧ Visitas indesejadas devem ser dispen-

sadas o quanto antes. Quem não se aproxima do servidor também não consegue gerar qualquer problema. Um firewall, um controle de acesso com verificações smtpd_*_checks no Postfix excluem hóspedes indeseja-dos antes que estes exijam minima-mente do sistema. O Anvill Server no Postfix [2] limita, além disso, o número de emails que o servidor manipula por unidade de tempo, mantendo as filas em tamanhos que ele consiga processar sem prejudicar seu desempenho. O Cband [3] se encarrega de realizar uma limitação inteligente da largura de banda no servidor web Apache.

➧ Bata sem fazer barulho! Port-kno-cking é uma ótima forma de poupar recursos, pois mantém o firewall completamente fechado e, no en-tanto, permite o login a usuários confiáveis [4]. Até mesmo senhas de uso único (one-time passwords) e a mudança das portas de serviços como SSH fazem bem à segurança, e além disso evitam que visitas in-desejadas danifiquem a máquina.

Servidor webSe o endereço de uma página Web estiver publicado em um local muito visitado, não deve demorar muito para que sua visitação aumente consideravelmente. Charly Kühnast, o administrador de sistemas responsável pelos firewalls e DMZs em um datacenter do Baixo Reno, aconselha:

➧ Escolha o módulo de multiproces-samento correto! O MPM prefork fornece uma série de processos idên-ticos do Apache, e é indicado para máquinas com até dois processado-res. Quanto mais CPUs um servidor web possuir, melhor será optar pelo MPM worker, que trabalha com vá-rias threads por processo.

➧ Use o cache com responsabilida-de! O Apache oferece os módulos mod_disk_cache e mod_mem_ca-che, que são mecanismos para ar-mazenar em cache os conteúdos chamados com freqüência. Quem possuir bastante RAM deve optar pelo mod_mem_cache [5].

Peso a bordo ➧ Livre-se do peso morto! O mecanis-

mo HTaccess é incontestavelmente útil, mas também um destruidor de desempenho. Então, livre-se dele se você não o utilizar: AllowOverride None economiza o lento processamento do arquivo .htaccess.

➧ Elimine mais peso ainda: o admi-nistrador também deve tirar do caminho links simbólicos (Options -followSymlinks) e todos os módulos desnecessários. A melhor solução é compilar o Apache estaticamente com tudo de que precisamos, e não carregar absolutamente nenhum módulo no tempo de execução.

➧ Abdique dos lookups! Lookups de nomes de máquina são terríveis para o desempenho, mesmo no caso de servidores de nome velo-zes. HostnameLookups off elimina esse entrave. Quem precisar ur-gentemente da informação pode executar os lookups mais tarde na avaliação dos logs com uma ferramenta como o Webalizer.

➧ Cuide de seus clientes e não os dei-xe esperar. A diretiva MaxClients tem papel central no desempenho. Se ela receber um número baixo demais, nem todos os clientes serão aten-didos em tempo real. Se for muito alta, os clientes aguardarão tempo demasiado na fila de espera TCP. O valor correto só pode ser encontrado através de testes de carga.

➧ Desista de logfiles desnecessários! A atividade de registrar ações custa tempo. Um arquivo de log que nin-guém mais usa já é desnecessário. Se o log é armazenado em discos ex-ternos, é desejável que seja um SAN

Figura 2: Um cenário de queda clássico: o número de processos para a carga sobe tanto que a máquina começa a usar a memória virtual, que cresce ainda mais por causa da diminuição da capacidade de carga. Na pior hipótese, o final da história é um sem memória disponível.

RAM física

Processo

Memória

Tempo Tempo

RAM física

Processo

Espaço deSwap

Processamento Processamento

Memória

http://supertuxbr.blogspot.com

Page 31: 27 - Desempenho_fev_2007

31

| CAPAAções gerais

Linux Magazine #27 | Fevereiro de 2007

bem veloz, pois NFS geralmente é demasiadamente ineficiente.

➧ Use o Sendfile. Sendfile é uma cha-mada de sistema que delega ao ker-nel o envio de arquivos por soquetes de rede. Isso economiza memória (evita buffers de leitura) e além disso é mais rápido. O Apache utiliza a Sendfile quando se ativa EnableSen-dfiles.

➧ Preste atenção ao MMAP! O su-porte a MMAP através do módulo mod_mmap_static permite ao Apache acessar um arquivo como um cam-po de memória integrado, o que melhora o desempenho.

➧ Não abuse do monitoramento de seu servidor! A auto-supervisão do Apache (opção SetHandler server-sta-tus...) é útil para testes e depuração. Depois de terminados os testes, ela deve ser desativada.

Servidor de emailQuando o servidor de email ameaça ter um colapso devido à carga, devem ser estabe-lecidas prioridades claras: primeiramente, é importante que o sistema permaneça estável e trabalhe efetivamente mesmo sob forte exigência. Então a velocidade de processamento deve estar no centro dos interesses. Peer Heinlein, instrutor da LPI e autor de artigos sobre Código Aberto, dá as dicas práticas: ➧ Limite o número de instâncias. O

valor padrão no arquivo master.cf do Postfix define como 100 o número máximo de instâncias. Dependen-do da versão e recursos compilados, uma instância pode custar 3 MB de RAM, de modo que, em servidores com pouca memória, há a ameaça de uma falta de memória, e com isso uma queda do sistema. Mesmo programas anti-spam e antivírus requerem grandes quantidades de memória quando muitas instâncias rodam paralelamente. Muitas ins-tâncias paralelas em um sistema so-brecarregado fazem com que elas se atrapalhem mutuamente, e terminam por levar a uma forte deterioração do fluxo de dados (figura 2).

➧ Use um disco RAM para auxiliar o filtro de spam. Filtros de spam ou vírus como o Amavisd New e o Spamassassin geralmente criam um gargalo no servidor de emails: eles causam uma grande carga sobre a CPU e E/S, e assim definem todo o fluxo do sistema. É interessan-

te, nesse caso, remover o arquivo /var/spool/amavis/tmp para um disco RAM (figura 3). Devido à alta per-formance, o servidor passa a tolerar aproximadamente 14 em vez das sete instâncias sugeridas como máximo do filtro de spam.

Evitar caminhos confusos ➧ Faça cache das solicitações DNS!

Todos os servidores de email necessi-tam de DNS e precisam administrar incontáveis interrogações: quem são os servidores MX de um domínio? Existe algum domínio de envio? Há algum cliente em uma lista RBL? Um servidor DNS inserido em /etc/resolv.conf, que se localize na própria rede e que armazene solicitações, economiza valiosos milisegundos em grandes volumes de acesso.

➧ Não desvie do caminho! O proce-dimento mais comum envia emails do Postfix para o filtro de spam ou vírus. Estes, por sua vez, devolvem os emails para o Postfix. Se forem adicionadas mais aplicações, seguem-se mais ciclos como esse.

O melhor é não enviar os emails dos filtros de spam ou vírus de volta para o Postfix, mas passá-los diretamente para a próxima aplicação. Se estiver definido claramente que se trata apenas de tráfego de email sendo transferido, a última apli-cação do fluxo pode mandar os emails diretamente para um servidor de email, em vez de retorná-los para o Postfix.

Checar competências ➧ Você só deve agir se tiver compe-

tência! Quem recebe emails e não consegue organizá-los ou repassá-los acaba jogando seus recursos com as duas mãos pela janela. O emprego de local_recipient_maps e relay_re-cipient_maps é uma solução, pois o Postfix recebe emails apenas para contas que existem realmente. Isso evita carga desnecessária vinda de spammers que estão apenas testando endereços.

Com endereços de remetentes ocorre algo semelhante: caso o domínio espe-cificado não exista, dificilmente se trata de um email desejado. De qualquer for-ma, é impossível respondê-lo. A opção reject_unknown_sender_domain realiza

uma requisição DNS para esclarecer isso antes que o servidor receba o email. ➧ Utilize apenas arquivos locais como

tabelas Lookup do Postfix! A admi-nistração de usuários ou domínios no MySQL e no LDAP pode pare-cer muito confortável – porém, as requisições do Postfix podem causar um efeito bastante negativo. Uma tabela Lookup no formato hash ou, melhor ainda, btree, é sensivelmente mais rápida. Vale a pena criar um script que escreva em meia hora os dados de usuários atualizados da tabela MySQL ou LDAP em um arquivo local.

➧ Domestique os clientes inconve-nientes com a limitação de espaço! Se um único cliente estiver sobre-carregando o servidor de email, ou se ocorrer um ataque, a limitação de espaço, através do parâmetro smtpd_client_connection_rate_limit, evita que o restante do tráfego de emails seja afetado. Até mesmo um firewall pode limitar o número má-ximo de conexões, e com isso evitar que o retorno de clientes abra cen-tenas de conexões.

➧ Não se detenha com emails pro-blemáticos. Se o tráfego de emails ficar congestionado, também pode ser porque o Postfix está gastando mal os recursos com muitas mensa-gens que não puderam ser enviadas. O parâmetro maximum_backoff_time determina o maior tempo que o Postfix deve esperar para tentar re-enviar o email. Um aumento desse valor oferece mais tempo para uma primeira busca possivelmente bem-sucedida, em vez de desperdiçá-lo com repetidas tentativas subseqüen-tes aparentemente sem resultado. Como opção, o parâmetro fallba-ck_relay oferece a possibilidade de mover esses emails problemáticos

Figura 3: Solução lucrativa: como aplicações como filtros de spam ou antivírus no servidor de emails necessitam de muitos acessos de arquivo, em muitos casos vale a pena investir em um disco RAM para o diretório atual dos softwares de filtro que rodam no servidor.

Postfix Postfix

Spam-assasin

Postfix Postfix

Spam-assasin

DiscoRAM

DiscoRAM

http://supertuxbr.blogspot.com

Page 32: 27 - Desempenho_fev_2007

32 http://www.linuxmagazine.com.br

CAPA | Ações gerais

para outra máquina, que então re-aliza o trabalho sujo pelo servidor de verdade.

Servidor de banco de dadosQual é a causa quando o banco de dados entrega conjuntos de dados de maneira hesitante e a CPU praticamente não está ocupada? Além da qualidade de cada consulta SQL, o design do banco de dados e a configuração do servidor também contribuem de forma impor-tante para o desempenho de um banco de dados. Badran Farwati, há sete anos administrador de bancos de dados, pro-gramador e atualmente sênior da Oracle na Biblioteca Nacional Austríaca, escla-rece como aumentar o desempenho de um servidor de banco de dados: ➧ Escolha o índice correto! Um dos

elementos mais importantes de um banco de dados são seus índi-ces: tempos de resposta do servidor dependem decisivamente de sua qualidade. Um índice B*TREE (o tipo padrão em muitos bancos de dados) deve ser empregado quan-do a coluna indexada puder aceitar muitos valores diferentes. A árvore de busca desse tipo de índice cres-ce mais devagar. Para colunas que recebem poucos valores diferentes (por exemplo, grupos de produtos),

aconselha-se em vez disso um índi-ce do tipo bitmap para Oracle, ou um tipo correspondente em outros bancos de dados.

Para tabelas de poucas linhas, um TABLE ACCESS (FULL) (no MySQL um FULL TABLE SCAN) é mais rápido que o acesso pelo índice. Caso muitas perguntas utilizem uma função como UPPER(coluna xyz)), um índice do resultado dessa função se encarrega de melhorar o desempenho. Pressupõe-se que o sistema de banco de dados empregado suporte índices base-ados em funções [6]. ➧ Apague índices desnecessários! O

Oracle Optimizer não utiliza índices desnecessários em comandos. Inde-pendentemente de eles utilizarem ou não comandos SQL, o sistema SQL carrega em uma tabela todos os índices definidos.

➧ Evite índices fragmentados! Índices B-TREE fragmentam com o tempo através de atualizações ou inserções em uma tabela, o que torna as perguntas consideravelmente mais lentas. O grau de fragmentação pode ser verificado no Oracle com a instrução ANALYSE INDEX Index-name VALIDATE STRUCTURE. Com ALTER INDEX Index-name REBUILD ONLINE, o índice pode ser reconstruído. No MySQL, ANALYSE TABLE e OPTMIZE TABLE recons-troem um índice fragmentado.

A expressão correta ➧ Otimize os comandos SQL. O SQL é

uma linguagem flexível. Na maioria das vezes, diversos caminhos levam ao mesmo objetivo. Freqüentemente, as aplicações se diferenciam no uso que fazem de seus recursos de E/S. EXPLAIN PLAN no Oracle, ou EXPLAIN, no MySQL, ajudam na otimização. Esses comandos esclarecem como os sistemas SQL constróem as per-guntas, quais índices ela utiliza e quantos resultados intermediários o banco de dados produz. A partir do MySQL 5.1, está disponível o EXPLAIN PARTITIONS, para análise do compor-tamento de tempo de execução de tabelas particionadas [7].

➧ Use de maneira correta o soft par-sing disponibilizado por seu ban-co de dados. O sistema do banco de dados processa consultas SQL literalmente, ou seja, em palavras. Mesmo entre perguntas idênticas, que se diferenciam apenas em um único literal (por exemplo SELECT...

WHERE x=100... e SELECT... WHERE x=200...), o sistema não produz nenhum anexo. Ela deposita uma cópia de cada pergunta na memó-ria compartilhada.

Se as perguntas diferentes por apenas um literal se repetirem uma centena de vezes, o banco de dados irá depositá-las cem vezes na memória (Hard Parse). Isso leva a uma fragmentação da memória. Um aumento da RAM ajuda apenas de maneira limitada. Se, no entanto, a pergunta na cláusula WHERE utilizar, em vez de um literal, um termo variável (co-mando BIND SQL), o sistema depositará as consultas SQL com esse termo na RAM, e não as modificará mais em uma nova chamada (Soft Parse).

Dividir e conquistar ➧ Limite o tamanho de suas tabelas!

Tabelas com milhões de conjuntos de dados levam a um alto uso de recursos de E/S. Uma possibilida-de de reduzir essa necessidade é desmembrar tabelas grandes em vários blocos. Desde o Oracle 8 e o MySQL 5.1, é possível particionar tabelas. Em comandos SQL que se referem apenas a determinadas colunas na cláusula WHERE, o parser deve fazer uma busca apenas nas partições relevantes (figura 4). O par-ticionamento ajuda especialmente em trabalhos em lote que atualizem partes de uma tabela.

➧ Diferentes tipos de uso de bancos de dados levam a diferentes demandas de recursos da máquina: Decision Support Systems (DSS, [8]) são sistemas de pesquisa e busca, que normalmente executam repetidos SELECT e, com isso, processos de ordenação conjuntos, po-rém quase nenhuma ação de inserção, atualização ou exclusão.

Um Online Transaction Processing System (OLTP, [9]), como por exemplo um sistema de catálogo on-line, ou um sistema de gerenciamento de conteúdo, serve normalmente a centenas de usuários ao mesmo tempo, que também modificam os dados. Com isso, as tabelas de índice também se alteram rapidamente.

A escolha correta do índice, portanto, é decisiva para o desempenho. Caso um servidor de banco de dados sirva ambos os cenários de uso, deve-se optar, de acordo com o uso principal, por uma prioridade de CPU adequada aos diferentes tipos de uso. No Oracle isso é feito mais facilmente com o Resource Manager [10].

Figura 4: Desde a versão 5.1, o MySQL tam-bém suporta tabelas particionadas – que poupam o parser, no caso de perguntas que se referem a uma ou poucas colunas –, de ler a tabela por completo. Isso preserva os recursos do computador.

E/S

E/S

ParserParser

RAM RAM

Tabela

Tempo

Data

Local

Data

Local

Tempo

Tabela

http://supertuxbr.blogspot.com

Page 33: 27 - Desempenho_fev_2007

33

| CAPAAções gerais

Linux Magazine #27 | Fevereiro de 2007

➧ Use conexões persistentes e o ser-vidor compartilhado! A formação recorrente de conexões não per-sistentes custa recursos. Por outro lado, o Oracle, em servidores dedi-cados, inicia um processo para cada conexão, e o mantém na memória quando o usuário não acessa o banco de dados. Por isso a Oracle oferece uma solução para servidores com-partilhados que mantém o número de processos baixo, administrando conexões e consultas em um gran-de pool. Isso preserva os recursos, especialmente em sistemas OLTP.

➧ Atente às tarefas em lote! Elas devem rodar exclusivamente em horas sem acesso durante a noite.

➧ Controle o número de conexões! O mais eficaz é separar servidores de aplicação e Web do servidor de banco de dados. Em todo caso, o número máximo de processos de am-bos os lados deve ser bem definido: se o número máximo de processos no servidor web for maior que o do banco de dados, isso pode levar a uma inundação de conexões ao banco de dados, que será incapaz de reagir ao número excessivo de processos.

As diretivas do Apache MaxClients, Kee-pAlive, MaxSpareServer e MaxRequestsPerChild devem ser ajustadas às configurações do Oracle; os parâmetros SESSION e PROCESS, e a decisão sobre o uso do servidor com-partilhado, têm influência no número máximo de conexões possíveis. No MyS-QL, isso é definido por max_connections e max_user_connections.

SambaQuando o servidor Samba apenas envia dados timidamente, a abertura e o salvamento de arquivos tornam-se um teste de paciência, e provocam assim um efeito sobre a produti-vidade de toda a empresa. Volker Lendecke, participante da equipe do Samba e co-fun-dador do Service Network GmbH, explica como tirar essa pedra do caminho. ➧ Não altere a configuração do seu ser-

vidor Samba! A configuração padrão do Samba já possui as configurações para oferecer o melhor desempenho possível aos clientes Windows®. Caso ocorram problemas de desempenho, deve-se primeiro eliminar todas as configurações que não sejam extre-mamente necessárias no arquivo de configuração smb.conf, e então fazer a reinstalação passo a passo.

➧ Seja generoso com a RAM! Dois a 3 MB de memória real por usuário ativo são o mínimo para o bom de-sempenho de um servidor Samba. Cada bit a mais pode ser utilizado pelo sistema para fins de cache de alto desempenho.

➧ Teste sua rede! Quando a transferência de arquivos por Samba estiver lenta, aconselha-se um contra-teste com FTP. Esse protocolo simples, que transfere apenas seqüências de dados puros, mostra a taxa de transferência máxima possível através da rede.

Ajudante útil ➧ Ative as travas oportunistas (Oplocks)!

Um Opportunistic Lock não serve para reservar determinados arquivos exclusivamente para um usuário. Ele permite ao cliente armazenar no cache o conteúdo do arquivo. Dessa forma, o servidor assegura a um cliente que ninguém mais aces-se aquele arquivo ao mesmo tempo. Assim que um segundo usuário o abrir, o servidor avisará o cliente, fechando em seguida o Oplock (fi-

gura 5). Logo após, o cliente envia o acesso de escrita para o servidor, o que na prática economiza muita largura de banda de rede.

➧ Inicie o Winbind! Sem Winbind, o daemon Samba é obrigado a cons-truir uma nova conexão própria para cada novo usuário, o que inclusive aumenta desnecessariamente a carga em aproximadamente 40 a 60 pa-cotes IP. O Winbind diminui isso para três pacotes, mantendo uma conexão com o controlador de do-mínios permanentemente aberta.

➧ Não diferencie letras maiúsculas e minúsculas! Como o Windows não diferencia letras maiúsculas e minúsculas em nomes de arquivos, mas o Unix sim, o Samba precisa, quando o Windows quer depositar um arquivo test.txt, confirmar que o arquivo Test.txt não existe. Em diretórios com algumas milhares de entradas, essa varredura utiliza muitos recursos. Por isso, se possí-vel, diretórios administrados com Samba devem conter apenas poucos arquivos. Caso não seja possível, faz sentido desativar a varredura com case sensitive = yes, preserve case = no e default case = lower. Com isso, o Samba mostrará todos os nomes de arquivo com letras minúsculas.

Consciência tranqüilaSão 7:30 da noite: os tempos de respos-ta do servidor web nas páginas referidas no Slashdot permanecem sob controle. A massa de emails chegou a seus des-tinatários e o banco de dados avaliou as consultas eficientemente. Como os servidores foram otimizados conforme as regras, é hora de o estressado admi-nistrador de sistemas ir para casa com a consciência tranqüila. ■

Mais Informações[1] Zabbix:

Ampla competência: Linux Magazine 24, pg 66, outubro de 2006.

[2] Postfix Anvil Server: http://www.postfix.org/anvil.8.html

[3] Cband: http://cband.linux.pl

[4] Batida secreta: Port Knocking: Linux Magazine 26, pg. 48

[5] Módulo Apache mod_mem_cache: http://httpd.apache.org/docs/2.0/mod/mod_cache.html

[6] Índices baseados em funções com Oracle: http://www.oracle-base.com/articles/8i/FunctionBasedIndexes.php

[7] EXPLAIN PARTITIONS no MySQL 5.1: http://dev.mysql.com/doc/refman/5.1/en/explain.html

[8] Decision Support Systems (Wikipédia): http://pt.wikipedia.org/wiki/Sistema_de_suporte_à_decisão

[9] Online Transaction Processing (Wikipédia): http://en.wikipedia.org/wiki/Online_transaction_processing

[10] Oracle Resource Manager: http://www.oracle.com/technology/oramag/oracle/04-nov/o64tuning.html

Figura 5: No acesso de escrita a um arquivo, as travas ope-racionais (Operative Locks) tornam a sincronização entre clientes e servidor supérflua, caso apenas um usuário esteja acessando o arquivo. Se outro usuário o acessar, o servidor cancela a trava e o cliente envia de volta o arquivo alterado.

Servidor Cliente Servidor Cliente

Dados

Alteraçãolocal

Alteraçãolocal

Ajusteimediato

Ajustesomentese necessário

http://supertuxbr.blogspot.com

Page 34: 27 - Desempenho_fev_2007

34

CA

PA

http://www.linuxmagazine.com.br

CAPA | Benchmarks

A indústria investe muito em propa-ganda para convencer os consumi-dores dos benefícios de seus produ-

tos, não se envergonhando de algumas meias-verdades e exageros. No campo da Informática, não basta folhear o prospec-to e os dados técnicos de um fabricante para tomar a melhor decisão de compra. Outras fontes também costumam ser úteis, como artigos ou os próprios benchmarks – nos quais os testes requerem uma boa preparação para mais tarde adquirirem significado e confiabilidade.

Sem exageros, podemos falar que existe uma relação de amor e ódio dos fabricantes de software e hardware com os bechmarks. Em relação a produtos muito parecidos, como por exemplo impressoras jato de tinta, os fabricantes não conseguem ultrapassar as caracterís-ticas de seus concorrentes. Caso exista algum teste comumente conhecido, o fabricante poderá anunciar sua vitória ou boa colocação nos resultados através de um logotipo, e com isso o produto alcança grande reconhecimento com a publicação do teste.

O benchmark padrão da Linux Ma-gazine para o teste de placas de vídeo de

workstations é o SPEC Viewperf Suite [1]. Seu ponto forte é utilizar dados reais de usuários para o teste dos populares pro-gramas de CAD e renderização: o fabri-cante SPEC captura os dados gráficos de programas como Catia, Pro/ENGINEER (figura 1) e Maya (figura 2) diretamente dos drivers da placa de vídeo, e salva seus resultados como testes.

A Viewperf Suite transfere apenas es-ses dados, com velocidade máxima, para a placa de vídeo – portanto, a CPU do computador não precisa se ocupar com os complexos cálculos 3D dos programas de CAD. Com a Viewperf Suite também pode ser testado e comparado o desem-penho de vídeo em diferentes sistemas operacionais, independentemente de a aplicação base ter sido portada para o respectivo sistema.

Placas diferentesAs taxas de atualização em jogos foram testadas pela Linux Magazine Interna-tional, no passado, com os Demo-Levels de Quake 3 Arena e Parsec. Dois valores fornecidos com diferentes programas de teste ajudam a conduzir qualquer

manipulação em drivers. Assim, no ano de 2001, a ATI “otimizou” o driver para o processador Radeon 8500: conhecen-do a seqüência de demonstração do Quake, o driver diminui a qualidade de imagem, produzindo assim melhores resultados [2].

A Nvidia também não é, de forma al-guma, inocente: em 2003 a Futuremark denunciou a fraude ao fabricante de placa de vídeo: o driver descobria seqüências especiais do 3D Mark-Bench e substituia algumas seqüências de comandos, de modo que no fim foi obtida apenas uma parte da imagem com profundidade de cor reduzida, o que aumenta drastica-mente a resolução.

Para o teste dos demais componentes e serviços de um sistema, são necessários outros bechmarks especializados. A Stan-dard Performance Evaluation Corporation (SPEC [1]) possui uma série de suítes de benchmark prontas; no entanto, algumas rodam apenas no Windows®. Uma das excessões, junto com a Viewperf Suite, é a CPU Suite, claramente melhor in-dicada para avaliação da capacidade do computador do que o método preferido atualmente, o tempo de compilação do

Proibições, falhas e trapaças em benchmarks

O que dizem os númerosA melhor referência para uma decisão de compra são testes e benchmarks de fontes confiáveis. Quem não acredita em propagandas, mas prefere testar por si próprio e publicar os resultados, acaba caindo em um campo minado de licenças, proibições de teste e trapaças dos fabricantes.por Mirko Dölle

Jean Scheijen - www.sxc.hu

http://supertuxbr.blogspot.com

Page 35: 27 - Desempenho_fev_2007

35

| CAPABenchmarks

Linux Magazine #27 | Fevereiro de 2007

kernel como medida da velocidade do computador.

O tempo que um determinado com-putador necessita para traduzir o kernel, no entanto, é estável, e quase não sofre influência de circunstâncias como a taxa de transferência de dados do disco rígido ou a fragmentação do sistema de arquivos. Nem mesmo para comparações com testes anteriores ou com diferentes arquiteturas de processadores a compila-ção do kernel é útil; as diferenças entre o kernel atual e a versão de um ano atrás, por exemplo, são muito grandes. Além disso, o próprio compilador também sofre constante aperfeiçoamento.

Por último, a configuração padrão do kernel está em constante mudança, e sempre são adicionados novos módu-los. Por isso, os tempos de compilação do kernel só podem ser comparados quando dois computadores compilam o mesmo kernel com as mesmas opções de configuração, o mesmo compilador e a mesma plataforma.

Precisão enganosaO volume de dados do disco rígido local é informado pelo FS-Bench [3], que se baseia nos valores medidos por ambos os benchmarks de disco rígido Bonnie++ [4] e Iozone [5]. Como muitos outros progra-mas de benchmark, esses dois informam valores de medição com várias posições depois da vírgula. Entretanto, essa suposta precisão é enganosa: serviços que rodam

paralelamente em segundo plano sempre causam erros de medição que podem ser detectados através da repetição dos testes. Na prática, a diferença entre as taxas de transferência são de apenas poucos KB por segundo. Isso também deve ser re-fletido em uma tabela e um gráfico, nos quais arredondamos os valores relevantes para MB inteiros por segundo ou para 1% do valor.

Para testes com servidores de arquivo, o Dbench e o Tbench, da suíte de testes do Samba, já estão estabelecidos. Ambos são escaláveis para sistemas multiproces-sados, e por isso foram utilizados pela Linux Magazine Internatio-nal [6] para a compa-ração do primeiro servi-dor Dual-Opteron com um Dual-Xeon (figura 3). Assim como em outros benchmarks de rede, na suíte de testes do Samba é obrigatório que o clien-te e o servidor trabalhem em uma rede de testes própria, para eliminar as interferências e a perda de largura de banda de-vido ao tráfego de rede de outros computadores na mesma rede.

O Open Source De-velopment Lab (OSDL) trabalha há alguns anos em uma série de bench-

marks livres, mas até o momento surgi-ram ao todo apenas quatro benchmarks de banco de dados [7], que cobrem ce-nários de aplicação variados, desde livra-rias on-line a sistemas de mercadorias de um grande atacadista. As especificações dos benchmarks da OSDL se orientam pelos renomados testes comerciais TPC-W, TPC-C, TPC-H e TPC-App do Tran-saction Processing Performance Council (TPC) [8].

Com o benchmark do MySQL, te-mos um segundo teste independente à disposição. É importante ressaltar, no entanto, que ele tira pouco proveito de sistemas multiprocessados; portanto, é indicado somente para o teste com com-putadores monoprocessados. Quem fizer testes com o benchmark do MySQL em sistemas multiprocessados estará sujeito a fortes objeções por parte do fabricante do processador e dos outros componen-tes do sistema.

Testes proibidosImplicações jurídicas ameaçam aqueles que não observam as condições de licença para benchmarks e aplicações. Por exem-plo, a VMware, fabricante do programa de virtualização de mesmo nome, proíbe a publicação de resultados de testes de praticamente todos os seus produtos, que não tenham sido previamente conduzi-dos e liberados pelo fabricante.

Por um lado, isso equivale a uma censura de imprensa, constituindo um potencial para inúmeras controvérsias, pois até mesmo a declaração de que

Figura 1: A SPEC Viewperf Suite utiliza dados de teste bem próximos da realidade. O fabricante retira comandos gráficos de programas conhecidos como, por exemplo, o programa de construção Pro/ENGINEER...

Figura 2: ...ou o programa de renderização Maya, diretamente do driver de placa de vídeo. O computador de teste deve transmitir os comandos gráficos ao driver com máxima velocidade.

http://supertuxbr.blogspot.com

Page 36: 27 - Desempenho_fev_2007

36 http://www.linuxmagazine.com.br

CAPA | Benchmarks

um deteminado programa roda mais rápido ou mais lentamente em uma nova versão pode ser o resultado de um benchmark.

A SPEC também formulou nas licenças de uso de seus benchmarks gratuitos algumas exigências mínimas que devem ser respeitadas pelos reali-zadores de testes, em relação à publica-ção dos resultados. Elas dizem respeito, em sua maioria, à documentação das condições de teste, bem como à obri-gatoriedade de disponibilização de al-guns arquivos de teste e configuração quando solicitado, para que a SPEC ou uma empresa sem fins lucrativos possa verificar as medições. Para que essa avaliação possa acontecer de ma-neira independente, a SPEC requer até mesmo que o hardware testado esteja disponível em local público, e no caso de protótipos, deve ser fornecida ao menos a disponibilidade prevista.

Na interpretação dos resultados, in-dependentemente de qual benchmark tenha sido utilizado, em geral é necessário prestar atenção; quem tiver, por exemplo, atribuído a responsabilidade por um re-sultado a algum componente específico da máquina deve se certificar da veraci-dade dessas informações. Por exemplo, é fundamental garantir que a CPU não esteja trabalhando no modo de econo-mia de energia devido a configurações incorretas do daemon de gerenciamento de energia. O equipamento como um todo também deve estar dimensionado de forma correta: um computador que não consiga disponibilizar nem 60 MB de dados de teste por segundo, por exem-plo, não é apropriado para informar a taxa de transferência de dados máxima de sistemas RAID. Esse tipo de engano invalida totalmente qualquer medição efetuada no equipamento.

VerificaçãoAlguns fabricantes relutam em acei-tar resultados ruins, e contestam-nos. Para testes na imprensa e em empre-sas, quando um importante contrato está em jogo, é necessário que cada fabricante verifique os critérios e pro-cedimentos do teste. A Lexmark, por exemplo, exige, em todas as avalia-ções de impressoras, os documentos de teste utilizados e a configuração do aparelho.

Nesses casos, aqueles que não estive-rem aptos a fornecer a documentação detalhada das condições de teste, dos arquivos de configuração e dos dados utilizados, acabam perdendo a possi-bilidade de confirmar suas suposições. A obrigatoriedade da documentação se aplica também a usuários particu-lares que publicarem em suas páginas pessoais resultados de benchmarks de seus computadores. Caso atestem que, por exemplo, uma multifuncio-nal tenha um scanner lento, devem poder reproduzir esses resultados com segurança. Do contrário, o fabrican-te poderia acusá-los de difamação ou solicitar uma retratação.

Os limites de toner e tinta infor-mados no teste prático diferem ne-cessariamente em até 50 porcento dos valores do fabricante, mesmo em aparelhos para uso profissional. Em testes realizados pela Linux Magazi-ne alemã [9], duas impressoras laser Lexmark e aparelhos multifuncionais chegaram somente a cerca de 24.000 páginas, contra as 32.000 informadas, com um toner cheio. Nas empresas, entretanto, os custos de operação têm importância decisiva, visto que a longo prazo ele é mais alto que o preço de aquisição dos equipamentos.

Figura 3: O conjunto de programas de testes do Samba possui o Dbench e o Tbench, dois benchmarks de rede que escalonam bem em sistemas multiprocessados.

0 16 32 48 64 80 96 112 128

0

100

200

300

400

500

600

700

800

900

1000

1100

1200

1300

1400

Dbench

Dual-Opteron 1,3 GHz (32 Bit)

Dual-Opteron 1,3 GHz (64 Bit)

Quad-Opteron 1,8 GHz (32 Bit)

Quad-Opteron 1,8 GHz (64 Bit)

Dual-Xeon 2,8 GHz

Quad-Xeon 2,8 GHz

Pentium4 3.0 GHz

Athlon XP 3000+

Número de clientes

Taxa

de

Tran

sfer

ênci

a [M

B/s]

Medidas perfeitasMesmo tomando todos os cuidados ne-cessários, nunca se deve esquecer, ao se realizar um teste, de que os resultados nem sempre contam toda a verdade. No caso de computadores, existem tantas variáveis em uma medição que é pra-ticamente impossível calcular um erro de medição de forma exata. Além disso, é nos detalhes que mora o perigo: mal se percebe, num teste de discos rígidos, a execução de um updatedb por parte de um cronjob. A taxa de transferência de dados medida pelo Bonnie, nesse caso, torna-se inaplicável, e a medição deve ser repetida – o que o realizador do teste deveria notar logo de início.

Considerando esse cuidado, a desa-tivação de todos os serviços desnecessá-rios e o monitoramento das tabelas de processos durante o teste são requisitos fundamentais para os testes amadores. Portanto, apenas quem faz testes pode chegar à melhor decisão de compra e não ter aborrecimentos com o fabricante no campo minado dos benchmarks. ■

Mais Informações[1] Benchmarks SPEC:

http://www.spec.org

[2] Scott Wason, “How ATI’s Radeon 8500 drivers ‘optimize’ Quake III”: http://techreport.com/etc/2001q4/radeon-q3/

[3] Benchmark de sistemas de arquivos em Linux: http://fsbench.netnation.com

[4] Bonnie++, benchmark de disco rígido: http://www.coker.com.au/bonnie++

[5] Iozone, benchmark de sistema de arquivos: http://www.iozone.org

[6] Mirko Dölle e Timmo Hönig, ”Linux Sledgehammer” (Comparativo Dual Opteron versus Dual Xeon, em inglês): http://www.linux-magazine.com/issue/39/AMD_Opteron.pdf

[7] Benchmarks de bancos de dados do OSDL: http://www.osdl.org/lab_activities/kernel_testing/osdl_database_test_suite/

[8] Benchmarks comerciais do TPC: http://www.tpc.org

[9] Mirko Dölle, ”Bussiness Class”, Linux Magazine Alemanha 10/2006, pg.86 (em alemão)

http://supertuxbr.blogspot.com

Page 37: 27 - Desempenho_fev_2007

37

| CAPAPython

Linux Magazine #27 | Fevereiro de 2007

CA

PA

A otimização de programas tem como primeiro objetivo econo-mizar tempo de execução. O

software deve ser mais eficiente e apre-sentar seus resultados computacionais mais rapidamente, entre outras coisas. Entretanto, infelizmente a otimização prolonga o tempo de desenvolvimento. O código-fonte originado normalmen-te é mais complicado que o anterior, o que aumenta o trabalho para a reali-zação de testes e busca de erros. Mas isso não é tudo; com a crescente com-plexidade do código, até mesmo sua manutenção e posteriores extensões se tornam mais difíceis. Isso acarreta um maior tempo de desenvolvimento, o que normalmente não é um grande problema, pois geralmente o resultado

continua aparecendo por muito tempo após a otimização.

No entanto, é errado achar que desde a escrita de uma função ou método se deve pensar sobre como eles podem vir a trabalhar mais rápido. Essa colocação é trazida por C. A. Hoare, embora diversas vezes seja erroneamente atribuída a Do-nald Knuth: “A otimização prematura é a raiz de todo o mal”. É justamente isso: o programador só deveria iniciar a otimi-zação do tempo de execução quando o programa estiver rodando sem erros.

Onde otimizar?Do ponto de vista do desenvolvedor, um programa não é unicamente lento ou rápido. Normalmente o responsável

pelo comportamento letárgico é uma pequena parte de código, os chamados gargalos. Antes de se começar a otimizar partes de código por suposições, deve-se descobrir onde isso é realmente necessá-rio. O primeiro passo é determinar se o software é impedido pela CPU ou pelo subsistema de E/S de executar uma de-terminada função. Assim sendo, não faz sentido tentar trazer um algoritmo a um centésimo do seu tempo de execução ori-ginal quando na verdade o disco rígido ou a rede estão reduzindo a velocidade do software.

Para descobrir se o culpado é o pro-cessador lento, o disco rígido ou outro hardware, ferramentas gráficas como o Xosview [1] ou o GKrellm [2] podem ajudar. Além delas, existem ferramen-

Otimização de programas em Python

Bem no alvoTodos querem programas com os quais se possa trabalhar de forma prática. Softwares não são acelerados por otimizações globais, e sim por pequenas otimizações nos locais certos. Este artigo mostra como acertar o alvo em programas Python.por Stefan Schwarzer

http://supertuxbr.blogspot.com

Page 38: 27 - Desempenho_fev_2007

38 http://www.linuxmagazine.com.br

CAPA | Python

tas como o Dstat [3], que reflete em números, por exemplo, a transferência de dados saindo e entrando em uma par-tição específica. Para uma mensuração plausível, nenhum outro software que sobrecarregue o computador deve estar rodando. Como opção, top e ps fornecem dados individuais sobre o desempenho dos processos.

As figuras 1 a 3 mostram capturas do GKrellm e do Dstart referentes a dois processos, um limitado pela CPU e outro pela transferência de dados. O segundo caso é mais difícil de reconhecer do que a limitação de CPU, já que ele não dá nenhum limite máximo independente

de hardware. Os valores limite podem ser melhor determinados por especificações de hardware ou benchmarks. Lembre-se de que a transferência de dados pode estar relacionada não apenas a uma unidade de CD-ROM, mas também à interface de rede, robô de troca de fita em sistemas de backup, e assim por diante.

Se o software travar devido ao esgo-tamento da capacidade da CPU, então será necessário continuar a localizar as posições lentas no código. Essa tarefa é auxiliada pelo módulo de Python cProfile (até a versão 2.4 do Python, chamava-se simplesmente profile), cujos resultados são avaliados pelo módulo pstats.

Exemplo de profiling: emergeComo exemplo prático de aplicação dos profilers de Python, uma busca no banco de dados de pacotes do Gentoo Linux deve servir. A ferramenta responsável por isso, emerge, é escrita em Python. Uma busca com emerge --search python rodou

no computador do autor em um tempo aceitável de exatos 10 segundos. Uma otimização faria sentido para computa-dores mais lentos, mas antes devemos proceder à análise.

Produzir uma estatística de atividades é algo circunstancial, visto que essa in-terface de linha de comando não prevê a passagem de parâmetros ao programa chamado. Por isso este artigo utilizará o interpretador interativo (exemplo 1). De-pois da importação do módulo de Python e da preparação do parâmetro, o teste é iniciado com cProfile.run(). O módulo pstats fornece então a estatística do tem-po de execução em tabelas (exemplo 2).

Um gargalo em particular na verdade não chama a atenção, entretanto podem-se reconhecer alguns locais onde se po-deria aplicar uma otimização. O emerge gasta, de qualquer forma, 1,2 dos 9 segun-dos totais para atualizar o mostrador de processo (método update_twirl). O tem-po acumulado pode ser visto na coluna cumtime, tempo acumulado, na oitava linha da tabela. Na verdade, há uma opção do emerge que desativa essa saída.

Figura 1: À esquerda, o GKrellm mostra a carga de 100% do processador para um processo limitado pela CPU. À direita, o programa mostra o fluxo de dados na cópia de um CD-ROM.

Exemplo 1: cProfile01 >>> import cProfile02 >>> import sys03 >>> sys.argv.append(“--search”)04 >>> sys.argv.append(“python”)05 >>> f = open(“/usr/bin/emerge”)06 >>> ef = f.read()07 >>> f.close()08 >>> cProfile.run(ef, “emerge.stats”)09 Searching...10 [ Results for search key : python ]11 [ Applications found : 48 ]12 ...

Exemplo 2: pstats01 >>> import pstats02 >>> s = pstats.Stats(“emerge.stats”)03 >>> s.sort_stats(‘time’)04 <pstats.Stats instance at 0xb7d80eac>05 >>> s.print_stats(10)06 Sun Oct 1 23:12:36 2006 emerge.stats07 08 602508 function calls (586701 primitive calls) in 9.052 CPU seconds09 10 Ordered by: internal time11 List reduced from 609 to 10 due to restriction <10>12 13 ncalls tottime percall cumtime percall filename:lineno(function)14 1240 1.022 0.001 1.022 0.001 {method ‘readlines’ of ‘file’ objects}15 11387 0.849 0.000 0.849 0.000 {method ‘flush’ of ‘file’ objects}16 1096 0.579 0.001 1.513 0.001 /usr/lib/portage/pym/portage.py:200(cacheddir)17 14550/160 0.421 0.000 1.173 0.007 /home/schwa/python2.5/lib/python2.5/copy.py:144(deepcopy)18 76352 0.359 0.000 0.359 0.000 {method ‘append’ of ‘list’ objects}19 1 0.335 0.335 2.513 2.513 <string>:468(output)20 66288/66173 0.316 0.000 0.317 0.000 {len}21 11383 0.256 0.000 1.225 0.000 <string>:94(update_twirl)22 36953 0.224 0.000 0.224 0.000 {method ‘split’ of ‘str’ objects}23 1 0.213 0.213 3.629 3.629 <string>:408(execute)

http://supertuxbr.blogspot.com

Page 39: 27 - Desempenho_fev_2007

39

| CAPAPython

Linux Magazine #27 | Fevereiro de 2007

Em aproximadamente 1,2 segundos são obtidas cópias profundas (deep copies) (coluna cumtime, na quarta linha da tabela). Normalmente os programadores fazem cópias profundas por medida de segurança. Caso a cópia profunda não seja realmen-te necessária, esse ponto representa um grande potencial de economia.

Provavelmente o código pode ser ainda mais acelerado depois de uma reestrutu-ração, já que então ficaria mais simples reconhecer o momento de execução de cada porção do código, e também quais algoritmos de otimização são possíveis. Por fim, a modificação dos algoritmos freqüentemente é a otimização de tempo de execução de maior efeito.

Como otimizar?Em princípio, existem dois caminhos para acelerar códigos limitados de CPU: reali-zar as tarefas mais rápido ou com menor freqüência. Às vezes, ambos funcionam ao mesmo tempo, caso se substitua uma estrutura de administração de dados de-senvolvida por você mesmo, com arquivos estruturados linearmente, por um sistema de banco de dados como o SQLite [4], por exemplo.

Conforme mencionado, dois critérios contam conjuntamente na otimização: com que rapidez o código é feito e quanto tempo de desenvolvimento é necessário para isso. Logicamente se deseja alcançar o maior aumento de velocidade possível com o mínimo de esforço. Além disso, também deve ser levada em consideração a manutenção do código-fonte.

Antes de iniciar a medição de veloci-dade, o profiling, o código precisa estar o mais livre de erros possível. Se esse não for o caso, existe o risco de se otimizar código que está rodando devagar apenas devido a um erro de programa. Testes automatizados são de grande ajuda para a redução de erros originais, bem como para o controle das modificações do có-digo durante a otimização, por exemplo com os módulos de Python doctest e

unittest. Com isso, fica mais fácil determinar se a otimização possivel-mente conduziu a um erro de programa.

ProfilingO próximo passo é voltar a atenção para o profi-ling, para encontrar os locais mais importantes do código a serem oti-mizados. Geralmente são aqueles com maior tempo de execução total, ou seja, locais onde o produto de cada tempo de execução pela fre-qüência de execução é muito grande. Portanto faz mais sentido otimi-zar uma função que roda 10.000 vezes, e para isso necessita respectivamente de um segundo, do que uma função que é executada apenas cinco vezes e gasta 10 segundos.

Todavia, deve-se levar em considera-ção de que forma o usuário do programa sente a lentidão na execução. Pode ser também que a primeira situação apenas faça com que o programa pareça um pouco mais lento, enquanto a segunda situação condene o usuário a dez segun-dos de inatividade.

A substituição de um algoritmo por outro mais eficiente acelera um programa de maneira pertinente. Enquanto na maio-ria das técnicas de otimização o pedaço de código otimizado fica no máximo 10% mais rápido, a troca do algoritmo pode oferecer até 100% de aceleração.

Avaliação de algoritmosA notação em O descreve de maneira formal quais algoritmos são mais rá-pidos que outros. Aqui, “O” significa

a ordem do algoritmo. Expressões como O(n) ou O(n ln n) representam a complexidade do algoritmo. As letras entre parênteses descrevem como o tempo de execução se altera quando o volume de dados do algoritmo a ser processado sobe, como o número de valores de uma lista ou o tamanho de uma cadeia de caracteres.

Por exemplo, um algoritmo O(n) ne-cessita do dobro de tempo de execução quando o volume de dados a ser proces-sado dobra; já um algoritmo O(n²), ne-cessitaria do quádruplo do tempo com esse aumento do volume de dados. É claro que sempre desejamos que o valor entre parênteses seja o menor possível, para que o tempo de execução aumente menos com o crescimento do volume de dados. A tabela 1 mostra o tempo de exe-cução de vários algoritmos em Python. De cima para baixo, a proporção do tempo de execução vai piorando.

Em laços aninhados várias vezes ou problemas combinatórios específicos, o tempo de execução adota ainda uma pro-porção maior que quadrática. Com isso, mesmo pequenos valores de n podem produzir tempos de execução extrema-mente longos. Nesses casos, é importante evitar grandes valores de n.

Se for utilizado um algoritmo com um pequeno volume de dados, ele pode ser o pior ou o mais rápido. Em alguns algo-ritmos, na verdade, o tempo de execução aumenta lentamente com n crescente, mas talvez eles requeiram uma etapa de preparação mais demorada. Então, um algoritmo mais lento, mas que cumpre a mesma finalidade, pode acabar sendo mais rápido. ➧

Figura 2: Saída do dstat para um processo limitado pela CPU. A soma das duas primeiras colunas fica em 100%.

Tabela 1: Tempos de execução de algoritmos em Python

Ordem Significado Exemplo

O(1) Tempo constante ``chave in dicionario``, ``dicion[chave] = valor``, ``lista.append(valor)``

O(ln n) Tempo logarítmico Busca binária

O(n) Tempo linear ``valor in lista``, ``string.join(lista)``

O(n ln n) - ``lista.sort()``

O(n2) Tempo quadrático Laços aninhados, caso o corpo seja O(1)

http://supertuxbr.blogspot.com

Page 40: 27 - Desempenho_fev_2007

40 http://www.linuxmagazine.com.br

CAPA | Python

Em princípio, a comparação de algo-ritmos com base em sua ordem é bastante útil. Porém, raramente isso se mostra tão puramente no “campo de batalhas”, com algoritmos mais complexos e volumes de dados com tamanhos variáveis. Por exemplo, um algoritmo de ordenação que se comporte com O(n ln n) para valores até 100.000 altera consideravelmente seu tempo de execução quando a lista a ser ordenada não cabe mais na memória principal, e o sistema operacional inicia a remoção de conteúdos da memória no disco rígido. Tais efeitos também se mostram desde que o gerenciamento de memória da bliblioteca C padrão, que fica abaixo do interpretador, confirme o tempo de execução de forma visível.

Cálculo de intersecçõesUm outro exemplo deve ilustrar a diferen-ça de utilização de diferentes algoritmos. Todas as funções em Python observadas nele são determinadas pela intersecção dos conjuntos de duas listas – ou seja, cada elemento de uma lista presente

em ambas as listas – e as retorna como uma nova lista.

O primeiro algorit-mo utilizado apresenta comportamento qua-drático quando ambas as listas contêm n ele-mentos (exemplo 3). O laço externo itera através de todos os elementos da primeira lista e mostra um comportamento de tempo linear. Dentro do laço, no entanto, há um outro, que no exemplo está implícito em valor in lista2; como a lista lista2 é pesquisada li-nearmente, novamente são gerados comporta-mentos lineares. O en-trelaçamento dos laços

explícitos do lado de fora e dos laços implícitos dentro conduzem ao todo a um algoritmo O(n²).

A investigação da chave na instrução return tem comportamento linear, mas confronta o comportamento quadrático anterior para grandes valores de n. Geral-mente é bom evitar laços entrelaçados. Mesmo no melhor caso eles mostram comportamento de tempo quadrático. Porém, para pequenos volumes de da-dos, uma otimização provavelmente não vale a pena.

O algoritmo no exemplo 4 mostra uma versão modificada do anterior, agora com comportamento de tempo linear. Esse código, embora se pareça muito com o anterior, cria um dicionário antes de en-trar no laço externo da segunda lista, e o utiliza nesse laço. Entretanto, como valor in dict2 tem comportamento constante, o laço externo abaixo da linha é linear ao longo do tempo.

O último algoritmo também leva a um comportamento linear (exemplo 5). A transformação de uma lista em um conjunto é linear, assim como a criação da intersecção de conjuntos com o mé-todo intersection, e a subseqüente con-

versão desse conjunto de resultados em uma lista. Na realidade, essas operações são entrelaçadas uma na outra desde a sintaxe; no entanto, são executadas uma após a outra. Depois de três passos line-ares consecutivos, obtém-se novamente um algoritmo O(n).

Algoritmos melhoresDo exemplo visto acima derivam algumas regras gerais que devem ser consideradas em uma otimização. Assim, operações, cujos resultados não se alteram durante os laços, devem ser retiradas deste, de modo que não sejam executadas a cada iteração do laço.

Separe cuidadosamente os dados com os quais você trabalha. Um exem-plo famoso é a busca binária, que só é utilizável em dados pré-classificados. Com ela é possível atingirmos o objeti-vo em O(ln n) em vez de em O(n). Se os conjuntos de dados forem pequenos, é melhor que sejam mantidos em uma busca linear.

Coloque os valores em cache, em vez de sempre ter que acessá-los e computá-los novamente. Mas atenção: especialmente em sistemas que trabalham com threads ou transações, é bom pensar bem sobre as conseqüências e considerar possíveis inconsistências de dados. Avalie a viabi-lidade de limitar o tamanho do cache para que o sistema não desperdice seu espaço de memória no disco e com isso não aniquile seu ganho de velocidade. As situações em que o cache também parece fazer sentido normalmente são aquelas nas quais a utilização de um servidor de banco de dados acelera o programa.

Quando um objeto é armazenado no disco rígido ou enviado através de uma rede, o processo pode ser acelerado se apenas forem transferidas as partes dos dados que de fato tenham sido alteradas. A desvantagem é que essa otimização pode influenciar a abstração de uma classe ou até mesmo de um código. Por isso, tente manter as interfaces abstratas, mesmo quando elas forem otimizadas internamente.

Figura 3: Relatório do Dstat para um processo limitado pela transferência de dados (cópia de um CD-ROM). São importantes os valores da coluna disk/to-tal/read.

Exemplo 4: intersecção2()01 def interseccao2(lista1, lista2):02 “””Realizar interseccao com algoritmo O(n)”””03 resultado = {}04 dicio2 = dict((valor, True) for valor in lista2)05 for valor in lista1:06 if valor in dicio2:07 resultado[valor] = True08 return resultado.keys()

Exemplo 3: intersecção1()01 def interseccao1(lista1, lista2):02 “””Realizar interseccao com algoritmo O(n^2)”””03 resultado = {}04 for valor in lista1:05 if valor in lista2:06 resultado[valor] = True07 return resultado.keys()

http://supertuxbr.blogspot.com

Page 41: 27 - Desempenho_fev_2007

41

| CAPAPython

Linux Magazine #27 | Fevereiro de 2007

rém mais complexa, é a API Python/C. Como opção, igual a programar em C, existe o Psyco [11], um compilador just-in-time para Python que infeliz-mente só está disponível para sistemas x86 de 32 bits.

Pare e penseMesmo em linguagens interpretadas como Python pode-se escrever progra-mas simples. Porém é importante não otimizar de pronto, mas testar primei-ro se o software já é rápido o suficiente para a aplicação planejada. Se não for, é necessário determinar os gargalos do código com ferramentas apropriadas e otimizá-los em específico.

O maior ganho de velocidade é conseguido com a alteração de algo-ritmos e estruturas de dados. As otimi-zações específicas do Python podem mesmo ajudar. Use especialmente as possibilidades de utilizar código C implícito na forma de código Python, por exemplo através de estruturas de dados do Python ou bibliotecas C externas. E pense nisso: em todas as otimizações, fique de olho na manu-tenção do software. ■

No processamento de arquivos texto linha a linha, valem as seguintes regras: se os arquivos a serem processados forem curtos, é mais fácil e rápido lê-los com-pletamente e processar todos os dados. Se os arquivos forem longos – arquivos de log são exemplos típicos –, deve-se então ler cada linha e processá-la ime-diatamente. Do contrário, os dados car-regados na memória podem chegar a esgotá-la, obrigando o sistema a realizar o terrível swap.

Um outro fator estreitamente relacio-nado à seleção de algoritmos é a escolha da estrutura de dados correta. Com ela alteram-se implicitamente os algorit-mos para o acesso aos dados. Conforme mostrado acima, é muito mais rápido localizar uma determinada chave em um dicionário do que um valor em uma lista, pois então seria necessário fazer uma busca linear.

A arquitetura de um sistema de soft-ware tem realmente grande influência no tempo de execução. De acordo com os algoritmos, podemos ver como todo o sistema trabalha. Ao contrário de outras otimizações, deve-se refletir um pouco sobre a arquitetura já no início do de-senvolvimento.

Truques de PythonEm otimizações específicas de Python deve-se observar que muitas têm efei-tos distintos de acordo com a versão do Python. Em casos extremos um pedaço de código pode até mesmo ficar mais lento em uma nova versão do Python, mas isso é uma exceção. O caminho mais fácil para a otimização de scripts Python é utilizar a opção -O do intérprete para que o bytecode Python produzido seja otimizado por ele.

No script, deve-se evitar from module import *. Do contrário, o intérprete Python não conseguirá mais executar algumas otimizações internas. Esse idioma tam-bém prejudica a manutenção do código; ou seja, ao desistir dele, matamos dois coelhos com uma cajadada só.

Economize operações de lookup através do uso de múltiplos names-paces, ligando objetos a namespaces locais. Por exemplo, depois da linha opj = os.path.join chega-se mais rapi-

damente à função join do que a opj. Obviamente essa otimização dificulta a leitura do código.

Não insira exec e eval. Python é muito flexível, então variantes de código que não contenham exec ou eval costumam ser mais acessíveis. Especificamente funções curtas executadas dentro de laços podem ser aceleradas se forem inseridas no cor-po do laço (inlining). Mas isso aumenta a redundância em geral.

Caso queiramos anexar muitas cadeias de caracteres uma após a outra, o melhor é reuni-las em uma lista e ligar seus ele-mentos em seguida com ““.join(lista). Isso é muito mais rápido que fazer o encadeamento com +. O argumento key em list.sort acelera o código mais do que o argumento cmp. No primeiro caso a função de comparação é calculada apenas uma vez para cada valor da lista; no segundo, para cada comparação os valores são o dobro.

É possível utilizar dicionários ou conjuntos (sets) para verificar valores, os quais podem se apresentar em dois conjuntos de valores ou apenas em um de dois conjuntos de valores. Às vezes as List Comprehensions ou Generator Comprehensions são mais rápidas que laços for.

Por vezes é melhor deixar uma ope-ração ser executada em C altamente otimizado, mas manter as facilidades do Python. Para isso, transfira seu código ou parte dele de tal forma que ele utilize o máximo possível de funções integradas do Python (por exemplo range em vez de um laço correspondente) ou tipos de dados (listas, tupla, dicionários, conjuntos).

Utilize bibliotecas escritas em C para código de tempo crítico. Por exemplo, é possível processar XML com a biblioteca libxml2. Para encapsular bibliotecas C pré-existentes, há o SWIG [6] e o Ctypes [7]. O segundo já é parte integrante da distri-buição padrão desde o Python 2.5.

O Pyinline [8] e o Weave [9] per-mitem integrar fragmentos C em có-digo Python. O Pyrex [10] segue um caminho um pouco diferente – ele é uma linguagem muito parecida com o Python, que encapsula bibliotecas C pré-existentes, além de produzir suas próprias extensões, recentemente convertidas em C. Mais flexível, po-

O autorO Engenheiro Dr. Stefan Schwarzer usa Python há sete anos, é desenvolvedor de software independente e publicou pela Addison-Wesley o livro ”Workshop Python”.

Mais Informações[1] Xosview: http://www.python.org

[2] GKrellm: http://www.gkrellm.net

[3] Dstat: http://dag.wieers.com/home-made/dstat

[4] SQLite: http://www.sqlite.org

[5] Libxml2: http://xmlsoft.org

[6] SWIG: http://www.swig.org

[7] Ctypes: http://starship.python.net/crew/theller/ctypes

[8] Pyinline: http://pyinline.sourceforge.net

[9] Weave: http://www.scipy.org/Weave

[10] Pyrex: http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex

[11] Psyco: http://psyco.sourceforge.net

Exemplo 5: intersecção3()01 def interseccao3(lista1, lista2):02 “””Realizar interseccao com algoritmo O(n)”””03 return list(set(lista1).intersection(lista2))

http://supertuxbr.blogspot.com

Page 42: 27 - Desempenho_fev_2007

42

AN

ÁLI

SE

http://www.linuxmagazine.com.br

ANÁLISE | Vtune

CPUs modernas possuem uma sé-rie de formas para acelerarmos programas. Isso significa, por

outro lado, que o número de armadilhas ocultadas por um desempenho otimi-zado também é maior. Normalmente podemos demonstrar como um progra-ma reage à carga apresentada de acordo com o tempo. Com isso, a otimização do software tem uma importância cada vez maior. O desenvolvedor precisa sempre, no entanto, adaptar-se aos hardwares disponíveis e suas possibilidades. O Intel Vtune Performance Analyser [1] facilita a localização desses problemas.

Antes de um programa ser executado, ele é traduzido do código-fonte para a linguagem da máquina, em várias

etapas. Não há diferença se esse pro-cesso foi executado pelo compilador no desenvolvimento do programa ou em tempo de execução pelo inter-pretador – ao final, a CPU ainda vê apenas o código de montagem binário codificado.

Cada instrução consiste de um ou mais códigos de bits, que a CPU entende como uma operação elementar. Por exemplo, baixar o dado do endereço 0x1234 para o registro RAX. Internamente, uma CPU moderna não processa uma instrução desse tipo diretamente, mas dividida em pequenas micro-operações – chamadas µops. Esse procedimento também faz com que o comando percorra, no míni-mo, os seguintes níveis:

➧ Baixar um comando; ➧ Decompor o comando em µops; ➧ Executar as µops e calcular os en-

dereços necessários; ➧ (Opcional) Baixar os dados da me-

mória; ➧ Escrever o resultado na memória.

Em arquiteturas reais de proces-sador, a subdivisão continua de modo que no final são necessários, normalmente, dez ou mais passos – em alguns sistemas são mais de 30. Em vez de executar um comando de montagem após o outro, assim que um comando passa do primeiro nível, o comando seguinte migra para a “linha de montagem”, cha-mada de pipeline.

Otimização de desempenho com o Intel VTune

Sob a lupaOs processadores de hoje em dia reúnem diversas informações sobre como executar comandos de máquina. Isso permite que os desenvolvedores adaptem seus programas ao hardware da melhor forma possível, o que contribui de forma importante à aceleração de sua execução. Para realizar essa tarefa em processadores Intel, temos o auxílio do VTune.por Michael Hebenstreit

http://supertuxbr.blogspot.com

Page 43: 27 - Desempenho_fev_2007

43

| ANÁLISEVtune

Linux Magazine #27 | Fevereiro de 2007

Sob condições adequadas, esse proces-so pode permitir que códigos puramente seriais sejam executados com o máximo de desempenho. Entretanto, na prática isso raramente é possível; sempre ocorrem imprevistos devido a ramificações e laços no programa. Em vez de simplesmente esperar para saber qual será o resultado referente a uma ramificação, o prognós-tico da lógica da CPU tenta reconhecer o caminho mais provável.

Se ao final da pipeline o sistema re-conhecer que a previsão estava errada, ele interrompe todas as funções ativas na pipeline no momento, carregando-a novamente. Esse evento é chamado de branch misprediction, e custa natural-mente muito tempo.

CacheOutra modalidade de redução de desem-penho bastante recorrente é o acesso da CPU à memória principal. CPUs atuais são operadas a freqüências de clock de dois a quatro GHz; ou seja, um clock dura meio nanossegundo. Caso a CPU tenha que acessar a memória principal, existem tempos de espera de 70 a 100 ns, ou seja, de até 600 clocks. Durante esse tempo o processador geralmente é inca-paz de desempenhar qualquer trabalho significativo. Essa problemática deve ser combatida pelos caches, que minimizam o tempo de acesso através de um armaze-namento mais rápido. Hoje em dia, eles são consideravelmente menores que os programas reais ou registros de dados. O programa também deve estar configurado de tal maneira que o cache seja utilizado da forma mais eficiente.

Além desses dois exemplos, existem muitas outras possibilidades de otimiza-ção. Felizmente os hardwares modernos ajudam o programador nessa função. Os processadores baseados no Intel Pentium

ou Core 2 Duo conseguem registrar a ocorrência dos eventos. Em cada pro-cessador existem alguns registros de nú-meros, cujo valor é incrementado a cada ocorrência do evento mensurado. Caso um numerador ultrapasse um limite pré-determinado – descrito na tecnologia Intel como SAV (Sampling After Value) –, a CPU provoca uma interrupção. Softwa-res específicos, isto é, drivers do sistema operacional, podem reagir à interrupção e interpretar o evento.

Verificação de problemas na CPUOs conceitos de Event e Counter já fo-ram mencionados várias vezes sem que tenhamos explicado seu significado prá-tico. Exemplos de dois eventos freqüen-temente utilizados em sistemas Pentium são Clockticks e Instructions retired. Os primeiros medem o tempo e são incre-mentados a cada sinal do clock interno (como por exemplo cada nanossegundo). O último representa o número de instru-ções executadas.

A relação entre os clockticks e as Ins-tructions retired (também chamadas de CPI, Clocks per Instruction) mostra quanto tempo uma instrução demorou para ser executada. Como as CPUs modernas executam paralelamente mais de uma instrução, esse número pode ser menor que 1. Na prática, isso raramente é alcan-çado, como por exemplo na compressão e descompressão de vídeo com coman-dos SSE. Valores entre 1 e 1,5 são bons, enquanto aqueles superiores a 4 devem ser aperfeiçoados.

A medida de clockticks de um pro-grama, uma função ou até mesmo de linhas de código individuais mostra ao desenvolvedor de quanto tempo uma parte do programa necessita para a execução. O valor de CPI informa se a execução foi eficiente do ponto de vista da arqui-tetura da CPU.

Um meio auxiliar para registrar e interpretar esses eventos é o programa desenvolvido para processadores Intel, o Vtune. Ele não pode ser utilizado em outros produtos compatíveis com x86, pois o contador de hardware necessário não faz parte da definição da arquitetura x86, sendo implementado de maneira diferente por outros fabricantes, como a AMD. Cada fabricante de hardware com-patível com x86 acaba sendo obrigado a desenvolver sua própria microarquitetura. Como o contador de eventos está profun-

damente vinculado à microarquitetura, a compatibilidade entre os fabricantes não é possível. Apesar da diferença entre arquiteturas, a regra mostra que o Vtune encontra gargalos de desempenho em todos os fabricantes.

Contar eventosNão faria sentido registrar imediata-mente cada ocorrência de evento e de-terminar em qual seção do código ele se deu. Se tentássemos fazer isso com o evento Instruction retired, por exemplo, o tempo de execução de um programa aumentaria múltiplas vezes. Então, em vez disso é utilizado um método esta-tístico. O contador é calculado através do valor SAV (Sample After Value), escolhido de forma a fazer com que a CPU pare o programa através de uma interrupção depois de aproximadamente um milissegundo. O sistema de tempo de execução do Vtune salva no geren-ciador de interrupções a informação do comando em execução (Program Counter Register) e o número da thread sendo executada, assim como o do processo. Esses dados são extraídos pelo Vtune, na avaliação da medição.

Em um processador de 2 GHz, isso significa que todos os dois milhões de ciclos de clock teriam determinado em que posição o programa se encontrava imediatamente. Se cada linha do pro-grama rodar exatamente uma vez, a subdivisão deveria ser equivalente. Mas jumps, laços e ramificações produzem os chamados hotspots, ou seja, partes de programa que absorvem uma parte con-siderável do tempo de execução. Além disso, o desempenho de programas pode

Figura 1: O primeiro resultado da análise do Call Graph (acima em tabela, abaixo disponibilizada em gráfico). O diagrama mostra os anexos lógi-cos, sem considerar os números.

Figura 2: O Vtune permite selecionar os próprios eventos, além dos pré-instalados.

http://supertuxbr.blogspot.com

Page 44: 27 - Desempenho_fev_2007

44 http://www.linuxmagazine.com.br

ANÁLISE | Vtune

ser degradado pelo aumento de tempos de latência no acesso à memória, ao disco ou à rede.

Ao se realizar uma medição, deve-se também levar em consideração que o Vtune utiliza um método estático para avaliação de um programa para os hotspots. Os seguintes pontos são importantes: ➧ O programa deve trabalhar com

dados realistas (isso também vale naturalmente para qualquer outro tipo de análise de desempenho).

➧ O tempo de execução deve ser lon-go o suficiente para que apareçam, de maneira estática, eventos sufi-cientes em cada hotspot. O Vtune ainda pode apresentar o número de eventos contabilizados de fato. Caso a medição de um hotspot dependa de apenas poucos eventos (menos de 20, por exemplo), a informação é menos confiável.

➧ Teoricamente pode ocorrer de os hotspots não serem conhecidos.

➧ É freqüente a medição apresentar uma imprecisão – chamada skid –, na qual o evento real e a linha de programa mostrada não combinam exatamente. Nesse ponto é necessá-ria uma pequena experiência, mas deve estar claro para qualquer pro-gramador que, por exemplo, apenas no caso de uma bifurcação pode ocorrer um Branch Mispredict.

Além dessas limitações, há algumas vantagens: ➧ Não é necessário orquestrar o pró-

prio código-fonte. ➧ O Vtune permite uma visão de

todo o sistema. O autor conseguiu várias vezes, por exemplo, com a ajuda do Vtune, reverter problemas

de desempenho em um processo complicado que não tinha nada a ver com o próprio aplicativo.

Primeiros passosNa maior parte dos novos sistemas Linux, a instalação não apresenta problemas. Normalmente as versões atuais do Suse, Red Hat e Fedora encontram bom suporte e também são certificadas. A versão atu-al do Vtune também pode ser utilizada sem problemas no Open Suse 10.1 (32 bits), embora ela ainda não suporte essa variante oficialmente.

A instalação requer o arquivo com-pactado e um arquivo de licença válido. Em [1] há também uma licença de teste de 30 dias. A versão econômica para es-tudantes custa exatos 50 euros, enquanto uma única licença normal custa a partir de 630 euros. O processo de instalação é iniciado pelo script install.sh. Acon-selha-se, inicialmente, a manter a con-figuração padrão.

Módulo de kernel obrigatórioO Vtune necessita de um diretório de dados globais, que ele por padrão depo-sita em /opt/intel/vtune/global_data. Ele requer um módulo de kernel próprio, cujo código-fonte encontra-se em /opt/intel/vtune/vdk/src. Em novas versões do kernel e de distribuições, isso pode levar a problemas que, com certa sorte, normalmente são eliminados.

O Vtune dispõe também de uma interface gráfica de usuário (vtlec), bem como de uma ferramenta para linha de comando (vtl). No Linux, a interface grá-fica se baseia na plataforma do Eclipse, e apresenta as solicitações feitas à CPU e à memória. No entanto, em alguns casos essas solicitações podem causar adulterações à medição da capacidade. Por isso o autor aconselha a separar a medição da análise.

Interface gráficaComo exemplo prático, em [2] há um pequeno programa em C, com o qual os testes a seguir foram executados. Ele se baseia em OpenMP e com isso roda paralelamente em várias plataformas. A tradução foi feita com o compilador C da Intel, com o comando icc -g -o vt_test -openmp omp_mm4.c. A opção -g é importante; a interpretação da me-

dição exige as informações dos sím-bolos, caso contrário o Vtune apenas consegue mostrar uma classificação das linhas de Assembler, exatamente como um depurador.

A parte gráfica da aplicação é iniciada com /opt/intel/vtune/bin/vtlec. O menu File | New | New Project | Tuning Acti-vity inicia uma nova análise. A primeira verificação normalmente diz respeito ao chamado Callgraph. O Vtune pesquisa o controle de fluxo no nível das chama-das de função, e atribui a elas eventos medidos. Através da instrumentação do código a ser executado, obtemos dados absolutamente corretos, como, por exem-plo, com que freqüência o programa in-vocou uma dada função, e que parte do tempo de execução ele passou lá. Assim, o programador visualiza imediatamen-te quais funções contribuem com uma parte significativa do tempo de execução como um todo.

Um assistente auxilia todas as configu-rações necessárias. Normalmente basta inserir o caminho para a aplicação com o parâmetro de inicialização necessário. O Vtune carrega o binário (para examinar os pontos de entrada e saída de funções) e executa o programa. Depois de terminar a execução do programa, ele analisa os dados e os mostra sob as formas de tabela e Callgraph (figura 1).

Do lado esquerdo o programa mostra uma estrutura em árvore das medições. Um duplo clique em uma pasta Run (ou em uma das medições listadas abaixo) abre a visão de dados. Ela é mostrada pelo Vtune através do menu contextual (clique direito do mouse) como tabela e gráfico de barras.

Análises precisas requerem uma roda-da de coleta de informações, chamada Sampling Run, que inicia o Sampling Wizard na Tuning Activity. Caso o usu-ário queira ir além da instalação padrão e ainda medir eventos, ele precisa mar-car com um x a opção Change Sampling Events, na caixa de diálogo do assistente. Em Activity Configuration, é possível inserir medições adicionais através de Events (figura 2).

O número de eventos medidos ao mes-mo tempo em uma execução depende da CPU e da combinação dos próprios eventos. O Vtune gera automaticamente um número de execuções de acordo com a definição da medição, realizando-as em seguida. Isso naturalmente significa tam-bém que cada rodada executa o programa duas vezes: uma vez para a calibragem, outra para a medição. O Vtune presume

Figura 3: O resultado de um Sampling Run mostra os eventos estáticos de todos os processos que estão rodando no sistema. O objeto da pesquisa é mostrado na linha cinza na parte de baixo.

http://supertuxbr.blogspot.com

Page 45: 27 - Desempenho_fev_2007

45

| ANÁLISEVtune

Linux Magazine #27 | Fevereiro de 2007

então que o programa trabalhe de forma idêntica todas as vezes.

Eventos e contadorEm CPUs Core 2 existem cinco conta-dores, em princípio. Deles, três estão limitados aos eventos padrão, restando apenas dois contadores para medições em geral. Entretanto, na maioria das vezes faz sentido definir os eventos padrão para cada caso. Com isso, comportamentos como INST_RETIRED.ANY/CPU_CLK_UNHALTED.CORE sempre podem ser avaliados. A lista dos eventos disponíveis depende da CPU, e em sistemas mais modernos também do chipset. Eventos como “2nd Level Cache read Misses” podem ser encon-trados em todas as CPUs atuais, mas contadores SSE3, por exemplo, estão presentes apenas em sistemas com pro-cessadores que também implementam essa unidade.

É importante lembrar que a Intel não implementou o contador de forma sistemática e abrangente para todos os processadores. Os processadores Pentium 4, Xeon e Pentium M são relativamente semelhantes entre si, distanciando-se, no entanto, da arquitetura completamente oposta do Itanium. O novo Core 2 se orienta em torno de ambos os antecessores,

e é equipado com mais de 700 eventos, também estruturados sistemati-camente.

O resultado de um Sampling Run é mostra-do primeiramente englo-bando todos os processos (figura 3) que rodaram no sistema durante o tempo de medição. Se o cursor do mouse ficar parado por alguns instantes so-bre o nome do módulo, o Vtune mostra um resumo desse módulo.

No exemplo, o pro-grama vt_tes teve o maior valor, bem como o número de instru-

ções executadas (INST_RETIRED.ANY), e também o tempo de execução (CPUT_CLK_UNHALTED.CORE). O último critério, à primeira vista, é o mais importante. Otimizações se pagam nos pontos onde um tempo de execução mais longo é necessário. Nos hotspots, a relação do número de instruções fornece uma base para nos informar se uma otimi-zação vale a pena do ponto de vista da microestrutura.

Primeira avaliaçãoEm tais decisões deve-se sempre observar quanto tempo realmente seria necessário para um segmento de código. Em um programa que rode em dez segundos, não é interessante otimizar uma parte de código com um valor de CPI de 20, pois ele necessita de apenas 0,1 segundo para a execução. Também é importante o fato de que não se atinge um ganho de velocidade se mais de uma instrução for executada em um mesmo ciclo do clock. Por isso, é interessante verificar antes se o algoritmo pode ser aperfeiçoado ou se a paralelização não seria um caminho possível e mais promissor.

No exemplo, esse definitivamente não é o caso. Um duplo clique na en-trada do vt_test abre a visualização de

threads (figura 4). Logo se percebe que as dife-rentes threads OpenMP não recebem a mesma quantidade de trabalho. Elas executam um nú-mero bem diferente de instruções e, obviamen-te, também precisam de períodos diferentes. Até

Figura 4: A visualização da thread denuncia: uma thread está recebendo mais tarefas do que outra, e por isso tam-bém dura mais tempo. Além do tempo de execução, podem ser vistas as respectivas partes dos eventos registrados pelo programa.

mesmo o comportamento de cada thread individual está longe do ideal.

Processo de otimizaçãoOutro duplo clique em uma das threads abre a visualização de módulo. O usuário pode navegar com o mouse através dos hotspots e chegar até o código-fonte (figu-

ra 5), cujo laço interno pode ser visto no exemplo 1. Cada laço realiza em princípio o mesmo trabalho – a diferença é o tipo de armazenamento de dados.

A diferença entre o segundo e o ter-ceiro laços está no acesso à matriz a[][]. O último – e pior – caso endereça o pri-meiro índice, portanto de forma contrária à estrutura de caching e pre-fetching do hardware. Cada erro de acesso ao cache (Cache Miss) baixa não apenas os dados necessários, mas também os elementos relativos a eles para o cache. Os laços 1 e 2 também reutilizam essas datas imedia-tamente. O terceiro requer um campo de memória completamente diferente a cada passo, o que leva a um grande aumento de cache misses. Isso pode ser observado não apenas no Vtune, mas também no tempo de execução (exemplo 2).

A diferença de peso entre ambas as threads é esclarecida por um erro comum na aplicação do OpenMP. A thread 1 executa o laço de 0 até N/2, e a thread 2, de N/2 até N. A duração dos laços in-ternos aumenta de forma proporcional a N. Esse é o motivo pelo qual o tempo de execução na utilização de duas CPUs não se divide ao meio. O leitor que se in-teressar deve buscar a especificação do OpenMP [3], seção Schedule.

Caso o vtlec realize a medição, pode acontecer de esse processo con-

Figura 5: A visualização do código-fonte quebra os dados reunidos até a única linha de código para baixo. Na coluna cinza à direita, a parte da CPU pode ser vista por qualquer aplicação.

Exemplo 1: Laço principal01 for (k = 0; k < REPETIÇÕES; k++) {02 #pragma omp for03 for(i = 0; i < RA; i++) {04 for(j = 0; j < i; j++) {05 d[i] += a[i][j] * b[i] + c[i];06 }07 }08 }

http://supertuxbr.blogspot.com

Page 46: 27 - Desempenho_fev_2007

46 http://www.linuxmagazine.com.br

ANÁLISE | Vtune

sumir grande parte da capacidade de CPU disponível, principalmente em conjunto com o X11 e o gerenciador de janelas. Além disso, em tarefas em lote, operações interativas costumam ser impossíveis. Por isso, é interessan-te que grande parte da funcionalidade do Vtune também possa ser acessada pela linha de comando (figura 6). Nesse caso, vtl -help fornece uma visão geral dos comandos e opções disponíveis. A ajuda oferece informações detalhadas quando informamos o comando dese-jado como opção adicional. Depois é conferida uma posição especial do comando padrão para a medição: vtl -help -c sampling.

Linha de comando do VtuneO Vtune fornece não somente os de-talhes do comando desejado, mas também uma lista de todos os eventos disponíveis. Sem necessitar de mais carregamentos, o programa de teste pode ser executado no Vtune como a partir do vtlec:

vtl activity Test -d 40 -c sampling -o “-➥ec en=’Instructions Retired’ ➥en=’Clockticks’ -cal yes” -app ./vt_test ➥run

O elemento activity Test define uma nova medição, que com -d 40 deve durar no máximo 40 segundos (isso evita problemas com programas dependentes). É conduzida uma me-dição do tipo sampling, que analisa dois eventos. Para calibrar o contador, o Vtune executa automaticamente, com a opção -cal yes, duas funções: a primeira simplesmente conta todos os eventos que ocorrerem, enquanto a segunda conduz a medição propria-mente dita.

O comando anexo run inicia a me-dição definida da mesma forma. Caso contrário, o comando acima iria definir apenas uma medição, que o desenvol-vedor iniciaria em um momento mais adiante através de run. Os dados são depositados pelo Vtune no diretório pessoal em ~/VTune. Na linha de co-mando, show mostra os dados salvos atualmente e, com a opção all, são mostrados também os eventos salvos em uma execução: vrt show -all.

Dados de teste transportáveisÉ possível ter uma primeira visão geral da medição no console com o coman-do vtl view test -modules. Com isso o Vtune mostra todos os processos que estavam ativos durante a medição, as-sim como os valores medidos. As ou-tras avaliações infelizmente precisam de um pouco mais de trabalho, sen-do produzidas no console. Os dados coletados podem ser empacotados e transferidos para outro computador para avaliação. No primeiro passo, vtl pack test.vxp -ar test empacota os re-sultados no arquivo do pacote rtest.vxp. Ele contém, além do próprio arquivo de dados (*.tb5), informações sobre que dados foram medidos, e quando. Os dados salvos há pouco podem ser lidos na interface gráfica vtlec por meio de File | Import | Tuning File | Export File (*.vxp).

Além das análises apresentadas, o Vtune também oferece a possibilidade de conduzir avaliações em um espaço de tempo determinado, o que é de grande ajuda para localizar gargalos no decorrer de eventos.

Para facilitar o desenvolvimento de programas paralelizados, o Intel Thread

Checker e o Intel Thread Profiler trazem duas extensões especiais para o Vtune. O Thread Checker testa programas ba-seados em OpenMP, Posix Threads ou Windows® Threads em sua correção, e sobretudo se os acessos à memória estão programados corretamente e não há possibilidade de ocorrerem condições de corrida.

O Thread Profiler facilita a verifica-ção e confirmação do comportamento temporal de um programa baseado em threads, registrando quais threads ini-ciadas estão ativas em cada momento. Isso propicia também a localização de deadlocks, ocorrências tão indesejáveis em qualquer programa.

ResultadoO Intel Vtune ajuda os programadores a localizarem problemas decorrentes de um mal ajuste do programa ao hardware Intel. O autor pôde verificar na prática que esses problemas, em sua maioria, ocorrem com menor ou maior força em sistemas compatíveis com x86; portanto, uma possível oti-mização é indicada a todos os sistemas desse tipo.

O Vtune também pode fornecer di-versas informações ao iniciante. Não é necessário escrever ou carregar códigos de forma especial. Muitos problemas podem ser compreendidos sem acesso ao código-fonte, já que o usuário obtém uma imagem completa do sistema com uma medição.

Com isso, o Vtune se revela uma ferramenta com muitas possibilidades, que além disso é fácil de ser instalada, mas que requer um certo conhecimento do hardware utilizado. A capacidade de reconhecer quais dos muitos eventos mensuráveis são relevantes ao se estu-dar uma aplicação é uma das tarefas que nenhum programa pode resolver de forma autônoma. ■

Exemplo 2: Threads01 $ export OMP_NUM_THREADS=202 $ ./vt_test03 example with 2 threads0405 Stage 1 in 5.06335 secs06 Stage 2 in 5.05060 secs07 Stage 3 in 6.87645 secs08 Finished0910 $ export OMP_NUM_THREADS=111 $ ./vt_test12 example with 1 threads1314 Stage 1 in 6.82961 secs15 Stage 2 in 6.70549 secs16 Stage 3 in 9.10998 secs17 Finished

Mais Informações[1] Intel Vtune:

http://www.intel.com/cd/software/products/ asmo-na/eng/vtune/239144.htm

[2] Exemplos on-line: http://www.linuxmagazine.com.br/ issue/27/vtune.html

[3] OpenMP: http://www.openmp.org

Figura 6: Informações importantes para uma otimização são fornecidas também pela ferramenta de linha de comando vtl. No exemplo, é mostrada uma visualiza-ção dos eventos registrados.

http://supertuxbr.blogspot.com

Page 47: 27 - Desempenho_fev_2007

47

| ANÁLISESlackware 11

Linux Magazine #27 | Fevereiro de 2007

AN

ÁLIS

E

Finalmente saiu o Slackware 11.0, o mais novo lançamento da mais an-tiga distribuição Linux em atividade. O mais novo, mais demorado (mais de um ano) e, sem dúvidas, o maior (três CDs de pacotes) de todos os lan-çamentos até hoje. O objetivo deste artigo é mostrar quais as novidades do Slackware 11.0.

A novidade mais óbvia é que ago-ra são três CDs com pacotes binários, em vez dos tradicionais dois CDs. Para quem ainda não baixou (ou comprou), a divisão dos CDs do Slackware é mos-trada na tabela 1.

Os outros três CDs vêm com o códi-go-fonte e alguns bônus:

➧ Código-fonte das séries a, ap, d, e, f, k, l, n e y, além dos pacotes de ins-talação do kernel 2.6.18 (testing);

O que há de novo na última versão do Slackware?

Melhor com o tempoNa versão mais recente do Slackware, somos presenteados com uma seleção de pacotes ainda maior que a de costume. A grande novidade fi ca por conta do kernel 2.6, que ainda não é padrão, porém vem em duas versões. O Slackware envelhece mantendo sua saúde e disposição.por Piter Punk

Tabela 1: Pacotes binários nos CDsNome Partição

CD 1 Séries a, ap, d, e, f, k, l, n, x, xap (parcial) e y, além de todos os kernels de instalação e do sbootmgr.dsk para fazer o CD iniciar em máquinas que não suportam o boot por CD.

CD 2 Séries kde, t, tcl e xap (parcial); também inclui todos os discos de inicialização (kernel 2.4) e root (para instalação por disquetes)e parte dos aplicativos “extra”.

CD 3 Série kdei, outra parte dos aplicativos “extra” e seção “testing”.

➧ código-fonte das séries t, tcl, x e xap, os pacotes do “pasture” (pacotes que já foram da distribuição, mas atual-mente são considerados obsoletos), o ZipSlack (que agora precisa de um disco Zip de 250 MB, não mais de 100 MB), o SlackBook (o famoso TheBook) e imagens especiais para instalação por rede via PXE, pen-drives ou mini-ISO;

➧ código-fonte das séries kde e kdei.

OrganizaçãoPara quem não entendeu essa separação em “séries”, isso é feito para facilitar a organização e o processo de instalação. Os pacotes do Slackware são divididos em diferentes grupos, chamados “disk series” (séries de discos). O nome é uma herança de quando a distribuição era

feita em disquetes. A tabela 2 explica o conteúdo das séries.

Além das séries, existe o “pasture”, uma coleção de pacotes antigos, porém ainda úteis, como lprng, apsfilter, versões antigas da Berkeley DB etc. Há ainda os pacotes da categoria “testing” que, como o nome indica, ainda se encontram em fase de testes em relação à inclusão na distribuição estável padrão. Na categoria “extra” estão aqueles pacotes que ainda não fazem parte da distribuição – e tal-vez nunca venham a ser incluídos –, mas são empacotados com ela devido a sua utilidade ou pressão popular.

Dito isso, pode-se notar que podemos instalar um servidor ou um desktop simples com apenas o primeiro disco. Desktops mais completos necessitam também do segundo disco, e poucas aplicações fa-riam uso do terceiro. Os usuários que se

http://supertuxbr.blogspot.com

Page 48: 27 - Desempenho_fev_2007

48 http://www.linuxmagazine.com.br

ANÁLISE | Slackware 11

ferramentas para controle de versão (git e mercurial) e a linguagem Ruby, que a cada dia possui mais desenvolvedores. No que diz respeito ao Java, na distri-buição principal só temos o pacote JRE; o pacote JDK encontra-se na categoria “extra”. Há duas versões do PHP incluí-das, a 4.4.4, na distribuição principal, e a 5.1.6, no “extra”.

Para os administradores de sistemas, a inclusão do programa sysstat é muito bem-vinda. Ferramentas como o iostat para verificar o subsistema de E/S e o sar para analisar o sistema como um todo (inclusive com a possibilidade de deixá-lo monitorando o sistema e examinar os dados históricos) facilitam bastante a vida do administrador na hora de procurar gargalos e resolver problemas. A manu-tenção de sistemas Windows® também foi levada em consideração, e por isso há um pacote com o Rdesktop, uma ferramenta para conectar sua máquina Linux a máquinas rodando o Windows Terminal Server.

É interessante notar que, à exceção do KDE e das linguagens em “extra” (JDK e PHP5), todos os pacotes que citamos até aqui já estão disponíveis após a instala-ção do primeiro CD. Ou seja, podemos instalar uma estação de desenvolvimen-

to, um servidor e um desktop leve com um único CD.

De resto, o Slackware 11.0 é a mesma distribuição simples e estável que a comu-nidade já conhece desde 1993. A instalação depende somente da leitura das perguntas que aparecem, e ao final já se tem um sis-tema pronto; Patrick Volkerding, chefe do desenvolvimento da distribuição, continua adotando esse sistema para garantir que o usuário consiga controlar e ajustar seu sistema nos mínimos detalhes. Em outras palavras, é uma distribuição perfeita para usuários felizes.

InstalaçãoO teste de instalação foi feito em cinco diferentes máquinas, compreendendo desde um Pentium 133 até um Sempron 3000+. Foram utilizados teclados ABNT2 e US-Internacional, com conectores USB, serial e PS/2. Diversas placas de rede (PCI, ISA, onboard, PCMCIA) e placas de vídeo também foram usadas, assim como vários mouses (todos óticos e com “rodinha”) com conectores USB e PS/2. Três máquinas possuíam leitora/gravadora de CD. Uma delas utiliza dis-cos SCSI. Todas as placas de rede, vídeo e som funcionaram. Uma placa de som ISA precisou ser configurada usando o alsaconf após a instalação. Uma das pla-cas de rede sem fio (com chipset Orino-co) funcionou perfeitamente depois da instalação, enquanto outra (com chip-set BCM4318), apesar do carregamento do módulo no kernel 2.6 (bcm43xx), não funcionou. Segundo os desenvolvedores do módulo, essa placa possui problemas no gerenciamento de potência que eles estão tentando resolver.

Das três máquinas com leitor de CD, uma delas não foi capaz de iniciar o instalador diretamente do CD 1. Para resolver isso, bastou criar um disquete de boot contendo o arquivo sbootmgr.dsk, cuja cópia se encontra no diretório isolinux do CD 1, e utilizá-lo para iniciar o CD-ROM. Logo na tela inicial, a pri-meira novidade: o kernel padrão não é mais o tradicional bare.i, e sim o sata.i, um reflexo da popularidade dos discos rígidos SATA. Em uma das máquinas deixamos a instalação continuar assim, e nas outras duas selecionamos o huge26.s como kernel de instalação.

Em uma das duas máquinas restantes fizemos a instalação via rede, iniciando a partir de disquetes. O disco de inicialização utilizado foi o adaptec.s. Além dele, foi ne-cessário criar dois discos de root (install.1

Tabela 2: Séries do sistema

A Base do sistema. Kernel, módulos, utilitários neces-sários para o funcionamento do sistema etc.

AP Aplicativos em modo texto. Players de MP3, encoders, mi-xers de som, editores de texto, corretores ortográficos, fil-tros de impressão, ferramentas para análise do sistema etc.

D Linguagens e ferramentas de desenvolvimento.

E Emacs (um sistema operacional travestido de editor de textos).

F FAQs e HOWTOs (uma farta documentação direto da LDP. Ex-tremamente útil em ambientes “não conectados”).

K Código-fonte do kernel (no caso do Slackware 11, é o 2.4.33.3).

KDE O K Desktop Environment. O principal ambiente de desktop do mundo Linux e suas toneladas de aplicativos.

KDEI Os pacotes de internacionalização do KDE.

L Bibliotecas utilizadas por outros programas. É altamen-te recomendado instalar a série L, se não quiser problemas de-pois. Por algum motivo misterioso, o Java fica aqui.

N Servidores e aplicativos de rede: NFS, Apache, leito-res de news, proftpd e vsftpd, Samba e vários outros.

T LaTeX, um poderoso (se não o mais) sistema de processamento de texto.

TCL As linguagens Tcl e Expect e seus toolkits gráficos.

X O Xorg 6.9 e algumas fontes e pacotes adicionais.

XAP Aplicativos Gráficos. Como a série AP, só que para o X. Aqui es-tão os navegadores, clientes de mensagens, leitores de email, editores gráficos, gerenciadores de janelas etc.

Y Jogos em modo texto

acostumaram a usar somente dois discos podem perfeitamente manter esse hábito, sem qualquer prejuízo à instalação.

Descrição GeralUsuários desktop ficarão felizes em ver o KDE 3.5.4 completo e funcionando sua-vemente, embora tenha sido necessário aplicar um patch para que o ambien-te funcionasse sem o HAL (Hardware Abstraction Layer). Uma das adições do Slackware 11 é o Amarok, um reprodu-tor multimídia extremamente funcional e cheio de recursos, incluindo a possi-bilidade de baixar automaticamente as letras das músicas, e oferecendo suporte a plugins, entre outros. Ainda no mundo do desktop, o conjunto de aplicativos Mo-zilla foi substituído por seu descendente Seamonkey. Além do KDE 3.5.4, o Sla-ckware vem com o XFCE 4.2.3.2, Fluxbox 1.0rc2, WindowMaker 0.92, Fvwm 2.4.19 e Blackbox 0.65 (a versão 0.70.1 está na categoria “extra”).

Quem usa o Slackware como máquina de desenvolvimento vai gostar do novo pacote do Python, que agrega três pacotes antigos, pois está mais completo; também foram incluídas novas bibliotecas (prin-cipalmente na esfera multimídia), novas

http://supertuxbr.blogspot.com

Page 49: 27 - Desempenho_fev_2007

Linux Magazine #27 | Fevereiro de 2007

e install.2) e um disco adicional, o network.dsk. Apesar de extremamente entediante, o processo correu sem problemas: primeiro o disco de inicialização, depois o install.1, em seguida o install.2, e por último digitar network para realizar a instalação via rede.

Na última máquina, fizemos uma atualização do Slackware 10.2 para o 11.0; descreveremos esse processo na próxima seção.

Depois de carregar o kernel e o sistema de instalação, somos presenteados com a boa e velha interface de instalação do Slackware. Quem fez uma instalação há dez anos não perceberá qualquer mudan-ça radical. O particionamento de discos é feito usando o fdisk ou cfdisk. O primeiro é totalmente baseado em texto puro, en-quanto o segundo mostra menus (também em modo texto, porém de forma mais or-ganizada), e é teoricamente mais fácil de usar. Ao realizar o particionamento, é im-portante criar ao menos uma partição de swap e uma partição nativa do Linux.

Com os discos já particionados, é só rodar o setup. A instalação é feita através de uma série de menus de texto. Ou seja, para ins-talar, é necessário que o usuário leia o que está escrito e responda de acordo com o texto apresentado. Nada extremamente complexo. A instalação pode ser resumida em:

➧ Selecionar um mapa de teclado. ➧ O instalador vai detectar a parti-

ção swap. O usuário deve apenas responder se quer usá-la e se quer que sejam checados os blocos ruins que porventura existam.

➧ Apresentada uma lista com as outras partições disponíveis e o usuário deve escolher uma para ser a partição raiz do sistema. Seleciona-se também se ela deve ser formatada (o que é bastante saudável na instalação de um novo sistema) e qual o sistema de arquivos a ser usado.

➧ Repetir o passo 3 algumas vezes, para as outras partições. Assim você pode ter uma partição para o /usr , outra para o /home etc.

➧ Escolher a fonte da instalação. Em três das nossas máquinas, a instala-ção foi feita a partir do CD-ROM, nas demais através da rede.

➧ Selecionar quais séries de pacotes serão instaladas.

➧ Selecionar o modo de instalação. Como três das máquinas tinham bastante espaço, escolhemos o modo completo (full). Na restante, escolhe-mos o modo menu para separarmos melhor os pacotes.

➧ Aguardar o término da instalação (trocar CDs, se for o caso, ou sim-plesmente esperar, se estivermos instalando via DVD ou a partir de um único CD).

➧ Especificar qual kernel deve ser utilizado.

➧ Configurar a rede, o mouse e o fuso horário.

Feito isso, basta pressionar [Ctrl]+[Alt]+[Del] para reiniciar a máquina e ver o sistema novo aparecer. A instalação toda dura cerca de 40 minutos e ocupa entre 3 e 4 GB. Logo após a instalação do sistema, já podemos usá-lo.

Instalação de atualizaçãoUsando o slackpkg-2.09 que se localiza no diretório extra (no segundo CD, mas é possível baixar somente o pacote a partir de um mirror do Slackware), o procedi-mento para a atualização é:

➧ Instalar o pacote. ➧ Editar o arquivo /etc/slackpkg/mirrors

e descomentar um dos mirrors. ➧ Executar slackpkg update && slackpkg

install-new && slackpkg upgrade-all

O primeiro comando atualiza as listas de pacotes, o segundo instala os pacotes que foram incluídos no Slackware 11.0, e o terceiro atualiza os outros pacotes da distribuição. Os dois últimos comandos apresentam uma lista para que possam ser escolhidos os softwares para instalar ou atualizar. Afinal, nem todo mundo precisa de fontes indianas (um dos pacotes que foram incluídos na distribuição).

É importante lembrar que foram feitas muitas modificações nos arquivos dentro do diretório /etc/rc.d. Quando o sistema perguntar ao usuário se ele deseja atualizar esses arquivos, é altamente re-comendado que isso seja feito. Embora essa tarefa seja bastante enfadonha, a melhor forma de tratar os novos arquivos de configuração é selecionando a opção P (prompt) e examinar cada arquivo in-dividualmente.

A máquina em que testamos esse procedimento de atualização também está funcionando perfeitamente. Depois dos comandos acima, ainda executa-mos slackpgk clean-system para eliminar pacotes que não fazem mais parte do Slackware, mas ainda estão instalados desnecessariamente.

http://supertuxbr.blogspot.com

Page 50: 27 - Desempenho_fev_2007

50 http://www.linuxmagazine.com.br

ANÁLISE | Slackware 11

Pós-instalaçãoAs duas máquinas que foram instaladas com o kernel 2.6 precisam de módulos que estão no extra. Todas as máquinas precisam de pequenos ajustes depois de instaladas. A parte do kernel 2.6 merece uma seção separada, mas os outros ajustes são mínimos e bastante simples: ➧ Rodar o alsamixer e mudar o esta-

do dos canais de som, tirando-os do mudo. Logo depois, executar alsactl store para armazenar essas configurações de som.

➧ Editar o /etc/X11/xorg.conf e trocar o driver do mouse de PS/2 para IMPS/2, pois só assim a rodinha funciona-rá.

➧ Mudar o mapa de teclado no xorg.conf:

# Teclado US InternacionalOption “XkbRules” “xorg”Option “XkbModel” “pc105”Option “XkbLayout” “us”Option “XkbVariant” “alt-intl”

# Teclado ABNT2 Option “XkbRules” “xorg”Option “XkbModel” “abnt”Option “XkbLayout” “br”

➧ Incluir: export GTK_IM_MODULE=”cedilla” no /etc/profile.d/lang.sh para cor-rigir problemas com o C acentuado em aplicativos que usem a biblioteca GTK.

➧ Editar o /etc/fstab e trocar todas as ocorrências de owner para users, para permitir que os usuários sejam ca-pazes de montar CDs e disquetes.

➧ Criar o seu usuário e adicioná-lo ao grupo audio (e talvez também ao disk).

Nos passos 2 e 3, é possível usar os comandos xorgsetup ou xorgconfig para fazer essas alterações (e então aproveitar para mudar o driver de vídeo para um mais adequado à sua placa de vídeo, e também para especificar a resolução da tela). Nesse momento, configurações sal-vas de outras instalações podem ajudar e acelerar o processo.

Kernel 2.6Ainda não foi dessa vez que um kernel da série 2.6 veio como kernel padrão do Slackware. Apesar da vontade ge-ral, o kernel padrão ainda é o 2.4.33.3. Mas é perfeitamente possível usar o kernel 2.6; já durante a instalação pode-se usar:

➧ O huge26.s, que é o kernel 2.6.17.13 com suporte a praticamente tudo (sistemas de arquivos XFS, JFS, ReiserFS, Ext3, várias controladoras SCSI, USB-Storage etc.), ou

➧ o test26.s, que é o 2.6.18 com mais ou menos as mesmas opções de compilação do huge26.s

No caso do huge26.s, é possível fa-zer a instalação via rede, usando o network26.dsk (que, apesar do nome, não cabe em um disquete). Embo-ra seja possível fazer uma instalação com o kernel 2.6 utilizando apenas o primeiro CD, se o usuário quiser um sistema plenamente funcional, será necessário instalar os pacotes com os módulos do kernel que se encontram no extra do CD 2 (para quem usou o huge26.s) ou no testing do CD 3 (para quem usou o test26.s).

Quem possui processadores de núcleo duplo, múltiplos processadores (SMP) ou o recurso HT, da Intel, agora não precisa mais recompilar o kernel. O Slackware 11.0 vem com um kernel 2.6.17.13 compilado para SMP no CD 2 (dentro do extra).

Um aviso importante para quem usar o pacote kernel-generic: Faça um initrd. Os pacotes kernel-generic são kernels sem qualquer suporte especial, e não conse-guem ler sistemas de arquivos ReiserFS e Ext3. Após instalar algum deles, faça:

mkinitrd -c -k 2.6.17.13 -m jbd:ext3➥(para ext3)ou mkinitrd -c -k 2.6.17.13 -m reiserfs ➥(para reiserfs)

Se a leitura de seu disco rígido exi-gir o acesso a algum módulo especial (por exemplo, se o disco for SCSI), será preciso incluir o módulo respec-tivo no initrd. No meu caso, minha controladora SCSI AHA2940UW exi-giu o comando:

mkinitrd -c -k 2.6.17.13 -m aic7xxx_old:➥jbd:ext3

Depois de criado o initrd, deve-se adicionar uma linha initrd = /boot/ini-trd.gz em seu lilo.conf. Ele deve ficar semelhante a:

image = /boot/vmlinuz root = /dev/hda5 initrd = /boot/initrd.gz label = Linux read-only

Lembre de depois executar o comando lilo para copiar a nova imagem para o Registro Mestre de Inicialização.

Quem usar o kernel 2.6 vai verificar que a detecção de hardware ficou bem mais rápida e eficiente. Mais um novo recurso do Slackware 11, que conseguiu desfazer-se do antigo sistema hotplug e passou a usar o Udev para realizar tanto a criação dos dispositivos como o carre-gamento de seus respectivos módulos. Entretanto, o uso do hotplug em con-junto com kernels da série 2.4 ainda é imprescindível.

Com isso, temos um /dev menor e mais organizado, e a detecção de dispo-sitivos tornou-se mais rápida e flexível. Algumas importantes vantagens do novo sistema Udev:

➧ Máquinas com mais de uma placa de rede não sofrem mais da indefi-nição relacionada ao arquivo de dis-positivo. Basta editar /etc/udev/rules.d/net-devices.rules e descomentar as regras para placas de rede que já estejam definidas.

➧ A mesma indefinição não ocorre mais com os links de CD-ROM. Se ela ocorrer, pode-se descomentar a regra para criação de CD-ROMs que está em /etc/udev/rules.d/udev.rules.

Para se encaixar nesse sistema, o esque-ma de blacklist também mudou. Agora, para impedir o carregamento de algum módulo, deve-se procurá-lo em /etc/mo-dprobe.d/blacklist. O arquivo é bem do-cumentado e a sintaxe é simples.

ConclusãoApesar da inclusão de vários pacotes e da atualização de algumas centenas de outros, a característica mais marcante do Slackware 11.0 é o kernel 2.6 ainda não vir como padrão; a obrigação de se instalar os módulos do kernel após o término da instalação também é um inconveniente. O ponto positivo é a inclusão de três pa-cotes do kernel 2.6 pré-compilados.

O Slackware 11.0 é como o próprio Patrick anuncia: “não menos que o me-lhor Slackware já lançado”. E realmente combina as já conhecidas estabilidade e segurança com alguns dos últimos avanços do Linux. Vale a pena a atualização para todos os usuários. E quem ainda não é usuário deve um dia testar o Linux mais tradicional do mercado. E, obviamente, tornar-se um novo usuário. ■

http://supertuxbr.blogspot.com

Page 51: 27 - Desempenho_fev_2007

51

| TUTORIALLPI 103-104

Linux Magazine #27 | Fevereiro de 2007

TUTO

RIA

L

Tópico 103: Comandos GNU e Unix.

Objetivo 1.103.3: Trabalhando na linha de comando

A maneira mais direta de interagir com o computador é usando a linha de comando. O prompt do shell (terminando em $ ou # para o usuário root) indica que o shell está pronto para receber instruções.

O shell é o ambiente que faz o in-termédio entre o usuário e os recursos do computador, como um ambiente de programação em tempo real para executar tarefas. O shell padrão no Linux é o bash (Bourne Again Shell), e é a ele que os procedimentos aqui mostrados se referem.

As instruções do shell geralmente seguem o formato: comando [opções] {ar-gumentos}

Alguns comandos embutidos do am-biente shell:

alias

Cria um apelido para um comando, no formato:

$ alias apelido=’nome_do_programa --opções’

É útil para facilitar a entrada de coman-dos recorrentes que levam muitos argumen-

tos. Usar alias sem argumentos mostra quais aliases existem e seus conteúdos.

exec

O comando iniciado através de exec não se torna um processo filho do shell, mas toma seu lugar. Dessa forma, o shell é finalizado quando o comando terminar.

O shell interpreta a primeira palavra na linha de comando como um comando. O caminho completo ou relativo para o comando precisa ser fornecido, a menos que o comando esteja localizado em um dos diretórios contidos na variável de am-biente PATH. Se o programa se encontrar no diretório de trabalho atual e fora dos diretórios contidos em PATH, ele preci-sará ser invocado precedido por ./.

VariáveisAs variáveis usadas no shell são semelhan-tes às usadas em linguagens de progra-mação. Nomes de variáveis são limitados a caracteres alfanuméricos.Para se criar ou modificar uma variável, espaços não devem ser usados:

$ nome_da_variável=valor_da_variável

O valor de uma variável é retornado acrescentando-se $ ao seu nome:

$ echo $nome_da_variávelvalor_da_variável

Há dois tipos de variáveis: locais e exportadas:

➧ Locais: Acessíveis apenas no shell atual.

➧ Exportadas: Acessíveis no shell e pe-los processos iniciados neste shell.

Todas as variáveis são listadas usando o comando set. Para ver apenas as variáveis exportadas, usa-se env. Se uma variável pode ser acessada por qualquer processo ou shell, é chamada de variável “global”.

Algumas variáveis de ambiente podem ser pré-definidas, seja de forma embutida na shell ou nos arquivos de configuração, como mostra a tabela 1.

Variáveis especiais ➧ $!: PID do último processo filho ➧ $$: PID do shell atual ➧ $?: Retorna 0 se o último comando

foi bem sucedido, caso contrário retorna 1

➧ ~: Corresponde ao diretório pessoal do usuário atual

➧ ~alaor: Corresponde ao diretório pessoal do usuário chamado “alaor”

Comandos SeqüenciaisPara executar três comandos em se-

qüência, independente do resultado de cada um, utiliza-se o formato:

$ comando1 ; comando2 ; comando3

Para executar o comando seguinte apenas se o anterior foi bem sucedido (se retornou 0):

$ comando1 && comando2 && comando3

Vamos continuar com a segunda aula da preparação para a certificação LPI

LPI nível 1: Aula 2A aula de hoje trata do importantíssimo ambiente de linha de comando, além de sistemas de arquivos e outros assuntos.por Luciano Siqueira

Gözde Otman - www.sxc.hu

http://supertuxbr.blogspot.com

Page 52: 27 - Desempenho_fev_2007

52 http://www.linuxmagazine.com.br

TUTORIAL | LPI 103-104

Executar o comando seguinte apenas se o anterior não foi bem sucedido (se retornou diferente de 0):

$ comando1 || comando2 || comando3

Auto-Completar Comandos e CaminhosUm recurso que agiliza a digitação de comando e caminhos existentes, é a utilização da tecla [TAB].

Exemplo: Comando whatis

$ wha<TAB>$ whatis

Objetivo 1.103.2: Processar fluxos de texto através de filtros

Esse objetivo se relaciona principal-mente ao uso das ferramentas do pacote GNU textutils. São comandos Unix pa-drão, utilizados para modificar seqüên-cias de texto.

cat: É usado para mostrar o conteúdo de arquivos.

tac: Tem a mesma função do cat, mas mostra o conteúdo de trás para frente.

head: Mostra o começo de arquivos. Por padrão, as primeiras dez linhas são mostradas. A quantidade de linhas a se-rem mostradas é indicada pela opção -n. A opção -c especifica o número de caracteres (bytes) a serem mostrados no lugar de linhas.

tail: Mostra o final de arquivos. Por pa-drão, as últimas dez linhas são mostradas. A quantidade de linhas a serem mostradas é indicada pela opção -n . A opção -c es-pecifica o número de caracteres (bytes) a serem mostrados no lugar de linhas. Para que o final do arquivo seja mostrado con-tinuamente, à medida que mais texto é adicionado ao final do mesmo, usa-se a opção -f (de follow). O sinal + indica que

a leitura deve ser feita a partir da linha de número especificado após o +.

wc: Conta linhas, palavras ou caracteres, com as opções -l, -w e -c respectivamente. Quando usado sem argumentos, mostra esses três valores na seqüência.

nl: Numera linhas, como cat -b. O argumento -ba faz numerar todas as li-nhas. O argumento -bt apenas as que não estejam em branco.

expand: Substitui espaços de tabulação (“TABs”) por espaços simples, mantendo a mesma distância aparente.

unexpand: Substitui dois ou mais es-paços simples por espaços de tabulação (TABs).

hexdump: Mostra arquivos binários. A opção -C torna a saída mais legível, mos-trando a coluna de endereço hexadecimal, seguida pela coluna dos dados do arquivo (valores hexadecimais seqüenciais sepa-rados a cada dois bytes), e por último a coluna que mostra esses mesmos bytes no formato ASCII.

split: Divide um arquivo em outros menores seguindo critérios como tamanho ou número de linhas. A opção -l indica o número de linhas de cada parte do ar-quivo dividido. A opção -b indica qual o tamanho de cada parte. Um prefixo para as partes pode ser indicado após o nome do arquivo a ser dividido:

Dividir um arquivo em partes de 1024Kb usando o prefixo “parte_”: $ split -b 1024k “arquivo original” par-te_. Esse comando criará arquivos chamados parte_aa, parte_ab, parte_ac etc. Para concatenar novamente o arquivo, usa-se cat. Será criado um arquivo de conteúdo idêntico ao do arquivo original.

uniq: Mostra o conteúdo de arquivos su-primindo linhas seqüenciais repetidas.

cut: Delimita um arquivo em colunas, em determinado número de caracteres ou por

posição de campo. Para separar por campo, usa-se a opção -d para especificar o caractere que delimita os campos e -f para informar a posição do campo. Mostrar os campos da posição 1 e 3 do arquivo /etc/group, campos que estão separados por ::

$ cut -d ‘:’ -f 1,3 /etc/grouproot:0bin:1daemon:2sys:3adm:4(...)

Para mostrar outro delimitador no lugar do original, usa-se a opção --ou-tput-delimiter:

$ cut -d ‘:’ -f 1,3 /etc/group --output-➥delimiter ‘ = ‘root = 0bin = 1daemon = 2sys = 3adm = 4(...)

paste: Concatena arquivos lado a lado.

$ paste texto_simples texto_simples texto simples texto simplescriado com cat criado com cat

join: Similar ao paste, mas trabalha especificando campos, no formato join -1 CAMPO -2 CAMPO <arquivo um> <arqui-vo dois>, onde CAMPO é o número indicando qual campo nos respectivos arquivos (primeiro e segundo) deve ser correlacionado. Exemplo: Relacionar as linhas de arq2 cujo primeiro cam-po (coluna 1) seja igual ao primeiro campo de arq2:

arq1:1 a1 x12 b1 y13 c1 z1

arq2:1 a2 x22 b2 y23 c2 z2

$ join -1 1 -2 1 arq1 arq21 a1 x1 a2 x22 b1 y1 b2 y23 c1 z1 c2 z2

A primeira coluna do resultado é o campo que foi relacionado, seguido das linhas correspondentes. É possível deli-mitar quais campos mostrar, com a opção -o. Essa opção deve ser escrita no formato N.M, onde N é o número correspondente

Tabela 1: Variáveis pré-definidas

Variável Definição

DISPLAY Usado pelo X para saber onde executar os aplicativos clientes

HISTFILE Caminho para o histórico de comandos do usuá-rio (geralmente $HOME/.bash_history)

HOME Caminho para o diretório pessoal do usuário

LOGNAME O nome que o usuário usou para entrar no sistema

PATH Lista de diretórios nos quais programas serão procurados caso te-nham sido solicitados sem o caminho completo ou relativo

PWD O diretório atual

SHELL O shell utilizado (nesse caso, /bin/bash)

TERM O tipo de emulador de terminal utilizado

http://supertuxbr.blogspot.com

Page 53: 27 - Desempenho_fev_2007

53

| TUTORIALLPI 103-104

Linux Magazine #27 | Fevereiro de 2007

ao arquivo e M o número corresponden-te ao campo desse arquivo. O campo de relação também pode ser referido por 0. Exemplo: Fazer a mesma relação do exemplo anterior, mostrando apenas o primeiro campo de arq1 e apenas o se-gundo de arq2:

$ join -1 1 -2 1 -o ‘1.2 2.3’ arq1 arq2a1 x2b1 y2c1 z2

sort: Ordena alfabeticamente. Com a opção -n, ordena numericamente, e -r inverte o resultado.

sort texto_simples criado com cattexto simples

fmt: Formata para determinado número de caracteres por linha. O padrão é 75. ➧ -w: indica o número de caracteres

por linha ➧ -s: quebra linhas grandes, mas não

as preenche ➧ -u: um espaço entre palavras e dois

espaços entre sentenças.pr: Divide o arquivo para impressão.

O padrão é 66 linhas por 72 caracteres de largura, modificados por -l e -w res-pectivamente.

tr: Converte caracteres. O comando tr lê apenas diretamente via stdin. Conversão simples de um único caractere:

$ cat texto_simples | tr ‘ ‘ ‘.’texto.simplescriado.com.cat

Converter letras minúsculas para maiúsculas:

$ cat texto_simples | tr ‘a-z’ ‘A-Z’TEXTO SIMPLESCRIADO COM CAT

Objetivo 1.103.3: Gerenciamento básico de arquivos

Diretórios e arquivosArquivos podem ser acessados tanto por seu caminho absoluto quanto por seu caminho relativo. Caminhos absolutos são aqueles iniciados pela barra da raiz (/), e caminhos relativos são aqueles que tomam por referência o diretório atual. O ponto (.) refere-se ao diretório atual, e .. refere-se ao diretório contendo o diretório atual.

O comando ls é usado para listar arqui-vos e conteúdo de um diretório. A opção -l exibe detalhes sobre o(s) arquivo(s), -s mostra o tamanho em KB, e -d mostra o diretório, e não seu conteúdo. Exemplo de saída de ls -l:

$ ls -l /etc/X11/xinit/total 20-rw-r--r-- 1 root root 321 2006-01-14 ➥17:33 README.Xmodmaplrwxrwxrwx 1 root root 15 2006-03-20 ➥22:31 xinitrc -> xinitrc.fluxbox-rwxr-xr-x 1 root root 556 2003-03-16 ➥19:59 xinitrc.blackbox-rwxr-xr-x 1 root root 560 2006-03-07 ➥03:32 xinitrc.fluxbox-rwxr-xr-x 1 root root 799 2006-01-14 ➥17:30 xinitrc.twm-rwxr-xr-x 1 root root 788 2005-07-21 ➥15:27 xinitrc.wmaker

A primeira coluna mostra o tipo e as permissões do arquivo, a segunda co-luna mostra o número de links físicos (hard links) para o arquivo, a terceira e a quarta mostram o dono e o grupo aos quais o arquivo pertence, a quinta mostra o tamanho em bytes, a sexta e a sétima mostram a data e a hora da última mo-dificação no arquivo, e a oitava coluna mostra o nome do arquivo. Se o arquivo for um link simbólico, uma seta mostra o arquivo para o qual ele aponta.

O comando cp é utilizado para copiar arquivos. Suas opções principais são: ➧ -i: Modo interativo. Pergunta antes

de sobrescrever um arquivo. ➧ -p: Copia também os atributos do

arquivo original. ➧ -r: Copiar recursivamente o conte-

údo do diretório de origem.É importante saber que, ao se copiar

um diretório recursivamente, o uso da barra / no final do diretório de origem fará com que apenas o conteúdo do dire-tório seja copiado para o destino, e o não uso da barra fará com que o diretório de origem e seu conteúdo sejam copiados no destino.

O comando mv move e renomeia ar-quivos. Usado com a opção -i, ele pede confirmação antes de sobrescrever um arquivo de destino.

Para alterar a data de um arquivo, utiliza-se o comando touch. Usado sem argumentos, touch altera a data e a hora de criação e modificação de um arquivo para os valores atuais do sistema. Para alterar apenas a data de modificação, usa-se a opção -m, e para alterar apenas a data de acesso, usa-se a opção -a. O argumento passado com -t usa outro valor de tempo.

No bash, o comando para retornar o diretório atual é pwd. O comando cd muda para o diretório especificado ou vai para o diretório pessoal quando nenhum di-retório for especificado.

O comando mkdir cria diretórios. Para criar uma árvore de diretórios recursi-vamente, usa-se a opção -p: $ mkdir -p caminho/completo/para/dir.

Para alterar as permissões do dire-tório no ato da criação, as mesmas são transmitidas ao mkdir com a opção -m. Diretórios vazios podem ser apagados pelo comando rmdir. Para apagar uma árvore de diretórios vazios, usa-se a opção -p. Para apagar diretórios com conteúdo, usa-se rm -r, e para forçar a remoção, a opção -f é utilizada.

Encontrando arquivos com o comando findSintaxe do find: find diretório critério [-exec comando {} \;]

O argumento diretório indica onde o find deve iniciar a busca, e crité-rio pode ser o nome do arquivo ou diretório a ser procurado, ou uma regra para a busca. Critérios comuns para o find: ➧ -type: Tipo do arquivo (d para di-

retório, f para arquivo comum e l para link)

➧ -name nome: Nome do arquivo ➧ -user usuário: Dono do arquivo ➧ -atime -/+n: Data de último acesso

ao arquivo, menor ou maior que n. n corresponde a n * 24 horas.

➧ -ctime -/+n: Data de criação do ar-quivo, menor ou maior que n.

➧ -mtime -/+n: Data de modificação do arquivo, menor ou maior que n.

➧ -amin -/+n: Data de último acesso ao arquivo, menor ou maior que n. n corresponde a minutos.

➧ -cmin -/+n: Data de criação do ar-quivo, menor ou maior que n.

➧ -mmin -/+n: Data de modificação do arquivo, menor ou maior que n.

➧ -newer arquivo: O arquivo procura-do foi criado ou modificado mais recentemente que arquivo.

➧ -perm modo: O arquivo procurado tem permissão modo.

➧ -perm -modo: O arquivo procurado tem todas as permissões listadas em modo.

➧ -perm +modo: O arquivo procu-rado tem qualquer das permis-sões listadas em modo. Exemplo: encontrar todos os arquivos do tipo link em /usr/lib criados há menos de 24 horas:

http://supertuxbr.blogspot.com

Page 54: 27 - Desempenho_fev_2007

54 http://www.linuxmagazine.com.br

TUTORIAL | LPI 103-104

$ find /usr/lib -type l -ctime -1/usr/lib/libssl.so/usr/lib/libcrypto.so/usr/lib/libssl.so.0/usr/lib/libcrypto.so.0

Caracteres curinga (file globbing)As operações com arquivos e diretórios permitem o uso de caracteres curinga, que são padrões de substituição de ca-racteres. O caractere * substitui qualquer seqüência de caracteres:

$ ls /etc/host*/etc/host.conf/etc/hosts/etc/hosts.allow/etc/hosts.deny/etc/hosts.equiv

O caractere ? substitui apenas um caractere:

$ ls /dev/fd?/dev/fd0 /dev/fd1 /dev/fd2 /dev/fd3

O uso de colchetes ([]) indica uma lista de caracteres:

$ ls /dev/hd[abc]/dev/hda /dev/hdb /dev/hdc

Chaves ({}) indicam uma lista de termos separados por vírgula:

$ ls /dev/{hda,fd0}/dev/fd0 /dev/hda

O uso de exclamação antes de um curinga o exclui da operação:

$ ls /dev/fd[!01]/dev/fd2 /dev/fd3

Curingas precedidos de barra invertida (\) não realizam substituição:

$ ls /dev/fd\[\!01\]ls: /dev/fd[!01]: Arquivo ou diretório não ➥encontrado

Entre aspas duplas, apenas os carac-teres especiais |, / e $ têm efeito. Entre aspas simples, apenas o caractere espe-cial \ tem efeito.

Objetivo 1.103.4: Fluxos, canalização e redirecionamentos de saída

Processos Unix geralmente abrem três descritores padrão de arquivos, que os permitem processar entrada e saída de

dados. Esses descritores podem ser re-direcionados de e para outros arquivos ou processos. Por padrão, o descritor de entrada (stdin) é o teclado e os descritores de saída padrão (stdout) e saída de erro (stderr) são a tela do computador. Os valores numéricos para esses descritores são 0 para stdin, 1 para stdout e 2 para st-derr. Os descritores também podem ser acessados através dos dispositivos virtuais /dev/stdin, /dev/stdout e /dev/stderr.

O fluxo dos dados para redireciona-mentos e canalizações numa linha de co-mando vai da esquerda para a direita.

RedirecionamentoPara redirecionar a saída padrão de um comando para um arquivo, utiliza-se o símbolo > após o mesmo, que deve indi-car o arquivo a ser criado com os dados referidos, como em $ cat texto_simples > clone_texto_simples. Se o arquivo existir previamente, será sobrescrito. Para adi-cionar os valores sem apagar o conteúdo existente, usa-se >>.

Para redirecionar o conteúdo de um arquivo para a entrada padrão de um co-mando, usa-se <. Nesse caso, o fluxo dos dados segue da direita para a esquerda. É especialmente útil para utilizar com comandos como o tr, que não lê arquivos diretamente. O conteúdo redirecionado por padrão é o de stdout. Para especificar stderr, usa-se 2>. Para redirecionar ambos simultaneamente, usa-se &>.

Canalização (pipe)É possível enviar a saída de um coman-do para a entrada de outro comando, utilizando o caractere de canalização |. Exemplo: extrair a terceira música de um CD com o comando cdparanoia, ca-nalizando o áudio através do programa oggenc para armazenar a música no for-mato Ogg Vorbis.

$ cdparanoia -d /dev/cdrom 3 - | oggenc - -➥o 03.ogg

Por fim, é possível redirecionar si-multaneamente a saída tanto para um arquivo quanto para stdout, através do comando tee. Para tal, canaliza-se a sa-ída do comando para o comando tee, e a este um nome de arquivo para arma-zenar a saída:

$ cat /etc/passwd | tee cópia_passwd

O conteúdo de /etc/passwd será mos-trado na tela e copiado no arquivo có-pia_passwd.

É possível também usar a saída de um comando como argumento para outro, usando aspas invertidas:

$ ls -dl `cat /etc/ld.so.conf`drwxr-xr-x 5 root root 7464 2006-01-14 ➥17:35 /usr/X11R6/libdrwxr-xr-x 2 root root 712 2006-03-17 ➥12:26 /usr/i486-slackware-linux/libdrwxr-xr-x 2 root root 688 2005-10-29 ➥22:53 /usr/lib/qt/libdrwxr-xr-x 16 root root 7272 2006-03-21 ➥02:49 /usr/local/lib

Resultado idêntico é conseguido in-serindo o comando entre as aspas de $(). O comando xargs desempenha função parecida, passando os dados que rece-be via stdin como argumento para um segundo comando. Exemplo do xargs acompanhando a execução do find:

$ find /usr/X11R6/bin/ -name ‘xt*’ | xargs ➥ls -l-rwxr-xr-x 1 root bin 268928 2006-01-14 ➥17:35 /usr/X11R6/bin/xterm-rwxr-xr-x 1 root bin 13076 2006-01-14 ➥17:35 /usr/X11R6/bin/xtrapchar-rwxr-xr-x 1 root bin 6536 2006-01-14 ➥17:35 /usr/X11R6/bin/xtrapin(...)

Nesse exemplo, xargs tomou cada ca-minho passado por find e repassou como argumento para o comando ls -l.

Objetivo 1.103.5: Criar, monitorar e finalizar processos

Em linhas gerais, um processo é um programa em execução. Cada processo possui um número único de identifica-ção chamado PID. Esse número pode ser usado para mudar a prioridade de um processo ou para finalizá-lo.

pstree: Mostra processos ativos em for-mato de árvore genealógica (processos filhos ligados aos respectivos processos pais).

ps: Mostra os processos ativos de ma-neira detalhada.

top: Monitora continuamente os pro-cessos, mostrando informações como uso de memória e CPU de cada processo. A tecla [H] fornece ajuda sobre o uso do programa. Pode ser usado para alterar a prioridade de um processo.

pidof: Retorna o PID do programa cujo nome foi solicitado, se o programa estiver em execução.

kill: Envia sinais de controle para processos. O sinal padrão quando nenhum sinal é informado é SIGTERM, de valor numérico 15, que pede ao

http://supertuxbr.blogspot.com

Page 55: 27 - Desempenho_fev_2007

55

| TUTORIALLPI 103-104

Linux Magazine #27 | Fevereiro de 2007

programa em questão para finali-zar. O processo não necessariamen-te obedece ao sinal, a menos que o sinal seja SIGKILL. Em alguns casos, o sinal SIGHUP pode ser interpretado como ordem para o processo reler seu(s) arquivo(s) de configuração. Exemplo de kill:

# kill -SIGTERM 4902

Envia o sinal SIGTERM para o processo de PID 4902.

Sinais comuns: ➧ SIGHUP: Termina ou reinicia o pro-

cesso. Valor numérico 1. ➧ SIGINT: Interrompe o processo, igual

a [Ctrl]+[C]. Valor numérico 2. ➧ SIGQUIT: Fecha o processo. Valor

numérico 3.

➧ SIGKILL: Força a finalização do pro-cesso. Valor numérico 9.

➧ SIGTERM: Pede ao processo para fina-lizar. Valor numérico 15.

killall: Tem função igual à de kill, porém usa o nome do processo no lugar do PID. Com a opção -l, lista os possí-veis sinais.

Tarefas em primeiro e segundo planoApós iniciado um programa no shell, ele normalmente assumirá o controle de stdin e stdout, ou seja, ficará em primeiro plano. Para interromper o programa e voltar ao prompt do shell, usa-se a combinação de teclas [Ctrl]+[Z]. Feito isso, para continuar a execução do programa em segundo plano, ou seja, mantendo o prompt do bash em primeiro plano, usa-se o comando bg

(background). Para continuar a execu-ção do programa em primeiro plano, usa-se o comando fg (foreground).

Ao interromper uma tarefa, é mostra-do um número que identifica a mesma. Este número é passado para fg e bg para especificar a tarefa desejada. Se houver apenas uma tarefa na sessão atual, fg e bg podem ser usados sem argumentos. Para usar o nome do programa no lugar de seu número de tarefa, basta prece-dê-lo por %?.

O comando jobs lista as tarefas exis-tentes na sessão atual do bash. É espe-cialmente útil quando há mais de uma tarefa em andamento.

É possível iniciar programas direta-mente em segundo plano, adicionando o símbolo & ao seu final. Os números que são mostrados correspondem ao número da tarefa e ao PID, respec-tivamente. O número de uma tarefa pode ser usado como argumento do comando kill desde que precedido do símbolo %.

Quando um usuário sai do sistema, um sinal SIGHUP é enviado a todos os processos iniciados por ele. Para que esse sinal não interrompa o processo do usuário após este sair do sistema, o comando deve ser invocado através do nohup:

$ nohup wget ftp://transferência/muito/➥demorada.tar.bz2 &nohup: appending output to `nohup.out’

As saídas stdout e stderr serão redire-cionadas para o arquivo nohup.out, criado no mesmo diretório em que o comando foi executado.

Objetivo 1.103.6: Modificar a prioridade de execução de um processo

Números nice (NI) são usados para alte-rar a prioridade de CPU e balancear seu uso num ambiente multiusuário. Todo processo comum é iniciado com uma prioridade padrão (0). Números nice vão de 19 (menor prioridade) a -20 (priorida-de maior). Apenas o usuário root pode diminuir o número nice de um processo para abaixo de zero.

É possível iniciar um comando com uma prioridade diferente da padrão atra-vés do comando nice. Por padrão, nice muda a prioridade para 10. nice -n 15 tar czf home_backup.tar.gz /home inicia o comando tar com número nice de prioridade 15.

Tabela 2: Comandos do modo de comando

Tecla(s) Efeito

0, $ Início e fim de linha

1G, G Início e fim de documento

b, e Início e fim de palavra

(, ) Início e fim de sentença

{, } Início e fim de parágrafo

w, W Pular palavra e pular palavra contando com a pontuação

h, j, k, l Esquerda, abaixo, acima, direita

/, ? Busca para frente e para trás

i Entra no modo de inserção na posição atual do cursor

a, A Entra no modo de inserção depois do cursor ou no fim da linha

o, O Adiciona linha e entra no modo de inserção depois ou antes do cursor

s, S Apaga item ou linha e entra no modo de inserção

c Modifica um item através de inserção de texto

r Substitui um único caractere

x Apaga um único caractere

y, yy Copia um item ou toda linha

p, P Cola o conteúdo copiado depois ou antes do cursor

u Desfazer

ZZ Fecha e salva se necessário

ZQ Fecha e não salva

Tabela 3: Comandos de última linha ou coluna

:! Chama um comando do shell

:quit ou :q Fecha

:quit! ou :q! Fecha sem gravar

:wq Salva e fecha

:exit ou :x ou :e Fecha e grava se necessário

:visual Volta para o modo de comando

http://supertuxbr.blogspot.com

Page 56: 27 - Desempenho_fev_2007

56 http://www.linuxmagazine.com.br

TUTORIAL | LPI 103-104

Para alterar a prioridade de um processo em andamento, o renice é usado. A opção -p indica o PID do processo em questão.

# renice -10 -p 29972997: prioridade antiga = 0; prioridade ➥nova = -10

As opções -g e -u permitem alterar to-dos os processos do grupo ou do usuário, respectivamente. Com renice +5 -g users, todos os processos de usuários do grupo users tiveram suas prioridades (número nice) alteradas para +5.

Prioridades podem ser modificadas interativamente através do programa top. Quando na tela de processos, basta apertar a tecla [R] e indicar o número PID do processo.

Objetivo 1.103.7: Procurar em arquivos de texto usando expressões regulares

Expressões regulares e grepExpressões regulares são elementos de texto, palavras-chave e modifica-dores que formam um padrão, usa-do para encontrar e opcionalmente alterar um padrão correspondente. Muitos programas suportam o uso de expressões regulares. O comando grep é o mais comum para realizar buscas por expressões regulares em textos. Caracteres especiais em expressões regulares: ➧ ̂ : Começo de linha ➧ $: Fim de linha ➧ .: Qualquer caractere ➧ *: Qualquer seqüência de zero ou

mais caracteres ➧ []: Qualquer caractere que esteja

presente nos colchetesExemplos: Mostrar apenas as linhas

que começam com o caractere # do ar-quivo /etc/lilo.conf: grep ‘^#’ /etc/lilo.conf. Mostrar linhas de /etc/lilo.conf que contenham os termos hda ou hdb: grep ‘hda[ab]’ /etc/lilo.conf.

Mais opções de grep: ➧ -c: Conta as linhas contendo o

padrão. ➧ -i: Ignora a diferença entra maiús-

culas ou minúsculas. ➧ -f: Usa a expressão regular contida no

arquivo indicado por essa opção. ➧ -n: Procurar somente na linha indi-

cada por essa opção. ➧ -v: Mostra todas as linhas exceto a

que corresponder ao padrão.

sed: O comando sed é mais utilizado para procurar e substituir padrões em textos, mostrando o resultado em stdout. Sua sintaxe é

sed [opções] ‘comando e expressão re-gular’ [arquivo original]. No sed, a ex-pressão regular fica circunscrita entre barras (/). Por exemplo, sed -e ‘/^#/d’ /etc/lilo.conf mostra o arquivo /etc/lilo.conf sem as linhas começadas por # (li-nhas de comentário). A letra d ao lado da expressão regular é um comando sed que indica a exclusão de linhas contendo o respectivo padrão. Por exemplo, para substituir o termo hda por sdb, usaríamos sed -e ‘s/hda/sdb/g’ /etc/lilo.conf.

Opções comuns de sed: ➧ -e: Executa a expressão e comando

a seguir. ➧ -f: Lê expressões e comandos do

arquivo indicado pela opção. ➧ -n: Não mostrar as linhas que não

correspondam à expressão.Comandos comuns de sed:

➧ s: Substituir. ➧ d: Apagar a linha. ➧ r: Insere o conteúdo do arquivo indi-

cado na ocorrência da expressão. ➧ w: Escreve a saída no arquivo indi-

cado. ➧ g: Substitui todas as ocorrências da

expressão na linha atual.

Objetivo 1.103.8: Edição básica de arquivos com o vi

Na maioria das distribuições, o vi é o edi-tor de textos padrão. O vi localiza-se em /bin. Há três modos básicos no vi:

Modo de inserção: A maneira mais comum de entrar no modo de inserção é apertando a tecla [i] ou [A]. É o modo mais intuitivo, usado para digitar tex-to no documento. A tecla [ESC] sai do modo de inserção e volta para o modo de comando.

Modo de última linha ou coluna: Acessível ao apertar a tecla [:] no modo de comando. Usado para fazer buscas, salvar, sair, executar comandos no shell, alterar configurações do vi etc. Para re-tornar ao modo de comando, usa-se o comando visual. Veja a tabela 3 para mais detalhes.

Modo de comando: É o modo inicial do vi. Serve para navegação e edição. Ge-ralmente, os comandos são letras únicas. Se precedido por número, o comando será repetido correspondentemente ao valor desse número.

Algumas teclas comuns usadas no modo de comando podem ser vistas na tabela 2:

Tópico 104: Dispositivos, Sistemas de arquivos Linux e padrão FHS

Objetivo 1.104.1: Criação de partições e sistemas de arquivos

Por padrão, discos IDE podem conter até quatro partições físicas, das quais uma pode ser estendida. A partição estendida pode ser dividida em partições lógicas.

Fdisk: O fdisk é o programa padrão para manipular partições no Linux. Com a opção -l, ele lista os dispositivos e as partições existentes. Para manipular partições, o fdisk deve ser iniciado ten-do como argumento o dispositivo em questão. Uma vez dentro do fdisk, certas letras corresponderão a comandos. Alguns comandos bastante utilizados, podem ser vistos na tabela 4:

O fdisk cria novas partições identifi-cadas como partições nativas de Linux, cujo código hexadecimal é 83 (0x83). O código de identificação de partições do tipo swap é 82 (0x82).

Criação de Sistemas de Arquivos: Durante muito tempo o sistema de ar-quivos mais utilizado no Linux foi o Ext2 (second extended). No entanto, hoje são muito usados sistemas de arquivos com journalling, como o Ext3 e o ReiserFS. Ext2 e Ext3 utilizam blocos de 1024 bytes. Há três tipos de blocos: ➧ Superblocks: Repetem-se a cada 8193

blocos. Contêm informações sobre o tamanho dos blocos, inodes livres, data da última montagem etc.

➧ inodes: Indicadores para os blocos de dados. Os 12 primeiros blocos de dados após o inode são acessa-dos seqüencialmente. Se os dados excederem 12 blocos, blocos inode indiretos agem como espelho. Cada inode tem 256 bytes e contém a in-formação de usuário, grupo, per-missões e data referente aos dados associados.

➧ Blocos de dados: Os blocos que contêm os arquivos e diretórios propriamente ditos.

A diferença para um sistema de arqui-vos com journalling é que um sistema com essa capacidade registra de antemão todas alterações que irá realizar no disco. Dessa forma, erros de gravação (normal-mente ocasionados por queda de energia ou desligamento incorreto) podem ser

http://supertuxbr.blogspot.com

Page 57: 27 - Desempenho_fev_2007

57

| TUTORIALLPI 103-104

Linux Magazine #27 | Fevereiro de 2007

mais facilmente diagnosticados e sanados. É possível fazer a conversão de Ext2 para Ext3 sem perda de dados.

O comando mkfs cria sistemas de ar-quivos em partições. A opção -t indica o tipo do sistema de arquivos. Para criar uma partição Ext2 na partição /dev/hda3, usa-se mkfs -t Ext2 /dev/hda3. Há tam-bém comandos específicos para cada sistema de arquivos: mkfs.ext2, mke2fs, mkfs.ext3, mkfs.xfs, mkreiserfs, mkdosfs e mkfs.vfat.

Partição Swap: Após a partição swap ser criada pelo fdisk, ela precisa ser forma-tada com o comando mkswap. Por exem-plo, mkswap /dev/hda2. Após ser criada e formatada, uma partição swap precisa ser ativada para ser usada como memó-ria swap. O comando swapon -a ativa todas as partições swap que constarem em /etc/fstab. As entradas referentes a partições swap em /etc/fstab não têm ponto de montagem.

Exemplo de entrada de partição swap em /etc/fstab:

/dev/hda2 swap swap defaults 0 0

Normalmente, todas as partições swap contidas em /etc/fstab são ativadas pelos scripts de inicialização do sistema. Para ativar ou desativar essa partição manual-mente, usa-se swapon /dev/hda2 e swapoff /dev/hda2, respectivamente. Informações sobre partições swap ativas são armaze-nadas em /proc/swaps.

Objetivo 1.104.2: Manutenção da integridade de sistemas de arquivos

Checando o sistema de arquivosO comando fsck deve ser executado em partições que apresentarem erros ou em dispositivos que foram desligados incorretamente. A partição deverá estar desmontada ou montada como somente-leitura (ro) para a verificação.

Como o comando mkfs, o fsck possui a op-ção -t para especificar o tipo do sistema de arqui-vos, e um comando espe-cífico para cada partição: fsck.ext2 ou e2fsck, fsck.ext3, fsck.xfs, reiserfsck e dosfsck.

Examinando e corrigindo o sistema de arquivosdebugfs: Depurador in-

terativo de sistemas de arquivos. Examina sistemas Ext2 e Ext3. Muda diretórios, examina dados de inodes, apaga arquivos, cria links, mostra o log de journalling Ext3 etc. É usado em casos extremos, geralmente após o fsck ter falhado.

dumpe2fs: Mostra informações de grupo de blocos e de superblocos.

tune2fs: Configura parâmetros ajustá-veis em sistemas de arquivos Ext2, como rótulo e limites de montagem antes de checar automaticamente.

Uso do discodf: Mostra o espaço disponível em cada dispositivo. A análise é feita diretamen-te no dispositivo. Por padrão, mostra o espaço em unidades de 1 KB. A opção -h usa medidas apropriadas para tornar a saída mais inteligível.

du: Mostra o espaço ocupado. Sem argumentos, mostra o uso de cada dire-tório no sistema. Um diretório específico pode ser indicado através da opção -s. A opção -h usa medidas apropriadas para tornar a saída mais inteligível.

Objetivo 1.104.3: Controle da montagem e desmontagem dos sistemas de arquivos

/etc/fstabDurante os procedimentos de carregamento do sistema, é o arquivo /etc/fstab que deter-mina os pontos de montagem dos dispositivos. Cada linha corresponde a um dispositivo. Cada linha contém os seguintes termos se-parados por tabulações ou espaços: ➧ Dispositivo ➧ Ponto de montagem (swap se for uma

partição de swap) ➧ Tipo de sistema de arquivos ➧ Opções ➧ Dump (0 ou 1). Determina se o

dispositivo deverá ser considerado pelo comando dump. Se ausente, 0 é considerado.

➧ fsck (1 ou 2). Determina a ordem da checagem feita pelo fsck durante a inicialização. Para a partição raiz, deve ser 1. Se ausente, 0 é presumido e a checagem não é feita no boot.

Para permitir que usuários comuns mon-tem e desmontem dispositivos – geralmente, o caso de dispositivos removíveis –, deve-se incluir a opção users para o respectivo dispositivo. O termo auto na posição refe-rente ao sistema de arquivos indica que o sistema de arquivos deve ser identificado automaticamente. Para mais opções do arquivo /exc/fstab veja a tabela 5.

mountO comando mount usado sem argumentos mostra os dispositivos montados e outros detalhes, como ponto de montagem e tipo do sistema de arquivos. Também é usado para montar dispositivos ma-nualmente.

Para montar manualmente um dis-positivo que conste em /etc/fstab, basta fornecer para o comando mount a loca-lização do dispositivo ou do diretório alvo. Para desmontar um dispositivo, o comando umount é utilizado, tendo como argumento o dispositivo ou o diretório alvo a ser desmontado. Usado com a op-ção -a, mount monta todos os dispositivos em /etc/fstab (exceto os marcados com a opção noauto).

Opções de montagemAs opções de montagem são as mesmas para /etc/fstab e para mount. Se mais de uma opção for fornecida, deverão ser separadas por vírgula.

Objetivo 1.104.4: Administração de cotas de disco

Para habilitar o controle de cotas de disco, é necessário que o kernel suporte essa função, e incluir a opção usrquota ou grpquota em /etc/fstab. Para que a opção recém-adicionada tenha efeito, é necessário remontar o dispositivo.

Para gerar a tabela de estatísticas de uso do sistema de arquivos, deve-se executar o quotacheck -a, o que é normalmente feito pelos scripts de inicialização.

Para criar as configurações de cota para usuários e grupos, usa-se o comando edquota. A opção -u altera as configurações de cota para o usuário especificado, da mesma for-ma que -g altera para o grupo especificado. O editor padrão do sistema (geralmente o vi) é usado para essa tarefa.

Tabela 4: Comandos do fdisk

Comando Efeito

p Lista as partições

n Cria uma nova partição interativamente

t Muda a identificação da partição

d Apaga uma partição

q Sai do fdisk sem gravar as alterações

w Sai do fdisk e grava as alterações

m Mostra a ajuda de comandos

http://supertuxbr.blogspot.com

Page 58: 27 - Desempenho_fev_2007

58 http://www.linuxmagazine.com.br

TUTORIAL | LPI 103-104

Essas configurações são armazenadas no diretório alvo onde a partição em ques-tão foi montada, nos arquivos aquota.user e aquota.group. Nesses arquivos é possível especificar limites como espaço e inodes para o usuário ou grupo.

Para que as cotas passem a ser moni-toradas e controladas, deve-se executar o comando quota -a. Assim, os limites para cada usuário serão comparados à tabela de estatísticas de cotas, até que um dos limites seja alcançado e o usuário não disponha de mais espaço.

É possível também estabelecer um período em que o usuário será avisado de que seu limite foi alcançado, através do comando edquota com a opção -ta, de uma maneira semelhante à forma de configurar os limites.

Para que o usuário acompanhe o status de sua cota, basta executar o co-mando quota sem argumentos. O superu-suário pode gerar relatórios de cota dos sistemas de arquivos com o comando repquota -a.

Objetivo 1.104.5: Controle de permissões e acesso a arquivos

Há três níveis de permissão para arquivos e diretórios: usuário dono do arquivo (u), grupo dono do arquivo (g) e outros (o).

Exemplo de permissões de arquivos:

$ ls -l /etc/X11/xdm/total 80-rwxr-xr-x 1 root root 385 2006-01-14 ➥17:30 GiveConsole-rwxr-xr-x 1 root root 244 2006-01-14 ➥17:30 TakeConsole-r--r--r-- 1 root root 3618 2006-01-14 ➥17:30 Xaccess-rwxr-xr-x 1 root root 191 2006-01-14 ➥17:30 Xreset-r--r--r-- 1 root root 2559 2006-01-14 ➥17:30 Xresources-r--r--r-- 1 root root 487 2005-09-12

➥02:56 Xservers(...)lrwxrwxrwx 1 root root 20 2006-03-19 ➥09:36 authdir -> ../../../var/lib/xdm-rwxr-xr-x 1 root root 14696 2006-01-14 ➥17:35 chooserdrwxr-xr-x 2 root root 104 2006-01-14 ➥17:30 pixmaps-r--r--r-- 1 root root 1533 2006-01-14 ➥17:30 xdm-config

A primeira letra representa o tipo do arquivo, podendo ser:

➧ d: diretório ➧ l: link simbólico ➧ c: dispositivo especial de caracteres ➧ p: canal fifo ➧ s: socket ➧ -: arquivo convencional

As demais letras são divididas em grupos de três, determinando as permissões para o dono do arquivo, o grupo do arquivo e demais usuários, respectivamente.

As permissões são alteradas com o comando chmod, podendo ser de leitura (r), escrita (w) e execução (x).

Exemplo: O grupo a que pertence o arquivo texto_simples terá apenas acesso de leitura ao mesmo, e para os demais usuários será retirada a permissão de leitura:

$ chmod g=r,o-r texto_simples

Incluir permissão de escrita para o grupo do arquivo texto_simples:

$ chmod g+w texto_simples

Apesar de possuírem o mesmo modelo de permissões, arquivos e diretórios reagem de maneiras diferentes. Em diretórios, a permissão r permite acessar o conteúdo do diretório, a permissão w permite criar arquivos dentro do diretório, e x permite listar o conteúdo do diretório.

Permissões OctaisPermissões podem ser manejadas mais eficientemente através de um formato numérico, chamado octal. O número octal consiste de uma seqüência de dí-gitos, cada um representando as permis-sões para o usuário, grupo e outros, nessa ordem. Veja a tabela 6 .

Assim, o comando chmod 0664 tex-to_simples mudará as permissões do arquivo texto_simples para -rw-rw-r--, ou seja, leitura e escrita para o usuário, leitura e escrita para o grupo e somente leitura para outros.

Para mudar recursivamente todos os arquivos dentro de um diretório especifi-cado, utiliza-se o chmod com a opção -R.

umaskO umask é o filtro de permissões para criação de arquivos. As permissões para novos arquivos criados são aplicadas cal-culando as permissões padrão do sistema (0666 para arquivos e 0777 para diretó-rios) menos as permissões umask.

umask, sem argumentos, mostra a más-cara atual de criação de arquivos. Para mudar, basta fornecer a nova máscara como argumento. Em sistemas onde os grupos iniciais dos usuários são particula-res, a máscara poderá ser 002, o que sub-

Tabela 5: Opções do arquivo /etc/fstab

Opção Efeito

rw ou ro Gravável ou somente leitura

noauto Não é montado automaticamente

users O dispositivo poderá ser montado e desmontado por usuários comuns

user Apenas quem montou terá permissão de desmontar

owner As permissões do dispositivo montado se adequarão ao usuário que o montou

usrquota Habilita o uso de cotas de disco para usuário

grpquota Habilita o uso de cotas de disco para grupo

remount Remonta um dispositivo montado com outras opções. Útil para re-montar um dispositivo como somente leitura, por exemplo

Tabela 6: Permissões octais e seus significados

Dígito Leitura (valor 4) Escrita (valor 2) Execução (valor 1)

0 – – –

1 – – sim

2 – sim –

3 – sim sim

4 sim – –

5 sim – sim

6 sim sim –

7 sim sim sim

http://supertuxbr.blogspot.com

Page 59: 27 - Desempenho_fev_2007

59

| TUTORIALLPI 103-104

Linux Magazine #27 | Fevereiro de 2007

trairá das permissões padrão do sistema a permissão 2 (w, escrita), na categoria outros (o). Dessa forma, os arquivos serão criados com as permissões 0664.

Em sistemas onde o grupo inicial de todos os usuários é o grupo users, a máscara poderá ser 0022, o que subtrairá das permissões padrão do sistema a per-missão 2 (w, escrita), nas categoria grupo (g) e outros (o). Dessa forma, os arquivos serão criados com as permissões 0644, li-mitando a permissão de escrita apenas ao usuário dono do arquivo.

suid e sgidTodos os processos são vinculados ao usuário que os iniciou. Dessa forma, um programa pode trabalhar com um arquivo apenas até onde as permissões desse arquivo permitem ao usuário. Al-gumas tarefas, no entanto, exigem que um usuário altere ou acesse arquivos aos quais não tem a permissão necessária. Por exemplo, alterar a própria senha exige que o arquivo /etc/passwd seja alterado e as permissões de /etc/passwd só permitem escrita ao usuário dono (root):

$ ls -l /etc/passwd-rw-r--r-- 1 root root 814 2006-03-15 ➥14:04 /etc/passwd

Para contornar essa condição, existe um bit de permissão especial chamado suid. Arquivos executáveis que possuam a permissão suid serão executados em nome do dono do arquivo, e não em nome de quem os executou. A permissão suid é representada pela letra s, no campo re-ferente ao dono do arquivo (u):

$ ls -l /usr/bin/passwd -rws--x--x 1 root bin 37880 2004-06-21 ➥16:20 /usr/bin/passwd

Exemplo: Incluir o modo suid em um arquivo executável:

$ chmod u+s meu_programa

De maneira semelhante, a permissão sgid atua em diretórios. A permissão sgid é uma permissão de grupo, portanto apa-rece no campo de permissões referente ao grupo.

Num diretório com a permissão sgid, todos os arquivos criados pertencerão ao grupo do diretório em questão, o que é especialmente útil em diretórios com o qual trabalham um grupo de usuários pertencentes ao mesmo grupo.

Quando habilitadas, as permissões suid e sgid fazem aparecer a letra s no lugar da letra x nas permissões de dono do arquivo e grupo do arquivo, respec-tivamente. Se a permissão de execução também existir, aparecerá a letra s em minúsculo. Se apenas as permissões suid e sgid existirem, aparecerá a letra S, em maiúsculo.

A permissão stickyO inconveniente em usar diretórios compartilhados é que um usuário po-deria apagar algum ou todo o conteúdo inadvertidamente. Para evitar que isso aconteça, existe o modo de permissão sticky, que impede que usuários apa-guem arquivos que não tenham sido criados por eles mesmos. É o caso do diretório /tmp:

$ ls -ld /tmpdrwxrwxrwt 21 root root 1312 2006-03-23 ➥22:51 /tmp

A letra t nas permissões para demais usuários demonstra o uso da permissão sticky. Se apenas a permissão sticky existir, aparecerá a letra T maiúscula.

Exemplo: Usar a permissão sticky no diretório comunitario:

$ chmod o+t comunitario/

Permissões especiais em formato octalComo as opções convencionais, as permissões especiais também podem ser manipuladas em formato octal (numérico). A permissão especial é o primeiro dos quatro dígitos da opção no formato octal. A tabela 7 detalha essa correspondência.

Objetivo 1.104.6: Modificar donos e grupos de arquivos

Para alterar dono e grupo de arquivos e diretórios, usa-se chown e chgrp. O pri-meiro argumento é um nome válido de usuário ou grupo, e o segundo é o arqui-vo ou diretório a ser alterado. Apenas o superusuário pode usar o comando chown, mas qualquer usuário pode usar chgrp em seus arquivos e diretórios.

Mudar dono de arquivo:

# chown luciano texto_simples

Mudar grupo de arquivo:

$ chgrp users texto_simples

Para alterar usuário e grupo simul-taneamente:

# chown luciano.users texto_simples

Tanto chown quanto chgrp possuem a opção -R, para alterar conteúdos de di-retórios recursivamente.

Objetivo 1.104.7: Criar e alterar links simbólicos e links físicos

Hardlinks (links físicos)Hardlinks são um ou mais nomes que um inode do sistema de arquivos pode ter. Todo arquivo criado é, necessariamente, um hardlink para seu inode correspon-dente. O mesmo só será apagado após seu último hardlink remanescente ser apagado e nenhum programa estar man-tendo o arquivo aberto. Novos hardlinks são criados usando o comando ln:

$ ln texto_simples outro_texto_simples

A opção -i do ls mostra o número dos inodes dos arquivos:

$ ls -i texto_simples outro_texto_simples

Tabela 7: Permissões especiais em formato octal

Dígito suid (valor 4) sgid (valor 2) sticky (valor 1)

0 – – –

1 – – sim

2 – sim –

3 – sim sim

4 sim – –

5 sim – sim

6 sim sim –

7 sim sim sim

http://supertuxbr.blogspot.com

Page 60: 27 - Desempenho_fev_2007

60 http://www.linuxmagazine.com.br

TUTORIAL | LPI 103-104

55412 outro_texto_simples 55412 texto_➥simples

Ambos texto_simples e outro_texto_sim-ples são hardlinks para o mesmo inode 55412. Hardlinks para o mesmo inode pos-suem mesma permissão, donos, tamanho e data, pois esses atributos são registrados diretamente nos inodes.

$ ls -l texto_simples-rw-r--r-- 2 luciano users 29 2006-01-01 ➥00:01 texto_simples

O número 2 na segunda coluna de informações demonstra que há dois hardlinks para o inode correspondente ao arquivo texto_simples.

Hardlinks só podem ser criados dentro de um mesmo sistema de arquivos. Não é possível criar hardlinks para diretórios. Os arquivos especiais . e .. são hardlinks para diretório criados exclusivamente pelo próprio sistema.

Softlinks (links simbólicos)Links simbólicos apontam para um ca-minho ou, mais especificamente, para um hardlink. Links simbólicos podem apontar para qualquer alvo, inclusive em sistemas de arquivos diferentes.

Para criar um link simbólico, usa-se ln com a opção -s.

$ ln -s texto_simples link_texto_simples

Detalhes do link:

$ ls -l mais_texto_simples lrwxrwxrwx 1 luciano users 13 2006-03-24 ➥05:11 mais_texto_simples -> texto_simples

Um link é indicado pela letra l no início das permissões, que nesse caso são sempre rwxrwxrwx. O tamanho do arquivo de link é exatamente a quantidade de bytes (caracteres) do caminho alvo. A seta ao lado do nome do link simbólico indica o caminho até o alvo. Um link simbólico para um caminho relativo será quebrado se o alvo ou o próprio link for movido. Um link simbólico para um caminho absoluto só será quebrado se o alvo for movido ou apagado. Para atualizar a informação de alvo de um link simbólico existente, recria-se o link com a opção -f.

Funções comuns para links simbólicos são indicar caminhos longos freqüente-mente usados, criar nomes mais simples para executáveis e nomes adicionais para bibliotecas de sistema.

Objetivo 1.104.8: Encontrar arquivos de sistema e conhecer sua localização correta

Hierarquia padrão de sistemas de arquivos (FHS)O FHS (do inglês Filesystem Hierarchy Stan-dard) é o padrão de diretórios base adotado pela maioria da distribuições Linux. Cada diretório serve a um propósito, sendo divi-didos entre os que devem existir na partição raiz (veja a tabela 8) e os que podem ser pontos de montagem para outras partições ou dispositivos (veja a tabela 9).

Encontrando arquivosAlém do find, é possível utilizar o locate para encontrar arquivos. Todo caminho de arquivo ou diretório contendo a ex-pressão fornecida como argumento será mostrado. A busca é significativamente mais rápida em relação ao find pois o locate realiza a busca em seu banco de dados – /var/lib/slocate/slocate.db – e não diretamente no disco. Esse banco de dados precisa ser regularmente atualiza-do através do comando updatedb, o que é

geralmente feito por um agendamento cron diário, mas que pode ser executado manualmente. O arquivo de configura-ção do updatedb é o /etc/updatedb.conf. Nele constam informações como quais diretórios e sistemas de arquivos ignorar na atualização do banco de dados.

which: Usado para retornar o caminho completo para o programa fornecido. Re-aliza a busca apenas nos diretórios defini-dos na variável de ambiente PATH.

whereis: Retorna os caminhos para o arquivo executável, código-fonte e página manual referente ao comando solicita-do, se houver.

Consideração sobre os tópicosOs tópicos 103 e 104 são alguns dos mais extensos. Justamente por isso, não espe-re perguntas muito detalhadas sobre os assuntos abordados. Porém, os temas atravessam outros tópicos, e na prova haverá várias perguntas a respeito. Tenha certeza de conhecer o propósito de cada comando e suas principais opções. Além de perguntas práticas, serão feitas algumas perguntas conceituais, principalmente sobre sistemas de arquivos. ■

Tabela 8: Diretórios que residem obrigatoriamente na partição raiz

Diretórios Conteúdo

/bin e /sbin Contêm os programas necessários para carre-gar o sistema e comandos especiais

/etc Arquivos de configuração específicos da máquina

/lib Bibliotecas compartilhadas pelos programas em /bin e /sbin e módulos do kernel

/mnt Pontos de montagem para outras partições ou dispositivos

/proc Armazena informações do kernel em tempo de execução

Tabela 9: Diretórios que podem ser pontos de montagem para outras partições e dispositivos

Diretórios Conteúdo

/boot Kernel e mapas do sistema e os carregado-res de boot de segundo estágio

/home Os diretórios dos usuários

/root Diretório do superusuário

/tmp Arquivos temporários

/usr Programas, bibliotecas e documentos disponíveis no sistema

/usr/local e /opt Programas adicionais. Também podem conter as biblio-tecas necessárias para os programas adicionais

/var/www e /var/ftp Páginas HTML e diretórios para FTP anônimo

/var Dados de programas como configurações varian-tes e logs. Contém diretórios compartilhados (ex: /var/spool/mail) e não compartilhados (ex: /var/log)

http://supertuxbr.blogspot.com

Page 61: 27 - Desempenho_fev_2007

61

| TUTORIALIvman

Linux Magazine #27 | Fevereiro de 2007

TUTO

RIA

L

O hotplug costuma ser considera-do um recurso imprescindível, mas ao mesmo tempo bastante

incompatível com as idiossincrasias dos usuários. No entanto, construir sua própria solução com base nesses componentes pode ser mais fácil do que se imagina.

Este artigo busca demonstrar como se pode usar o Ivman, um manipulador genérico de eventos da camada de abs-tração de hardware (HAL), para criar uma solução de hotplug personalizada. A solução descrita neste artigo resolve um problema comum a usuários de computadores portáteis. Embora to-dos os computadores necessitem de backups regulares, um esquema de backup cíclico baseado no cron não é particularmente eficiente em laptops. Por exemplo, a bateria pode estar no fim no momento do início do backup, ou talvez o laptop esteja a quilômetros de distância do servidor, dispositivo de fita ou disco de backup.

Uma resposta melhor seria configurar seu computador para monitorar a conexão de um dispositivo USB e detectar auto-maticamente a presença do disco com a partição de backup. Assim que a partição estiver disponível, o computador a monta-rá em um ponto específico do sistema de arquivos. Um processo de backup assín-crono será iniciado em intervalos regula-res, procurando o ponto de montagem do backup antes de realizar qualquer outra tarefa. Se o disco não estiver presente, o processo simplesmente voltará a esperar sem incomodar o usuário.

Divulgue a notíciaQuando um disco é conectado, o controla-dor recebe um sinal e responde acionando uma interrupção. Se sua distribuição Linux utiliza o HAL [1], esse sistema recebe a interrupção e a converte em um evento que é propagado no D-Bus, o barramento de mensagens do sistema. Programas do espaço do usuário escutam esse barra-mento, capturam as mensagens enviadas a eles, e então acionam eventos, como a montagem de discos, por exemplo.

O ambiente Linux inclui diversas fer-ramentas que avaliam a informação como uma resposta a um evento de hotplug. No desktop Gnome, o Gnome Volume Mana-ger realiza essa função, enquanto o KDE utiliza seus Kioslaves. Além dessas duas soluções específicas para esses ambientes desktop, há abordagens independentes, como o Submnount e o Ivman [2].

Diferentemente do Submount, o Ivman roda no espaço do usuário, e pode ser utili-zado em paralelo com o KDE ou o Gnome. O Ivman é um gerenciador e montador automático de volumes que permite que se executem comandos arbitrários em resposta a eventos de hardware. Para as distribuições que não incluem o Ivman, é possível baixá-lo a partir da página do projeto [2].

Conforme as regrasO Ivman utiliza um conjunto de regras para associar condições a ações, investi-gando cada evento HAL para assegurar se uma condição está satisfeita. Em caso positivo, o Ivman ativa uma ação, que

pode variar desde um simples comando até um script complexo.

As regras podem empregar, em suas condições, qualquer informação conheci-da pelo HAL. O comando lshal fornece mais detalhes (figura 1).

O conjunto de regras é definido ma-joritariamente em dois arquivos de con-figuração: IvmConfigActions.xml define as ações a executar mediante a conexão de um novo dispositivo ou mídia. O arquivo IvmConfigProperties.xml contém as regras cujas condições baseiam-se nas propriedades dos dispositivos. Há também um arquivo de configuração intitulado IvmConfigBase.xml, com padrões gerais. Por exemplo, pode-se usar esse arquivo para especificar as IDs de grupo e usuário que o Ivman permitirá. Por último, as versões mais recentes do Ivman possuem um arquivo chamado IvmConfig-Conditions.xml, que define as condições que devem ser satisfeitas para que o programa execute uma ação específica. ➧

Hotplug personalizado com o Ivman

Conexão pessoalUm conhecimento mais profundo do sistema de hotplug do Linux abre as portas da inovação e automação. Veja como criar uma solução personalizada de backup para laptops.Jens-Christoph Brendel

Figura 1: O comando lshal mostra todos os dispositivos e propriedades registradas na camada de abstração de hardware (HAL).

http://supertuxbr.blogspot.com

Page 62: 27 - Desempenho_fev_2007

62

TUTO

RIA

L

http://www.linuxmagazine.com.br

TUTORIAL | Ivman

...e ação!Em nosso exemplo de backup, queremos que o sistema responda quando um disco rígido específico for conectado; portan-to, o IvmConfigActions.xml é o local certo para começarmos. A parte condicional de toda regra pode usar a chave ivm::Ma-tch para especificar uma propriedade do HAL e fornecer um valor que realize uma ação. Os comandos a seguir associam um ponto de montagem a um pendrive USB baseado no nome do modelo:

<!-- Montando um pendrive --><ivm:Match name=”hal.storage.model” ➥value=”TS64MJFLASHA”> <ivm:Option name=”exec” value=”mount ➥$hal.block.device$ /media/pendrive” /></ivm:Match>

Os cifrões indicam que o comando de montagem utilizará a propriedade block.device do HAL em vez do nome do dispositivo.

Entretanto, a partição de backup ne-cessita de uma propriedade mais espe-cífica. É possível utilizar a ID única de volume para detectar a partição. Também desejamos registrar os eventos de conexão e desconexão junto com o relatório do progresso do backup. Nem precisamos de um script para isso; apenas algumas linhas no arquivo de configuração de ações são suficientes (exemplo 1).

É claro que poderíamos iniciar o backup ao mesmo tempo, mas esse se-ria um evento relativamente raro. Em nosso caso, queremos que a máquina guarde “fotografias” normais do sistema de arquivos quando o disco de backup for conectado. Para permitir que isso ocorra, devemos permitir que o cron execute o script do exemplo 2 perio-dicamente para verificar se um disco está montado no ponto de montagem de backup. Em caso positivo, é neces-sário que este seja o disco correto para que a “fotografia” seja acionada. A saí-da é enviada para o mesmo arquivo de registro onde o status da montagem do disco é gravado (exemplo 3). Geraremos uma “fotografia” usando a já tradicional ferramenta rsnapshot, que economiza espaço copiando somente os arquivos

que tenham sido modificados. Também seria possível especificarmos um núme-ro máximo de “fotografias”, para que a primeira delas fosse sobrescrita quando esse número fosse atingido. Isso impe-diria o preenchimento total do disco, e também oferece uma série de “fotogra-fias” de diferentes datas. Para realizar a recuperação, só é necessário copiar de volta os arquivos.

ConclusõesEssa abordagem oferece um backup regular executado automaticamente, dependendo somente da conexão do disco; é flexível, e portanto reflete as necessidades da computação móvel. É

possível realizar quase qualquer ação com dispositivos arbitrários seguindo a mesma abordagem; por exemplo, é possível ini-ciar uma ferramenta de gerenciamento de arquivos musicais mediante a conexão de seu tocador de MP3, ou iniciar um visualizador de imagens ao se conectar uma câmera. ■

Exemplo 1: IvmConfigActions.xml (trecho)01 <!-- Montando o disco de backup -->02 <ivm:Match name=”hal.volume.uuid” value=”e86236bb-d107-41cd-b8b1”>03 <ivm:Option name=”exec” value=”echo ‘Conectando disco de backup: “`date` >> /var/log/backup.log” />04 <ivm:Option name=”exec” value=”mount $hal.block.device$ /media/backupdisk && echo ‘Disco de backup $hal.block.device$ montado

➥em /media/backupdisk’ >> /var/log/backup.log” />05 <ivm:Option name=”execun” value=”echo ‘Disco de backup desconectado: ‘ `date` >> /var/log/backup.log” />06 </ivm:Match>

Exemplo 2: Cronjob para uma “fotografia” de backup01 #!/bin/sh02 if [ `grep backupdisk /etc/mtab | wc -l` -gt 0 ]03 # Certo, encontramos o disco de backup04 then05 if [ -f /var/run/rsnapshot.pid ]06 # O rsnapshot já está em execução -> sair07 then exit 108 else09 # Vamos tirar uma foto10 echo -e “\n========================================\n” >> /var/log/backup.log11 echo “Iniciando a fotografia em `date`” >> /var/log/backup.log12 /usr/bin/rsnapshot hourly 2>&1 1>> /var/log/backup.log13 echo “Fotografia finalizada em `date`” >> /var/log/backup.log14 fi15 else16 # Disco de backup não está montado -> saor17 exit 118 fi

Exemplo 3: Trecho do arquivo de log01 Conectando disco de backup: Seg Dez 04 11:00:52 BRST 200602 Disco de backup /dev/sda2 montado em /media/backupdisk:03 Seg Dez 04 11:03:57 CEST 20060405 ==========================================================0607 Iniciando fotografia em Seg Dez 04 12:00:01 BRST 200608 echo 25958 > /var/run/rsnapshot.pid09 ...10 mkdir -m 0755 -p /media/backupdisk/hourly.0/11 /usr/bin/rsync -ax --delete --numeric-ids --relative --delete-excluded \12 --exclude=media/backupdisk \13 --link-dest=/media/backupdisk/hourly.1/localhost/ / \14 /media/backupdisk/hourly.0/localhost/15 ...16 rm -f /var/run/rsnapshot.pid17 Fotografia finalizada em Seg Dez 04 16:05:03 BRST 200618 ...

Mais Informações[1] HAL:

http://www.freedesktop.org/ wiki/Software_2fhal

[2] Ivman: http://ivman.sourceforge.net/

http://supertuxbr.blogspot.com

Page 63: 27 - Desempenho_fev_2007

Steph

en Lewis - w

ww

.sxc.hu

63

| SYSADMINPostal

Linux Magazine #27 | Fevereiro de 2007

SY

SA

DM

IN

Servidores de email têm que lidar com milhares de mensagens e se comunicar com outros servidores.

Ao mesmo tempo, tanto o SMTP (Simple Mail Transfer Protocol) quanto o formato da mensagem são extremamente diver-sifi cados. A tarefa do administrador em meio a esse cenário já é um tanto difícil. E fi ca ainda mais complicada quando o objetivo é a otimização – para isso, a ferramenta de benchmark Postal pode ser de grande ajuda.

Benchmarks de servidores de email ajudam a estabelecer uma linha basal que serve como ponto de partida ou re-ferência para melhorias futuras. Assim, pode-se controlar como uma alteração em um parâmetro infl uencia o desempe-nho. O conceito de benchmark pode ser descrito como valor de referência, teste de desempenho ou teste comparativo.

As exigências sobre servidores de email e, portanto, também sobre as técnicas de medição, diferenciam-se de acordo com a área de aplicação. O servidor pode, por exemplo, servir como relay, traba-lhar como servidor de comunicação e groupware, com caixas de email locais, ou ser simultaneamente um antivírus e um fi ltro de spam. Dependendo do cenário, muda também sua posição na rede; às vezes o servidor funciona como gateway de email no acesso à Internet (fi gura 1), outras como servidor da rede interna de uma empresa, ou atrás de um balanceador de carga. Tudo isso deve ser levado em consideração pela ferramenta de benchmark.

Construção do laboratórioÉ relativamente fácil determinar a base do funcionamento de um servidor através da função de sua função de relatório. O mais difícil é estabelecer ambientes genéricos de testes que façam sentido para analisar diferentes servidores de email sob condições de laboratório. A fi gura 2 mostra a topologia típica para medições em laboratório. Uma potente rede gigabit unindo servidor e clien-tes, o servidor de emails, um cliente com a aplicação de benchmark Postal e um des-tinatário de email. Na verdade, os tempos de resposta dos serviços de diretório têm grande infl uência no desempenho (LDAP, DNS ou Active Directory). Sob condições de laboratório, a confi guração do servidor de emails elimina essas interferências.

Gerador de cargaConfi gurado de maneira apropriada, o Postal simula todas as tarefas com as quais o servidor tem que lidar. Suas quantidades e características dependem de sua posição e tarefas na rede (fi gura 1). Na simulação de um relay, é necesário além disso um segundo servidor de emails, que coleta e junta emails indiscriminadamente. O Sendmail e o Postfi x podem ser confi gu-rados sem muito esforço para exercerem a função de Mail Sink. Isso é feito ainda mais facilmente com o script em Perl de Thomas Aeby [1] do exemplo 1.

Sem Mail Sink, temos um teste sim-plifi cado, no qual o cliente envia apenas

cabeçalhos de emails e fecha a conexão antes que chegue o corpo da mensagem. A maioria dos servidores de email avaliam imediatamente o cabeçalho da mensa-gem, por isso esse passo é incorporado ainda na medição. Essa técnica também é indicada para testar balanceadores de carga, pois fi ca rapidamente evidente o algoritmo usado para dividir a carga so-bre o servidor.

Pode ser surpreendente que um sim-ples PC cliente baste para medir os li-mites de capacidade de um servidor de emails bem confi gurado. Mas criar um email preenchido com uma salada de letras e enviá-lo não custa nem tempo computacional, nem acesso ao disco rígido. Somente a placa de rede deve ser corretamente dimensionada para a tarefa. É bem diferente do processamento das mensagens que chegam ao servidor – que precisa se entender com todos os formatos e codifi cações possíveis.

A infl uência do Mail Sink também é pequena – ele precisa apenas per-manecer idêntico para todos os relays a serem comparados. Um bom relay também trabalha rápido mesmo que o

Na pista dos gargalos com o benchmark de servidor de email Postal

Avaliação postalSe o servidor de email está muito lento, os usuários fi cam revoltados. Mas quem quer otimizar o servidor precisa de medições confi áveis da velocidade do MTA. Para produzir a carga necessária e compilar os resultados, contamos com a ajuda do programa de benchmark Postal.por Jörg Fritsch

Figura 1: Um servidor de relay de emails na DMZ precisa lidar com muitas conexões independentes que vêm de fora, com sobreposição no tempo. Então, ele transfere os emails para o servidor interno.

Relay internona DMZ

Servidor interno de emails ou groupware, na intranet

Servidores remotos na Internet

http://supertuxbr.blogspot.com

Page 64: 27 - Desempenho_fev_2007

64 http://www.linuxmagazine.com.br

SYSADMIN | Postal

servidor alvo esteja lento, pois o relay armazena em buffer os emails que se encontram em filas de espera (queues). Uma comparação entre servidores de email igualmente lentos e um mail sink rápido e outro lento permitem tirar algumas conclusões da velocidade da fila de mensagens. Ela pode depender, por exemplo, do sistema de arquivos ou dos volumes NFS montados.

Os processos de escrita nos relays são regulados pela disponibilidade e veloci-dade do servidor alvo. No entanto, seu comportamento de escrita se diferencia claramente de servidores com caixas de mensagem locais: enquanto um relay tem muitos acessos de escrita e apagamento, os servidores com caixas de emails locais têm alta ocorrência de operações de escrita que inserem emails em um arquivo Mbox (eventualmente muito grande).

Suíte PostalA suíte de benchmarks Postal é cons-tituída de três programas de linha de comando: postal, postal-list e rabid. O primeiro é responsável pelo ben-chmark de SMTP; enquanto postal-list testa como o Postal expande seu arquivo de semente para o tempo de execução, e o rabid é indicado para testar os servidores POP3 e IMAP, ou então revisar os emails gravados no disco rígido (veja o quadro 1).

Para produzir uma carga realista para o servidor de emails, o Postal necessi-ta de milhares de endereços de email. Começa-se com um arquivo semente que é preenchido com endereços de email. A página de manual descreve esse arquivo como User List. Caso seu tamanho não seja suficiente, um ge-rador aleatório se encarrega do resto.

Exemplo 1: Mail Sink01 #!/usr/bin/perl0203 use Net::SMTP::Server;04 use Net::SMTP::Server::Client;05 use Getopt::Long;06 use strict;0708 my $porta = 25; # Porta padrão do servidor09 my $endereco = “localhost”; # Por padrão, vincular-se somente ao localhost10 GetOptions (“p=i” => \$port, “b=s” => \$endereco)11 || die “Modo de uso: $0 [-p porta] [-b endereco de escuta]”;1213 print “configurando o servidor para escutar na porta $endereco:$porta\n”;14 my $servidor = new Net::SMTP::Server($endereco, $porta)15 || die “Cannot setup server: $!”;1617 while(my $conexao = $servidor->accept()) {18 # Recebemos uma conexao de entrada.19 # Vamos criar um processo-filho para cuidar dela.20 next if( fork() > 0 );21 my $cliente = new Net::SMTP::Server::Client($conexao)22 || die “Nao consegui lidar com a conexao do cliente: $!”;23 # Conversar com o cliente24 $cliente->process25 || die “O cliente nao mandou email para ca”;26 # Registrar a informacao e terminar27 system(“logger”, “-s”, “-p”, “local1.notice”, “-t”, “mailsink”,28 “recebi mensagem de “.($cliente->{“FROM”}).29 “ para “.join(“,”,@{$cliente->{“TO”}}).30 “, tamanho: “.length($cliente->{“MSG”}).” bytes” );31 exit(0);32 }

Figura 2: No teste de laboratório, um cliente do Postal (que simula o remetente dos emails), o servidor de emails e um destinatário (o alvo das mensagens transmiti-das) estão ligados por um switch.

Switch

Mail SinkServidor de emailsCliente do Postal

Saída do Postal01 $ postal -p200 -c 4 10.0.0.110 ./postal-user -02 time,messages,data(K),errors,connections,SSL connections03 21:31,6869,37177,0,2929,004 21:32,7241,38282,1,2913,005 21:33,7095,37838,0,2836,006 21:34,6390,34206,10,2559,007 21:35,7458,39774,0,2974,008 21:36,7353,39646,0,2911,009 21:37,7433,39269,0,2976,0

Quadro 1: RabidEnquanto o Postal envia emails via SMTP, o Rabid os apanha do servidor POP. O pro-grama compreende muitos dos parâmetros conhecidos do Postal: -p define o número de conexões simultâneas, e -c as mensagens chamadas por conexão. Os parâmetros -r, -l, -a, -s e -z também deram o mesmo significa-do para o Postal conforme a tabela 1. O Rabid utiliza da mesma forma o arquivo semente citado no texto. Como o POP precisa de uma autenticação de usuário, o arquivo contém também, depois de cada nome de usuário, uma senha (separada por espaços em branco). No entanto, o arquivo de conversão expande apenas o nome de usuário e ignora as senhas.

A escolha da combinação adequada de -p e -c depende do comportamento esperado do usuário: quantos são eles, com que freqüên-cia acessam suas caixas de mensagens, e quantos emails existem na caixa. Porém, na vida real é bem mais difícil encontrar valo-res significativos de carga de um servidor POP do que com o Rabid. Enquanto sabe-mos que um tamanho médio de 10 KB para os emails que chegam é comum, não há um valor real correto para o tamanho médio de preenchimento de uma caixa de emails POP.

O Rabid também traz algumas opções pró-prias; por exemplo, -d define quantos emails o programa baixa do servidor de emails e quantos ele deve apagar do servidor. Por pa-drão estão configurados 100%. Além disso, o software verifica, em todos os emails baixa-dos, se a soma MD5 que o Postal inseriu em cada mensagem ainda combina com o conte-údo da mensagem. Com isso, a comparação com o benchmark puro também é interes-sante para eliminar problemas no servidor.

Erros ocultosComparado com o Postal, o Rabid realmente ainda parece não estar maduro. A tentativa de requerer uma parte de 10% das conexões IMAP do servidor com a opção -i falhou nos testes deste artigo. Entretanto, a opção -i é descrita na página de manual, e não provocou nenhuma mensagem de erro na sua chama-da. No entanto, ao final da página de manu-al, esconde-se o aviso de que a ferramenta até o momento não suporta SSL nem IMAP.

http://supertuxbr.blogspot.com

Page 65: 27 - Desempenho_fev_2007

65

| SYSADMINPostal

Linux Magazine #27 | Fevereiro de 2007

Todavia, os endereços não devem ser totalmente aleatórios, mas seguir de-terminadas regras. Eles são definidos pelo responsável pelo teste através de expressões regulares no arquivo de conversão, e depois são expandidos pelo Postal para endereços de desti-natários correspondentes.

Bem alimentadoO arquivo semente pode conter simples nomes de usuários ou endereços de email completos (com nomes de domínio). O Postal insere diretamente o conteúdo de um arquivo semente no endereço do des-tinatário, ou utiliza as regras de expansão descritas no arquivo de conversão:

^f .[0-9abc][xyz][ghjjhjlk089765]

Essas linhas consistem de uma expres-são regular (^f, no caso) e uma instrução de conversão. O Postal procura no arquivo semente um endereço de email ao acaso que coincida com a expressão regular – no caso, que comece com o caractere f. Como a instrução começa por um ponto, o primei-ro caractere permanece inalterado. Depois seguem-se três instruções entre chaves, que substituem a segunda, terceira e quarta letras do endereço por uma letra da lista.

Com a regra configurada acima, exis-tem 13 * 3 * 14 = 546 expansões possíveis para cada endereço de email do arqui-vo semente começando por f. Todos os outros endereços ignoram essa etapa de conversão. O comando postal-list arquivo-semente arquivo-conversao mostra todas as expansões. Um simples | wc -l à direita conta o total de endereços possíveis.

Modelo adequadoTanto o modelo quanto a semente precisam ser adaptados ao tamanho da empresa. Para se testar um servidor de email que serve como relay ou como servidor groupware a 35 mil funcionários, um padrão que expanda apenas para 500 endereços de email não será de grande ajuda. Da mesma forma, uma pequena copiadora com 80 funcio-nários não precisa de um arquivo semente que forneça 20.000 endereços.

Na linha do assunto e no conteúdo da mensagem, o Postal dá bem menos trabalho e os preenche com uma salada de letras aleatórias. Para se utilizar caixas de mensagens de destinatários reais para fins de teste, deve-se identificar nelas as mensagens criadas pelo Postal através do cabeçalho adicional X-Postal, o que pos-sibilita separá-las automaticamente.

Muito a ser feitoAntes de se iniciar o Postal, deve ser escla-recido o que queremos testar ou simular: um relay de email, um servidor groupware, ou algum outro cenário. Com isso, defini-remos quais parâmetros do Postal são mais importantes (tabela 1). O parâmetro Set

define, por exemplo, o número de com-putadores clientes simulados que estão li-gados ao servidor de emails. Em servidores groupware, antivírus ou filtros de spam na LAN, há no máximo de um a dois clientes. O parâmetro -p (processos paralelos do Postal) deve utilizar, nesse caso, um valor pequeno, enquanto -c (emails por cone-xão) deve vir acompanhado de um valor alto. Em relays de email e provedores de serviços, o valor exato depende do tamanho do provedor. Todavia, em ambos esses casos, -p será grande e -c, pequeno.

Junto com os valores de -c e -p, o Postal descobre, na inicialização, quais arquivos semente e de conversão são de-sejados por quem os chamou:

postal -c mensagem -p processos arquivo_➥semente arquivo_de_conversão > arquivo_de_➥saída

Caso não se deseje utilizar um arquivo de conversão, sendo satisfatório apenas ter o arquivo com a lista de sementes, deve-se colocar um simples sinal de menos (-) na lista de parâmetros. Normalmente o parâmetro -m também é útil, pois define o tamanho máximo dos emails enviados. Seu valor padrão, 10 KB, é realista. O Postal envia emails de tamanhos aleatórios entre 0 KB e o tamanho fornecido em -m. Se for estimado que o servidor venha a receber muitos emails com grandes anexos, seria interessante aumentar o -m proporcional-mente. Muitos programas de elaboração de relatórios para servidores de email são capazes de mostrar graficamente o tama-nho médio dos emails recebidos.

Teste de duraçãoUma opção interessante para testes longos e para certificação de qualidade é o -r. Ele determina quantos emails por minuto no máximo o Postal pode enviar. Em serviços

Figura 3: Os resultados do Postal podem ser abertos em uma tabela de cálculo (aqui mostrada no Calc do BROffice.org), para representar o processo ao longo do tempo como curva (à direita), ou calcular valores médios (abaixo, à esquerda).

Quadro 2: Aceleração do TCPNo kernel Linux há muitas possibilidades de ajustar o desempenho da pilha TCP/IP às exigências dos aplicativos do servidor. Um meio realmente fácil é aumentar o buffer da interface: ifconfig eth0 tx-queuelen 1000. Opções mais complicadas estão disponíveis com o comando sysc-tl -w Variável=Valor, ou podem ser mais definidas de forma mais elegante no arquivo sysctl.conf. Em servidores que disponham de grande quantidade de me-mória, aconselha-se aumentar o tamanho máximo do buffer de envio e recebimento:

net.core.wmem_max = 16777216net.core.rmem_max = 16777216

Em operação, o Linux ajusta os tamanhos do buffer TCP de maneira independen-te. O administrador pode interferir até mesmo nesse automatismo e definir os números máximo e mínimo de bytes:

net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_rmem = 4096 65536 16777216

O mecanismo de início lento (slow start) do TCP (ssthresh) também afeta as conexões subseqüentes. Isso pode ser modificado para que o servidor, depois de um conges-tionamento de rede, possa voltar rapida-mente à velocidade máxima da conexão:

net.ipv4.tcp_no_metrics_save = 1

Quem quiser instalar placas de rede gigabit deve ainda aumentar o valor das cone-xões de backlog e inserir a linha net.core.netdev_max_backlog = 2500 ao sysctl.conf. Caso contrário, o Linux rapidamen-te começará a recusar pacotes recebidos, mas não terminados. Um bom valor de backlog para placas de 10 GB é 30.000.

Congestionamento no circuitoUm recurso muito específico disponível desde o kernel 2.6.13 é a possibilidade de se alterar o algoritmo de controle de con-gestionamento da rede (o que evita uma sobrecarga). Atualmente há oito opções de algoritmos. Alguns são otimizados para re-des de alta velocidade (net.ipv4.tcp_con-gestion_control=htcp), enquanto outros favorecem redes com altas taxas de perda de pacotes, como WLANs, por exemplo (net.ipv4.tcp_congestion_control=westwood).

http://supertuxbr.blogspot.com

Page 66: 27 - Desempenho_fev_2007

66 http://www.linuxmagazine.com.br

SYSADMIN | Postal

produtivos o Postal consegue em -r peque-nos observar o serviço sem maiores aborreci-mentos. O cliente pode rodar por algumas semanas com tranqüilidade. No resultado talvez apareça que todo dia no mesmo horário a performance cai. Se apenas nesse horário é rodado o backup das caixas de email do usuário, já encontramos a causa.

O Postal grava no arquivo de saída os valores capturados, em forma de uma lista CSV (Comma Separated Values), junto com todas as mensagens de erro encontradas. Erros de leitura são relati-vamente freqüentes. O exemplo 2 mostra um pequeno trecho de um teste, sem as mensagens de erro. A primeira coluna informa a hora (hora:minuto), depois são mostrados os números das mensagens enviadas com sucesso, o tamanho total de todos os emails nesse minuto em KB, o número de conexões, e finalmente a quantidade de conexões SSL.

Os textos de mensagens de erro men-cionados são bastante interessantes para se desvendar o motivo das causas; no entanto eles atrapalham a importação para o cálculo de tabelas. Essa importação é realmente prática para, por exemplo, reproduzir grafi-camente o percurso temporal da medição ou calcular um valor médio (figura 3).

Na maioria das vezes as capacidades no começo da medição se mostram muito altas, mas em seguida caem, para depois atingir um valor constante. Um dos motivos para isso é o hábito de o servidor de email manter suas filas o mais longe possível na memó-ria. Outra possibilidade seria o cache de

escrita do sistema de disco. Devido a esses fatores, o benchmark deve rodar durante várias horas caso se deseje que ele forneça um valor significativo ao final.

Evitando errosO interessante na avaliação é que o Postal gera erros não apenas como mensagens, mas também como taxa de erros por minuto (Error Rate). Um eventual erro de leitura é normal em servidores de email. É mais razoável ter como objetivo um serviço está-vel com menos erros e para isso viver com uma capacidade um pouco menor, do que acelerar o sistema a qualquer preço.

Em princípio, toda avaliação deveria começar verificando se cada servidor real-mente teve que lidar com emails compa-ráveis. Para isso, basta dividir a quantidade de dados em KB pelo número de emails. Se um servidor obtiver o resultado de 5,3 KB, e o outro, 8,8 KB, então os resultados não são comparáveis.

Lendo as pistasDurante a execução, o Postal deposita no diretório atual um arquivo de log cha-mado postal.log, com a soma MD5 de todos os emails enviados. O sentido desse arquivo não é totalmente claro: as somas de verificação também são enviadas nos emails. O Rabid baixa os emails do servi-dor por POP3 e verifica se eles chegaram sem dano, através de comparações das somas MD5 (veja o quadro 1).

Como os emails chegam pela rede, uma suposição bastante popular diz que a otimi-zação mais importante para um servidor de emails passa pela pilha de protocolo TCP (veja o quadro 2). Mas a prática mostra que a responsabilidade desse item sobre o de-sempenho da rede é desprezível quando comparada à influência do disco rígido e do sistema de arquivos. Um único disco SCSI atualmente pode escrever 200 MB, enquanto uma boa placa de rede gigabit otimizada lê múltiplas vezes mais da rede.

Servidores de email funcionam melhor com múltiplos discos SCSI pequenos, porém mais rápidos, e alguns poucos em RAID, do que com discos de grande capacidade. Conseqüentemente, a segunda situação é mais freqüente do que a primeira. Nos benchmarks verificados nos últimos doze meses na Linux Magazine, pudemos observar que muitos servidores de email comerciais tentam armazenar temporaria-mente todas as filas de emails na RAM, e utilizar o disco rígido quando a memória não é mais suficiente.

Meça você mesmoQuem quiser saber tudo sobre dicas de oti-mização para aplicar em seu próprio servidor provavelmente apreciará bastante o Postal. O programa gera uma carga de maneira se-gura, que torna as medições comparáveis e confiáveis. De posse dessas informações, o administrador pode então assumir os compro-missos certos quanto à otimização. ■

Tabela 1: Opções do Postal

Parâmetro Saída

-m n Tamanho máximo do email em KB. O Postal en-via emails de tamanho aleatório.

-p n Número de processos simultâneos do Postal. Como cada processo inicia uma conexão, esse parâme-tro (n) define o número de conexões simultâneas.

-c n Quantidade máxima de emails por conexão. O Postal envia ao acaso entre 1 e n mensagens em uma conexão. O valor -1 corresponde ao número máximo, e com ele o Postal envia até 4 milhões de emails.

-r n Limitação do número de emails por minuto. Por padrão o Postal tenta enviar 24.000 mensagens por minuto.

-s n Parte das conexões SSL em porcentagem (entre 0 e 100; por padrão, 0).

-l n m ... Endereços IP locais, ou seja, os endereços IP de onde partem as cone-xões ao Postal. Interessante em PCs clientes com vários endereços.

-b Modo de compatibilidade para servidores de email deficien-tes. Até o momento apenas o modo Netscape está implementa-do, que apaga espaços em branco no início da linha de assunto.

-a Ativa todas as funções de registro. Com isso, o Pos-tal grava nos logs todos os dados que receber.

-z e -Z Protocola toda a comunicação (em arquivos separados por thread e processo). Esse parâmetro é voltado principalmente à depuração.

Mais Informações[1] Thomas Aeby:

http://www.bigsister.ch

[2] Postal: http://www.coker.com.au/postal/

[3] Lawrence Berkeley National Laboratory, “Linux TCP Tuning”: http://dsd.lbl.gov/TCP-tuning/linux.html

[4] Jeremy Mates, “Sendmail Message Sink”: http://sial.org/howto/sendmail/discard

O autorJörg Fritsch estuda Química e trabalha na área de desenvolvimento de software e seguran-ça de TI. Desde 2003 ele é engenheiro de Segurança da Comuni-cação e Informação na agência NATO C3. Além disso é autor de inúmeros artigos técnicos sobre balance-amento de carga, TCP/IP e segurança.

http://supertuxbr.blogspot.com

Page 67: 27 - Desempenho_fev_2007

67

| SYSADMINNagios

Linux Magazine #27 | Fevereiro de 2007

SY

SA

DM

IN

A principal responsabilidade do ad-ministrador de sistemas reside na estabilidade dos serviços oferecidos.

Por isso, para garantir que nossos servi-ços estejam sempre no ar, utilizamos o auxílio de outros aplicativos – sejam eles uma rotina, script, uma tarefa agendada –, em geral destinados ao monitoramento dos ativos da rede corporativa.

Infelizmente, as próprias aplicações costumam apresentar eventuais instabi-lidades, como provavelmente muitos já sabem, encarregando o usuário de avisar o setor de TI a respeito da falha. Em redes sem ferramentas de monitoramento de ser-vidores e switches (como já presenciei no passado), isso pode ocorrer com frequên-cia. Para solucionar essa tarefa específi ca, o Nagios é altamente indicado.

Características básicasO Nagios tem como função principal o monitoramento de ativos da rede através de plugins que realizam a checagem de um serviço ou dispositivo.

Periodicamente, o programa verifi ca se o host está no ar, através de pacotes ICMP (o conhecido ping). O intervalo entre verifi cações pode ser ajustado de acordo com a necessidade do administra-dor. Quando o ping falha, o administrador percebe o erro ao acessar a interface web do Nagios. Além disso, o Nagios também pode trabalhar com outras formas de noti-fi cação, enviando emails aos responsáveis pelo serviço, por exemplo.

É possível monitorar também outros aspectos locais dos servidores, como discos rígidos, CPU, usuários logados, memória,

além de serviços e dados de rede, como portas e servidores DHCP, FTP, SSH, DNS e de banco de dados, entre outros. No caso da maioria dos serviços, existe a possibilidade de determinarmos um valor para alertas (Warning) ou advertências críticas (Critical). É possível estabelecer uma regra para, por exemplo, ao atingir 75% de uso de seus discos rígidos, o servidor enviar um alerta para o administrador; ao chegar a 85% de ocupação, enviar uma advertência crítica. Os valores para o en-vio de alertas são confi gurados de acordo com a necessidade e o ambiente. Nesse caso, também podem ser confi gurados para que o Nagios faça notifi cação por email em caso de problemas com servi-ços ou dispositivos.

O acesso ao Nagios via Web (fi gura 1) oferece diversas maneiras de visualização dos serviços e máquinas monitorados. Um frame da página mostra todas as formas possíveis de se confi gurar essa visualiza-ção. É possível separar as máquinas por grupos para facilitar a visualização e o monitoramento. Por exemplo, podemos criar um grupo para sistemas Windows®, outro para Linux e ainda mais um para os switches. Além de alertas visuais, podemos também habilitar alertas sonoros.

O Nagios também pode gerar um mapa gráfi co da rede, o que pode facili-tar imensamente a descoberta da fonte do problema. Esse mapa permite ao ad-ministrador uma visualização espacial mais precisa do parque de máquinas e seus respectivos serviços.

Além de todas essas funções apre-sentadas, o Nagios mantém um regis-tro de todos os alertas e notifi cações, e também gera relatórios. Nos arquivos de confi guração é possível determinar

por quanto tempo esses registros per-manecerão disponíveis.

Pontos positivosFerramenta efi caz em sua função, o Na-gios aumenta a produtividade dos admi-nistradores e analistas, já que monitora os ativos autonomamente. Ele ainda reduz o tempo de resposta em caso de problemas, pois os alertas são enviados imediatamente, possivelmente antes de prejudicar os usuários. Manutenção pre-ventiva é outra vantagem oferecida pelo programa, já que o programa também pode emitir alertas sobre condições an-teriores à falha dos serviços.

O Nagios também é bastante escalável. Ao ampliar o número de ativos e serviços rodando, ele nos permite também adicionar novos plugins de checagem ou até mesmo

Conheça a mais famosa ferramenta de monitoramento de redes

Sempre alertaO crescimento do número de servidores e serviços em uma rede pode levar o administrador à loucura. O Nagios é o software mais conhecido para monitoramento de redes, mas possui uma confi guração complexa. Veja como instalá-lo e confi gurá-lo apropriadamente.por João Carlos Gomes da Costa

Figura 1: O Nagios pode ser acessado via Web, mostrando ao administrador simultaneamente diversos aspectos das máquinas monitoradas.

Lars Sundström - www.sxc.hu

http://supertuxbr.blogspot.com

Page 68: 27 - Desempenho_fev_2007

68 http://www.linuxmagazine.com.br

SYSADMIN | Nagios

desenvolvermos os nossos. Infelizmente o desenvolvimento de um plugin para verifi-cação do Microsoft SQL Server, de minha autoria, foi descontinuado. Há diversos sites que publicam plugins prontos, mas é ne-cessário tomar cuidado, pois é possível que plugins baixados de fontes pouco confiáveis ajam diferentemente do prometido. Alguns sites, além de publicar o plugin compilado, disponibilizam também seu código-fonte, auxiliando a análise do mesmo.

Pontos negativosEm uma pesquisa com outros administra-dores de sistemas, concluí que o Nagios é bastante apreciado em geral. Em con-trapartida, seu processo de configuração foi considerado complexo pela maioria dos consultados. Realmente, o processo de configuração costuma ser um tanto árduo, até o administrador adquirir uma maior intimidade com o processo.

É comum enfrentar dificuldades especial-mente na configuração do Nagios Remote Plu-gin Executor (NRPE), um software acessório destinado justamente a checagens remotas. Por exemplo, o arquivo de configuração que utilizo possui mais de 3.000 linhas.

Mão na massaÉ interessante que a máquina a ser con-figurada já possua o Apache instalado, e também que já esteja pronta para o envio de emails, caso se deseje utilizar a notificação por esse meio.

Algumas distribuições, como Debian e Red Hat, possuem pacotes pré-compilados do Nagios. A versão atual do programa é a 2.6, com apenas pequenas diferenças em relação à 2.5. A maior mudança refere-se aos arquivos de configuração em que estão armazenadas determinadas seções. Todavia, a sintaxe dos parâmetros pratica-mente não sofreu alterações. Os passos para a instalação, indicados a seguir, são baseados na documentação oficial.

➧ Baixar o Nagios. Em [1], é possível baixar as versões 1.4 e 2.6 do software. É recomendável obter sempre a versão estável mais recente. No momento da publicação deste artigo, essa era a versão 2.6. Baixe também os plugins do Nagios e o NRPE.

➧ Compilação do programa. Primeira-mente, vamos descompactar o código-fonte e entrar no diretório criado:

# tar –zxvf nagios-2.6.tar.gz# cd nagios-2.6

Em seguida, vamos definir os parâmetros para a compilação e compilar o programa:

# ./configure –prefix=/usr/local/nagios# make all# make install

Por último, instalamos os arquivos de configuração e o script de inicialização:

# make install-config# make install-init

Compilado o Nagios, podemos fazer o mesmo com os plugins que baixamos:

# tar –zxvf nagios-plugins-1.x.x.tar.gz# cd nagios-plugins-1.x.x# ./configure –prefix=/usr/local/nagios# make# make check# make install

O último procedimento é a compilação e instalação do NRPE. Note que, diferen-temente dos anteriores, esse software não utiliza o comando make install:

# tar –zxvf nrpe-2.6.tar.gz# cd nrpe-2.6# ./configure# make all# cp src/nrpe /usr/local/nagios/bin# cp src/check_nrpe /usr/local/nagios/➥libexec# cp sample-config/nrpe.cfg /usr/local/➥nagios/etc

NRPE em açãoO NRPE é o responsável pela checagem remota do host. Dessa forma, temos que instalá-lo nas estações a serem monito-radas, junto com os plugins. Quando instalamos o NRPE, ele utiliza por pa-drão a porta TCP 5666, mas isso pode ser alterado pelo administrador.

O Nagios envia uma requisição do co-mando a ser monitorado para a porta 5666 da máquina monitorada. Esta, por sua vez, se encarrega de executar o comando soli-citado e retornar os valores necessários, in-formando a condição do serviço. É possível inclusive desenvolver seus próprios plugins, de acordo com suas necessidades.

Configuração do ApacheÉ preciso fazer a configuração do Apache para possibilitar o acesso à interface web do Nagios. Para isso, devemos editar o arquivo

de configuração do Apache, que varia de acordo com a distribuição. Se a configu-ração estiver segmentada em diversos ar-quivos, é importante verificar o local ideal para inserir os parâmetros a seguir:

ScriptAlias /nagios/cgi-bin /usr/local/➥nagios/sbin

<Directory “/usr/local/nagios/sbin”> Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName “Acesso ao Nagios” AuthType Basic AuthUserFile /usr/local/nagios/etc/.➥htaccess Require valid-user</Directory>

Alias /nagios /usr/local/nagios/share

<Directory “/usr/local/nagios/share”> Options None AllowOverride None Order allow,deny Allow from all AuthName “Acesso ao Nagios” AuthType Basic AuthUserFile /usr/local/nagios/etc/.➥htaccess Require valid-user</Directory>

Observações geraisOs comentários contidos nos arquivos de configuração, além da documentação, são importantes fontes de informação a respeito da configuração do Nagios. Procure explo-rar também outras formas de configuração, usando, por exemplo, o protocolo SNMP.

Um site que pode ajudar bastante na configuração do software encontra-se em [2]. Ele oferece plugins de checagem e exemplos de configuração do NRPE para máquinas Windows®. ■

O autorJoão Carlos Gomes da Costa ([email protected]) possui dois anos de expe-riência em infra-estrutura de redes e administra-ção de sistemas Linux e Microsoft, e atualmente é administrador de sistemas em um complexo hospitalar.

Mais Informações[1] Página do Nagios:

http://www.nagios.org

[2] Nagios Exchange: http://www.nagiosexchange.org/

http://supertuxbr.blogspot.com

Page 69: 27 - Desempenho_fev_2007

Peter E - www.sxc.hu

69

| PROGRAMAÇÃOÁrvores binárias

Linux Magazine #27 | Fevereiro de 2007

PR

OG

RA

MA

ÇÃ

O

O esquilo Sandy já não tem mais a juventude de antes. Não apenas os ossos lhe doem, como também

a boa memória de antes o abandonou. No ano passado, quando procurava sua noz preferida guardada do ano anterior, ele foi obrigado a vasculhar entre todos seus pertences. Assim como na vida real, a guloseima estava escondida entre os últimos itens do estoque.

Muitos programadores certamente se identificarão com o sofrimento de Sandy. Assim como o velho esquilo, eles arma-zenam seus dados desordenadamente na memória. Um vetor ou inteiro longo servem como depósitos de ponteiros para listas interligadas, como por exemplo:

typedef struct _elemento{ void *ponteiroparameusdados; struct_element *proximo;} elemento;

O ponteiro proximo sempre se refere ao elemento seguinte na lista. Se agora o programador estiver procurando um elemento armazenado ali, ele precisa

percorrer exaustivamente a complexa lista. Quanto mais elementos essa lista contiver, mais demorada será a busca – na pior das hipóteses, é preciso verificar cada um dos elementos. Se ainda inserir-mos essa busca ineficiente em um laço, o tempo de execução de nosso código se alongará insuportavelmente.

KernelO kernel Linux enfrenta problemas seme-lhantes com freqüência. Por isso, o sistema operacional necessita, por exemplo, saber quais regiões da memória já estão ocupadas. Ele poderia arquivar essas informações em uma lista encadeada como a que descrevemos. Nesse caso, se o kernel quisesse determinar se uma região de salvamento ainda está livre, ele teria que, em algumas situações, percorrer longas seqüências, sempre até o fim. Outro exemplo é oferecido pelo escalonador de E/S: assim que um programa precisa acessar o disco rígido, ele envia uma solicitação ao kernel do sistema operacional.

Lá, o escalonador de E/S assume outras atividades. De maneira simplificada, ele primeiro memoriza todas as solicitações entrantes em uma fila de espera, para depois finalmente colocá-las em uma seqüência mais organizada. Isso deve acelerar o acesso ao disco rígido. Quanto mais solicitações um programa apresentar, mais dados terão que ser administrados pelo escalonador. Aqui, uma lista sim-ples conseguiria prejudicar fortemente o desempenho de todo o sistema, e no-vamente devorar em parte a vantagem de aceleração.

Na árvoreComo o esquilo Sandy já está um pouco senil, mas ainda lúcido, ele vai imple-mentar um sistema de armazenagem inteligente em seu depósito ainda este

ano. Para isso, ele procurou uma bela árvore antiga com muitos galhos. Antes de guardar suas nozes ali, ele as mistu-ra ao acaso. A informática já teve essa idéia há algum tempo. Em comparação à árvore real de Sandy, aqui felizmente existem alguns espaços sobrando, e com isso algumas vantagens.

Ela consiste de uma raiz e muitas bi-furcações, chamadas “nós”, que podem acomodar quaisquer dados. As hastes de conexão são chamadas “arestas”. Os úl-timos nós da copa da árvore chamam-se, como os seus equivalente reais, “folhas”. Ao contrário da vida do esquilo, no mundo da informática as árvores ficam de cabe-ça para baixo, as raízes normalmente são desenhadas em cima e o caminho para as folhas se estende para baixo.

Árvore bináriaPara que fique tudo ainda mais fácil, nas próximas etapas cada nó deve exibir no máximo dois galhos, ou melhor, arestas. Em C, um nó como esse seria imple-mentado da seguinte forma:

typedef struct _no{ int data; struct _no *esquerda;

Salvar dados e reencontrá-los rapidamente: árvores Red-Black

Árvores coloridasO que os esquilos e o kernel Linux têm em comum? Ambos percorrem árvores para armazenar coisas e depois reencontrá-las. Mas nessa comparação o kernel Linux trabalha melhor – por exemplo ao lidar de maneira bem peculiar com árvores pintadas de duas cores.por Tim Schürmann

Figura 1: Um exemplo de árvore de busca que administra as nozes de Sandy. As chaves são os nomes dos tipos na parte superior de cada nó, enquanto o conteúdo relacionado está localizado no campo inferior.

Noz

AmendoimCastanha

Avelã

Figura 2: Uma busca pela chave 5 segue de acordo com este esquema: a busca se inicia na raiz da árvore binária. Como 5 é menor que 10, o próximo passo muda para o filho esquerdo. Aqui está o 3, que é menor que 5. Então a busca muda para o filho direito de 3, onde finalmente encontra-se o nó procurado.

http://supertuxbr.blogspot.com

Page 70: 27 - Desempenho_fev_2007

70 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | Árvores binárias

struct _no *direita; struct _no *pai;} no

Para simplificar as coisas, suponha-mos que os dados armazenados em um nó sejam números. É claro que em vez disso também é possível utilizarmos ou-tros tipos de dados, desde que possam ser comparados de alguma forma. Em linguagem matemática: existe uma or-ganização (parcial) para os nós.

Ambos os ponteiros apontam para o seu correspondente dos lados esquerdo e direito na seqüência de nós da árvore. Esses correspondentes se chamam filhos. Para depois tornar um pouco mais fácil a implementação dos algoritmos, a es-trutura também salva os nós anteriores, que conseqüentemente são chamados de pais. Os nós da raiz são reconhecidos por possuírem a variável pai com valor ZERO.

EtiquetasSandy se encontra agora diante de uma pe-quena porção de nozes. Por motivos óbvios, ele colocou cada porção cuidadosamente em um pequeno saco e os nomeou de acordo com o tipo de noz que continham. Assim, nenhuma noz vai se misturar (figura 1). Agora Sandy consegue chegar ao conteúdo pela descrição dos pacotes.

De forma semelhante ao mundo dos bancos de dados, a descrição dos sacos se chama chave. De forma geral, o usu-ário gostaria de encontrar o mais rápido possível o elemento que corresponde à chave. Enquanto Sandy procura um de-terminado tipo de noz, o kernel procura o layout correspondente para uma região de armazenagem.

Uma estrutura de dados que solucione essa tarefa é conhecida pelos programadores pelo nome de dicionário ou array associati-vo. Não basta mais, portanto, salvar apenas as nozes, ou seja, os dados, em um nó. Em vez disso, as chaves mencionadas também precisam ser depositadas lá. Os exemplos seguintes tornam essa compreensão mais fácil, e utilizam, em vez de tipos de noz, novamente números crescentes.

DistribuidorEm seguida, Sandy pensa sobre a melhor forma de distribuir os sacos de nozes pelos nós, para que a busca por um determinado tipo retorne o resultado sem o esquilo ter que escalar muito. Depois de refletir um pouco, lhe ocorre um sistema supostamente genial. Primeiro, ele fica parado próximo à raiz e olha para cima, o que corresponde a olhar para baixo na figura 1.

Agora ele pega um dos sacos e o coloca no primeiro nó. Finalmente, ele apanha todos os tipos de nozes que no alfabeto estão imediatamente antes daquele que acabou de ser estocado. Munido deles, ele se volta para a aresta esquerda, ou seja, a parte da árvore, e recomeça o jogo de outra forma. Por fim, ele repete o processo com o resto das nozes para a parte direita da árvore. Lá se encontram todas as nozes cujos nomes, no alfabeto, começam depois das nozes que se en-contram na raiz.

Comparação de chavesDe maneira geral, para qualquer nó da árvore, todas as chaves da parte esquerda são menores, e todas as chaves do lado

direito são maiores que a chave da raiz. A estrutura resultante é uma árvore de busca binária. Quem quiser reencontrar um elemento na árvore de busca deve iniciar pela raiz e olhar se a chave busca-da é maior ou menor que a armazenada ali. Se for menor, a busca muda para a seqüência à esquerda da raiz; do contrá-rio, para a direita. Isso dura até que seja encontrado um nó com a chave buscada, ou quando o nó não existir. Quando o nó correspondente é encontrado, signi-fica que ele contém os dados procurados (veja a figura 2).

Baixa profundidadeNa necessidade de se administrar um grande volume de objetos e ter que lo-calizá-los novamente da maneira mais rápida possível, esse tipo de árvore de busca binária é mais vantajosa em com-paração com uma simples lista. Obser-vando-se uma árvore com n nós, na qual cada nó tem exatamente dois filhos, um caminho vindo da raiz leva a uma fo-lha através de, no máximo, log2 n nós. A extensão desse caminho é chamada também de profundidade da árvore. Como se pode ver, mesmo no pior caso evita-se a necessidade de consultar todos os elementos armazenados.

Infelizmente, Sandy se deparou com um problema: ao colocar os montes de noz na seqüência crescente de nomes na árvore, ele obtêm uma lista muito longa. Então os nomes dos próximos tipos de noz sempre estão alfabeticamente após o que acabou de ser consultado. Conse-qüentemente, ele segue sempre para a direita. Não resta mais nada ao pequeno esquilo, a não ser prestar atenção à arru-mação das nozes e escolher uma distri-buição adequada para os nós.

Felizmente, para os programadores isso é um pouco mais fácil. Eles podem simplesmente cortar qualquer aresta e colar os nós em qualquer lugar da ár-vore novamente. Essa técnica permite que, depois da inserção de um novo elemento, se evite essa formação de ca-deia indesejada para, de alguma forma,

Figura 3: Exemplo de uma Árvore Red-Black. A raiz é sempre preta, enquanto os outros nós são vermelhos ou pretos.

Exemplo 1: Tio e irmão01 no* tio(no *n){02 if (n->pai == n->pai->pai->esquerdo) return n->pai->pai->direito;03 else return n->pai->pai->esquerdo;04 }05 no* irmao(no *n){06 if (n == n->pai->esquerdo) return n->pai->direito;07 else return n->pai->esquerdo;08 }

Figura 4: A relação de parentesco dos nós na representação gráfica. Todos os nós são parentes do nó “X”.

Avô

A

PPai

TTio

IIrmão

DFilho Direito

X

EFilho Esquerdo

http://supertuxbr.blogspot.com

Page 71: 27 - Desempenho_fev_2007

71

| PROGRAMAÇÃOÁrvores binárias

Linux Magazine #27 | Fevereiro de 2007

trazer a profundidade novamente para o valor log2 n.

Muitas pessoas já tentaram solucionar esse problema de otimização. Em 1972, finalmente o professor de informática Ru-dolf Bayer foi bem-sucedido. Ele coloriu cada nó de uma árvore de busca binária de preto ou vermelho. Os algoritmos de otimização elaborados devem manter es-sas marcações coloridas das arestas com o mesmo nível.

O resultado atualmente é conheci-do como árvore Red-Black (Red-Black Tree). Um nó dessa árvore em C tem a seguinte estrutura:

typedef struct _no{ int chave; void *dados; enum { vermelho, preto } cor; struct _no *esquerda; struct _no *direita; struct _no *pai;} no;

O escalonador de E/S no kernel Li-nux também recorre a diversas árvores red-black para as solicitações recebidas. Ele as utiliza como base para filas de es-pera especiais, nas quais, por exemplo, ele deposita cada solicitação de leitura que chega. As chaves podem ser, entre outras coisas, os setores requisitados do disco. Dessa maneira, o escalonador pode chegar a cada solicitação muito

mais rapidamente, beneficiando assim o processo de otimização.

As árvores red-black também são empregadas no gerenciamento de me-mória. Elas ajudam na verificação rápi-da de regiões da memória e, com isso, na administração de espaços virtuais de endereçamento. Graças à árvore de buscas, o kernel consegue determinar rapidamente quais áreas estão ocupadas (quando a busca na árvore red-black é bem-sucedida) e quais ainda estão livres (em buscas sem sucesso).

Antes que os próximos parágrafos possam fornecer uma visão exata dos algoritmos de inserção e eliminação de elementos, é necessário um pequeno aviso: a implementação é trabalhosa. Por isso, uma implementação só é vantajosa quando grandes volumes de dados precisam ser administrados e localizados novamente. Quem tiver apenas cinco elementos para administrar muito provavelmente fará o serviço mais rápido com uma árvore de busca binária convencional, pois evitará todo o esforço de administração.

RegulamentaçãoUma árvore red-black é uma árvore de busca binária na qual cada nó possui a cor vermelha ou preta. Além disso, exis-tem as seguintes condições: ➧ A raiz é sempre preta. ➧ As folhas da árvore são pretas e

vazias; elas não armaze-nam, portanto, nozes ou qualquer outra informa-ção. Elas apenas marcam o final da árvore. Em C, as folhas são imple-mentadas através de um ponteiro nulo (a esquerda ou, conforme o caso, a direita do pai contém o valor NULL), e presumem que esses nós nulos são pretos (figura 3).

➧ Um nó vermelho tem apenas filhos pretos.

➧ Para cada caminho que parte da raiz até uma folha, o número de nós pretos percorridos é sempre igual.

A figura 3 mostra o exemplo de uma árvore red-black. Ele preenche todos os quatro requisitos que logicamente também os algoritmos seguintes devem levar em consideração. A condição mais importante é a última. Ela faz com que a árvore não se degenere e não construa ramificações muito longas (o que também pode ser demonstrado de maneira formal). Antes de explicarmos sobre a inserção e exclusão de elementos, algumas corre-lações precisam ser esclarecidas. Depois de termos mencionado o relacionameto entre pai e filho, chegam agora o avô, o tio e o irmão. O avô é, como na vida real, o pai do pai (figura 4). No exemplo

1 podemos ver como são definidos o tio e o irmão de um nó.

Uma busca funciona exatamente as-sim, como na árvore de busca binária. Aqui as cores dos nós não têm nenhuma importância e podem ser ignoradas. Esse procedimento é mostrado pelo exemplo

2 em código C.No entanto, inserir um novo nó é mais

complicado. Primeiro procuramos um local apropriado para o novo elemento. Para isso, é indicado o algoritmo de bus-ca normal. Como o elemento ainda não está contido na árvore, ele acaba indo parar em uma folha. Agora produzimos

Figura 5: Inserção, caso 3: tio e pai são coloridos de preto, o avô de vermelho. A função de ordenação assegura que as condições das árvores red-black não serão infringidas.

A A

P PT T

N N

Figura 6: Inserção, caso 4: o novo nó N possui um pai vermelho e um tio preto. Caso ele esteja do lado esquerdo do pai, é necessária mais uma rotação direita no pai.

A A

P

P

T T

N

N

Exemplo 2: Busca01 no *busca(no *raiz, int chave)02 {03 // busca nos nós a chave “chave” na árvore de buscas com a raiz “raiz”0405 no *atual = raiz;06 while (atual != NULL)07 {08 if (chave < atual->chave) atual = atual->esquerda;09 else if (chave > atual->chave) atual = atual->direita;10 else if (atual->chave == chave) return atual;11 }12 return NULL;13 }

Figura 7: Uma rotação esquerda transforma a árvore da esquerda na da direita, uma rotação direita faz da árvore direita a representação daquela à esquerda.

http://supertuxbr.blogspot.com

Page 72: 27 - Desempenho_fev_2007

72 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | Árvores binárias

um novo nó e o anexamos como novo filho na folha encontrada. Ao final, ele recebe uma coloração vermelha. Porém, agora uma das quatro condições poderia ser ferida. Vale a pena, portanto, verificar se é o caso de conduzir ações específicas de acordo com a situação.

Caso a casoA verificação e, caso ne-cessário, o restabeleci-mento das condições, são assumidos pela função especial ordenar(), que recebe os nós transfe-ridos e realiza todas as correções necessárias. Para isso, a função pre-cisa escolher entre cinco casos possíveis:

➧ Primeiro caso: O novo nó é ao mes-mo tempo também a raiz. Como não há qualquer outro nó na árvore, certamente a raiz pode ser pintada de preto sem problemas.

➧ Segundo caso: O novo nó tem um pai preto. Como o próprio novo nó é vermelho, todas as condições são satisfeitas, de modo que o processo já pode ser interrompido.

➧ Terceiro caso: O novo nó tem um pai vermelho e um tio vermelho, e com isso fere a condição 4. Nesse caso, simplesmente colorimos de pre-to o tio e o pai, e o avô de vermelho. Com isso, o avô poderia ferir uma das condições. Conseqüentemente os teste no bisavô devem prosseguir, nos quais a função ordenar() é agora aplicada a ele (figura 5).

➧ Quarto caso: (figura 6). O novo nó tem um pai vermelho e um tio preto. Se, além disso, ele for o filho direito de seu pai, segue-se uma chamada rotação à esquerda no pai. A figu-

ra 7 mostra como isso funciona: a situação à esquerda é transportada para aquela à direita. Para isso, basta alterar o respectivo ponteiro do nó envolvido. Felizmente a rotação dispensa mais uma árvore de busca válida.

Caso o pai do novo nó seja o fi-lho da direita do avô, segue-se, ao contrário da situação anterior, uma rotação simétrica à direita. Na figura

7 isso corresponde à transferência da árvore da direita para a da esquerda. Independentemente da direção to-mada pela rotação, finalmente, na visão do pai, se apresenta o quinto e ao mesmo tempo último caso, que ainda deve ser verificado. O exemplo

3 mostra as funções para uma rotação para o nó n. ➧ Quinto caso: o novo nó tem um pai

vermelho e um tio preto. Se ele, além disso, é o filho esquerdo de seu pai, se-gue-se uma rotação direita para o avô,

Figura 8: Inserção, caso 5: o novo nó N possui pai e tio vermelhos. Caso ele se encontre à esquerda do pai, é necessária ainda uma rotação à direita no avô.

A

AP

P

T

TN

N

conforme a figura 8. Se, no entanto, o novo nó é o filho direito, segue-se em vez disso uma rotação esquerda. Finalmente trocamos as cores entre pai e avô. O exemplo 4 mostra o caso mais uma vez como código em C. O exemplo 5 mostra o algoritmo de inserção completo em C.

ExclusãoExcluir nós da árvore red-black é ainda mais complicado que inseri-los. Primeiro o já conhecido algoritmo de busca pro-cura pelo nó a ser eliminado. Quando encontrado, inicia-se novamente uma identificação do caso. O algoritmo com-pleto – implementado em C – pode ser encontrado em [1].

➧ Primeiro caso: quando o nó a ser excluído possui dois filhos não-va-zios, um sucessor deve ser definido. Ele pode ser o maior elemento na parte esquerda da árvore ou o me-nor elemento na parte direita da árvore (para entendidos de árvores: o sucessor EmOrdem). Agora o valor do sucessor deve ser transferido para o nó a ser eliminado. Com isso, o sucessor passa a ser irrelevante, e então pode ser excluído. Assim ele assume o papel do nó a ser excluí-do, para o qual os casos 2 e 3 ainda devem ser percorridos.

➧ Segundo caso: o nó a ser excluído possui duas folhas vazias como fi-lhos (esquerdo e direito são ponteiros nulos). Nesse caso nomeamos uma das folhas vazias como sucessor. A

Exemplo 3: Rotações01 void rotacaoesquerda(no *n) {02 no *x = n;03 no *y = x->direita;04 no *subarvore1 = x->esquerda;05 no *subarvore2 = y->esquerda;06 no *subarvore3 = y->direita;07 no *paidex = x->pai;0809 if(paidex != NULL) {10 if (n == paidex->esquerda) paidex->esquerda = y;11 else paidex->direita = y;12 }1314 y->pai = paidex;15 y->direita = subarvore3;16 y->esquerda = x;1718 x->pai = y;19 x->esquerda = subarvore1;20 x->direita = subarvore2;2122 if(subarvore1 != NULL) subarvore1->pai=x;23 if(subarvore2 != NULL) subarvore2->pai=x;24 if(subarvore3 != NULL) subarvore3->pai=y;25 }26 void rotacaodireita(no *n) {27 no *y = n;28 no *x = y->esquerda;29 no *subarvore1 = x->esquerda;30 no *subarvore2 = x->direita;31 no *subarvore3 = y->direita;32 no *paidey = y->pai;3334 if(paidey != NULL) {35 if(n == paidey->esquerda) paidey->esquerda = x;36 else paidey->direita = x;37 }3839 x->pai = paidey;40 x->esquerda = subarvore1;41 x->direita = y;4243 y->pai = x;44 y->esquerda = subarvore2;45 y->direita = subarvore3;4647 if(subarvore1 != NULL) subarvore1->pai = x;48 if(subarvore2 != NULL) subarvore2->pai = y;49 if(subarvore3 != NULL) subarvore3->pai = y;50 }

Figura 9: Exclusão, caso 3b: pai e irmão trocam de cor. Por fim, uma rotação direita restabelece a ordem.

P

PI

I

IE IEID

IDN

N

Figura 10: Exclusão, caso 3c. O irmão do novo nó é colorido de vermelho: como isso fere as condições da árvore red-black, inicia-se nele a função ordenar() mais uma vez.

P P

I I

IE IEID ID

N N

http://supertuxbr.blogspot.com

Page 73: 27 - Desempenho_fev_2007

| PROGRAMAÇÃOÁrvores binárias

outra folha está vazia de qualquer forma, e pode ser ignorada. Como isso se elimina o problema de ex-clusão do terceiro caso.

➧ Terceiro caso: O nó a ser excluído é exatamente o filho que não é um ponteiro nulo. Nesse caso, podemos primeiro tirar da árvore o nó a ser excluído e nomear o seu único filho como seu sucessor. Se o nó a ser ex-cluído for preto e o sucessor vermelho, a condição 3, provavelmente violada, pode ser satisfeita, e com isso simples-mente colorimos o sucessor de preto.

No entanto, nos seguintes casos, depois de tomada essa ação, outras condições da

árvore podem ser violadas (esses casos são apagados pela função auxiliar ordenar_ex-cluir()), nos exemplos on-line [1]: ➧ O sucessor é a nova raiz. Como ele

deve ser preto, não há mais nada a fazer.

➧ O novo irmão do sucessor é ver-melho. Nesse caso trocamos as co-res do pai e do irmão. Ao final, é realizada uma rotação à esquerda no pai, caso o sucessor seja o filho esquerdo de seu pai. Do contrário, segue-se uma rotação à direita (fi-

gura 9). Como resultado, a situação existente refere-se aos casos 3d, 3e ou 3f.

Figura 11: Exclusão, caso 3d (a variante fácil): basta o pai e o irmão trocarem a cor do nó a ser excluído.

P P

I I

IE IEID ID

N N

Figura 12: Exclusão, caso 3e. Um estado intermediário: no começo há a troca de cores entre irmão e filho direito. Depois de uma rotação à esquerda ou à direita, ocorre o caso 3f.

P P

I

IE

IE

IE

ID

NN

F

➧ O pai, o irmão e o filho do irmão são pretos. Nesse caso, o irmão re-cebe a cor vermelha, violando a condição 3 em relação ao pai. Para ele, a determinação do caso deve ser conduzida novamente com or-denar_excluir() (figura 10).

➧ O pai é vermelho, porém o irmão e o filho do irmão são pretos. Então basta trocar as cores entre o irmão e o pai (figura 11).

➧ O irmão e seu filho esquerdo são pre-tos, enquanto o filho direito do irmão é vermelho; e o próprio sucessor é o filho de seu pai. Primeiro trocamos as cores entre o irmão e seu filho direito.

Transforme 1PC em até 10 PCs simples de usar, flexível e de baixo custo.

~

Administra seus computadores de acesso público com simplicidade e segurança. São mais de 30 aplicações e centenas de recursos de gerenciamento centralizado como: filtros de navegação na Internet, controle de tempo, protetor de privacidade e uma ampla seleção de softwares, incluindo uma suíte de escritório completa, gravação de CD's, firewall, anti-vírus entre outros.

Essa moderna ferramenta vem integrada com o sistema Desktop Multiplier, ou seja, com um PC é possível criar até 10 estações independentes, uma por cada licença de uso, reduzindo ainda mais o seu gasto com investimentos.

O Desktop Multiplier, Desktop Server e DiscoverStation formam um time campeão em usabilidade, recursos e custo! Unidos a um ambiente extremamente simples de usar,baseado em janelas, é uma grande opção pra quem busca mais flexibilidade e redução de custos.

Este conceito Ultra ThinClient trás todas as vantagens e facilidades do Linux para a estação de trabalho. Por tanto se falar em código-aberto, a ThinNetworks disponibiliza hoje estas 3 soluções baseadas neste conceito voltadas exclusivamente para área de trabalho.

Inclui um sistema operacional Linux, baseado no Fedora Core 4, com o Desktop Multiplier já pré-integrado que facilmente converte um sistema Linux em até 10 estações distintas simplesmente adicionando placas de vídeo, monitores, teclados, mouse e a licença de uso do software.

*Cada estação adicional deverá adquirir uma licença de uso do Software e a placa de Vídeo simples ou Dual, distribuída pela ThinNetworks.

Adiciona novas estações a uma distribuição Linux já instalada. É um programa que facilmente converte um sistema Linux em até 10 estações completamente independentes apenas adicionando placas de vídeo, monitores, teclados, mouse e a licença de uso do software.

DesktopMultiplier

Fone: (61) 3366-1333Skype: thinnetworks

[email protected]

DesktopMultiplier DesktopServer

LINUX

http://supertuxbr.blogspot.com

Page 74: 27 - Desempenho_fev_2007

74 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | Árvores binárias

Finalmente rotacionamos à direita o irmão. A versão simétrica dessa situação transcorre de forma semelhante, porém à esquerda. Independentemente da direção, apresenta-se no final o caso 3f (figura 12).

➧ O filho direito do irmão é vermelho, o próprio irmão é preto e o sucessor é o filho esquerdo de seu pai. Nesse caso também trocamos novamente as cores, dessa vez entre irmão e pai. Por fim, rotacionamos à esquerda o pai. O caso simétrico segue de forma semelhante (figura 3).

Rápido, mas complicadoAs árvores red-black aceleram considera-velmente a busca por elementos contidos nela, mas esse resultado não é facilmente atingível. Principalmente com grandes quantidades de dados, vale a pena o esforço de implementá-la. Quem tiver interesse em saber por que cada operação é con-duzida em cada caso deve reproduzir os algoritmos em uma folha de papel para uma melhor compreensão.

Ao longo dos anos foram desenvolvidas diversas aplicações que deveriam reduzir o esforço de implementação e facilitar os al-goritmos complexos. Por exemplo, o sistema de arquivos ReiserFS otimiza as árvores de buscas binárias caso os dados contidos nela estejam escritos no disco rígido.

Quem realmente pretender adotar as árvores red-black pode lançar mão de algumas implementações prontas, como por exemplo a libredblack [2]. Apesar disso, aconselha-se naturalmente ter um conhecimento básico do algorit-mo a ser aplicado. ■

Mais Informações[1] Exemplos on-line:

http://www.linuxmagazine.com.br/ issue/27/redblack.c

[2] Libredblack: http://libredblack.sourceforge.net

Exemplo 5: Inserção01 void inserir(no *raiz, no* novono) { 02 // Insere o nó novono na arvore cuja raiz é ‘raiz’ 03 no *atual = raiz; 04 no *antecessor = raiz; 05 while (atual != NULL) { 06 antecessor = atual; 07 if (novono->chave < atual->chave) atual = atual->esquerda; 08 else if (novono->chave > atual->chave) atual = atual->direita; 09 else if (atual->chave == novono->chave) return; 10 } 11 12 if (novono->chave < antecessor->chave) antecessor->esquerda = novono; 13 else if (novono->chave > antecessor->chave) antecessor->direita = novono; 14 novono->pai = antecessor; 15 novono->cor = vermelho; 16 ordenar(novono); 17 }

Figura 13: Exclusão, caso 3f. Dessa vez, irmão e pai trocam de cor. O cen-tro da rotação a ser executada é o pai. O caso simétrico transcorre da mesma forma.

P

PI

I

N

NID

ID

Exemplo 4: Ordenação01 void ordenar(no *n)02 {03 no *dotio = tio(n);04 no *avo = n->pai->pai;05 no *pai = n->pai;0607 if (n->pai == NULL){08 // 1o caso:09 n->cor = preto; return;10 }11 else {12 // 2o caso:13 if (pai->cor == preto) return;14 else {15 // 3o caso:16 if ((tio != NULL) && (tio->cor == vermelho)){17 pai->cor = preto;18 tio->cor = preto;19 avo->cor = vermelho;20 ordenar(avo);21 }22 else {23 // 4o caso:24 if( (n == pai->direita) && (pai == avo->esquerda) ) {25 rotacaoesquerda(pai);26 // transformar o antigo pai no no atual do 5o caso27 n = n->esquerda;28 tio = otio(n);29 avo = n->pai->pai;30 pai = n->pai;31 } else if ((n == pai->links) && (pai ==avo->direita)){32 rotacaodireita(pai);33 // transformar o antigo pai no no atual do 5o caso34 n = n->direita;35 tio = otio(n);36 avo = n->pai->pai;37 pai = n->pai;38 }3940 // 5o caso:41 pai->cor = preto;42 avo->cor = vermelho;43 if((n == pai->esquerda) && (pai == avo->esquerda))44 rotacaodireita(avo);45 else rotacaoesquerda(avo);46 }47 }48 }495051 }// Fim da ordenação

http://supertuxbr.blogspot.com

Page 75: 27 - Desempenho_fev_2007

75

| PROGRAMAÇÃOGWT

Linux Magazine #27 | Fevereiro de 2007

PR

OG

RA

MA

ÇÃ

O

O Google é mais que um simples mecanismo de busca. Essa empresa grande e em rápida

expansão também compreende um importante centro de desenvolvimento de software. Além de programas como o Google Desktop e o Google Earth, a empresa produz outros softwares baseados na Web a cada três meses. Enquanto o Google Mail está sob os holofotes, novos aplicativos como Goo-gle Reader, Google Calendar e Google Spreadsheet ainda não atraíram muita atenção. Esses aplicativos menos co-nhecidos compartilham a aparência e o comportamento de seus compa-nheiros mais populares, e utilizam AJAX para o acesso rápido e fácil por parte dos clientes.

Apesar de muitos suspeitarem que o Google tivesse seu próprio framework rodando sob o capô, não havia como ter

certeza disso até a conferência Java One, em maio de 2006, quando foi liberado o Google Web Toolkit (GWT) para down-load gratuito [1].

O que há na caixa?O AJAX [2], processamento assíncrono de requisições e respostas HTTP, que se utiliza de Javascript e XML, é um termo popular, atualmente, entre desenvolve-dores Web. Os conjuntos de ferramentas para AJAX de linguagens como Perl, Ruby e PHP vêm se tornando cada vez mais populares. Porém, o Google se aventurou em território desconhecido com seu fra-mework baseado em Java. O Java funciona simplesmente como uma linguagem de teste e geração, enquanto o AJAX utiliza Javascript no lado cliente.

Mas qual o motivo da escolha do Java? O principal é a eliminação de fa-

lhas. O GWT oferece aos desenvolvedores a possibilidade de executar e testar aplicativos Java no chamado “modo hos-pedado” (hosted mode). Isso significa executar uma versão em Java do aplicativo dentro de uma máquina virtual Java. Os programadores podem usar seus ambientes de desenvolvimento pre-

feridos, assim como suas ferramentas de depuração.

Após o término do aplicativo, ele é compilado para Javascript. O códi-go HTML e Javascript gerado nesse processo pode ser instalado em um servidor web, onde será executado em modo web (web mode). A arquitetura de componentes do framework GWT inclui um navegador web especial, uma biblioteca de classes de widgets para in-terfaces AJAX, e implementações em Javascript das classes padrão de Java, tais como java.lang e java.util. Além disso, o framework modifica o código Javascript para se adequar a navegadores web populares, como Mozilla, Firefox, Internet Explorer, Opera e Safari.

Aplicativos Web dinâmicos com o Google Web Toolkit

Ferramentas do GoogleO Google Web Toolkit permite o desenvolvimento de aplicativos Web complexos completamente em Java, e converte-os automaticamente para AJAX.por Ramon Wartala

Figura 1: Esse programa de emails é um dos aplicativos de exemplo com o objetivo de demonstrar as capacida-des do Google Web Toolkit.

Exemplo 1: Tabela de PostgreSQL para MyAddress01 CREATE TABLE myaddress.”names”02 (03 id serial NOT NULL,04 firstname varchar(50) NOT NULL,05 surname varchar(100) NOT NULL,06 email varchar(128) NOT NULL,07 CONSTRAINT id PRIMARY KEY(id)08 )09 WITHOUT OIDS;10 ALTER TABLE myaddress.”names” OWNER TO myaddress;

Jean Scheijen - www.sxc.hu

http://supertuxbr.blogspot.com

Page 76: 27 - Desempenho_fev_2007

76 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | GWT

ComeçandoO pacote gwt-linux-1.0.21.tar.gz, de 22 MB, inclui documentação e cinco apli-cativos de exemplo, variando desde um programa Hello, passando por um widget, e indo até um pequeno aplicativo de email (figura 1). Os aplicativos podem ser iniciados através dos scripts shell nos diretórios dos aplicativos.

O aplicativo de exemplo que discu-tiremos neste artigo utiliza um servidor pré-existente para consultar um banco de dados de endereços simples. Para man-ter tudo simples, o servidor será baseado em Ruby On Rails, pois a implementa-ção necessita de apenas algumas linhas de código – o que obviamente não tem qualquer efeito sobre o cliente. A versão finalizada pode ser baixada em [3].

O serviço MeuEndereço, desenvolvido especialmente para esse objetivo, é um simples banco de dados (veja o exemplo

1) que gerencia prenomes, sobrenomes e endereços de email.

A troca de dados baseia-se no formato JSON (Javascript Object Notation) [4]. Diferentemente do XML, o JSON não utiliza tags, e portanto gera menos tra-balho. Para recuperar o endereço de um sobrenome a partir do banco de dados usando Rails, e para então empacotar o endereço no formato JSON, precisamos somente das dez linhas do exemplo 2. A linha 6 lê o sobrenome a partir de uma requisição HTTP, e encontra o endere-ço respectivo no banco de dados na linha

7. A linha 8 converte o endereço para o formato JSON.

O comando ruby script\server start inicia o serviço MyAddress. O servidor interno de desenvolvimento em Ruby On Rails faz o serviço escutar na porta 3000 em localhost. É possível simplesmente consultar o servidor pelo endereço http://

localhost:3000/name/ em um navegador. Outra vantagem do Ruby On Rails é que se pode gerenciar o banco de dados através de um formulário de entrada gerado (figu-

ra 2). Após preencher algumas entradas, é possível consultá-las no navegador, na URL http://localhost:3000/name/find_na-

mes_to_json?lastname=Name.Agora vamos começar a desenvolver o

projeto com GWT que usa o web service. Podemos digitar projectCreator na linha de comando para criar a base do projeto para um aplicativo. A opção -out especifica o diretório de destino; -eclipse informa que criaremos o projeto para o IDE Eclipse:

projectCreator -eclipse Myaddress_GWT -out ➥myaddress_gwt

A ferramenta de linha de comando applicationCreator gera as classes, scripts e arquivos de configuração necessários:

applicationCreator -eclipse MyAddress_GWT -➥out myaddress_gwt de.wartala.client.➥MyAddress

Quando você tiver certeza de que possui todos os arquivos necessários, poderá importar o projeto em GWT no Eclipse, selecionando Import | Existing Projects into Workspace no Pa-ckage Explorer (figura 3). Dentro da estrutura do projeto, utiliza-remos a configuração em XML de um módulo como ponto de partida. O applicationCreator já criou uma configuração de mó-dulo com um ponto de partida, baseada no pacote de destino necessário (exemplo 3). Ele faz referência à classe Java que o aplicativo chamará ao ser iniciado em modo hospedado, e também

se encontrará no arquivo HTML, que implementa a plataforma para a inter-face gráfica do cliente. As linhas mais importantes são as referências à classe do módulo e à biblioteca Javascript do framework GWT:

<meta name=’gwt:module’ content=’de.➥wartala.MyAddress’><script language=”javascript” src=”gwt.➥js”></script>

Ao ser iniciado, o aplicativo primei-ro chama o método onModuleLoad(), que cria os widgets fornecidos pela biblioteca gráfica, antes de instanciar outras classes: MyAddressRequester, em nosso exemplo. O aplicativo então envia requisições ao serviço MyAddress, recebe as respostas e preenche os elementos da interface gráfica com elas.

O método initializeMainForm() cria a interface, que consiste de um botão de busca, uma caixa de entrada e um FlexTa-ble.initializeMainForm(), e então especifica os atributos e eventos, exatamente como um AWT ou a interface Swing.

Nosso exemplo necessita somente que um único ClickEvent acione um clique em Search. A resposta a esse evento é implementada pela classe interna, Se-archButtonClickListener.

Um evento onClick() aciona a parte AJAX do aplicativo, e envia uma requisição HTTP assíncrona para o serviço, a qual passa o resultado para um manipulador de resposta adequado. O JSONResponseTex-tHandler, outra classe interna, implementa o método onCompletion(), que é chamado quando a requisição HTTP assíncrona retorna um resultado.

Quando o serviço retorna um objeto JSON, primeiro precisamos decodificar o

Exemplo 2: NameController01 class NameController <ApplicationController02 scaffold :name03 def find_names_to_json04 # assegure-se de não enviar html, e sim texto puro05 @headers[“Content-Type”] = “text/plain; charset=utf-8”06 search_name = @params[‘surname’]07 names = Name.find(:all, :conditions => [‘surname like ?’, search_name])08 render_text names.to_json09 end10 end

Figura 2: O web service do nosso exemplo pode fornecer os registros diretamente para o navegador.

Figura 3: O Google Web Toolkit pode criar arquivos de projeto para o Eclipse, oferecendo aos programadores a possibilidade de importá-los para o IDE como um projeto.

http://supertuxbr.blogspot.com

Page 77: 27 - Desempenho_fev_2007

77

| PROGRAMAÇÃOGWT

Linux Magazine #27 | Fevereiro de 2007

objeto e quebrá-lo em pedaços para des-vendar seus componentes. O JSONParser.parse(responseText) lida com a tarefa de decodificar o objeto, enquanto o méto-do displayJSONObject() é responsável pela última etapa, delegando o fardo para o método updateAddressTable(). O método updateAddressTable() renderiza os resulta-dos sob a forma de uma tabela, entrando os valores da resposta JSON nas linhas e colunas correspondentes.

Em relação ao script de linha de comando MyAddress-shell.sh, a figura 4 mostra o front-end em modo hospeda-do. Após digitarmos um sobrenome, os dados retornados pelo serviço aparecem na tabela.

Caça aos bugsA vantagem do modo hospedado se torna aparente caso ocorra um erro no programa; é mais fácil encontrar uma falha no código Java do que no Javascript compilado. Passar o parâme-

Mais Informações[1] Google Web Toolkit:

http://code.google.com/webtoolkit

[2] AJAX: http://en.wikipedia.org/wiki/Ajax_%28programming%29

[3] Exemplos de cliente e servidor deste artigo: http://www.linuxmagazine.com.br/ issue/27/gwt

[4] JSON: http://www.json.org

[5] Galeria de widgets GWT: http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.UserInterface.WidgetGallery.html

[6] Biblioteca de widgets GWT: http://gwt-widget.sourceforge.net

[7] gwtPowered.org: http://gwtpowered.org

[8] Grupo GWT no Google Groups: http://groups.google.com/group/Google-Web-Toolkit

Exemplo 3: Classe cliente de ponto de partida01 import com.google.gwt.core.client.EntryPoint;02 import com.google.gwt.user.client.ui.RootPanel;03 import com.google.gwt.user.client.ui.TabPanel;0405 /**06 * As classes de ponto de entrada definem <code>onModuleLoad()</code>.07 */08 public class MyAddress implements EntryPoint {0910 /**11 * Esse é o método de ponto de partida.12 */13 public void onModuleLoad() {14 TabPanel tp = new TabPanel();15 MyAddressRequester myJson = new MyAddressRequester();16 tp.add(myJson.initializeMainForm() ,”Lastname”);17 tp.selectTab(0);18 RootPanel.get().add(tp);19 }20 }

Figura 4: Aplicativos AJAX podem ser depurados usando-se um navegador web especial no modo hospedado.

tro -eclipse ao chamar o projectCreator cria um arquivo com um sufixo .launch além dos dados específicos do projeto. Graças aos parâmetros configurados aqui, o aplicativo pode ser executado no Eclipse e depurado com uma pe-quena ajuda de breakpoints e outras técnicas (figura 5).

Além de suportar a depuração através do Eclipse, o framework GWT também é capaz de realizar seus próprios testes de unidade sobre suas classes. A classe GWT-TestCase é o ponto de entrada que imple-menta a integração a JUnit. A ferramenta de linha de comando junitCreator gera todos os arquivos necessários, incluindo a própria classe de teste:

junitCreator.cmd -junit eclipse/plugins/➥org.junit_3.8.1/junit.jar -eclipse ➥myaddress_gwt2 -out myaddress_gwt2 ➥de.wartala.myaddress.test.MyAddressTest

Os arquivos criados aqui são utiliza-dos para fins de teste, tanto no modo

hospedado quanto no modo web, no Eclipse e também na linha de comando. Se o aplicativo for executado sem qual-quer erro, podemos rodar o script Project-compile.sh para criar uma versão em Javascript do aplicati-vo escrito originalmente em Java.

O script realiza a tarefa de copiar e gerar todos os arquivos necessários no subdiretório www do diretó-rio atual, ao ser invocado junitCreator.cmd.

GWT e maisObviamente, o Google Web Toolkit tem um potencial maior do que um simples exemplo consegue demonstrar. Ele possui ao todo 20 widgets; a do-cumentação oferece uma visão geral da Galeria de Widgets [5]. Além dos equivalentes HTML de checkboxes e botões de rádio, os Layout Managers (Panels) são especialmente úteis. O VerticalPanel pode ser de grande aju-da para alinhar botões verticalmente, por exemplo.

O GWT também oferece aos desen-volvedores a possibilidade de desenhar seus próprios widgets; nos endereços [6] e [7] há diversos exemplos e tutoriais. O framework já atraiu uma forte comuni-dade, que utiliza os Google Groups [8] para discutir sobre o assunto. ■

Figura 5: O modo de depuração do Eclipse acelera a elimina-ção de falhas.

http://supertuxbr.blogspot.com

Page 78: 27 - Desempenho_fev_2007

78 http://www.linuxmagazine.com.br

Fornecedor de Hardware = 1 Redes e Telefonia / PBX = 2 Integrador de Soluções = 3

Literatura / Editora = 4 Fornecedor de Software = 5

Consultoria / Treinamento = 6

Linux.local

Empresa Cidade Endereço Telefone Web 1 2 3 4 5 6

CearáF13 Tecnologia Fortaleza Rua Coronel Solon, 480 – Bairro de Fátima

Fortaleza - CE - CEP 60040-270 85 3252-3836 www.f13.com.br ✔ ✔ ✔ ✔

Espírito SantoLinux Shopp Vila Velha Rua São Simão (Correspondência), 18 – CEP: 29113-120 27 3082-0932 www.linuxshopp.com.br ✔ ✔ ✔ ✔

Megawork Consul-toria e Sistemas

Vitória Rua Chapot Presvot, 389 – Praia do Can-to – CEP: 29055-410 sl 201, 202

27 3315-2370 www.megawork.com.br ✔ ✔ ✔

Spirit Linux Vitória Rua Marins Alvarino, 150 – CEP: 29047-660 27 3227-5543 www.spiritlinux.com.br ✔ ✔ ✔

Minas GeraisInstituto Online Belo Horizonte Av. Bias Fortes, 932, Sala 204 – CEP: 30170-011 31 3224-7920 www.institutoonline.com.br ✔ ✔

Linux Place Belo Horizonte Rua do Ouro, 136, Sala 301 – Serra – CEP: 30220-000 31 3284-0575 corporate.linuxplace.com.br ✔ ✔ ✔ ✔

Microhard Belo Horizonte Rua República da Argentina, 520 – Sion – CEP: 30315-490 31 3281-5522 www.microhard.com.br ✔ ✔ ✔ ✔ ✔

TurboSite Belo Horizonte Rua Paraíba, 966, Sala 303 – Savassi – CEP: 30130-141 0800 702-9004 www.turbosite.com.br ✔ ✔ ✔

ParanáiSolve Curitiba Av. Cândido de Abreu, 526, Cj. 1206B – CEP: 80530-000 41 252-2977 www.isolve.com.br ✔ ✔ ✔

Mandriva Conectiva Curitiba Rua Tocantins, 89 – Cristo Rei – CEP: 80050-430 41 3360-2600 www.mandriva.com.br ✔ ✔ ✔ ✔

Rio de JaneiroNSI Training Rio de Janeiro Rua Araújo Porto Alegre, 71, 4ºandar Centro – CEP: 20030-012 21 2220-7055 www.nsi.com.br ✔ ✔

Open IT Rio de Janeiro Rua do Mercado, 34, Sl, 402 – Centro – CEP: 20010-120 21 2508-9103 www.openit.com.br ✔ ✔

Unipi Tecnologias Campos dos Goytacazes

Av. Alberto Torres, 303, 1ºandar - Centro – CEP 28035-581 22 2725-1041 www.unipi.com.br ✔ ✔ ✔ ✔

Rio Grande do SulSolis Lajeado Rua Comandante Wagner, 12 – São Cris-

tóvão – CEP: 95900-00051 3714-6653 www.solis.coop.br ✔ ✔ ✔ ✔ ✔

DualCon Novo Hamburgo Rua Joaquim Pedro Soares, 1099, Sl. 305 – Centro 51 3593-5437 www.dualcon.com.br ✔ ✔ ✔ ✔

Datarecover Porto Alegre Av. Carlos Gomes, 403, Sala 908, Centro Comer-cial Atrium Center – Bela Vista – CEP: 90480-003

51 3018-1200 www.datarecover.com.br ✔ ✔

LM2 Consulting Porto Alegre Rua Germano Petersen Junior, 101-Sl 202 – Hi-gienópolis – CEP: 90540-140

51 3018-1007 www.lm2.com.br ✔ ✔ ✔

Lnx-IT Informação e Tecnologia Porto Alegre Av. Venâncio Aires, 1137 – Rio Branco – CEP: 90.040.193 51 3331-1446 www.lnx-it.inf.br ✔ ✔ ✔ ✔

Plugin Porto Alegre Av. Júlio de Castilhos, 132, 11º andar Centro – CEP: 90030-130 51 4003-1001 www.plugin.com.br ✔ ✔ ✔

TeHospedo Porto Alegre Rua dos Andradas, 1234/610 – Centro – CEP: 90020-008 51 3286-3799 www.tehospedo.com.br ✔ ✔

Santa CatarinaRedix Blumenau Rua 02 de Setembro, 733, sl 08. CEP 89052-000 47 3323-7313 www.redix.com.br ✔ ✔ ✔ ✔

São PauloWs Host Arthur Nogueira Rua Jerere, 36 – Vista Alegre – CEP: 13280-000 19 3846-1137 www.wshost.com.br ✔ ✔ ✔

DigiVoice Barueri Al. Juruá, 159, Térreo – Alphaville – CEP: 06455-010 11 4195-2557 www.digivoice.com.br ✔ ✔ ✔ ✔ ✔

Dextra Sistemas Campinas Rua Antônio Paioli, 320 – Pq. das Uni-versidades – CEP: 13086-045

19 3256-6722 www.dextra.com.br ✔ ✔ ✔

Insigne Free Software do Brasil Campinas Av. Andrades Neves, 1579 – Castelo – CEP: 13070-001 19 3213-2100 www.insignesoftware.com ✔ ✔ ✔

Microcamp Campinas Av. Thomaz Alves, 20 – Centro – CEP: 13010-160 19 3236-1915 www.microcamp.com.br ✔ ✔

PC2 Consultoria em Software Livre

Carapicuiba Rua Edeia, 500 - 06350-080 11 3213-6388 www.pc2consultoria.com ✔ ✔

Savant Tecnologia Diadema Av. Senador Vitorino Freire, 465 – CEP: 09910-550 11 5034-4199 www.savant.com.br ✔ ✔ ✔ ✔

Epopéia Informática Marília Rua Goiás, 392 – Bairro Cascata – CEP 17509-140 14 3413-1137 www.epopeia.com.br ✔

Redentor Osasco Rua Costante Piovan, 150 – Jd. Três Mon-tanhas – CEP: 06263-270

11 2106-9392 www.redentor.ind.br ✔

Go-Global Santana de Parnaíba Av. Yojiro Takaoca, 4384, Ed. Shopping Ser-vice, Cj. 1013 – CEP: 06541-038

11 2173-4211 www.go-global.com.br ✔ ✔ ✔

AW2NET Santo André Rua Edson Soares, 59 – CEP: 09760-350 11 4990-0065 www.aw2net.com.br ✔ ✔ ✔

Async Open Source São Carlos Rua Orlando Damiano, 2212 – CEP 13560-450 16 3376-0125 www.async.com.br ✔ ✔ ✔

Delix Internet São José do Rio Preto

Rua Voluntário de São Paulo, 3066 9º – Centro – CEP: 15015-909

11 4062-9889 www.delixhosting.com.br ✔ ✔ ✔

SE

RV

IÇO

S O maior diretório de empresas que oferecem produtos, soluções e serviços em Linux e Software Livre, organizado por Estado. Sentiu falta do nome de sua empresa aqui? Entre em contato com a gente: 11 2161-5400 ou [email protected]

http://supertuxbr.blogspot.com

Page 79: 27 - Desempenho_fev_2007

79

Empresa Cidade Endereço Telefone Web 1 2 3 4 5 6

São Paulo (continuação)4Linux São Paulo Rua Teixeira da Silva, 660, 6º andar – CEP: 04002-031 11 2125-4747 www.4linux.com.br ✔ ✔

A Casa do Linux São Paulo Al. Jaú, 490 – Jd. Paulista – CEP 01420-000 11 3549-5151 www.acasadolinux.com.br ✔ ✔ ✔

Accenture do Brasil Ltda. São Paulo Rua Alexandre Dumas, 2051 – Cháca-ra Santo Antônio – CEP: 04717-004

11 5188-3000 www.accenture.com.br ✔ ✔ ✔

ACR Informática São Paulo Rua Lincoln de Albuquerque, 65 –Perdizes – CEP: 05004-010 11 3873-1515 www.acrinformatica.com.br ✔ ✔

Agit Informática São Paulo Rua Major Quedinho, 111, 5º andar, Cj. 508 – Centro – CEP: 01050-030

11 3255-4945 www.agit.com.br ✔ ✔ ✔

Altbit - Informática Co-mércio e Serviços LTDA.

São Paulo Av. Francisco Matarazzo, 229, Cj. 57 – Água Branca – CEP 05001-000

11 3879-9390 www.altbit.com.br ✔ ✔ ✔ ✔

AS2M -WPC Consultoria São Paulo Av. Tiradentes, 615, Ed. Santiago, 2º an-dar Bom Retiro – CEP: 01101-010

11 3228-3709 www.wpc.com.br ✔ ✔ ✔

Big Host São Paulo Rua Dr. Miguel Couto, 58 – Centro – CEP: 01008-010 11 3033-4000 www.bighost.com.br ✔ ✔ ✔

Blanes São Paulo Rua André Ampére, 153 – 9º andar – Conj. 91 CEP: 04562-907 (próx. Av. L. C. Berrini)

11 5506-9677 www.blanes.com.br ✔ ✔ ✔ ✔ ✔

Commlogik do Brasil Ltda. São Paulo Av. das Nações Unidas, 13.797, Bloco II, 6º an-dar – Morumbi – CEP: 04794-000

11 5503-1011 www.commlogik.com.br ✔ ✔ ✔ ✔ ✔

Computer Consulting Pro-jeto e Consultoria Ltda.

São Paulo Rua Vergueiro, 6455, Cj. 06 – Alto do Ipiranga – CEP: 04273-100 11 5062-3927 www.computerconsulting.com.br ✔ ✔ ✔ ✔

Consist Consultoria, Siste-mas e Representações Ltda.

São Paulo Av. das Nações Unidas, 20.727 – CEP: 04795-100 11 5693-7210 www.consist.com.br ✔ ✔ ✔ ✔

Domínio Tecnologia São Paulo Rua das Carnaubeiras, 98 – Metrô Con-ceição – CEP: 04343-080

11 5017-0040 www.dominiotecnologia.com.br ✔ ✔

EDS do Brasil São Paulo Av. Pres. Juscelino Kubistcheck, 1830 Torre 4 - 5º andar 11 3707-4100 www.eds.com ✔ ✔ ✔

Ética Tecnologia São Paulo Rua Nova York, 945 – Brooklin – CEP:04560-002 11 5093-3025 www.etica.net ✔ ✔ ✔ ✔

Getronics ICT Solu-tions and Services

São Paulo Rua Verbo Divino, 1207 – CEP: 04719-002 11 5187-2700 www.getronics.com/br ✔ ✔ ✔

Hewlett-Packard Brasil Ltda. São Paulo Av. das Nações Unidas, 12.901, 25º andar – CEP: 04578-000 11 5502-5000 www.hp.com.br ✔ ✔ ✔ ✔ ✔

IBM Brasil Ltda. São Paulo Rua Tutóia, 1157 – CEP: 04007-900 0800-7074 837 www.br.ibm.com ✔ ✔ ✔ ✔

iFractal São Paulo Rua Fiação da Saúde, 145, Conj. 66 – Saúde – CEP: 04144-020 11 5078-6618 www.ifractal.com.br ✔ ✔ ✔

Integral São Paulo Rua Dr. Gentil Leite Martins, 295, 2º an-dar Jd. Prudência – CEP: 04648-001

11 5545-2600 www.integral.com.br ✔ ✔

Itautec S.A. São Paulo Rua Santa Catarina, 1 – Tatuapé – CEP: 03086-025 11 6097-3000 www.itautec.com.br ✔ ✔ ✔ ✔ ✔

Linux Komputer Informática São Paulo Av. Dr. Lino de Moraes Leme, 185 – CEP: 04360-001 11 5034-4191 www.komputer.com.br ✔ ✔ ✔ ✔

Linux Mall São Paulo Rua Machado Bittencourt, 190, Cj. 2087 – CEP: 04044-001 11 5087-9441 www.linuxmall.com.br ✔ ✔ ✔

Livraria Tempo Real São Paulo Al. Santos, 1202 – Cerqueira César – CEP: 01418-100 11 3266-2988 www.temporeal.com.br ✔ ✔ ✔

Locasite Internet Service São Paulo Av. Brigadeiro Luiz Antonio, 2482, 3º an-dar – Centro – CEP: 01402-000

11 2121-4555 www.locasite.com.br ✔ ✔ ✔

Microsiga São Paulo Av. Braz Leme, 1631 – CEP: 02511-000 11 3981-7200 www.microsiga.com.br ✔ ✔ ✔

Novatec Editora Ltda. São Paulo Rua Luis Antonio dos Santos, 110 – Santana – 02460-000 11 6979-0071 www.novateceditora.com.br ✔

Novell América Latina São Paulo Rua Funchal, 418 – Vila Olímpia 11 3345-3900 www.novell.com/brasil ✔ ✔ ✔

Oracle do Brasil Sistemas Ltda. São Paulo Av. Alfredo Egídio de Souza Aranha, 100 – Bloco B – 5º andar – CEP: 04726-170

11 5189-3000 www.oracle.com.br ✔ ✔

Proelbra Tecnolo-gia Eletrônica Ltda.

São Paulo Av. Rouxinol, 1.041, Cj. 204, 2º andar Moema – CEP: 04516-001 11 5052- 8044 www.proelbra.com.br ✔ ✔ ✔

Provider São Paulo Av. Cardoso de Melo, 1450, 6º an-dar – Vila Olímpia – CEP: 04548-005

11 2165-6500 www.e-provider.com.br ✔ ✔ ✔

Red Hat Brasil São Paulo Av. Angélica, 2503, 8º andar Consolação – CEP: 01227-200

11 3124-6000 www.latinsourcetech.com.br ✔ ✔

Samurai Projetos Especiais São Paulo Rua Barão do Triunfo, 550, 6º andar – CEP: 04602-002 11 5097-3014 www.samurai.com.br ✔ ✔ ✔

SAP Brasil São Paulo Av. das Nações Unidas, 11.541, 16º andar – CEP: 04578-000 11 5503-2400 www.sap.com.br ✔ ✔ ✔

Simples Consultoria São Paulo Rua Mourato Coelho, 299, Cj. 02 Pinheiros – CEP: 05417-010 11 3898-2121 www.simplesconsultoria.com.br ✔ ✔ ✔

Smart Solutions São Paulo Av. Jabaquara, 2940 cj 56 e 57 11 5052-5958 www.smart-tec.com.br ✔ ✔ ✔ ✔

Snap IT São Paulo Rua João Gomes Junior, 131 – Jd. Bonfiglioli – CEP: 05299-000 11 3731-8008 www.snapit.com.br ✔ ✔ ✔

Stefanini IT Solutions São Paulo Av. Brig. Faria Lima, 1355, 19º – Pinheiros – CEP: 01452-919 11 3039-2000 www.stefanini.com.br ✔ ✔ ✔

Sun Microsystems São Paulo Rua Alexandre Dumas, 2016 – CEP: 04717-004 11 5187-2100 www.sun.com.br ✔ ✔ ✔ ✔

Sybase Brasil São Paulo Av. Juscelino Kubitschek, 510, 9º an-dar Itaim Bibi – CEP: 04543-000

11 3046-7388 www.sybase.com.br ✔ ✔

The Source São Paulo Rua Marquês de Abrantes, 203 – Chá-cara Tatuapé – CEP: 03060-020

11 6698-5090 www.thesource.com.br ✔ ✔ ✔

Unisys Brasil Ltda. São Paulo Rua Alexandre Dumas, 1711, 10º an-dar, Ed. Birmann 11 – CEP: 04717-004

11 3305-7000 www.unisys.com.br ✔ ✔ ✔ ✔

Utah São Paulo Av. Paulista, 925, 13º andar – Cerquei-ra César – CEP: 01311-916

11 3145-5888 www.utah.com.br ✔ ✔ ✔

Visuelles São Paulo Rua Eng. Domicio Diele Pacheco e Sil-va, 585 – Interlagos – CEP 04455-310

11 5614-1010 www.visuelles.com.br ✔ ✔ ✔

Webnow São Paulo Av. Nações Unidas, 12.995, 10º andar, Ed. Plaza Cen-tenário – Chácara Itaim – CEP: 04578-000

11 5503-6510 www.webnow.com.br ✔ ✔ ✔

WRL Informática Ltda. São Paulo Rua Santa Ifigênia, 211/213, Box 02– Centro – CEP: 01207-001 11 3362-1334 www.wrl.com.br ✔ ✔ ✔

Systech Taquaritinga Rua São José, 1126 – Centro - Cai-xa Postal 71 – CEP: 15.900-000

16 3252-7308 www.systech-ltd.com.br ✔ ✔ ✔

| SERVIÇOSLinux.local

Linux Magazine #27 | Fevereiro de 2007http://supertuxbr.blogspot.com

Page 80: 27 - Desempenho_fev_2007

80 http://www.linuxmagazine.com.br

Calendário de eventosEvento Data Local Website

PHP Conference 2007 12 e 13 de fevereiro Vancouver, Canadá vancouver.php.net/node/360

LinuxWorld OpenSolutions Summit 14 e 15 de fevereiro Nova York, EUA www.linuxworldexpo.com

Open Source Developers’ Conference 20 a 22 de fevereiro Netanya, Israel www.osdc.org.il/2007

FOSDEM 2007 24 e 25 de fevereiro Bruxelas, Bélgica www.fosdem.org

PyCon 2007 24 a 26 de fevereiro Addison, EUA us.pycon.org

LinuxWorld Conference & Expo Mexico 27 de fevereiro a 2 de março Cidade do México, México www.linuxworldexpo.com.mx

IT Underground 8 e 9 de março Praga, Rapública Tcheca itunderground.org

FOSE 2007 20 a 22 de março Washington, EUA www.fose.com

8º Fórum Internacional do Software Livre 12 a 14 de abril Porto Alegre, RS fisl.softwarelivre.org/8.0

Libre Graphics Meeting 2007 4 a 6 de maio Vancouver, Canadá www.libregraphicsmeeting.org

SE

RV

IÇO

S

Índice de anunciantes

Empresa Pág.

4Linux 15

EasyLinux 09

Guia de Tecnologia da Informação 02

Intel 84

Itautec 07

Linux Magazine 13

Linux Magazine 49

Linux World 81

Plugin 17

Red Hat 11

Thin Networks 47

http://supertuxbr.blogspot.com

Page 81: 27 - Desempenho_fev_2007

����������������

�����������������������������������������������������������������

�������������������������������

�������� ����������������������� ���������������������

������� ����������������������� ������������������������

�������� ������������������������ ���������������������

���������� ������������������������ �����������������������

��������� ����������������������� ����������������������

������������ ����������������������������� �������������������������

�������� ������������������������ �����������������������

������� ������������� ���������������������������

������������� ����������� �������������������������

������ ����������� �����������������������

���������� ����������� �������������������������

������ ������������ �����������������������

�������������� �������������������� ����������������������

���������� ����������������� �����������������������

�������� ��������������� ���������������������

���������������������������http://supertuxbr.blogspot.com

Page 82: 27 - Desempenho_fev_2007

82

Na Linux Magazine #28…

PR

EV

IEW

Na EasyLinux #09…

DESTAQUE

Gerenciamento de projetosDelegar atribuições pode parecer uma tarefa relativamente

simples. Porém, quando se tem um prazo a cumprir, metas a atingir e uma equipe numerosa para coordenar, o trabalho pode tornar-se rapidamente hercúleo.

Uma ferramenta que certamente ajuda muito a coorde-nação de projetos é o gerenciador de projetos. Através dele, o coordenador da equipe pode controlar quais tarefas já foram completadas, quais ainda nem se iniciaram, quem são os com-

ponentes de cada grupo de trabalho, além de permitir que se ajustem as datas de finalização e início de subprojetos e os papéis de cada integrante dentro do grupo.

Os gerenciadores de projetos vão além, e facilitam também a comunicação dentro da equipe, contribuindo de forma im-portante para o sucesso do trabalho.

A Linux Magazine analisou diversos softwares gerencia-dores de projetos de Código Aberto, além de um proprietá-rio, capazes de gerar gráficos de Gantt e outros ainda mais sofisticados, no intuito de tornar seus projetos mais ágeis e dinâmicos. ■

DESTAQUE

Games no LinuxNem só de trabalho duro vive o Linux. O sistema do Pingüim também surpreende quando o tema é games e faz rodar alguns dos jogos mais emocionantes da atualidade, feitos nos mol-des dos sistemas proprietários. Como isso é possível? Através do Cedega – software pago – ou do virtuoso Wine. Com algumas configurações e entradas básicas na linha de comando, você vai aprender a instalar jogos como o famoso City of Heroes, den-tre outros. Não perca a série de artigos completa, com passo-a-passo, screenshots e soluções, especialmente preparada para a sua diversão! ■

LABORATÓRIO

Tudo sob controleVocê quer saber qual o uso que seu computador faz da CPU, me-mória e outros re-cursos, além de verificar o recebi-mento de emails? Delegue essa tarefa ao GKrellM, um programa enxuto, que oferece plu-gins adicionais, es-pecialista em mo-nitorar o sistema na forma de eficientes gráficos. ■

http://www.linuxmagazine.com.br

DESTAQUE

Interação pela janelaO acordo da Microsoft com a Novell já se concretizou

há alguns meses, mas muitos ainda não enxergam através da nuvem de dúvidas que paira no ar. Em uma entrevista exclusiva com o Gerente de Estratégias da Microsoft, a Linux Magazine falou sobre interoperabilidade, concor-rência, mercado... e o acordo com a Novell. ■

http://supertuxbr.blogspot.com

Page 83: 27 - Desempenho_fev_2007

��������������������������

������������������������������������������������������������������

���������������������������������������������������������������������������

��������������������������������������������������������

�������������������

�����������������������������������������������������������������

�����������������������������

���

����

���

����

���

���

����

���

��

����������������������������������������������

��������������������������������������������������

������������������������������������������

����������������������������������������������������

��� �������������

� �� ������ �� ������

� � � � �

�������������� �������������������������€ ����� ���������

��������������

�������������������������������������������������

���������������

�������������������������������������������������������

������� � � ������ � ���� �������

���

����

���

����

���

���

����

���

��

��� ����������

� � � � �

���������������������������������������������������

�����������������������������������������������

������������������������������������������������������������

������������������������������������������������

������������

�������������������������������������������������������������������������������������������������������������

� � � ��� ���������������������������������������������������������������������������������������������������������

� ����������� �����������������������������������������������������

�������������������

�������������������������������������������������������

��������������������������������������������������������������

��������������������������������������������������������������

������������������������������������������������������������

������������������������������������������������������������

��������� ������������������������������������������������������������������������������������������������������������������������

���������������������������������������������������

������������������������������������������������������������

�����������������������������������������������������

��������������������������������������������

� ���� ��

�������������������� ��

�����������������������������������������������

����������������������������������������������������

�������������������������������������������������������������������������������������������������

�������

������� � � ������ � ���� ������

���

����

���

����

���

���

����

���

��

��� �����������

������������������������������������������������

�����������������������������������������

�����������������������������������������������������

������������������������������������������������������

� �� ������ �� ������

� � � � �

�������������� �������������������������€ ����� ���������

�� ������ ����

� ������ �����

� �����

��������������

������� � � ������ � ���� �������

�������������������������������������������������

�������������������������������������

��������������������������������������������������������

����������������������������������������������������

��������������

�����

������������������

���������������������������������������������������������������������������������������������������������������������������������

������� � � ������ � ���� �������

��� ������������

���������������������������������������������������

�������������������������������������������������������

���������������������������������������������������������

��������������������������������������������

€ ����� ���������

�����

����

���������

������������������������������������������������������������������

������� � � ������ � ���� �������

���

����

���

����

���

���

����

���

��

��� �������������

����������������������������������������

���������������������������������������������

����������������������������������������������������������

�������������������������������������������

������������������������������������������

������������������������

����������������

�����

���������������������������

��������������� � ���� �������

���

����

���

����

���

���

����

���

��

�������������

������������������������������������������

����������������������������������������������

����������������������������������������������

��������������������������������������������������

���������������������������������������������������������������������������������������������������

�������������������������

���������

�������������������������

��������

��������������������������

��������

����������������������������

���������

������������������������

���������

�����������������������

���������

���� �����

���������������� ����

��

��

�������������������������������

�������

������

��

���� ����

�����

��������

�������

������������������������

�����������������������������������������������������������

�����������������������������������������������������������������

�����������������������������������������������

��������������������������������������

����������������������������������������������������

������������������������������������������

������������

���������������������������������������������������������������������������� ������������������������������������������� ������������������������ �������������������������������������������������������

�����������������������������������������������

����������������������������������������������������������

��������

����

��������

�����

�������

���������

������

���������

���

�����������������

����

�����������������������������������������������������������������������������������������������������������������

���� �����

���������������� ����

��

��

��

��

��

��

��

��

�������������������������������

�������

������

��

���� ����

�����

��������

�������

������������������������ ������������������������������������

������������������������������������������������������������������������������

������������������������������������������������������������������������������

�������������������������������������������������������������

������������������������������������������������������ ����

������������������������������������������������������ ����

�������������������������������������� ����

�����������

�����������������

������������������������������������������������������������ ���������������������������������������� �������������������������������� ������������������������������������� ������������������������������� ����

�����������������������������������������������������������������������������������������

�������������������������������������������������������������������

������

������

�������

����������

������

�����������������������

�������������������������������������

������

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

���������������������������� ��������������������

http://supertuxbr.blogspot.com

Page 84: 27 - Desempenho_fev_2007

© 2006 Intel Corporation, Intel, the Intel logo, Pentium, Itanium, Intel Xeon and VTune are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United Statesand other countries. *Other names and brands maybe claimed as the property of others.

Itautec0800 121444 www.itautec.com.br/intel

Katalogo 0800 7729897 www.katalogo.com.br/intel

MStech (11) 5080-3838 www.mstech.com.br/intel

Strattus (11) 3531-6550 www.strattus.com.br/intel

Tech Digital (11) 5181-1852 www.techdigital.com.br/intel

Transforme o poder do MultiCore em aplicativos de alto-desempenho. Tenha seus aplicativos preparados para o processamento paralelo e escalável.

Faça certo na primeira vez:

Intel® Threading Analysis ToolsLocaliza os problemas de threadings latentes com visualização em tempo real.

Compiladores Intel C++ e FortranAumenta o desempenho sem mudar o ambiente de desenvolvimento

Analisadores de Desempenho Intel VTune™ Identifica de forma bastante rápida gargalos de desempenho nos aplicativos

Intel Integrated Performance Primitives Acesse bibliotecas de rotinas multimídia otimizadas para múltiplas plataformas

Intel Math Kernel Library Aumenta o desempenho de aplicativos através do uso de rotinas otimizadas como BLAS, FFT, LAPACK, incluindo suporte a MPI

“As ferramentas de threading da Intel tem acelerado nosso ciclo de desenvolvimento imensamente”.

Dana BatalliDiretora de Desenvolvimento do RenderMan

Pixar

LinuxMag80206.qxp 8/2/06 10:00 AM Page 1

http://supertuxbr.blogspot.com