Skip navigation.

Depósito do Ping Fløød

Identificando dispositivos PCI

Esse artigo mostra como saber, de maneira precisa e confiável, qual o driver correto para um dispositivo PCI usando o mínimo de ferramentas. Não importa qual Sistema Operacional você esteja usando.
Esse artigo se propõe a falar somente sobre a tarefa de "saber" qual o driver correto para um dispositivo. Instalar um driver qualquer é algo que está além do escopo desse artigo. Essa técnica dispensa o trabalho de ter que abrir o gabinete para ver o que está escrito na placa, até porque, na minha opinião, esse é um procedimento falho, já que o nome real de um dispositivo nem sempre está decalcado no chip.
Trabalho numa assistência técnica, e tenho que lidar com instalação de drivers constantemente então não posso ficar perdendo tempo com detalhes. Ou seja, esse artigo será muito útil para pessoas de função parecida com a minha. Quando você se depara com situações onde precise, num só dia, instalar diversos drivers em mais de uma máquina com sistemas diferentes. Nesse caso, é recomendado que leia esse artigo, pois o método convencional seria bem demorado (e desengonçado).
Por outro lado, se você é uma pessoa que precisa instalar drivers só de vez em quando, esse artigo lhe será pouco útil.
A instalação de driver é uma "ciência inexata" e seu processo é irregular (pelo menos de início).
Portanto, não existe um script ou programa que possa fazê-lo do começo ao fim sem intervenção humana.

Primeiramente, o que é um driver?


Driver é uma camada de abstração entre o hardware e o Sistema Operacional. O hardware não é manipulado diretamente pelo software. Cada dispositivo possui funções específicas e diferente funcionamento. Cada um precisa se comunicar com o sistema de maneira diferente.
Quando um Sistema precisa se comunicar com um dispositivo, ele consulta o driver, o qual manda a mensagem para o hardware de maneira que ele entenda, esse então obtém a resposta e manda de volta para o sistema.
Driver também é um software, mas um software especial. Ele é um pedaço de código que contém instruções de baixo nível (funções muito próximas do hardware, intimamente vinculadas com o dispositivo em questão, rotinas que seriam pouco inteligíveis para seres humanos).
Por ser um software, é escrito por pessoas, então é muito comum que contenha bugs.

Como o Sistema Operacional sabe qual o driver correto para determinado dispositivo?
Essa é a questão chave desse artigo. Logicamente ele não adivinha, ele apenas usa informações que estão gravadas no chip do próprio dispositivo: VENDOR ID, DEVICE ID e CLASS ID - vou explicar cada uma delas:

VENDOR ID:
VENDOR = "fornecedor", ID = abreviação de "identity", então, em português seria "Identificação do Fornecedor";

DEVICE ID:
DEVICE = "dispositivo", então: "Identificação do Dispositivo".
CLASS ID:
CLASS = "classe", então: "Classe do Dispositivo";
Na verdade, existem mais informações disponíveis no chip de um dispositivo, porém as que citei acima são as principais.
Para esse IDs, são reservados dois bytes de informação, então, numa placa de rede Realtek por exemplo, temos:
VENDOR ID 10EC
DEVICE ID 8139
CLASS ID 0200
Trata-se do popular modelo RTL8139.
Baseado nisso, é que o Sistema Operacional tem como localizar o driver correto para cada dispositivo.
Todo Sistema Operacional, procura por novos dispositivos a cada boot, o que é feito em segundo plano. O sistema, mantém armazenada, em algum lugar, uma tabela geral dos dispositivos presentes no computador.
Durante todo boot, o sistema consulta a BIOS e varre todos os barramentos da placa e então é feita uma lista do que foi encontrado. Tal lista é comparada com a tabela já existente na intenção de saber se algum dispositivo foi desconectado ou se um novo foi adicionado. Caso algo tenha sido removido, o sistema ignora a carga do driver para o dispositivo em questão, caso algo tenha sido adicionado, são consultadas as informações contidas no próprio dispositivo e efetua-se uma busca no banco de dados de drivers existente no próprio sistema. Se ele encontrar algo que combine, o driver é instalado (geralmente) em segundo plano, caso contrário, o driver deverá ser instalado manualmente pelo próprio usuário.
Todo esse processo é baseado no PCI ID (VENDOR, DEVICE e CLASS ID). O nome que vemos quando o dispositivo já está instalado é algo secundário, usado apenas para ser mais amigável. Tal nome pode ser útil, mas não deve ser tratado com muita importância quando se usa para localizar um driver qualquer, isso pode gerar confusão pois o nome as vezes varia em circunstâncias diferentes, por exemplo, a mesma placa pode ter um nome no Linux e outro ligeiramente diferente num sistema Windows.
Eu sempre carrego comigo um arquivo chamado "pci.ids", o qual pode ser encontrado em "The Linux PCI ID Repository" - http://pciids.sourceforge.net.
É um projeto comunitário que visa listar todos os dispositivos conhecidos num arquivo de texto, relacionando VENDOR e DEVICE ID com seus respectivos nomes "amigáveis". Ele não é completo porém está sendo atualizado constantemente (já ocorreu comigo de baixar o arquivo e ver que o último release era de algumas horas atrás). Isso não é um programa, como podem ver, apenas um arquivo de texto puro o qual pode ser usado por outros utilitários (como o lspci por exemplo).
Tendo esse arquivo sempre por perto, basta pegar os PCI IDs do dispositivo e pesquisá-los no arquivo, usando um editor de texto qualquer (como o VIM ou o Notepad2).
Após obter o nome "amigável" do dispositivo, fica mais fácil pesquisar no Google ou então em http://www.driverguide.com (um cadastro gratuito é requerido).
Dica para WinUsers: Arquivos de driver para sistemas Windows são acompanhados de um arquivo com extensão INF. Isso é uma espécie de script o qual é processado pelo sistema durante a instalação do driver. Por ser um arquivo de texto puro, você pode abrí-lo em qualquer editor de texto. Então você checa para ver se o PCI ID do dispositivo em questão consta dentro desse arquivo. Por exemplo, num driver para um modelo de modem Lucent qualquer, teremos a seguinte informação em algum lugar no arquivo INF:
VEN_11C1&DEV_0452&SUBSYS_1513144F&REV_00
onde:
"VEN_11C1" indica o VENDOR ID
"DEV_0452" indica o DEVICE ID
Algumas vezes, o driver vem acompanhado com um instalador (setup.exe, por exemplo). Quase sempre você pode ignorá-lo e instalar manualmente sem que ocorra nenhum problema. É muito útil fazer isso quando você quer que seja instalado somente o driver para o dispositivo, e nada softwares adicionais que muitas vezes nem usamos. Resumindo, um instalação manual, apontando o local exato onde consta o arquivo INF e deixar que o Windows instale sozinho, é uma instalação mais "limpa" e leve, já que somente os arquivos essenciais serão instalados.

Como obter o PCI ID


Usando o POST:
Existem várias maneiras de você conseguir tais informações, sendo que o POST é a mais simples e eficiente na minha opinião. POST é uma abreviação de "Power On Self Test" (traduzindo, "Auto-Teste ao Ligar").
Existe uma outra descrição menos técnica para isso que todos conhecem (até mesmo minha vó): "Letrinhas Brancas que aparecem numa tela preta quando liga o PC".
Na maioria das vezes, o POST é dividido em duas partes. Na primeira, assim que ligamos o PC, ele exibe informações como nome e data da BIOS, modelo da placa-mãe, etc, faz um teste básico na memória RAM, detecta os dispositivos IDEs (HDs, DVD/CDs), daí então pula para a segunda parte, onde limpa a tela anterior e imprime informações gerais de todo o hardware numa tabela que ocupa geralmente a tela inteira. Aquilo que queremos está no final dela: "PCI Device listing".
Para pausar a execução do POST nessa tela, você pressiona "PAUSE-BREAK". Agora é possível ler, em varias linhas, o PCI ID de cada dispositivo conectado no barramento PCI.
Porém existem algumas BIOS que exibem informações resumidas, ocultando o PCI ID e mostrando somente a descrição da classe dos dispositivos. Nesse caso, será necessário usar outra técnica.
Usando o Sistema Operacional:
Windows: você pode obter informações dos PCI IDs consultando o Registro, em máquina Win9x, use a chave: HKEY_LOCAL_MACHINE\Enum\PCI
... e, em máquinas NT/2000/XP, vá em: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\PCI
Linux: no shell, use o comando lspci. Mesmo não tendo esse sistema instalado na sua máquina, você pode usar uma distribuição que roda do CD, como Kurumin por exemplo.
obs: tanto em Linux quanto Windows, não é preciso ter o driver instalado para obter tais informações (claro, senão de que valeria essa técnica), porém no caso de Sistemas Windows, é necessário que você conclua aquele assistente de instalação de driver mesmo que não tenha o driver para que ele grave as informações no registro. Outro detalhe, mesmo que você remova uma placa qualquer, o Windows ainda mantém as informações de tal dispositivo armazenadas no registro para o caso de você recolocá-lo novamente, isso também acontece quando você desabilita dispositivos on-board. Então o técnico desavisado pode se confundir, já que após muitas modificações de hardware, alguns ítens que você vê no registro simplesmente não existem mais.

Existem outras ferramentas que podem lhe ajudar:


* PCI Sleep - simples utilitário free open source que roda em FreeDOS ou MS-DOS
* procure no Google por "PCI Sniffer"
* procure também pelo utilitário Windows "Unknown Devices"
Técnicas que eu aconselho não usar:
* Abrir a CPU para ver o que está impresso na placa
Essa é a primeira técnica usada pelo técnico mais iniciante no assunto. Por impulso, é a primeira coisa que vem na cabeça quando você tem que instalar um driver e não conhece nem o fabricante nem o modelo. Mas como já disse acima, na placa nem sempre está impresso bonitinho o nome correto do modelo, algumas vezes, nem o nome correto do fabricante.
Por exemplo, existem alguns modems com chipset Motorola que são fabricados pela Digitron. Supondo que um cara desavisado, caiu de para-quédas num problema onde precise instalar esse driver mas ele não conhece nem o fabricante nem o modelo. Então ele abre a CPU para ler o que está escrito na placa. Puxa, mas ela está conectada no slot mais inacessível e devido sua posição, não dá pra ler o que está escrito, nem mesmo inclinando-se a CPU. Solução, remover a placa. Hum! Com ela em mãos, o sujeito leu "Digitron" (pois estava em letras grandes) impresso em branco na parte verde mas não reparou direito que num chip bem pequeneninho, estava impresso de maneira pouca destacada o nome "Motorola", então ele recoloca a placa, fecha a CPU e inicia a procura pelo driver.
Até aí já foram gastas algumas calorias desnecessárias, se abaixar, abrir CPU, poeira, suor, espirro.
Concluindo, se você procura na internet por "Digitron", é provável que você acabe encontrando o driver, porém seria muito mais eficiente e certeiro, procurar por "Motorola", ou "SM56" ou pelo DEVICE ID "3052".
* Instalar "Pacotes" fornecidos no CD (Windows)
Essa também não é uma técnica errada, porém, na minha opinião, é desnecessária, pois no final do processo, é muito provável que tenha sido copiado para seu HD, mais arquivos do que o necessário para seu dispositivo funcionar. Eu falo daqueles utilitários ou softwares que são instalados durante o processo e se registram para inicializar com o sistema na intenção de oferecer uma interface um pouco mais "amigável" para o usuário ou então acesso a recursos "especiais" do dispositivo. Tais utilitários são inofensivos, e algumas vezes trazem opções até interessantes, mas na prática quase ninguém usa, tornando a inicialização do sistema um pouquinho mais lenta.
Nesse caso, você pode usar o CD, mas ao invés de deixar ele "se auto se instalar a si próprio", instale manualmente cada dispositivo apontando a pasta exata para que o Windows instale apenas o essencial.
Por outro lado, se você não se importa em ter o controle do que está acontecendo e quer apenas ver os drivers instalados o mais rápido possível, não há nada de errado em usar esse procedimento.

Dica rápidas para usuários Windows


* Em máquinas Windows XP, é mais fácil obter o PCI ID usando o "Gerenciador de Dispositivos". Acesse a guia de propriedades do dispositivo "desconhecido" e vá na aba "Detalhes". Lá estão as informações que podem ser encontradas no registro, porém são exibidos detalhes daquele dispositivo somente, reduzindo as chances de confusão.
* Supondo que você já saiba o PCI ID, e tem um diretório com muitos subdiretórios contendo os arquivos do possível driver (um CD de placa-mãe, por exemplo), use o localizar do próprio Windows e procure pelo DEVICE ID ou VENDOR ID dentro de arquivos com extensão INF.
Você também pode usar essa técnica para obter o PCI ID de uma placa de vídeo AGP, já que, apesar de ser um barramento separado, é derivado do PCI.


Links Relacionados:


* Wikipedia - http://wikipedia.org/ - procure por "pci"
* The Linux PCI ID Repository - http://pciids.sourceforge.net
* Acesse www.linmodems.org se estiver procurando drivers de (win)modems para Linux
* PCI SIG - http://www.pcisig.com/

Cesar Rodrigues P. Silva
http://cesar-rodrigues.blogspot.com/
06/02/2006

Pigs fly again

LIVE 8 - THE X-FACTOR
Review by Brain Damage contributor Jack Nicholson

They say that no matter who is playing at a concert, it has to have that so-called ‘X’ factor. That bit of something extra. That unique thing that makes the gig special. The thing that only comes around once in a blue moon.

You could put Elton John, U2 and Madonna on stage with The Who, Sting and Paul McCartney, but without the ‘X’ factor, the concert is merely average.

Pink Floyd is the ‘X’ factor.

Rephrase. Pink Floyd with Roger Waters is the ‘X’ factor.

Pigs really flew when Pink Floyd reunited with Roger Waters after a 24-year absence at July 2nd’s Hyde Park Live 8 concert.

In the name of poverty, the famous feud between Gilmour and Waters seemed petty. Even Gilmour agreed. Wow.

Walking on stage to the unmistakable Breathe introduction, the Live 8 crowd went bezerk. And after 12 hours of standing in the most cramped conditions that was quite an achievement. (Trust me, I was there.)

Waters, obviously out to prove a point, grinned from ear to ear as the band belted through a set list to make any Floyd fan’s mouth water.

Naturally, the band steered well clear of the post-Waters stage, opting for Breathe and Money to open their 23 minute set.

Money, led slightly out of time by Waters at the start, proved to be one of the crowd favourites of the evening.

Wish You Were Here followed, with Waters adding sentiment to the evening.

"It's actually quite emotional, standing up here with these three guys after all these years. Standing to be counted with the rest of you. Anyway, we're doing this for everyone who's not here, particularly, of course for Syd," he said.

Then, who would have guessed. Comfortably Numb. I think the song title simply speaks for itself. And if it doesn’t, then there’s just one word. Amazing.

Gilmour was pulled to centre stage by Waters for a bow to finalise the performance, met with a seal of approval from the crowd.

Putting a Faithless replay from Berlin on the screen to keep the crowd occupied before Paul McCartney finished the evening seemed somewhat of an insult. Nothing would top that, so why did they try?

After my video recorder failed at recording Floyd, I’ve settled for a mediocre internet copy. It’s been on loop all day long.

No concert will seem the same again. Unless... Pigs fly again?

Tire o máximo do seu HD usando o HDPARM

Tire o máximo do seu HD usando o HDPARM
Autor: Davidson Rodrigues Paulo <davidsonpaulo at gmail.com>
Data: 19/11/2004

Introdução



Não é novidade que os HD's de hoje em dia são dotados de alta tecnologia, tanto no que diz respeito a capacidade de armazenamento quanto a velocidade de leitura e escrita. Tecnologias como UDMA, PIO, ATA, SATA têm feitos dos HD's dispositivos de gravação extremamente rápidos se comparados aos mesmos dispositivos de poucos anos atrás.

Mas como sabemos, uma boa parte dos recursos suportados pelos HD's são ativados via software, o que torna possível ter um HD de última geração que não funcione a contento, pelo simples fato de este não estar configurado. Você sabia, por exemplo, que em muitos casos após a instalação do Linux os HD's podem estar até mesmo sem DMA ativado?

Pois é. Isso pode comprometer a velocidade do sistema todo. Por isso, sem mais delongas, vou apresentar-lhes o hdparm. Um software que tem por finalidade analisar dispositivos de disco rígido e configurá-los, ativando ou desativando recursos.

Instalação



O hdparm, por ser uma ferramenta considerada essencial, vem por padrão na maioria das distribuições Linux. Por isso, se você tiver feito uma instalação personalizada e não tiver selecionado o hdparm, você pode instalá-lo procurando o CD de instalação da sua distro. Se quiser instalar a versão mais recente, você pode pegá-la no endereço que segue:
http://freshmeat.net/projects/hdparm/

Para instalar, o procedimento conhecido:

$ tar zxvf hdparm-5.5.tar.gz
$ cd hdparm-5.5
$ ./configure --prefix=/usr
$ make
$ su -c "make install"


No Debian e em distros derivadas, use:

# apt-get install hdparm


Para verificar se está tudo certo, digite num terminal:

# hdparm /dev/hdx


(substitua x pela letra da sua unidade)

Deverá ser listado algo como isto:
/dev/hda:
multcount    = 16 (on)
IO_support   =  1 (32-bit)
unmaskirq    =  0 (off)
using_dma    =  1 (on)
keepsettings =  0 (off)
readonly     =  0 (off)
readahead    = 16 (on)
geometry     = 16383/255/63, sectors = 40020664320, start = 0


hdparm instalado, vamos ao que interessa.

Obtendo e analisando informações



Vamos ver agora como obter e interpretar as informações obtidas através dos relatórios do hdparm.

O hdparm tem um invejável sistema de obtenção de informações. Pode-se saber praticamente tudo sobre o HD. Para isso, basta escolher o tipo de relatório que se deseja obter e digitar a linha de comando.

A sintaxe de uso do hdparm é:

hdparm <parâmetros> <drive>


Os parâmetros de relatório são:
<nada> : Informações realmente básicas; 
-i : Informações detalhadas; 
-I : Informações técnicas completas.


E no lugar de <drive> colocamos a localização da unidade que estamos verificando. Pode ser /dev/hda, /dev/hdc, /dev/sda, etc.

Vejamos agora os relatórios, começando pelo mais simples:

# hdparm /dev/hda 
/dev/hda:
multcount    =  0 (off)
IO_support   =  0 (default 16-bit)
unmaskirq    =  0 (off)
using_dma    =  1 (on)
keepsettings =  0 (off)
readonly     =  0 (off)
readahead    =  0 (off)
geometry     = 16383/255/63, sectors = 40020664320, start = 0


Vamos ver o que essa lista nos diz:
multcount = 0 (off) --> o parâmetro multcount está desligado. O multcount é o modo de setores múltiplos que permite que a transferência de múltiplos setores por interrupção de I/O. Os HDs atuais têm suporte a essa opção, que incrementa as velocidades de leitura e gravação do disco.

IO_support = 0 (default 16-bt) --> o modo de I/O está definido para 16 bits. Os modos suportados são 16 bits, 32 bits, e 32 bits com uma seqüência especial de sincronismo exigida por alguns chipsets. Em HDs que suportam o modo 32 bits, este oferece uma melhor performance se comparado ao modo 16 bits. É possível saber se o seu HD suporta o modo 32 bits na BIOS do seu computador.

using_dma = 1 (on) --> o DMA (Direct Memory Access ou Acesso Direto a Memória) é um recurso primordial para se obter uma boa performance do HD. A menos que seu HD seja muito antigo, ele suporta DMA e esta opção deve estar ativada, como nesse caso.

readahead = 0 (off) --> o recurso de leitura adiantada está desativado. A leitura adiantada permite que o HD faça a leitura dos dados antes de começar a transferir. Isso funciona como um cache, para evitar pausas nas transferências no caso de qualquer processo que interfira na leitura dos dados no HD. Se possível, este parâmetro deve estar ativado para melhorar a performance e a estabilidade das transferências dos dados no HD.

Agora, vejamos um relatório um pouco mais completo:

# hdparm -i /dev/hda 
/dev/hda:

Model=ST340014A, FwRev=3.54, SerialNo=3JV89GLK
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs 
RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, 
MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, 
LBAsects=78165360
IORDY=on/off, tPIO={min:240,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=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 2:

* signifies the current active mode


De onde podemos verificar os seguintes parâmetros:
BuffSize=2048kB --> esse parâmetro mostra o tamanho do buffer de gravação. De preferência, o buffer deve ter o maior valor possível.

MaxMultSects = 16 --> isso informa número máximo de setores que podem ser lidos por vez. Devemos prestar atenção para não configurar a leitura de setores múltiplos acima desse valor, o que poderia causar perda de dados.

PIO modes: pio0 pio1 pio2 pio3 pio4 --> aqui são listados os modos de PIO disponíveis para o HD. A preferência é de se usar o maior modo, nesse caso, o pio4.

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 --> estes são os modos de UltraDMA suportados pelo HD, sendo que o modo que aparece com um * é o modo que está sendo utilizado. Deve-se configurar o HD para utilizar o maior valor possível de UDMA, nesse caso, o udma5.


Por último, vejamos o relatório mais completo:

# hdparm -I /dev/hda 
ATA device, with non-removable media
Model Number:       ST340014A
Serial Number:      3JV89GLK
Firmware Revision:  3.54
Standards:
Used: ATA/ATAPI-6 T13 1410D revision 2
Supported: 6 5 4 3
Configuration:
Logical         max     current
cylinders       16383   65535
heads           16      1
sectors/track   63      63
--
CHS current addressable sectors:    4128705
LBA    user addressable sectors:   78165360
LBA48  user addressable sectors:   78165360
device size with M = 1024*1024:       38166 MBytes
device size with M = 1000*1000:       40020 MBytes (40 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 4      Queue depth: 1
Standby timer values: spec'd by Standard
R/W multiple sector transfer: Max = 16  Current = 16
Recommended acoustic management value: 128, current 
value: 0
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 
udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns  IORDY flow 
control=120ns
Commands/features:
Enabled Supported:
*    READ BUFFER cmd
*    WRITE BUFFER cmd
*    Host Protected Area feature set
*    Look-ahead
*    Write cache
*    Power Management feature set
Security Mode feature set
*    SMART feature set
*    FLUSH CACHE EXT command
*    Mandatory FLUSH CACHE command
*    Device Configuration Overlay feature set
*    48-bit Address feature set
SET MAX security extension
*    DOWNLOAD MICROCODE cmd
*    SMART self-test
*    SMART error logging
Security:
supported
not     enabled
not     locked
not     frozen
not     expired: security count
not     supported: enhanced erase
HW reset results:
CBLID- above Vih
Device num = 0 determined by the jumper
Checksum: correct


Aqui você vai encontrar características técnicas importantes do HD, mas não vai conseguir tirar muitas informações que ajudem na configuração do hdparm. Uma informação interessante é a:

Recommended acoustic management value: 128, current value: 0

O acoustic management, ou ajuste acústico, é um recurso que controla a velocidade de rotação do HD para que ele faça mais ou menos barulho. É fácil entender que, rodando menos, o HD vai fazer menos barulho, entretanto, é óbvio que ele não atingir a velocidade máxima de leitura e gravação. Alguns fabricantes então, fazem o favor aos usuários de verificar qual o melhor ajuste acústico para cada modelo de HD produzido. Nesse caso, o fabricante recomenda o valor 128 para esse parâmetro, valor esse que deve ser verificado e ajustado conforme a necessidade do usuário, para acabar com aquele horrível "zzzziiiinnnnn"... :D

No próximo passo, vamos aprender a configurar o hdparm utilizando as informações desses relatórios.

Configurando o disco



Logo se vê pelos relatório que existem muitos parâmetros que podem ser alterados pelo hdparm, e essas alterações vão interferir diretamente no desempenho do HD, positiva ou negativamente. É preciso então saber interpretar as informações e nunca fazer testes com opções que podem representar perigo para a integridade dos dados contidos no disco.

Como vimos anteriormente, o uso do hdparm é simples, sendo sua sintaxe:

hdparm <parâmetros> <disco>


Segue agora os principais parâmetros do hdparm, e como utilizá-los e seta-los corretamente.
-c<valor> : Esse parâmetro especifica o modo de interrupção de I/O. Os valores que pode assumir são:
1: modo 16 bits
2: modo 32 bits
3: modo 32 bits

Para saber se seu HD suporta o modo 32 bits, veja na BIOS do seu computador.

-d<valor> : Ativa/desativa o uso do DMA. Para ativar, use o valor 1. Para desativar, use 0.

-X<valor> : Seleciona o modo de DMA a ser utilizado. Pode variar de sdma0 (pior), passando por mdma e chegando em udma5 (melhor). Vamos desconsiderar o uso dos modos sdma que são muito antigos. Para utilizar os modos mdma, basta utilizar o número do modo somado com 32. Ou seja: use 32 para ativar mdma0 (32 + 0), e 34 para o mdma2 (32 + 2). Para utilizar os modos udma, utilize o número do modo somado com 64. Ou seja: use 65 para ativar o udma1 (64 +1) e 69 para o udma5 (64 + 5). Para saber qual modo é suportado pelo seu HD, basta ver as seguintes linhas:

DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

Obtidas com o comando "hdparm -i /dev/hdX" (X é a letra da sua unidade de disco). O modo que deve ser utilizado é o último que aparece na lista. Nesse caso, é o modo udma5 (69).

-m<valor> : Especifica o valor do parâmetro MultSects. O valor desse parâmetro não pode ser maior que o parâmetro MaxMultSects, que encontramos na linha:

BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16

do relatório gerado com o comando "hdparm -i /dev/hdX". Nesse caso, o parâmetro MaxMultSects tem o valor 16, então o valor de MultSects deve ser igual ou menor a esse (de preferência igual).

-A<valor> : Ativa/desativa o recurso de leitura adiantada. O valor 1 ativa, enquanto 0 desativa.

-a<valor> : Configura a leitura adiantada. O valor especificado é multiplicado por 512 Bytes. Assim, se você usar 8, a leitura adiantada será de 4KB. A recomendação é de que você use o mesmo valor que usar para o parâmetro MultSects.

Veja um exemplo de configuração com esses parâmetros acima:

# hdparm -c1 -d1 -X69 -m16 -A1 -a64 /dev/hda 
/dev/hda:
setting fs readahead to 16
setting 32-bit IO_support flag to 1
setting multcount to 16
setting using_dma to 1 (on)
setting xfermode to 69 (UltraDMA mode5)
setting drive read-lookahead to 1 (on)
multcount    = 16 (on)
IO_support   =  1 (32-bit)
using_dma    =  1 (on)
readahead    = 16 (on)
done.


Esse comando configurou o HD para utilizar o modo de I/O de 32 bits (-c1), ativou o uso do DMA (-d1), ativou o UltraDMA modo 5 (-X69), definiu o leitura de setores múltiplos para 16 (-m16), ativou a leitura adiantada (-A1) e ajustou a leitura adiantada para 8 KB (-a16). Tome-o por base para configura o seu HD conforme as suas características.

A seguir, vamos ver como fazer o ajuste acústico e ajustar o desligamento do motor para economizar energia.

O ajuste acústico e o gerenciamento de energia



O ajuste acústico é bastante simples, como todas as configurações do hdparm. Basta utilizar a sintaxe.

hdparm -M<valor> <disco>


O valor pode variar de 128 (lento e quieto) até 254 (rápido e barulhento). Para não perder muito tempo testando valor por valor, utilize aquele que é recomendado pelo fabricante. Utilize o comando:

hdparm -I <disco> | grep acoustic


Para ver esse valor. Veja esse exemplo:

# hdparm -I /dev/hda | grep acoustic
Recommended acoustic management value: 128, current value: 0


Veja que, nesse caso, o valor recomendado é 128. Então, dê o comando:

# hdparm -M128 /dev/hda 
/dev/hda:
setting acoustic management to 128
acoustic     =  128 (128=quiet ... 254=fast)


Para desativar o ajuste acústico, utilize -M0. Os HDs atuais geralmente nem precisam desse recurso, pois já são bastante silenciosos. Isso é útil para os mais antigos, que parecem besouros e cigarras quando estão trabalhando :D.

Outra coisa muito útil que pode ser feita com o hdparm é a configuração do tempo de spindown, ou seja, o tempo que o HD deve esperar para desligar o motor caso fique muito tempo sem uso. Isso reduz o consumo de energia e aumenta a vida útil do HD, caso seu computador permaneça muito tempo ligado mas nem sempre em uso.

Para configurar o tempo de spindown a sintaxe é:

hdparm -S<valor> <disco>


Onde <valor> deve ser substituído pelo código do tempo desejado.

Valores entre 1 e 240 especificam múltiplos de 5 segundos, ou seja, o valor 10 significa um tempo de espera de 50 segundos, e o valor 200 muda esse valor para 1000 segundos (16 minutos e 40 segundos).

Valores de 241 a 251 especificam múltiplos de 30 minutos, variando de 11 minutos (241) até 5 horas e meia (251).

Vamos a um exemplo:

# hdparm -S240 /dev/hda 
/dev/hda:
setting standby to 240 (20 minutes)


Com esse comando, configuramos o HD para desligar após 20 minutos de ociosidade.

Para desativar o recurso spindown, utilize -S0.

Testando o desempenho



Uma ferramenta de fundamental importância no hdparm é o teste de desempenho. Você usá-las antes de fazer alterações nos parâmetros do HD e, assim que fizer alterações, voltar a realizar os testes para comparar e verificar se houve melhora no desempenho ou não.

Vejamos como se faz isso:

# hdparm -Tt /dev/hda 
/dev/hda:
Timing cached reads:  1200 MB in  2.00 seconds = 598.89 MB/sec
Timing buffered disk reads: 82 MB in  3.06 seconds = 26.77 MB/sec


Aqui foram feitos dois testes. O primeiro é o de tempo de leitura com cache (cached reads), e o segundo, de tempo de leitura de disco com buffer (buffered disk reads).

Você deve aplicar esse testes como o mínimo de recursos sendo utilizados. De preferência, utilize o modo monousuário:

# init 1


Para você o quanto você pode perder em desempenho, fiz um teste simples: desativei todos os recursos do disco, como DMA, leitura adiantada, etc, e fiz o teste de desempenho, e em seguida repeti o teste após ativar os devidos recursos. Veja:

# hdparm -c0 -d0 -A0 -m0 -a0 /dev/hda 
/dev/hda:
setting fs readahead to 0
setting 32-bit IO_support flag to 0
setting multcount to 0
setting using_dma to 0 (off)
setting drive read-lookahead to 0 (off)
multcount    =  0 (off)
IO_support   =  0 (default 16-bit)
using_dma    =  0 (off)
readahead    =  0 (off)


# hdparm -Tt /dev/hda 
/dev/hda:
Timing cached reads:   1196 MB in  2.00 seconds = 596.90 MB/sec
Timing buffered disk reads: 2 MB in  4.30 seconds = 476.46 kB/sec


# hdparm -c1 -d1 -X69 -A1 -a16 -m16 /dev/hda 
/dev/hda:
setting fs readahead to 16
setting 32-bit IO_support flag to 1
setting multcount to 16
setting using_dma to 1 (on)
setting xfermode to 69 (UltraDMA mode5)
setting drive read-lookahead to 1 (on)
multcount    = 16 (on)
IO_support   =  1 (32-bit)
using_dma    =  1 (on)
readahead    = 16 (on)


# hdparm -Tt /dev/hda 
/dev/hda:
Timing cached reads:   1200 MB in  2.00 seconds = 599.79 MB/sec
Timing buffered disk reads: 82 MB in 3.04 seconds = 26.94 MB/sec



Veja agora a tabela de desempenho:
























Performance
Velocidade de gravação sem hdparm com hdparm
cached reads 596,90 MBps 599,79 MBps +0,48%
buffered disk reads 476,46 kBps 26,95 MBps +5692%


Como se vê, configurado com o hdparm, o HD alcançou uma performance 5692% maior que a alcançada sem as configurações, nas gravações com buffer (buffered disk reads).

O ideal é que você faça esses testes antes e depois de modificar qualquer parâmetro, para ter certeza de que não está fazendo uma configuração que vai prejudicar o desempenho do HD.

Ativando o hdparm na inicialização do sistema



Descomente-as e coloque os parâmetros que você está utilizando. Por exemplo:

Para utilizar o hdparm no inicialização do sistema, edite o arquivo /etc/hdparm.conf. Vá até o final, e procure essas linhas:

#command_line {
#       hdparm -d1 -a4 -m8 /dev/hda
#} 
command_line {
hdparm -c1 -d1 -X69 -A1 -a16 -m16 /dev/hda
}


Caso você utilize mais de uma unidade de disco, acrescente uma linha para cada unidade. Veja essa configuração para um HD e um drive de CD-ROM:

command_line {
hdparm -c1 -d1 -X68 -A1 -a12 -m12 -S120 -m180 /dev/hda
hdparm -c1 -d1 -X66 /dev/hdc
}


Depois, se você utiliza o Debian, estará tudo pronto e o script "/etc/init.d/hdparm start" será executado na inicialização do sistema.

Considerações finais



Apesar de bem extenso, este artigo não deve ter tratado sequer da metade das opções disponíveis no hdparm. Mas as opções aqui tratada são as mais comuns e as que mais fazem a diferença na performance. Se você quiser saber mais e conhecer outras ferramentas do hdparm, veja a sua página de manual:

# man hdparm


Espero que tenha conseguido ser bastante claro e que você tenha conseguido entender o pouco que coloquei aqui sobre essa fantástica e indispensável ferramenta para o Linux. Um computador com HD desconfigurado pode ficar muito lento, e não é muito justo não se utilizar do máximo desempenho de um computador por falta de configuração, certo?

Fiquem à vontade para copiar, modificar e distribuir e conteúdo desse artigo. Só não vão tirar minha autoria que dí eu choro... :'(

Um abraço à todos, fiquem com Deus e até a próxima!

Davidson Rodrigues Paulo - bozolinux
e-mail: bozolinux[at]pop.com.br
MSN: bozoufmt[at]hotmail.com

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1149

Assistindo TV usando a placa VideoHighway Xtreme (ou outra baseada no bttv)

Autor: JOSÉ MAURÍCIO DA SILVA <jos_mau at ig.com.br>
Data: 01/02/2005

Detectando o problema



Durante a inicialização, pode-se notar que a placa não carrega o módulo corretamente, como se vê abaixo na linha:

"bttv0: using: *** UNKNOWN/GENERIC *** [card=0,autodetected]"


E por conseqüência o sintonizador, como se vê na linha

"bttv0: using tuner=-1"


fica inoperante.

Pode-se listar o problema digitando-se no konsole:

# dmesg


ou

# mcedit /var/log/messages


Donde se vê:

Linux video capture interface: v1.00
bttv: driver version 0.9.15 loaded
bttv: using 8 buffers with 2080k (520 pages) each for capture
bttv: Host bridge needs ETBF enabled.
bttv: Bt8xx card found (0).
PCI: Found IRQ 9 for device 0000:00:0d.0
PCI: Sharing IRQ 9 with 0000:00:04.2
PCI: Sharing IRQ 9 with 0000:00:09.0
bttv0: Bt848 (rev 18) at 0000:00:0d.0, irq: 9, latency: 32, mmio: 0xd6800000
bttv0: using: *** UNKNOWN/GENERIC *** [card=0,autodetected]
bttv0: enabling ETBF (430FX/VP3 compatibilty)
bttv: readee error
bttv0: using tuner=-1
bttv0: i2c: checking for MSP34xx @ 0x80... not found
bttv0: i2c: checking for TDA9875 @ 0xb0... not found
bttv0: i2c: checking for TDA7432 @ 0x8a... not found
bttv0: registered device video0
bttv0: registered device vbi0



Solucionando o problema



Solucionei o problema da seguinte forma:

$ su
# rmmod tuner
# modprobe bttv card=14 tuner=2


Onde 14 é o tipo da placa e 2 é o tipo do sintonizador.

OBS:
Outros tipos de placa são suportados. Verifiquei isso baixando o arquivo bttv-0.9.14.tar.gz no site http://dl.bytesex.org/releases/video4linux/.
Após descompactá-lo na pasta de sua escolha, dentro da pasta criada existe outra de nome "doc".
O arquivo correspondente às placas suportadas é o CARDLIST.bttv e de sintonizadores é o CARDLIST.tuner.

Verificando o carregamento do módulo



Voltando à nossa configuração, vamos verificar se tudo deu certo:

# dmesg


Onde se vê logo no final do log:

bttv0: unloading
bttv: driver version 0.9.15 loaded
bttv: using 8 buffers with 2080k (520 pages) each for capture
bttv: Host bridge needs ETBF enabled.
bttv: Bt8xx card found (0).
PCI: Found IRQ 9 for device 0000:00:0d.0
PCI: Sharing IRQ 9 with 0000:00:04.2
PCI: Sharing IRQ 9 with 0000:00:09.0
bttv0: Bt848 (rev 18) at 0000:00:0d.0, irq: 9, latency: 32, mmio: 0xd6800000
bttv0: using: Aimslab Video Highway Xtreme (VHX) [card=14,insmod option]
bttv0: enabling ETBF (430FX/VP3 compatibilty)
bttv0: using tuner=2
bttv0: i2c: checking for MSP34xx @ 0x80... not found
bttv0: i2c: checking for TDA9875 @ 0xb0... not found
bttv0: i2c: checking for TDA7432 @ 0x8a... not found
tvaudio: TV audio decoder + audio/video mux driver
tvaudio: known chips: tda9840,tda9873h,tda9874h/a,tda9850,tda9855,tea6300,tea6420,tda8425,pic16c54 (PV951),ta8874z
tuner: chip found at addr 0xc0 i2c-bus bt848 #0 [sw]
tuner: type set to 2 (Philips NTSC (FI1236,FM1236 and compatibles)) by bt848 #0 [sw]
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: registered device radio0
bttv0: PLL: 28636363 => 35468950 .. OK


Estamos quase terminando. Para salvar esta configuração, basta editar:

# mcedit /etc/init.d/bootmisc.sh


Acrescentando o que foi feito no final do arquivo, ou seja:

rmmod bttv
modprobe bttv card=14 tuner=2



Instalando o software de TV



Vamos agora instalar o programa para assistir a TV.

# apt-get install tvtime


Durante a instalação poderá ser perguntado o sistema de cor, selecione PAL-M, e qual a sintonia, selecione us-brodcast.

Feche o konsole, inicie o programa cujo link aparecerá no menu multimídia. Para fazer a troca de canais, digite o canal e pressione ENTER. Divirta-se.

Ativar DMA para chipset via82cxxx

Well,

I have tested several things I have found some simple thing that works ok:

in the /etc/modules file I have put:
via82cxxx
ide-cd
ide-generic
[...]

so the question as someone have wrotten before is to put the via82cxxx BEFORE
the ide-cd or ide-generic modules.

Make sure your IDE chipset's drivers are first in /etc/modules, before any of the other ide stuff. lspci should tell you what chipset that is.
I get these from /etc/modules

via82cxxx
ide-cd
ide-disk
ide-generic
lp
mousedev
psmouse
nvidia

modprobe via82cxxx
#hd 25gb
hdparm -c1 -d1 -X66 -m16 -A1 -a64 /dev/hda

Remember to edit /etc/hdparm.conf to enable dma automaticly and check that it's run during boot - probably link in /etc/rc2.d/S99hdparm
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31