#/sbin/hdparm /dev/hda (altere a última letra conforme a posição do seu HD) Primário master = /dev/hda Primário slave = /dev/hdb Secundário master = /dev/hdc Secundário slave = /dev/hdd A saida do comando acima é a seguinte: /dev/hda: multcount = 8 (on) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 0 (off) keepsettings = 0 (off) readonly = 0 (off) readahead = 8 (on) geometry = 7476/255/63, sectors = 120103200, start = 0 Podemos perceber claramente que as diversas configurações do HD estão desabilitadas. Por exemplo a opção IO_support (I/O) está configurada para o valor padrão (default 16-bit) e a opção using_dma (PIO, DMA ou UDMA) está desabilitada, o que torna o desempenho muito inferior do esperado. A mesma coisa acontece com o segundo HD, veja no comando abaixo: #/sbin/hdparm /dev/hdb /dev/hdb: multcount = 8 (on) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 0 (off) keepsettings = 0 (off) readonly = 0 (off) readahead = 8 (on) geometry = 2431/255/63, sectors = 39062500, start = 0 A primeira providência a ser tomada antes da configuração é saber exatamente quais são as características do seu hardware, pois algumas destas configurações feitas de forma errada podem causar-lhe muitos transtornos. Para obtermos as informações necessárias para a configuração dos discos devemos utilizar o seguinte comando: #/sbin/hdparm -i /dev/hda No caso do HD ATA 133, 7200 rpm, o resultado do comando citado acima é o seguinte: /dev/hda: Model=Maxtor 6Y060L0, FwRev=YAR41BW0, SerialNo=Y2MLSP3E Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=57 BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=8 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=120103200 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: *mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 udma6 AdvancedPM=yes: disabled (255) WriteCache=enabled Drive conforms to: (null): 1 2 3 4 5 6 7 Ai você deve estar me perguntando, o que isto tem que possa me interessar? Nestas informações tem o que eu considero mais importante, o modo de UDMA máximo que eu posso aplicar para o meu HD. Veja as seguintes linhas: PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: *mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 udma6 A terceira linha indica que o meu HD suporta UDMA e que aceita udma6, ou seja, aceita a configuração para ATA 133. (lembre-se que para HDs ATA, essa configuração só deverá ser feita se o mesmo estiver usando o cabo apropriado de 80 vias) Outra informação importante que este comando nos fornece é o que podemos ver na seguinte linha: BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=8 MaxMultSect nos informa a configuração máxima para o MultSect, ou seja, nós estamos com a configuração de MultSect com o valor 8 mas podemos configurá-lo para 16 sem problemas. (irei explicar o que esta configuração faz mais adiante) Vejamos agora mais um exemplo, um HD ATA 100, 5400 rpm e suas configurações de acordo com o comando abaixo: #/sbin/hdparm -i /dev/hdb /dev/hdb: Model=Maxtor 2B020H1, FwRev=WAH21PB0, SerialNo=B1DT8P7E Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=57 BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=8 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=39062500 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: *mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 AdvancedPM=yes: disabled (255) WriteCache=enabled Drive conforms to: ATA/ATAPI-6 T13 1410D revision 0: 1 2 3 4 5 6 Conforme visto anteriormente, podemos determinar qual o modo DMA máximo suportado pelo dispositivo: PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: *mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 Podemos ver que o dispositivo suporta UDMA, sabemos ainda que o máximo suportado neste caso é o udma5, ou seja, ATA 100, podemos ver ainda, que conforme o primeiro HD sua configuração máxima de MultSect é 16, porém, o mesmo está configurado para 8. Repare ainda que na linha DMA modes há um "*" em mdma0, o que significa que neste momento o HD está configurado para trabalhar nete modo e não como ATA 100 (udma5) como era esperado. Antes de começarmos a tratar da configuração propriamente dita, vamos efetuar os testes de desempenho para que possamos comparar o nosso ganho de performance. Para realizar os teste devemos utilizar o seguinte comando: #/sbin/hdparm -Tt /dev/hda /dev/hda: Timing buffer-cache reads: 128 MB in 0.32 seconds =400.00 MB/sec Timing buffered disk reads: 64 MB in 26.92 seconds = 2.38 MB/sec #/sbin/hdparm -Tt /dev/hdb /dev/hdb: Timing buffer-cache reads: 128 MB in 0.32 seconds =400.00 MB/sec Timing buffered disk reads: 64 MB in 24.34 seconds = 2.63 MB/sec Os testes acima nos mostram duas velocidades, sendo que a primeira (Timing buffer-cache reads) indica a velocidade de acesso da memória cache do disco, e a segunda (Timing buffered disk reads) indica a velocidada real de leitura do disco. Podemos reparar ainda que mesmo sendo dois HDs com características bastante diferentes (hda ATA 133, 7200 rpm e hdb ATA 100, 5400 rpm), os resultados dos testes apresentam praticamente o mesmo resultado. Agora que já realizamos os testes de desempenho e que temos em mãos os dados mais importantes, pois com a configuração de DMA errada você pode causar diversos problemas de perda de dados ou até mesmo corrupção do sistema de arquivo, podemos começar a tratar diretamente da configuração do HD. As "flags" que eu considero mais importantes para a configuração são as seguintes: -A Esta flag serve para configurar a opção "readahead", que torna possível a leitura prévia dos setores seguintes do disco. Suas opções são (0) desabilitada e (1) habilitada. -W Esta opção configura o "write-caching", ou seja, a utilização da memória cache do seu disco. Para habilitar este parâmetro verifique no comando hdparm -i se o seu HD possui a informação de "BuffType" ou "BuffSize", o que indica que seu disco possui memória cache. Suas opções são (0) desabilitada e (1) habilitada. -c Esta flag ativa a utilização do suporte a I/O "IO_support", aumentando a performance do disco e reduzindo a utilização da CPU na transferência de dados. Suas opções são (0) desabilitada, (1) I/O 32-bit e (3) I/O 32-bit sync, esta última opção permite a transferência de dados sincronizada (opção mais segura para máquinas de alto desempenho como servidores de banco de dados, porém um pouco mais lenta que a opção 1). -d Esta opção serve para configurar a ativação do uso da DMA "using_dma" (configura apenas o uso e não o tipo), possibilitando o acesso direto do disco à memória do computador. Suas opções são (0) desabilitada e (1) habilitada. -a Esta flag determina a quantidade de setores que o disco deverá ler antecipadamente com a opção "readahead", esta opção aumenta a performance do sistema de arquivos em leituras sequenciais de arquivos grandes, porém como o Linux é basicamente composto de arquivos pequenos, caso você não necessite utilizar algum banco de dados muito grande, sugiro utilizar o valor encontrado em MaxMultSect, que no meu caso é 16. Não utilize esta flag sem estar com a flag -A habilitada. -m Esta opção permite a configuração de transferência de múltiplos setores por interrupção de I/O entre o disco e a controladora "multcount", aumentando desta forma a velocidade da transmissão de dados. Devemos utilizar para esta flag o valor encontrado em MaxMultSect, no meu caso 16, conforme encontrado com o comando hdparm -i no início desta apostila. Não utilize esta flag sem estar com a flag -c (I/O) devidamente habilitada. -u Esta flag serve para configurar a ativação da opção "unmaskirq", o que possibilita uma melhora no desempenho do sistema, possibilitando um melhor controle sobre as interrupções do mesmo durante o uso do disco. Suas opções são (0) desabilitada e (1) habilitada. -X Esta flag é a mais complicada e perigosa de todas, pois ela é a responsável pela configuração do tipo de acesso DMA que será utilizado pelo disco. Foi para esta configuração que nós utilizamos o comando hdparm -i no início da apostila, para saber qual o tipo de DMA máximo suportado pelo HD. Para saber qual o valor utilizar na configuração do tipo de DMA existe a seguinte regra: para o modo pio o número inicial é 8, ou seja, para pio3 deve-se utilizar 8 + 3 = 11; para o modo mdma o número inicial é 32, seguindo a mesma regra, para o mdma1 deve-se utilizar 32 + 1 = 33 e para o modo udma o número inicial é 64, ou seja, para o udma5 deve-se utilizar 64 + 5 = 69. Para facilitar a configuração utilize a seguinte tabela: Modo DMAValor default00 pio008 pio109 pio210 pio311 pio412 mdma032 mdma133 mdma234 udma064 udma165 udma266 udma367 udma468 udma569 udma670 Para a utilização desta flag, você deve estar com a opção -d habilitada. Agora que já vimos para que servem as principais flags do hdparm, podemos utilizá-las para configurarmos os discos. Na configuração do primeiro HD (ATA 133), utilizei os segintes parâmetros: #/sbin/hdparm -A1 -W1 -c1 -d1 -a16 -m16 -u1 -X70 /dev/hda /dev/hda: setting fs readahead to 16 setting 32-bit IO_support flag to 1 setting multcount to 16 setting unmaskirq to 1 (on) setting using_dma to 1 (on) setting xfermode to 70 (UltraDMA mode6) setting drive read-lookahead to 1 (on) setting drive write-caching to 1 (on) multcount = 16 (on) IO_support = 1 (32-bit) unmaskirq = 1 (on) using_dma = 1 (on) readahead = 16 (on) Para a configuração do segundo HD (ATA 100), utilizei os seguintes parâmetros: #/sbin/hdparm -A1 -W1 -c1 -d1 -a16 -m16 -u1 -X69 /dev/hdb /dev/hdb: setting fs readahead to 16 setting 32-bit IO_support flag to 1 setting multcount to 16 setting unmaskirq to 1 (on) setting using_dma to 1 (on) setting xfermode to 69 (UltraDMA mode5) setting drive read-lookahead to 1 (on) setting drive write-caching to 1 (on) multcount = 16 (on) IO_support = 1 (32-bit) unmaskirq = 1 (on) using_dma = 1 (on) readahead = 16 (on) Após serem feitas todas as configurações, podemos fazer novmente o teste de desempenho para que possamos verificar se conseguimos algum ganho de velocidade com as configurações feitas. #/sbin/hdparm -Tt /dev/hda /dev/hda: Timing buffer-cache reads: 128 MB in 0.30 seconds =426.67 MB/sec Timing buffered disk reads: 64 MB in 1.27 seconds = 50.39 MB/sec #/sbin/hdparm -Tt /dev/hdb /dev/hdb: Timing buffer-cache reads: 128 MB in 0.32 seconds =400.00 MB/sec Timing buffered disk reads: 64 MB in 1.71 seconds = 37.43 MB/sec Com este teste de desempenho podemos constatar que a velocidade de leitura de dados do HDA (ATA 133) passou de 2.38 MB/sec para 50.39 MB/sec, ou seja, seu desempenho passou a ser aproximadamente 21 vezes maior que no teste anterior e que a velocidade de acesso do HDB (ATA 100) passou de 2.63 MB/sec para 37.43 MB/sec, aproximadamente 14 vezes maior que o primeiro teste. Estas configurações do hdparm só apresentam resultado na seção atual, ou seja, toda vez que você desligar o computador as configurações voltarão a ser como eram antes. Para resolver este problema, após descobrir qual a melhor configuração para os seus discos, acrescente as linhas de configuração do hdparm no final do arquivo /etc/rc.d/rc.local, desta forma o comando de configuração será executado toda vez que você ligar o computador. Gostaria de deixar bem claro que estes são apenas alguns parâmetros que eu utilizo no meu computador, porém existem vários outros parâmetros que você pode utilizar para melhorar a sua configuração e até mesmo torná-la melhor que a minha, porém faça isso com cuidado pois se você passar para o hdparm parâmetros que o seu HD não suporte você poderá perder todo o conteúdo do seu sistema de arquivos. Para maiores informações leia a página de manual do hdparm ou entre em contato por: e-mail: r.s.ferreira@bol.com.br icq: 89153586