Linux em discos de setor de 4 KB: Conselho prático

Certifique-se de que o Linux está disparando em todos os cilindros

A partir de dezembro de 2009, fabricantes de discos rígidos começaram a introduzir discos que usam setores de 4096 bytes, ao invés dos setores mais comuns de 512 bytes. Apesar de essa mudança ser mascarada por firmwares que separam os setores físicos de 4096 bytes em setores lógicos de 512 bytes para o benefício do sistema operacional, o uso de setores físicos maiores tem implicações para o layout do disco e o desempenho do sistema. Este artigo examina essas implicações, incluindo avaliações de desempenho ilustrando os prováveis efeitos reais em alguns sistemas de arquivos comuns do Linux®. Com discos de setores de 4096 bytes tornando-se mais comuns a partir de 2010, as estratégias para lidar com esses novos discos se tornarão cada vez mais importantes.

Roderick W. Smith, Consultant and author

Roderick Smith author photoRoderick W. Smith é consultor e autor de dezenas de livros sobre UNIX e Linux, incluindo The Definitive Guide to Samba 3, Linux in a Windows World e Linux Professional Institute Certification Study Guide. Ele é autor do software de particionamento GPT fdisk. Atualmente, Roderick reside em Woonsocket, Rhode Island.



12/Mai/2010

Por que mudar para setores de 4096 bytes?

Leia mais artigos escritos por Roderick

Pesquise todos os artigos do Roderick no developerWorks. Ou procure por um autor de sua escolha ou tópico de interesse em nossa extensa biblioteca técnica; é possível filtrar sua busca por produto, tópico ou tipo de conteúdo.

Caso esteja familiarizado com estrutura de discos, você sabe que discos estão divididos em setores, que, normalmente, possuem 512 bytes de tamanho; todas as operações de leitura ou gravação ocorrem em múltiplos do tamanho do setor. Na verdade, ao olhar mais de perto, os discos rígidos incluem uma grande quantidade de dados extras entre os setores. Esses bytes extras são usados pelo firmware do disco para detectar e corrigir erros dentro de cada setor. Com o crescimento dos discos rígidos, a consequência é que mais e mais dados devem ser armazenados em cada centímetro quadrado do disco, resultando em mais erros de nível baixo, prejudicando, assim, os recursos de correção de erros do firmware.

Uma maneira de resolver esse problema é aumentar o tamanho do setor de 512 bytes para um valor maior, permitindo que algoritmos de correção de erros mais poderosos possam ser usados. Esses algoritmos podem usar menos dados com base byte a byte para corrigir problemas mais sérios do que seria possível corrigir com setores de 512 bytes. Consequentemente, mudar para um tamanho de setor maior possui dois benefícios práticos: confiabilidade melhorada e maior capacidade de disco — pelo menos em teoria.

Os benefícios reais para os usuários finais provavelmente não serão óbvios da mesma maneira que o tamanho maior de um monitor ou a velocidade melhorada da unidade central de processamento (CPU). No entanto, a redução no espaço dedicado à paridade pode resultar na introdução mais rápida de discos maiores ou melhor confiabilidade de disco.

Infelizmente, suposições sobre o tamanho do setor de 512 bytes escondem-se na cadeia de software, em ferramentas como o sistema BIOS, loaders de boot, kernels do sistema operacional, código do sistema de arquivos e utilitários de disco. Apesar de uma mudança para um tamanho de setor de 4096 bytes estar sendo planejada por cerca de uma década, algumas ferramentas ainda não estão prontas. O Microsoft® Windows® XP é frequentemente citado como propenso a problemas, mas mesmo no mundo do Linux, alguns problemas estão sendo corrigidos somente agora.

Para ajudar na transição, os primeiros discos com setores de 4096 bytes convertem cada setor físico em oito setores lógicos de 512 bytes. Para o BIOS, o sistema operacional e todos os utilitários de disco, o disco parece ter setores de 512 bytes, mesmo que o tamanho do setor físico subjacente seja de 4096 bytes. A Western Digital, primeira fabricante a lançar tais discos, usa o termo Formato Avançado para se referir a discos com setores físicos de 4096 bytes e conversão de software para setores lógicos de 512 bytes. Este artigo usa o mesmo termo para discos da Western Digital e discos futuros de outros fabricantes usando tecnologia similar.


Por que há efeitos de desempenho?

Infelizmente, alterar o tamanho aparente do setor no firmware pode diminuir o desempenho. Para entender o porquê, é necessário entender algo sobre estruturas de dados de sistemas de arquivos e como partições são colocadas no disco rígido.

A maioria dos sistemas de arquivos modernos usa estruturas de dados que são de 4096 bytes ou maiores. Consequentemente, a maioria das operações de E/S de disco são feitas com múltiplos desse valor. Considere o que aconteceria quando o Linux quisesse ler ou gravar uma dessas estruturas de dados em um novo disco com setores de 4096 bytes. Caso aconteça de a estrutura de dados do sistema de arquivos se alinhar perfeitamente com o tamanho da partição física subjacente, a leitura ou gravação de uma estrutura de dados de 4096 bytes resultaria em uma leitura ou gravação de um setor único. O firmware do disco rígido não necessita fazer nada de extraordinário; mas quando as estruturas de dados do sistema de arquivos não se alinham perfeitamente aos setores físicos subjacentes, uma operação de leitura ou gravação deve acessar dois setores físicos. Para uma operação de leitura, isso leva pouco ou nenhum tempo adicional, pois o cabeçote de leitura/gravação no disco provavelmente passará sobre ambos os setores em sucessão e o firmware pode simplesmente descartar os dados que não necessita. Por outro lado, gravações de estruturas de dados alinhadas incorretamente necessitam que o firmware do disco leia primeiro dois setores, modifique partes de ambos os setores e, então, grave dois setores. Essa operação leva mais tempo do que quando os 4096 bytes ocupam um setor único. Consequentemente, há diminuição no desempenho.

Como é possível saber se suas estruturas de dados estão alinhadas de maneira adequada? Felizmente, sistemas de arquivos comuns alinham suas estruturas de dados com o começo das partições que os contêm. Dessa maneira, se uma partição começar em um limite de 4096 bytes (setor 8), ela estará alinhada de maneira adequada. Infelizmente, esse tipo de alinhamento não é comum. Uma das seções a seguir, Alinhando partições, descreve como fazer o trabalho com software de particionamento comum do Linux.


Resultados da avaliação de desempenho

Você deve se perguntar sobre a importância do alinhamento de partição adequado. Para responder a essa pergunta, uma unidade de 1 TB Western Digital WD-10EARS Formato Avançado foi usada com partições alinhadas e desalinhadas e vários sistemas de arquivos Linux. O disco foi particionado usando o sistema de Tabela de Partição (GPT) do identificador global exclusivo (GUID), com as partições alinhadas iniciando no setor lógico 40 e as partições desalinhadas iniciando no setor lógico 34 (o primeiro setor disponível ao usar um disco GPT com seu tamanho de tabela de partição padrão). Os sistemas de arquivos testados foram ext3fs, ext4fs, ReiserFS (versão 3), JFS, XFS e Btrfs. O computador executava um kernel Linux 2.6.32.3 de 64 bits.

Um script executou uma série de operações de E/S de disco, incluindo a criação de um sistema de arquivos novo, extração de um tarball do kernel Linux descompactado para a unidade de teste, cópia do tarball para a unidade, leitura dos arquivos que acabaram de ser descompactados na unidade de teste, leitura do tarball a partir da unidade e remoção do diretório do Linux kernel. O tarball do kernel Linux de origem foi armazenado em um outro disco e, para os testes de leitura, a saída foi direcionada para /dev/null. Após cada teste de gravação, o disco de teste era desmontado para assegurar que nenhuma operação permaneceu no cache do disco do Linux. Os números relatados incluem o tempo necessário para executar a operação de desmontagem. O tarball do kernel possuía 365 MB de tamanho — muito maior do que o cache de 64 MB do disco. Cada sequência de teste foi executada seis vezes para cada sistema de arquivos, três vezes em partições alinhadas de maneira adequada e três vezes em partições alinhadas de maneira inadequada. A variabilidade entre as execuções foi pequena. O tempo médio desalinhado foi dividido pela tempo médio alinhado para determinar o impacto de desempenho imposto pelo alinhamento inadequado. Um valor maior do que 1,00 indica alguma perda de desempenho para o alinhamento inadequado.

Muitos dos testes resultaram em prejuízos modestos. Os valores para a criação de sistema de arquivos variaram de 0,96 (para XFS) a 7,94 (para ReiserFS), com um valor médio de 2,79. Devido ao fato de a criação de sistemas de arquivos ser feita raramente, o prejuízo não é tão importante. Os testes de leitura produziram proporções variando de 0,95 a 1,25, indicando uma perda de velocidade de não mais que 25%, como mostra em detalhes a Figura 1. Um valor de 1,00 significa que não houve perda; valores mais altos significam um desempenho pior.

Figura 1. Perda de desempenho de leitura usando partições desalinhadas
Perda de desempenho de leitura usando partições desalinhadas

O desempenho de gravação de arquivos grandes também sofreu somente um prejuízo modesto. Os valores variaram de 1,10 (para XFS e JFS) e 6,02 (para ReiserFS), com uma média de 2,10. Grande parte dessa elevação pode ser atribuída à sensibilidade do ReiserFS. Sua remoção produz uma média de 1,31 para os cinco sistemas de arquivos restantes. Os efeitos de exclusão de arquivos foram similares, variando de 1,04 (para XFS) a 4,78 (para JFS), com uma média de 1,97. A remoção do JFS como um valor discrepante produz uma média de 1,40.

Os maiores efeitos de desempenho de gravação ocorreram na criação de arquivos pequenos (extraindo o tarball do kernel). Os efeitos na extração do tarball variaram de 1,04 (para ext4fs) a 25,53 (para ReiserFS), com uma média de 10,9. O segundo melhor desempenho nesse teste foi do XFS, com um valor de 1,82. Devido ao fato de esses números serem proporções de desempenho de partições desalinhadas para alinhadas, um valor de 10,9 significa que uma extração do tarball que leva 10 segundos em uma partição alinhada de maneira adequada leva 109 segundos em uma partição alinhada de maneira inadequada — uma enorme diferença! O valor de 1,82 para o XFS significa que essa operação de 10 segundos leva 18,2 segundos em uma partição alinhada de maneira incorreta.

A Figura 2 resume esses prejuízos de desempenho de gravação em todos os sistemas de arquivos. Como anteriormente, um valor de 1,00 significa que não houve perda; valores maiores significam desempenhos piores.

Figura 2. Perda de desempenho de gravação usando partições desalinhadas
Perda de desempenho de gravação usando partições desalinhadas

Observe que esses testes não refletem o desempenho geral nos sistemas de arquivos. Não se deve concluir que, por exemplo, o ReiserFS tem um pobre desempenho porque produziu algumas das maiores diferenças de desempenho. ReiserFS é, no entanto, mais sensível ao alinhamento inadequado do que a maioria.

Além de executar testes em sistemas de arquivos em partições, uma verificação de ponto foi feita em sistemas de arquivos em uma configuração LVM, com a partição LVM alinhada de maneira adequada ou alinhada de maneira inadequada. Os resultados foram similares aos resultados da partição bruta.

Mas o que significa isso tudo na prática? É necessário começar determinando o tamanho do setor físico de seu disco. Caso você descubra que possui uma unidade de Formato Avançado, é necessário alinhar suas partições de maneira adequada.


Determinando o tamanho do setor físico

Na teoria, o kernel Linux deve retornar informações sobre o tamanho do setor físico no pseudoarquivo /sys/block/sdX/queue/physical_block_size e sobre o tamanho do setor lógico no pseudoarquivo /sys/block/sdX/queue/logical_block_size, onde sdX é o nome de nó do seu dispositivo (geralmente sda, sdb, etc.). No entanto, na prática, as informações de tamanho do bloco físico não são genuínas, pelo menos para a primeira geração de unidades do Formato Avançado da Western Digital. Infelizmente, isso significa que os utilitários de disco não podem detectar a presença de tais discos de maneira adequada.

Então, por questões práticas, é necessário procurar pelas especificações da sua unidade no Web site do fabricante ou de outra maneira. O pseudoarquivo /sys/block/sdX/device/model carrega o número do modelo do dispositivo. É possível consultá-lo e, então, verificar com o fabricante.

Na atual primeira geração de unidades de Formato Avançado, a Western Digital colou adesivos nas unidades anunciando o fato de que são unidades de Formato Avançado. Infelizmente, esses adesivos sugerem que somente o Windows XP tem problemas com essas unidades. Como as avaliações de desempenho acima revelam, os usuários de Linux devem ter muito cuidado com essas unidades.


Alinhando partições

Alinhando partições RAID

Níveis 5 e 6 de redundant array of independent disks (RAID) possuem problemas de alinhamento similares aos das unidades de Formato Avançado, mas as causas estão relacionadas ao tamanho das faixas de dados usadas para criar o array, geralmente de 16 KB a 256 KB. Ao usar arrays do RAID, é necessário alinhar partições em múltiplos do tamanho da faixa. O alinhamento padrão em 2048 setores (1024 KB) que está surgindo como um novo padrão funciona bem com todos os tamanhos de faixa RAID comuns.

Resultados de testes publicados indicam uma perda de desempenho de cerca de 5% a 30% para o alinhamento inadequado, que é muito menor que a perda para o alinhamento inadequado em uma unidade de Formato Avançado. Ao criar um RAID array de discos de Formato Avançado, nenhuma etapa adicional é necessária. Devido ao fato de os valores de alinhamento RAID serem múltiplos do alinhamento de 4096 bytes necessário pelas unidades de Formato Avançado, as necessidades de ambas as tecnologias serão satisfeitas caso seja feito o alinhamento como se fosse para um RAID array de discos com setores físicos de 512 bytes.

As unidades atuais da Western Digital incluem um jumper que pode ser configurado para a compatibilidade com o Windows XP. Esse jumper tem o objetivo de deslocar a numeração do setor em 1, colocando, assim, uma partição que o computador identifica como o início no setor 63 (para o alinhamento de cilindro) no setor lógico 64 verdadeiro. Essa é uma correção rápida e prática para o problema do alinhamento do setor para a situação comum de uso de uma partição única que estende toda a unidade no Windows. Infelizmente, caso partições múltiplas sejam criadas, algo diferente da primeira não será alinhada corretamente. Por essa razão, esse jumper certamente não deve ser usado; ao invés disso, use seu software de particionamento do Linux para criar partições alinhadas de maneira adequada.

Três famílias de ferramentas de particionamento de GPT e Master Boot Record (MBR) estão disponíveis para Linux, e cada uma oferece seus próprios métodos de alinhamento de partição. Caso possua uma unidade de Formato Avançado, sua melhor opção é executar o software de particionamento do Linux mais recente disponível.

Dica:Caso queira um duplo boot entre o Linux e um sistema operacional mais antigo que necessite de alinhamento de cilindro, tente alinhar os inícios de todas as suas partições em múltiplos de oito cilindros. Isso significa um alinhamento de 8 setores para desempenho ideal do disco e também um alinhamento de cilindro para o sistema operacional mais antigo.

família fdisk

A família fdisk que faz parte do pacote util-linux-ng na maioria das distribuições, permite a edição relativamente direta de estruturas de dados MBR, mas não pode criar ou modificar sistemas de arquivos. Até a versão util-linux-ng 2.17, o fdisk não oferece nenhum suporte direto ao alinhamento de partições de 8 setores. Até pelo menos a versão 2.17.2 (a mais recente no momento em que este artigo foi escrito), o alinhamento padrão permanece baseado no cilindro.

No entanto, é possível alinhar partições de maneira adequada com qualquer versão do fdisk. Para fazer isso, é necessário alterar as unidades padrão dos cilindros para setores, digitando u no menu principal. Então, é possível inserir valores de setores de início que sejam múltiplos de 8. Em princípio, é possível iniciar a primeira partição com um número de setor mínimo de 8; no entanto, é melhor iniciar a primeira partição com 64 ou um valor mais alto para deixar espaço para o código do loader de boot no espaço não alocado entre o MBR e a primeira partição. As ferramentas de particionamento da Microsoft para Windows Vista e Windows 7 iniciam a primeira partição no setor 2048. Então, esse é um local seguro para iniciá-la sob o ponto de vista de uma plataforma cruzada. Na verdade, a partir do util-linux-ng 2.17.1, esse é o padrão ao desabilitar o modo de compatibilidade do DOS digitando c no menu principal. Recomendo que faça isso.

No entanto, observe que fdisk não alinha partições subsequentes automaticamente. A especificação do tamanho da partição em unidades de megabytes ou unidades maiores e então a aceitação do valor padrão para partições subsequente pode resultar em um alinhamento adequado, mas não é garantido. Por segurança, deve-se verificar se toda partição começa com um múltiplo de 8.

Uma outra abordagem com fdisk é iniciá-lo como fdisk -H 224 -S 56 /dev/sda, o que altera a geometria do cilindro/cabeçote/setor (CHS) para garantir o alinhamento de 4096 bytes adequado quando o programa se alinha a cilindros, como faz por padrão.

Biblioteca libparted

A biblioteca libparted equipa muitas ferramentas de particionamento Linux que suportam manipulação de sistemas de arquivos. Até a versão 2.1, o programa GNU Parted em modo de texto (nome do comando parted) fornece pouco suporte ao alinhamento em algo além dos limites de cilindro. A melhor abordagem pode ser digitar unit s para alterar a unidade padrão para setores. Então, é possível inserir manualmente pontos de início de partição em setores e verificar pontos de início de partição de maneira precisa.

A versão 2.2 começou uma transição em direção a uma política que é mais útil para discos com setores físicos de 4096 bytes. Com essa versão, é possível especificar um valor de início de 1M e o setor será alinhado de maneira adequada. Essa versão também avisa quando suas partições não estão alinhadas de maneira adequada.

Ao usar o programa GUI GParted, certifique-se de desmarcar a caixa de seleção "Round to cylinders" na caixa de diálogos Create New Partition, mostrada na Figura 3. É necessário definir o setor de início da partição relativo ao fim da partição anterior, mas caso comece com uma partição alinhada de maneira adequada, tudo deve dar certo. É possível exibir a caixa de diálogos Information da partição para saber quais são seus setores de início e fim em termos absolutos.

Figura 3. Desmarque a caixa de seleção "Round to cylinders" (selecionada, nesta figura, que é seu estado padrão) ao usar o GParted
Desmarque a caixa de seleção

Utilitários GPT fdisk

Os utilitários GPT fdisk são úteis somente com discos GPT. Versões anteriores à 0.5.2 não executam nenhum alinhamento, apesar de ser possível alinhar partições manualmente especificando os números de setor de início adequados. As versões 0.5.2 e 0.6.0 até 0.6.5 ajustam os setores de início de todas as partições para um limite de 8 setores para discos grandes (discos com mais de 800 GB), mas não para discos menores. A versão 0.6.6 introduz um alinhamento de setor de 2048 (1 MB) no estilo do Windows para todos os discos não particionados e tentativas de dedução do alinhamento usado no passado em discos com partições existentes.

Com a versão 0.5.2 ou versões superiores, é possível ajustar manualmente o valor de alinhamento através da opção l no menu do especialista. Essa opção aceita um número de setores como opção. Defina-a para 8 ou um múltiplo dessa quantia para um alinhamento adequado com discos de Formato Avançado. A opção de verificação (v em qualquer menu) relata qualquer partição que não esteja alinhada de maneira adequada, baseando-se no valor de alinhamento atual.


O futuro

No presente, somente um número limitado de modelos de unidade de disco rígido de Formato Avançado está disponível. Artigos da imprensa indicam que essa tecnologia se espalhará para mais unidades de todos os principais fabricantes em 2010 e no futuro. É concebível que novos modelos sofrerão com outros problemas de desempenho que diferem dos problemas apresentados pela primeira geração de unidades de Formato Avançado.

No final, os fabricantes podem abandonar o mito de setores de 512 bytes ou eles podem fornecer jumpers para permitir que usuários escolham se querem ou não esse recurso de compatibilidade. Caso encontre uma unidade com setores de 4096 bytes, mas com uma opção de usar o tamanho do setor verdadeiro, é possível que você queira usá-lo; no entanto, esteja ciente de algumas interrupções de processo.

Como observado anteriormente, softwares a partir do BIOS podem conter suposições sobre o tamanho de setor de um disco rígido. Se o BIOS contiver tal suposição, é provável que seu computador não se inicialize a partir de um disco que contém setores de 4096 bytes e não possui conversão de firmware para setores de 512 bytes. A partir da versão 2.2, o GNU Parted exibe um aviso dizendo que o suporte a discos com setores que não sejam de 512 bytes é experimental quando ele é iniciado em tais discos. Outros problemas podem estar escondidos em softwares que podem ser importantes para você. Usar a versão mais recente de softwares pode ajudar a contornar problemas, assim como usar um disco convencional como disco de boot, restringindo o uso do seu disco com a nova tecnologia como disco de dados (/dev/sdb ou superior).

No geral, tenha cuidado ao lidar com novos discos estranhos. Assim, há chances de que a poeira vá baixar relativamente rápido no estilo atual de disco de Formato Avançado, assim como novos tipos de unidades.

Recursos

Aprender

Obter produtos e tecnologias

  • O Web site do GNU Parted hospeda tanto o GNU Parted em modo de texto ou sua biblioteca pai, libparted. GNU Parted é um MBR em modo de texto maduro e uma ferramenta de particionamento GPT.
  • O pacote util-linux-ng inclui o fdisk, o sfdisk e o cfdisk do Linux.
  • O GNOME Partition Editor (também conhecido como GParted) é uma ferramenta de particionamento GUI criada sobre a libparted.
  • O programa GPT fdisk é um programa de particionamento somente de GPT modelado com base no fdisk do Linux.
  • Avalie os produtos da IBM da forma que melhor lhe convém: Faça o download de uma versão de teste de produto, experimente um produto on-line, use um produto em um ambiente de nuvem ou passe algumas horas no SOA Sandbox aprendendo como implementar Arquitetura Orientada a Serviço de forma eficiente.

Discutir

  • Envolva-se na comunidade do My developerWorks. Entre em contato com outros usuários do developerWorks enquanto explora os blogs, fóruns, grupos e wikis dos desenvolvedores.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=489307
ArticleTitle=Linux em discos de setor de 4 KB: Conselho prático
publish-date=05122010