Outro recurso programado para ser enviado para a próxima janela de mesclagem do kernel do Linux 6.5 é a introdução de suporte para provisionamento primitivos para armazenamento thin provisioned com o código Device Mapper (DM).
Uma ramificação criada no fim de semana foi linux-dm.git’s dm-6.5-provision-support. Com ele agora em uma ramificação marcada para”6.5″, parece posicionado para ser enviado para a próxima janela de mesclagem do Linux 6.5, impedindo que qualquer problema seja levantado por Linus Torvalds ou outros desenvolvedores do kernel.
Essas primitivas de provisionamento foram trabalhadas pela equipe do Chrome OS do Google. Sarthak Kukreti do Google anteriormente explicou sobre essa iniciativa nos patches RFC anteriores na correspondência list:
“Esta série de patches é um RFC de um mecanismo para passar por solicitações de provisionamento em dispositivos/sistemas de arquivos de armazenamento thin-provisioned empilhados.
O kernel Linux fornece vários mecanismos para configurar abstrações de armazenamento de bloco thin-provisioned ( por exemplo, dm-thin, dispositivos de loop em arquivos esparsos), diretamente como dispositivos de bloco ou armazenamento de backup para sistemas de arquivos. Atualmente, sem gravar dados no dispositivo ou no sistema de arquivos, não há como os usuários pré-alocar espaço para uso em tais configurações de armazenamento. Considere os seguintes casos de uso:
1) Suspender para o disco e continuar a partir de um dispositivo dm-thin: Para garantir que os metadados thinpool subjacentes não sejam modificados durante o mecanismo de suspensão, o dispositivo dm-thin precisa ser totalmente provisionado.
2) Se um sistema de arquivos usar um dispositivo de loop sobre um arquivo esparso, fallocate() no sistema de arquivos alocará blocos para arquivos, mas o arquivo esparso subjacente permanecerá intacto.
3) Outro exemplo é a máquina virtual usando um arquivo esparso/dm-thin como dispositivo de armazenamento; por padrão, as alocações dentro dos limites da VM não afetarão o host.
4) Vários padrões de armazenamento suportam mecanismos para provisionamento thin em dispositivos de hardware reais. Por exemplo:
a. A seção 2.1.1 da especificação NVMe 1.0b fala vagamente sobre o provisionamento thin:”Quando o bit THINP no campo NSFEAT da estrutura de dados do Namespace de identificação é definido como’1′, o controlador… deve rastrear o número de blocos alocados em o campo Namespace Utilization”
b. A referência dos Comandos de Bloco SCSi-4 seções referenciam”Unidades lógicas de provisionamento reduzido”,
c. A seção de especificações UFS 3.0 13.3.3 faz referência a”Provisionamento dinâmico”.Em todas as situações acima, atualmente a única maneira de pré-alocar espaço é emitir gravações (ou usar WRITE_ZEROES/WRITE_SAME). No entanto, isso não funciona bem com tamanhos de pré-alocação maiores.
Este patchset introduz primitivas para oferecer suporte a provisionamento em nível de bloco (nota: o termo’provisionamento’é usado para evitar sobrecarregar o termo’alocações/pré-alocações’) solicitações em sistemas de arquivos e dispositivos de bloco. Isso permite que fallocate() e solicitações de criação de arquivo reservem espaço em camadas empilhadas de dispositivos de bloco e sistemas de arquivos. Atualmente, o patchset cobre um protótipo nos alvos do mapeador de dispositivos, dispositivo de loop e ext4, mas o mesmo mecanismo pode ser estendido para outros sistemas de arquivos/dispositivos de bloco, bem como estendido para uso com dispositivos em 4 a-c.”
O patch que apresenta a solicitação REQ_OP_PROVISION simplesmente resume esse provisionamento como:
“Introduzir solicitação de bloco REQ_OP_PROVISION. A intenção dessa solicitação é solicitar que o armazenamento subjacente pré-aloque espaço em disco para o intervalo de blocos fornecido. Os dispositivos de bloco que oferecem suporte a esse recurso exportarão um limite de provisionamento em suas filas de solicitação.
Este patch também adiciona a capacidade de chamar fallocate() no modo 0 em dispositivos de bloco, que enviará REQ_OP_PROVISION para o dispositivo de bloco para o intervalo especificado,”
Estas primitivas de provisionamento de bloco O trabalho está em andamento há vários meses e testado com sucesso no Chrome OS e no kernel upstream do Linux. O bloco e as alterações DM em torno de REQ_OP_PROVISION, bem como o suporte ao dispositivo de loopback, agora estão prestes a aparecer no Linux 6.5.
A janela de mesclagem do Linux 6.5 deve começar na próxima semana se o lançamento estável do Linux 6.4 não for adiado por uma semana extra. O Linux 6.5 estável, por sua vez, deve estrear no final de agosto.