O tamanho do bloco do dispositivo é geralmente de 512 bytes, enquanto o tamanho do bloco do sistema de arquivos é geralmente de 4.096 bytes. Por que eles são diferentes? Por que 512B e 4KB são boas opções para tamanhos de bloco de dispositivo e sistema de arquivos? Qual tamanho de bloco funcionaria melhor para armazenar em cache as leituras de disco em uma biblioteca de espaço do usuário?
relate perguntas
-
Como saber antecipadamente se um .zip tem um diretório pai dentro
-
Disco alocado dinamicamente do Virtualbox *.vdi continua crescendo
-
du/df e ls relatando diferentes usos de disco
-
Um processo pode alocar memória cache de forma que o kernel possa aproveitá-la quando necessário?
-
Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]
O tamanho do bloco do dispositivo é o tamanho do bloco com o que o sistema está falando com os controladores do HDD. Se você quiser ler/escrever o HDD, acontece assim:
Ler:
Escreva:
Aqui o número do bloco significa o nome do 2354242º bloco de 512 bytes.
Teoricamente, poderia ser possível usar qualquer tamanho de bloco. A maioria dos dispositivos está usando blocos de 512 bytes e alguns deles, especialmente HDDs grandes, estão usando blocos de 4096 bytes. Algumas mídias ópticas estão usando blocos de 2304 bytes.
O importante é: o controlador do dispositivo de bloco não sabe nada do sistema de arquivos nele. Ele só pode ler e escrever blocos, em seu tamanho de bloco, em seu meio. Isto é o que o driver de dispositivo de bloco usa para fornecer o dispositivo de bloco para o kernel: essencialmente uma única matriz de bytes grande. Não importa, como ele é particionado ou qual fs o está usando.
O tamanho do bloco do sistema de arquivos é o tamanho do bloco no qual as estruturas de dados do sistema de arquivos são organizadas no sistema de arquivos. É o recurso interno do sistema de arquivos, não há sequer um requisito para usar estruturas de dados orientadas a blocos, e alguns sistemas de arquivos nem fazem isso .
O Ext4 usa normalmente blocos de 4096 bytes.
Além disso, os dados de E/S de disco geralmente não são tratados diretamente pelos processos, mas com a memória virtual do seu sistema operacional. Ele usa amplamente paginação. O tamanho da página da VM é normalmente de 4096 bytes (pode ser diferente em CPUs não x86), é determinado pela arquitetura da CPU. (Por exemplo, CPUs amd64 mais recentes podem lidar com páginas de 2 MB ou dec alpha usado páginas de 8192 bytes).
Para otimizar o IO de dados, melhor se todos eles forem a multiplicação um do outro, ainda melhor se forem iguais. Isso normalmente significa: use blocos fs de 4096 bytes.
Também é importante: se o seu dispositivo de bloco for particionado, as partições devem começar/terminar com tamanhos de página exatos . Se você não fizer isso, por exemplo, seu sda1 inicia no bloco 17. do seu sda, a CPU terá que emitir DOIS comandos de leitura/gravação para todas as operações de leitura/gravação de página, porque os blocos físico e do sistema de arquivos se sobrepõem .
No cenário mais comum, significa: todas as partições devem iniciar ou começar em um setor divisível por 8 (4096 / 512 = 8).
Observe que normalmente a E/S de bloco de baixo nível não ocorre em operações de leitura/gravação de bloco único, em vez disso, vários blocos são enviados/recebidos em um único comando. E a reorganização de dados geralmente não é uma sobrecarga muito grande, porque a E/S de memória é geralmente muito mais rápida que a E/S do dispositivo de bloco. Assim, não seguir estes não será uma grande sobrecarga.