VFs (Funções Virtuais) SR-IOV

Uma VF (função virtual) PCI Express (PCIe) é uma função PCIe leve em um adaptador de rede que dá suporte à virtualização de E/S de raiz única (SR-IOV).

O VF está associado à função física pcie (PF) no adaptador de rede e representa uma instância virtualizada do adaptador de rede. Cada VF tem seu próprio espaço de Configuração PCI. Cada VF também compartilha um ou mais recursos físicos no adaptador de rede, como uma porta de rede externa, com o PF e outros VFs.

Um VF não é um dispositivo PCIe completo. No entanto, ele fornece um mecanismo básico para transferir dados diretamente entre uma partição filho do Hyper-V e o adaptador de rede SR-IOV subjacente. Os recursos de software associados à transferência de dados estão diretamente disponíveis para o VF e são isolados do uso por outras VFs ou pelo PF. No entanto, a configuração da maioria desses recursos é executada pelo driver de miniporto PF executado no sistema operacional de gerenciamento da partição pai do Hyper-V.

Uma VF é exposta como um adaptador de rede virtual (adaptador de rede VF) no sistema operacional convidado que é executado em uma partição filho do Hyper-V. Depois que o VF é associado a uma porta virtual (VPort) na opção NIC do adaptador de rede SR-IOV, o driver VPCI (PCI virtual) executado na VM expõe o adaptador de rede VF. Depois de exposto, o gerenciador PnP no sistema operacional convidado carrega o driver de miniporto VF.

Observação

Uma partição filho do Hyper-V também é conhecida como uma VM (máquina virtual).

O driver de miniporto VF é um driver de miniporto NDIS instalado na VM para gerenciar o VF. Qualquer operação executada pelo driver de miniporto VF não deve afetar nenhuma outra VF ou o PF no mesmo adaptador de rede.

O driver de miniporto VF pode funcionar como qualquer driver de dispositivo PCI. Ele pode ler e gravar no espaço de configuração PCI do VF. No entanto, o acesso ao dispositivo PCI virtual é uma operação privilegiada e é gerenciado pelo driver de miniporto PF da seguinte maneira:

  • Quando o driver de miniporto VF chama NdisMGetBusData para ler dados do espaço de configuração PCI do adaptador de rede VF, a pilha de virtualização é notificada. Essa pilha é executada no sistema operacional de gerenciamento da partição pai do Hyper-V. Quando a pilha é notificada sobre a solicitação de leitura, ela emite uma solicitação de método OID (identificador de objeto) de OID_SRIOV_READ_VF_CONFIG_SPACE para o driver de miniporto PF. Os dados a serem lidos são especificados em uma estrutura de NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS contida na solicitação OID.

    O driver lê os dados solicitados do espaço de configuração do VF PCI e retorna os dados concluindo a solicitação OID. Esses dados são retornados para o driver de miniporto VF quando a chamada para NdisMGetBusData for concluída.

  • Quando o driver de miniporto VF chama NdisMSetBusData para gravar dados no espaço de configuração PCI do adaptador de rede VF, a pilha de virtualização é notificada da solicitação de gravação. Ele emite uma solicitação de método OID de OID_SRIOV_WRITE_VF_CONFIG_SPACE para o driver de miniporto PF. Os dados a serem gravados são especificados em uma estrutura de NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS contida na solicitação OID.

    O driver grava os dados no espaço de configuração do VF PCI e retorna o status da solicitação quando ele conclui a solicitação OID. Esse status é retornado ao driver de miniporto VF após a conclusão da chamada para NdisMSetBusData.

O driver de miniporto VF também pode se comunicar com o driver de miniporto PF. Esse caminho de comunicação é sobre uma interface backchannel. Para obter mais informações, consulte Comunicação backchannel SR-IOV PF/VF.

Nota O driver de miniporto VF deve estar ciente de que ele está em execução em um ambiente virtualizado para que ele possa se comunicar com o driver de miniporto PF para determinadas operações. Para obter mais informações sobre como o driver faz isso, consulte Inicializando um driver de miniporto VF.