SSD, tamanho do bloco de apagamento e LVM: PV no dispositivo bruto, alinhamento

15

Quero instalar um novo SSD e usar o dispositivo inteiro como um PV para LVM - em outras palavras: não pretendo colocar nem mesmo uma partição neste dispositivo. Portanto, não é necessário alinhar partições nos blocos de exclusão.

Questões)

É suficiente definir --dataalignmento tamanho do bloco de apagamento no pvcreateing e --physicalextentsizeum múltiplo do tamanho do bloco de apagamento no vgcreateing?

Então, supondo que meu SSD tenha um tamanho de bloco de apagamento de 1024k, está tudo bem em

  • pvcreate --dataalignment 1024k /dev/ssd
  • vgcreate --physicalextentsize $(( x * 1024 ))k ...

Mais alguma coisa para levar em conta?

Supondo que eu colocaria sistemas de arquivos ext4 nos LVs deste VG, seria uma boa idéia alinhar os ext4-extents ao tamanho do LVM-PE, certo? Portanto, ext4-extents deve ter o mesmo tamanho ou um múltiplo do tamanho de LVM-PE?

Obrigado por qualquer esclarecimento!

m.sr
fonte

Respostas:

9

Sim, também verifiquei todo o layout em disco do MBR / PBR / GPT / MD / LVM e cheguei à mesma conclusão.

Para o seu caso (LVM no disco bruto), se o LVM-PE (extensão física) estiver 1 MB alinhado com o pvcreate, você pode ter certeza de que toda a alocação de dados adicional será alinhada, desde que o tamanho da alocação seja (1 MB * N) .

Como "vgcreate -s" e "lvcreate -L" manipulam tamanho sem unidade como valor MB, por padrão, você provavelmente não precisará se preocupar muito com o alinhamento depois de fazer o pvcreate corretamente. Apenas certifique-se de não fornecer o tamanho em% / PEs (para lvcreate -l) e B (byte) / S (512B - o setor é sempre 512B no LVM) / K (KB) (para vgcreate -s e lvcreate -L).

=== adicionado para esclarecimento ===

Como acompanhamento, enquanto um SSD pode ter um tamanho de bloco de apagamento de 1024 KB como um dispositivo inteiro, o tamanho do bloco de apagamento de cada chip flash interno / tamanho da página rw provavelmente é de aproximadamente 32KB-128KB / 512B-8KB.

Embora isso dependa do controlador de cada SSD, a penalidade de E / S devido ao ciclo extra de leitura, modificação e gravação provavelmente não acontecerá, desde que você mantenha sua gravação alinhada para apagar o tamanho do bloco de cada chip interno, que é 32KB-128KB acima exemplo. É só que você deseja que uma única solicitação de gravação seja grande o suficiente (= apague o tamanho do bloco do SSD como um todo), para que você possa esperar um melhor desempenho dirigindo com eficiência todos os canais / chips internos.

Meu entendimento é que o alinhamento de 1024 KB é apenas uma medida de segurança, pois a função do chip do controlador varia de acordo com o fornecedor e as especificações do chip flash mudam rapidamente. É mais importante que a solicitação de gravação no nível do SO seja feita em um pacote grande (1024 KB, neste caso).

Agora, tendo dito isso, fazer mkfs (8) em um bloco LVM alinhado com 1 MB quase certamente quebrará o alinhamento de 1 MB para dados / metadados no nível do sistema de arquivos. A maioria dos sistemas de arquivos só se preocupa em fazer o alinhamento de 4KB, portanto, provavelmente não é perfeito para SSDs (mas, IIRC, fs recentes como o btrfs tentam manter o alinhamento de 64KB + ao alocar blocos contíguos internos). Porém, muitos fs têm um recurso para agrupar gravações (por exemplo, configuração de tamanho de faixa) para obter desempenho do RAID, de modo que pode ser usado para tornar a solicitação de gravação para o SSD quase ideal.

Eu realmente quero apoiar minha afirmação com dados reais, mas foi realmente difícil provar que o controlador SSD de hoje é tão inteligente e não mostrará muita degradação no desempenho, uma vez que o tamanho do alinhamento e o tamanho da gravação são "grandes o suficiente". Apenas verifique se não está desalinhado (evite o alinhamento <4KB a todo custo) e não seja muito pequeno (1024 KB é grande o suficiente).

Além disso, se você realmente se importa com a penalidade de E / S, verifique novamente desativando o cache do dispositivo e comparando com o teste de leitura / gravação / reescrita sincronizado.

Taisuke Yamada
fonte
6

Para meu entendimento, os padrões já são bons o suficiente. Eu não acho que você precise se preocupar com a opção --dataalignment, pois o LVM tentará alinhar automaticamente tudo com base nos valores exportados pelo sysfs. Consulte a opção "data_alignment_detection" no lvm.conf:

# By default, the start of a PV's data area will be a multiple of
# the 'minimum_io_size' or 'optimal_io_size' exposed in sysfs.
# - minimum_io_size - the smallest request the device can perform
#   w/o incurring a read-modify-write penalty (e.g. MD's chunk size)
# - optimal_io_size - the device's preferred unit of receiving I/O
#   (e.g. MD's stripe width)
# minimum_io_size is used if optimal_io_size is undefined (0).
# If md_chunk_alignment is enabled, that detects the optimal_io_size.
# This setting takes precedence over md_chunk_alignment.
# 1 enables; 0 disables.
data_alignment_detection = 1

Além disso, não é necessário especificar um tamanho físico para vgcreate, pois o padrão já é de 4 MB.

Kereoz
fonte