Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O driver proxy deve configurar o acesso aos buffers de usuário para que o comutador de Soquetes do Windows possa transferir mensagens de controle e executar operações RDMA. Para solicitar esse tipo de acesso ao buffer, o driver proxy define um bit no membro Flags de seu objeto de dispositivo para DO_DIRECT_IO. O driver proxy também deve alocar ou liberar memória usada para transferência de mensagens e RDMA sempre que solicitado. Quando o switch de Soquetes do Windows solicita que um provedor de serviços SAN registre ou libere memória, o provedor de serviços SAN solicita que seu driver proxy aloque ou libere, respectivamente, a memória física. Para obter mais informações sobre como configurar o acesso ao buffer e alocar e liberar memória, consulte Gerenciamento de Memória e Uso de Buffers de Memória.
Alocar memória baixa para RDMA
Um driver proxy deve alocar memória que possa ser acessada para operações RDMA. O driver proxy pode alocar memória baixa para operações RDMA mesmo em um sistema configurado para que nenhuma memória física abaixo de 4 GB possa ser alocada. (Isso é chamado de configuração NOLOWMEM.) O driver proxy chama a função MmAllocateContiguousMemorySpecifyCache ou sua própria função DMA AllocateCommonBuffer para recuperar a memória baixa.
Para recuperar um ponteiro para a função AllocateCommonBuffer do DMA, o driver proxy executa as seguintes etapas:
Inicializa com zeros uma estrutura de DEVICE_DESCRIPTION e, em seguida, grava as informações relevantes para sua NIC SAN nessa estrutura.
Chama IoGetDmaAdapter para recuperar um ponteiro para a estrutura do adaptador DMA para sua NIC SAN. Nesta chamada, o driver fornece um ponteiro à estrutura de DEVICE_DESCRIPTION preenchida. IoGetDmaAdapter retorna um ponteiro para uma estrutura do adaptador DMA que contém um ponteiro para uma estrutura de DMA_OPERATIONS. DMA_OPERATIONS contém ponteiros para um conjunto definido pelo sistema de funções DMA. Uma dessas funções é AllocateCommonBuffer, que aloca um buffer de DMA fisicamente contíguo.