Compartilhar via


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:

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.