BypassIO em drivers de armazenamento
Sobre o BypassIO
BypassIO é um caminho de E/S otimizado para leitura de arquivos. O objetivo desse caminho é reduzir a sobrecarga da CPU de fazer leituras, o que ajuda a atender às demandas de E/S de carregar e executar jogos de última geração no Windows. O BypassIO faz parte da infraestrutura para dar suporte ao DirectStorage no Windows e está disponível a partir do Windows 11.
É importante que os drivers de armazenamento implementem o suporte para BypassIO e que você mantenha o BypassIO habilitado o máximo possível. Sem suporte à pilha de armazenamento, o desempenho do jogo é degradado, resultando em uma experiência de jogo ruim para os usuários finais.
Haverá usos de aplicativos mais amplos além dos jogos em versões futuras do Windows.
IOCTL_STORAGE_MANAGE_BYPASS_IO e um FSCTL_MANAGE_BYPASS_IO equivalente foram adicionados como parte desta infraestrutura. IOCTL_STORAGE_MANAGE_BYPASS_IO é enviado por sistemas de arquivos para as pilhas de volume/armazenamento, enquanto os minifiltros processam FSCTL_MANAGE_BYPASS_IO. Esses códigos de controle são projetados para serem diagnosticáveis: ambos retornam a identidade do driver que falhou na solicitação BypassIO e o motivo para vetá-la.
Consulte BypassIO em drivers de filtro para obter detalhes da arquitetura do sistema BypassIO nas pilhas de filtro e armazenamento do sistema de arquivos.
Escopo do suporte ao BypassIO
A partir do Windows 11, o BypassIO tem suporte da seguinte maneira:
Somente em sistemas cliente Windows. O suporte ao sistema de servidor será adicionado em uma versão futura.
Somente em dispositivos de armazenamento NVMe. Suporte para outras tecnologias de armazenamento será adicionado em uma versão futura.
Somente no sistema de arquivos NTFS. Suporte para outros sistemas de arquivos será adicionado em uma versão futura.
Somente leituras não armazenadas em cache são suportadas. O suporte para gravações não armazenadas em cache será adicionado em uma versão futura.
Suportado apenas em arquivos (não suportado em identificadores de diretório ou volume).
Alterações e adições de DDIs para BypassIO
As seguintes DDIs relevantes para drivers de armazenamento foram adicionadas para fornecer suporte ao BypassIO:
- IOCTL_STORAGE_MANAGE_BYPASS_IO (gerado somente pelo sistema de arquivos)
- BPIO_INPUT
- BPIO_OUTPUT
- BPIO_OPERATIONS
- numerador BPIO_INFLAGS
- numerador BPIO_OUTFLAGS
- estrutura BPIO_RESULTS
O que os drivers de pilha de armazenamento precisam fazer para dar suporte ao BypassIO
A partir de Windows 11, os desenvolvedores de driver de armazenamento precisam atualizar os arquivos INF ou MANIFEST do driver para adicionar a infraestrutura StorageSupportedFeatures com STORAGE_SUPPORTED_FEATURES_BYPASS_IO para BypassIO da seguinte maneira:
- Defina uma chave "Parâmetros" em sua definição de serviço
- Adicione um valor DWORD chamado "StorageSupportedFeatures" e defina esse valor como 0x1 para indicar o suporte a BypassIO.
Essa chave do Registro indica ao sistema que o driver entende a E/S de ignorância. O driver também deve chamar StorPortSetUnitAttributes com BypassIOSupported definido como 1 para indicar qual unidade lógica (disco) dá suporte à E/S de desvio.
Em seguida, o driver processa IOCTL_STORAGE_MANAGE_BYPASS_IO conforme necessário. A operação FS_BPIO_OP_QUERY falhará se houver um driver de pilha de armazenamento que não aceitou.
Observação
Um driver que nunca pode dar suporte a BypassIO ainda deve adicionar o estado StorageSupportedFeatures ao INF e, em seguida, vetar adequadamente dentro do driver, especificando o motivo.
Se um driver de armazenamento não atualizar seu arquivo INF ou MANIFEST para indicar suporte a BypassIO, todas as operações BypassIO nesse volume ou driver de armazenamento serão bloqueadas imediatamente. O sistema retorna ao caminho de E/S tradicional, o que resulta em desempenho de jogo degradado.
detalhes de implementação IOCTL_STORAGE_MANAGE_BYPASS_IO
O sistema de arquivos (atualmente NTFS) gera um código de controle IOCTL_STORAGE_MANAGE_BYPASS_IO em resposta a um FSCTL_MANAGE_BYPASS_IO gerado, conforme necessário.
A entrada para IOCTL_STORAGE_MANAGE_BYPASS_IO é semelhante à sua FSCTL_MANAGE_BYPASS_IO equivalente, mas suporta apenas ativação, desativação e consulta de BypassIO.
A saída do IOCTL_STORAGE_MANAGE_BYPASS_IO é semelhante à sua FSCTL_MANAGE_BYPASS_IO equivalente, identificando o nome e o motivo do driver com falha, e o status da operação sobre o motivo pelo qual o driver vetou o BypassIO. O sistema de arquivos propaga a saída IOCTL_STORAGE_MANAGE_BYPASS_IO do volume e das pilhas de armazenamento até FSCTL_MANAGE_BYPASS_IO.