Os sistemas linux liberam páginas sujas para o disco um bloco por um bloco?

0

Até onde eu sei, nos sistemas linux, ao modificar o conteúdo de um arquivo, as páginas contendo o conteúdo do arquivo no cache da página serão marcadas como sujas, e serão liberadas para o disco eventualmente.

O que eu estou querendo saber é que, quando essas páginas são liberadas para o disco, elas são liberadas em blocos?

Por exemplo, se o tamanho do bloco for 4kB e precisar liberar algum conteúdo de 1024kB, o disco será escrito 1024/4 = 256 vezes?

    
por TsReaper 23.11.2018 / 09:35

1 resposta

2

Esse é um tópico bastante complexo e depende do disco, do controlador de disco e das configurações do kernel.

Em geral, o kernel tentará ser o mais eficiente possível. Por exemplo, se você atualizar o mesmo bloco várias vezes em uma janela de tempo ajustável (geralmente 30 segundos ou mais) e não forçar explicitamente a sincronização até o disco toda vez, a maioria de suas operações de gravação só atualizará os dados no cache e somente o resultado final irá para o disco.

Se você escrever uma longa série de blocos consecutivos, o kernel certamente tentará executá-lo em tão poucos e grandes blocos quantos o controlador de armazenamento e o próprio disco permitirem.

O agendador de E / S do kernel também pode otimizar a ordem das operações de disco para obter o acesso mais eficiente ao disco. Essa otimização pode ser praticamente irrelevante em máquinas virtuais e em SSDs e, portanto, pode ser desativada. (Os SSDs são bastante rápidos, mesmo que você acesse blocos aleatórios de forma espingarda; em máquinas virtuais, o hipervisor geralmente refaz a otimização com base no conjunto inteiro de VMs e em todas as operações de disco, tentando otimizar o micro no nível de uma única VM é um esforço desperdiçado.)

Alguns discos podem ter restrições ou recomendações sobre tamanhos de operação de E / S:

# fdisk -l /dev/sdb
Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Por exemplo, esse HDD usa internamente tamanho de setor de 4k, embora emule setores tradicionais de disco de 512 bytes. Como resultado, um tamanho mínimo de E / S de 4k é especificado.

    
por 23.11.2018 / 10:41

Tags