Usando o hdparm

O hdparm é um utilitário de linha de comando que permite ajustar opções de desempenho e de gerenciamento de energia dos HDs. Um dos usos mais conhecidos para ele é ativar o uso do DMA do acesso de 32 bits para HDs e drives ópticos IDE, uma necessidade básica para um bom desempenho.

Para checar o status atual do drive, logue-se como root e use o “hdparm -c -d”, seguido pelo dispositivo, como em:

# hdparm -c -d /dev/hda

Você receberá um relatório como este:

/dev/hda:
      IO_support = 0 (default 16-bit)
      using_dma = 0 (off)

Este é o pior caso possível. Veja que tanto o acesso de 32 bits quanto o DMA estão desativados. O DMA é um recurso básico, que faz com que o dispositivo possa transferir dados diretamente para a memória, sem passar pelo processador. Com o DMA desativado, o processador é obrigado a ler cada bloco de dados e transferí-los um a um para a memória, o que faz com que a taxa de transferência seja muito baixa (na faixa dos 3 a 4 MB/s) e a utilização de processamento fique nas alturas durante as transferências.

Um exemplo comum são as “paradinhas” ao assistir DVDs, que acontecem quando o DMA do drive óptico está desativado. Como o processador tem que parar a decodificação do vídeo para ler mais dados a cada 5 ou 10 segundos, o vídeo acaba sendo exibido com falhas.

O acesso de 32 bits não tem uma influência tão dramática sobre o desempenho, mas também tem um certo impacto, por permitir que a controladora leia mais dados de cada vez. Para ativar a dupla, basta usar o “hdparm -c1 -d1”, como em:

# hdparm -c1 -d1 /dev/hda

Aproveite para adicionar o comando no final do arquivo “/etc/rc.local”, para que ele seja executado a cada boot.

Muitos tutoriais adicionam também a opção “-k 1” no comando. Ela faz com que a configuração seja mantida em casos de erros, onde a controladora do HD realiza um soft reset. Isto ocorre em casos de erros de leitura em setores do HD e outros problemas relativamente graves. Sem o “-k 1”, estes erros fazem com que o DMA seja desativado.

Eu particularmente prefiro esta configuração (sem o -k 1), pois serve como uma espécie de “alarme”. Um erro ocorre, o DMA é desativado e, pela lentidão do sistema, você percebe que algo está errado. Usando o comando “dmesg” você pode verificar o que ocorreu e decidir se é o caso de atualizar os backups ou trocar de HD.

Na grande maioria dos casos, simplesmente ativar o DMA e o modo de transferência de 32 bits já faz com que o HD trabalhe de forma otimizada, pois o hdparm detecta as configurações suportadas pela controladora.

Mas, em alguns casos, você pode conseguir pequenos ganhos ajustando o modo Ultra DMA usado pelo HD. Neste caso, use os parâmetros “-X66” (UDMA 33), “-X68” (UDMA 66) ou “-X69” (UDMA 100), como em:

# hdparm -X69 /dev/hda

Esta opção deve ser usada apenas em conjunto com HDs IDE, nunca com os HDs serial ATA, que já operam nativamente a 150, 300 ou 600 MB/s.

Ao tentar forçar um modo de transferência não suportado pelo seu drive, você recebe uma mensagem de erro, como em:

# hdparm -X70 /dev/hda

      /dev/hda:
      setting xfermode to 70 (UltraDMA mode6)
      HDIO_DRIVE_CMD(setxfermode) failed: Input/output error

Nestes casos, o padrão do hdparm é voltar à configuração anterior para evitar perda de dados. Mas, em alguns poucos casos, forçar um modo não suportado pode realmente corromper os dados do HD, por isso uso este recurso com cautela.

Você pode verificar os modos suportados pelo seu drive usando o comando “hdparm -i”, como em:

# hdparm -i /dev/hda

Os modos suportados aparecem na linha “UDMA Modes”, como nesse exemplo:

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

A principal observação é que isso é necessário apenas em dispositivos IDE. Ao tentar executá-lo em dispositivos SATA, você receberá uma mensagem de erro, avisando que os parâmetros não são suportados, como em:

# hdparm -c1 -d1 /dev/sda

      /dev/sda:
      setting 32-bit IO_support flag to 1
      HDIO_SET_32BIT failed: Invalid argument
      setting using_dma to 1 (on)
      HDIO_SET_DMA failed: Inappropriate ioctl for device

Isso acontece por que a ativação e desativação do DMA e do acesso de 32 bits são uma particularidade das interfaces IDE, configurações que surgiram por questões histórias, já que os recursos foram incluídos ao longo do desenvolvimento do padrão. No caso do SATA, o uso do DMA é um recurso intrínseco do padrão, o que dispensa qualquer configuração.

De qualquer forma, se você achar que o desempenho do HD está abaixo do normal, pode tirar a dúvida usando o “hdparm -t”, que faz um teste rápido de leitura, indicando a taxa obtida. Em HDs atuais, a taxa deve ficar acima dos 50 MB/s, com exceção de alguns HDs de notebook:

# hdparm -t /dev/sda

      /dev/sda:
      Timing buffered disk reads: 190 MB in 3.01 seconds = 63.15 MB/sec

O segundo uso para o hdparm, este independente da interface usada pelo HD, é o ajuste das opções relativas ao gerenciamento de energia.

A principal configuração é o ajuste do tempo de espera ou seja, o tempo de inatividade antes que o HD seja colocado em modo de economia de energia (spindown). Ele é ajustado através da opção “-S“, seguida por um número que vai de 1 a 255.

Esta opção possui uma notação peculiar, onde os números de 1 a 240 indicam múltiplos de 5 segundos (1 para 5 segundos, 10 para 50 segundos e 240 para 20 minutos) e os números de 241 em diante indicam múltiplos de 30 minutos (242 indica uma hora, 244 duas horas, e assim por diante). Para um tempo de espera de 10 minutos, por exemplo, use:

# hdparm -S 120 /dev/sdb

Essa opção é bastante útil se você tiver uma máquina com vários HDs instalados, onde apenas o HD principal é usado regularmente e os demais são usados para backup ou armazenamento de arquivos pouco usados.

Nesse caso, uma boa forma de garantir que os HDs fiquem desligados enquanto não são usados (economizando energia e evitando que eles se desgastem desnecessariamente) é fazer com que eles sejam desligados depois de 5 minutos, por exemplo. Nesse caso, você precisaria apenas incluir linhas como essas no “/etc/rc.local”, especificando os tempos de espera para cada um dos HDs:

# Spindown dos HDs depois de 5 minutos de inatividade:
      hdparm -S 60 /dev/sdb
      hdparm -S 60 /dev/sdc
      hdparm -S 60 /dev/sdd

A grande observação é que a opção “-S” é inefetiva quando usada no HD principal (onde o sistema está instalado), pois as atividades de escrita dos logs, leitura de arquivos e bibliotecas (que ocorrem sempre que qualquer programa precisa de uma função adicional que ainda não está carregada) fazem com que o HD acabe nunca ficando tempo suficiente sem uso para ativar o spindown. Forçar uma configuração agressiva (5 ou 10 segundos, por exemplo) acaba sendo contra-produtivo (e perigoso!) pois vai fazer com que o HD fique constantemente acelerando e desacelerando, acabando por consumir mais energia que consumiria se simplesmente ficasse o tempo todo girando.

Uma forma simples de reduzir o problema é adicionar a opção “relatime” entre as opções de montagem para a partição no “/etc/fstab”, como em:

/dev/sda1    /    ext3    relatime,errors=remount-ro    0 1

Ela reduz o uso das operações de atualização de data de acesso (que acabam fazendo com que o sistema precise realizar uma operação de escrita para atualizar a data de acesso sempre que lê cada arquivo), o que não apenas reduz bastante o volume de operações de escrita, mas também melhora o desempenho.

Outra opção, um pouco mais agressiva, é a “noatime”, que desativa as atualizações completamente, resultando em um ganho adicional. Ela não é indicada para uso em servidores ou em estações de trabalho (já que você passa a não ter como saber quando cada arquivo foi modificado), mas pode ser usada para aumentar um pouco a autonomia das baterias em notebooks, por exemplo. Nesse caso, a entrada no fstab ficaria:

/dev/sda1    /    ext3    noatime,errors=remount-ro    0 1

Outra dica é ativar o laptop-mode, que (entre outras coisas) atua sobre o cache de escrita do HD, reduzindo (quando possível) o número de escritas no HD ocasionadas pelos logs e outras funções. Ele pode ser instalado através do pacote “laptop-mode-tools”, que está disponível em quase todas as distribuições, como em:

# apt-get install laptop-mode-tools

Com o pacote instalado, basta ativar o serviço:

# /etc/init.d/laptop-mode start

A segunda opção é o “-B”, que ajusta o gerenciamento avançado de energia. Diferente do spindown, que faz o HD simplesmente estacionar as cabeças e parar de girar, o gerenciamento avançado controla fatores como a velocidade de rotação, a tensão usada, o estacionamento das cabeças e outros fatores.

Devido ao problema de 2007, onde uma configuração agressiva adotada pelo Ubuntu e o Mandriva fazia com que os HDs em algumas máquinas ficassem acelerando e desacelerando constantemente (reduzindo a vida útil), a maioria das distribuições passou a usar a opção “-B 254”, que reduz a atividade do gerenciamento a um mínimo. Você pode ganhar alguns minutos de autonomia usando a opção “-B 127”, que ainda é bem conservadora, mas já propicia uma boa economia:

# hdparm -B 127 /dev/sda

Como de praxe, é necessário adicionar o comando no arquivo “/etc/rc.local” (ou outro arquivo executado durante a inicialização), para que ele seja ativado durante o boot, já que as configurações do hdparm não são persistentes. Outra opção para salvar as opções é usar o arquivo “/etc/hdparm.conf” (“/etc/conf.d/hdparm” nas distribuições derivadas do Red Hat), que é lido pelo sistema no início do boot.

Uma opção menos conhecida, mas que é bastante útil em alguns HDs, é o gerenciamento acústico que, quando suportado pelo HD, permite escolher entre um modo de funcionamento “silencioso”, onde o HD gira a uma velocidade mais baixa, produz menos barulho e consome menos energia, ou um modo “barulhento”, onde ele simplesmente funciona com o melhor desempenho possível.

Esta opção é definida usando o parâmetro “-M”, seguido de um número entre 128 e 254, onde 128 é o modo silencioso e o 254 é o modo barulhento. Alguns HDs suportam números intermediários, que permitem escolher a melhor relação performance/barulho.

Para descobrir quais os valores suportados pelo seu dive, use o comando “hdparm -I” (i maiúsculo), como em:

# hdparm -I /dev/hda | grep acoustic

      Recommended acoustic management value: 128, current value: 254

Para alterar a configuração, indique o valor desejado, como em:

# hdparm -M128 /dev/hda

Lembre-se de que apenas alguns HDs suportam efetivamente este recurso. Nos demais modelos, a configuração não altera nada.

Concluindo, o hdparm pode ser usado também para limitar a velocidade do CD-ROM, o que pode ser útil em drives muito barulhentos, ou em notebooks, onde você queira economizar energia. Para isso, use o parâmetro “-B”, seguido da velocidade e o device do drive, como em:

# hdparm -E 8 /dev/hdc

Todas as configurações do hdparm não são persistentes. Por isso, lembre-se de incluir os comandos em algum dos arquivos de inicialização, para que sejam executados durante o boot.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X