Sequência de inicialização de função virtual
Um adaptador de rede que dá suporte à SR-IOV (virtualização de E/S de raiz única) deve ser capaz de dar suporte aos seguintes componentes de hardware:
Uma função física PCI Express (PCIe) (PF). O PF sempre existe no adaptador de rede e é anexado à partição pai do Hyper-V.
Para obter mais informações sobre esse componente de hardware, consulte PF (Função Física SR-IOV).
Uma ou mais PCIe VF (Funções Virtuais). Cada VF deve ser inicializada e anexada a uma partição filho do Hyper-V antes que os componentes de rede do sistema operacional convidado possam enviar ou receber pacotes pela VF.
Para obter mais informações sobre esse componente de hardware, consulte VFs (Funções Virtuais) SR-IOV.
O driver de miniporto PF, que é executado no sistema operacional de gerenciamento da partição pai do Hyper-V, inicializa e aloca recursos para uma VF no adaptador de rede SR-IOV. Depois que o NDIS chama a função MiniportInitializeEx do driver de miniporto PF, o NDIS e a pilha de virtualização podem emitir solicitações de OID (identificador de objeto) para o driver de miniporto PF para fazer o seguinte:
Crie um comutador NIC no adaptador de rede. A opção NIC conecta o tráfego de rede entre as VFs, o PF e a porta de rede física.
Para obter mais informações, consulte Comutadores NIC.
Nota Começando com Windows Server 2012, a interface SR-IOV dá suporte a apenas uma opção NIC no adaptador de rede. Essa opção é conhecida como a opção NIC padrão e é referenciada pelo identificador NDIS_DEFAULT_SWITCH_ID.
Solicite ao driver de miniporto PF para inicializar e alocar recursos para uma VF no adaptador de rede.
Para obter mais informações, consulte VFs (Funções virtuais) SR-IOV.
Crie uma VPort (porta virtual) no comutador NIC e anexe-a ao VF.
Para obter mais informações, consulte Portas virtuais (VPorts).
O diagrama a seguir mostra as etapas envolvidas na inicialização do VF.
O NDIS, a pilha de virtualização e o driver de miniporto PF seguem estas etapas durante a sequência de inicialização do VF:
O NDIS lê a configuração de comutador padrão do registro e emite uma solicitação de método OID de OID_NIC_SWITCH_CREATE_SWITCH para provisionar a opção no adaptador de rede. Os parâmetros passados nessa solicitação OID incluem informações sobre como configurar recursos de hardware importantes, como VFs e VPorts. Ele também inclui informações sobre como distribuir os recursos entre os VPorts não padrão e o VPort padrão que estão anexados ao PF.
Depois que o OID tiver sido concluído com êxito pelo driver de miniporto PF, o comutador NIC estará pronto para ser usado para criar VPorts e alocar VFs nele.
Para obter mais informações sobre como criar um comutador NIC, consulte Criando um comutador NIC.
Uma VF é tratada como um mecanismo de descarregamento para o adaptador de rede da VM (máquina virtual). Esse adaptador é exposto no sistema operacional convidado que é executado na partição filho do Hyper-V. Por padrão, os componentes de rede no sistema operacional convidado enviam e recebem pacotes pelo caminho de dados sintéticos baseado em software. No entanto, se uma partição filho estiver habilitada para descarregamento de VF, a pilha de virtualização emitirá solicitações OID para o driver de miniporto PF para a alocação e inicialização de recursos de uma VF. Depois que o VF é anexado à partição filho e a um VPort na opção NIC, os componentes de rede enviam e recebem pacotes pelo caminho de dados do VF. Para obter mais informações sobre esses caminhos de dados, consulte Caminhos de dados SR-IOV.
Se uma partição filho do Hyper-V tiver sido habilitada para descarregamento de VF, a pilha de virtualização emitirá uma solicitação de método OID de OID_NIC_SWITCH_ALLOCATE_VF para o driver de miniporto PF. Os parâmetros passados nessa solicitação OID incluem o identificador da opção NIC na qual o VF está alocado. Outros parâmetros incluem identificadores para a partição filho à qual o VF será anexado.
O driver de miniporto PF aloca os recursos de hardware e software necessários para o VF. O driver de miniporto PF também determina o RID (Identificador do Solicitante pcIe) para o VF chamando NdisMGetVirtualFunctionLocation. O RID é usado para DMA e remapeamento de interrupção quando solicitações e interrupções de DMA são geradas pelo VF.
O RID juntamente com o identificador VF são retornados pelo driver de miniporto PF quando ele conclui com êxito a solicitação de OID_NIC_SWITCH_ALLOCATE_VF .
Para obter mais informações sobre a alocação de recursos para uma VF, consulte Alocando recursos para uma função virtual.
A pilha de virtualização cria um VPort no comutador NIC emitindo uma solicitação de método OID de OID_NIC_SWITCH_CREATE_VPORT para o driver de miniporto PF. Os parâmetros passados nessa solicitação OID incluem o identificador da opção NIC na qual o VPort deve ser criado. Outros parâmetros incluem o identificador do VF ao qual o VPort será anexado.
Nota O VPort padrão na opção NIC sempre existe e está anexado ao PF. Somente um único VPort não padrão pode ser criado e anexado a uma VF.
Antes que o NDIS encaminhe a solicitação OID para o driver de miniporto PF, ele aloca um identificador VPort válido que é exclusivo pelo adaptador de rede.
Quando o driver de miniporto PF manipula a solicitação OID, ele aloca os recursos de hardware necessários para o VPort e retém o identificador para o VPort. Esse identificador é usado em solicitações OID posteriores e chamadas de função SR-IOV.
Para obter mais informações sobre como criar um VPort, consulte Criando uma porta virtual.
A partição filho do Hyper-V pode ser iniciada muito antes de uma VF e VPort serem alocadas. Durante esse tempo, os componentes de rede no sistema operacional convidado enviam e recebem pacotes pelo caminho de dados sintético. Isso envolve o tráfego de pacotes pelo VPort padrão anexado ao PF. Para fazer a ponte do tráfego para a partição filho, a pilha de virtualização configura o VPort padrão com os filtros MAC (controle de acesso de mídia) e VLAN (LAN virtual) para o adaptador de rede da VM da partição filho.
Depois que os recursos para o VF e o VPort são alocados, a pilha de virtualização emite uma solicitação de método OID de OID_RECEIVE_FILTER_MOVE_FILTER para o driver de miniporto PF. Essa solicitação OID move os filtros MAC e VLAN para o adaptador de rede da VM do VPort padrão para o VPort anexado ao VF. Isso faz com que os pacotes que correspondem a esses filtros sejam encaminhados para o VF VPort pelo caminho de dados do VF.
Nota Os filtros de recebimento existentes podem ser movidos do VPort padrão para o VF VPort usando OID_RECEIVE_FILTER_MOVE_FILTER. Além disso, novos filtros podem ser definidos no VF VPort usando OID_RECEIVE_FILTER_SET_FILTER.
Depois que o VF e o VPort forem criados com êxito e os filtros MAC tiverem sido definidos no VPort, a pilha de virtualização notificará o VSP (provedor de serviços virtuais) VPCI (Virtual PCI). Esse VSP é executado no sistema operacional de gerenciamento da partição pai do Hyper-V. A notificação informa ao VSP da VPCI que o VF que foi alocado e anexado com êxito a uma partição filho. O VSP VPCI envia mensagens pelo VMBus (barramento de máquina virtual) para o VSC (cliente de serviço virtual) VPCI que é executado no sistema operacional convidado da partição filho. O VSC VPCI é um driver de barramento que expõe um dispositivo PCI para o adaptador de rede VF.
Depois que o adaptador de rede VF é exposto, o subsistema PnP que é executado no sistema operacional convidado detecta o adaptador e carrega o driver de miniporta VF. Esse driver registra-se com o NDIS. Depois que o driver de miniporto VF tiver sido inicializado e os filtros de pacote apropriados forem configurados no adaptador de rede VF, o caminho de dados do VF estará totalmente operacional. Como resultado, o tráfego de pacotes no sistema operacional convidado mudou para esse caminho de dados do caminho de dados sintético.