você está aqui: Home  → Arquivo de Mensagens

GNU Linux - Otimização do Acesso a Disco

Colaboração: Marcelo de Gomensoro Malheiros

Data de Publicação: 30 de Abril de 2001

O Marcelo me deu uma dica valiosissima para otimizar o tempo de acesso a disco em meu computador com Conectiva GNU/Linux.

Antes da dica porém cumpre lembrar que o comando hdparm deve ser usado com MUITO cuidado, pois algumas opções, se ativadas, podem corromper os dados em seu disco. Na descrição a seguir inclui apenas aqueles parâmetros que podem ser alterados com segurança e ainda assim garantir um ganho de performance substancial, como vocês poderão constatar. Para mais informações sobre o significado dos parâmetros listados, consulte a manpage do comando hdparm com o comando "man hdparm".

Segue abaixo a transcrição do que fiz em minha máquina com algumas observações minhas.

O comando hdparm invocado tendo como parâmetro apenas a unidade de disco que se deseja otimizar fornece os parâmetros de configuração adotados:

  [root@paris /root]# hdparm /dev/hda
  
  /dev/hda:
   multcount    =  0 (off)
   I/O support  =  0 (default 16-bit)
   unmaskirq    =  0 (off)
   using_dma    =  0 (off)
   keepsettings =  0 (off)
   nowerr       =  0 (off)
   readonly     =  0 (off)
   readahead    =  8 (on)
   geometry     = 1245/255/63, sectors = 20005650, start = 0

Como se pode ver acima, a maioria das opções de otimização estão desativadas (off).

O comando a seguir realiza testes de leitura no disco e nos oferece ao final a taxa de transferência obtida:

  [root@paris /root]# hdparm -t /dev/hda
  /dev/hda:
   Timing buffered disk reads:  64 MB in 16.02 seconds =  4.00 MB/sec

A taxa de transferência foi de 4MB/s, correspondente ao default do sistema.

Vamos então ativar o parâmetro "I/O support":

  [root@paris /root]# hdparm -c 1 /dev/hda
  /dev/hda:
   setting 32-bit I/O support flag to 1
   I/O support  =  1 (32-bit)

Vejamos então que melhoria a alteração deste parâmetro trouxe ao sistema:

  [root@paris /root]# hdparm -t /dev/hda
  /dev/hda:
   Timing buffered disk reads:  64 MB in  9.50 seconds =  6.74 MB/sec

Já obtivemos uma boa melhora, o tempo de acesso a disco caiu quase que pela metade.

Alteremos agora o parâmetro "using_dma":]

  [root@paris /root]# hdparm -d 1 /dev/hda
  /dev/hda:
   setting using_dma to 1 (on)
   using_dma    =  1 (on)

A nossa configuração fica então como:

  [root@paris /root]# hdparm /dev/hda
  /dev/hda:
   multcount    =  0 (off)
   I/O support  =  1 (32-bit)
   unmaskirq    =  0 (off)
   using_dma    =  1 (on)
   keepsettings =  0 (off)
   nowerr       =  0 (off)
   readonly     =  0 (off)
   readahead    =  8 (on)
   geometry     = 1245/255/63, sectors = 20005650, start = 0

Façamos outro teste para vermos o ganho obtido:

  [root@paris /root]# hdparm -t /dev/hda
  /dev/hda:
   Timing buffered disk reads:  64 MB in  5.19 seconds = 12.33 MB/sec

O tempo de acesso a disco passou de 4MB/s para 12.33MB/s, uma melhora substancial.

Para ativar o comando hdparm permanentemente, utilize, em sistemas Conectiva Linux e outros derivados do RedHat, o comando ntsysv. Altere antes os parâmetros que se deseja ativar no arquivo /etc/sysconfig/hdparm.

Este arquivo, no meu computador, tem a seguinte forma:

  < A NAME="note# IDE devices " HREF="#textnote# IDE devices ">< SUP># IDE devices #
  #  /dev/hda - primary master
  #  /dev/hdb - primary slave
  #  /dev/hdc - secondary master
  #  /dev/hdd - secondary slave
  DEVICE="/dev/hda /dev/hdb /dev/hdc /dev/hdd"
   
  < A NAME="note# Status " HREF="#textnote# Status ">< SUP># Status #
  #  0 - disable
  #  1 - enable
  STATUS="1 0 0 0"
   
  < A NAME="note# Multiple sector mode (aka IDE Block Mode) " HREF="#textnote# Multiple sector mode (aka IDE Block Mode) ">< SUP># Multiple sector mode (aka IDE Block Mode) #
  #  Common values: 0, 2, 4, 8, 16 (fast)
  MULTCOUNT="-1 -1 -1 -1"
   
  < A NAME="note# IDE 32-bit I/O support " HREF="#textnote# IDE 32-bit I/O support ">< SUP># IDE 32-bit I/O support #
  #  0 - 16-bit (default)
  #  1 - 32-bit (fast)
  #  2 - 16-bit
  #  3 - 32-bit w/ special sync (fast/safe)
  IO_SUPPORT="1 1 1 1"
   
  < A NAME="note# Interrupt-unmask " HREF="#textnote# Interrupt-unmask ">< SUP># Interrupt-unmask #
  # -1 - disable
  #  0 - safe
  #  1 - fast
  UNMASKIRQ="-1 -1 -1 -1"
   
  < A NAME="note# Using DMA " HREF="#textnote# Using DMA ">< SUP># Using DMA #
  # NOTE: only works with a few combinations of drives and interfaces
  # which support DMA and which are known to the IDE driver
  # -1 - disable
  #  0 - safe
  #  1 - fast
  USING_DMA="1 1 1 1"


Veja a relação completa dos artigos de Marcelo de Gomensoro Malheiros

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script