Share via


BypassIO em drivers de armazenamento

Sobre BypassIO

A partir de Windows 11, BypassIO foi adicionado como 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 carregamento e execução de jogos de última geração no Windows. O BypassIO faz parte da infraestrutura para dar suporte ao DirectStorage no Windows.

É importante que os drivers de armazenamento implementem 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 mais amplos de aplicativos 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 dessa 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 armazenamento e filtro do sistema de arquivos.

Escopo do suporte ao BypassIO

A partir do Windows 11, há suporte para BypassIO da seguinte maneira:

  • Somente em sistemas cliente Windows. O suporte ao sistema de servidores será adicionado em uma versão futura.

  • Somente em dispositivos de armazenamento NVMe. O suporte para outras tecnologias de armazenamento será adicionado em uma versão futura.

  • Somente no sistema de arquivos NTFS. O suporte para outros sistemas de arquivos será adicionado em uma versão futura.

  • Somente leituras não armazenadas em cache têm suporte. O suporte para gravações não em cache será adicionado em uma versão futura.

  • Há suporte apenas para arquivos (sem suporte em identificadores de diretório ou volume).

Alterações e adições de DDIs para BypassIO

Os seguintes DDIs relevantes para drivers de armazenamento foram adicionados 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 do 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:

  • Definir 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 ao BypassIO.

Essa chave do Registro indica para o sistema que o driver entende de E/S de bypass. O driver também deve chamar StorPortSetUnitAttributes com BypassIOSupported definido como 1 para indicar qual unidade lógica (disco) dá suporte à E/S de bypass.

Em seguida, o driver processa IOCTL_STORAGE_MANAGE_BYPASS_IO conforme necessário. A operação de FS_BPIO_OP_QUERY falhará se houver um driver de pilha de armazenamento que não tenha aceitado.

Observação

Um driver que nunca pode dar suporte ao 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 o suporte ao BypassIO, todas as operações bypassIO nesse volume ou driver de armazenamento serão imediatamente bloqueadas. O sistema volta ao caminho de E/S tradicional, o que resulta em desempenho degradado do jogo.

IOCTL_STORAGE_MANAGE_BYPASS_IO detalhes da implementação

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 dá suporte apenas à habilitação, desabilitação e consulta do BypassIO.

A saída de IOCTL_STORAGE_MANAGE_BYPASS_IO é semelhante ao seu equivalente FSCTL_MANAGE_BYPASS_IO, identificando o nome e o motivo do driver com falha e a operação status quanto ao motivo pelo qual o driver vetou o BypassIO. O sistema de arquivos propaga a saída IOCTL_STORAGE_MANAGE_BYPASS_IO do volume e o armazenamento é empilhado até FSCTL_MANAGE_BYPASS_IO.