Sequência de inicialização de função virtual
Um adaptador de rede que ofereça suporte à virtualização de E/S de raiz única (SR-IOV) deve ser capaz de suportar os seguintes componentes de hardware:
Uma única função física (PF) PCI Express (PCIe). O PF está sempre presente no adaptador de rede e está associado à partição pai Hyper-V.
Para obter mais informações sobre esse componente de hardware, consulte SR-IOV Função física (PF).
Uma ou mais funções virtuais PCIe (VF). Cada VF deve ser inicializado e anexado a uma partição filho Hyper-V antes que os componentes de rede do sistema operacional convidado possam enviar ou receber pacotes pelo VF.
Para obter mais informações sobre esse componente de hardware, consulte SR-IOV Virtual Functions (VFs).
O driver de miniporta PF, que é executado no sistema operativo de gestão da partição-mãe do Hyper-V, inicializa e atribui recursos a um VF no adaptador de rede SR-IOV. Após o NDIS chamar a funçãoMiniportInitializeEx do driverde miniporta PF, o NDIS e a pilha de virtualização podem emitir pedidos de identificador de objeto (OID) ao driver de miniporta PF para realizar o seguinte:
Crie um comutador NIC no adaptador de rede. O switch NIC liga o tráfego de rede entre os VFs, o PF e a porta de rede física.
Para obter mais informações, consulte comutadores NIC.
Observação A partir do Windows Server 2012, a interface SR-IOV suporta apenas um comutador 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 PF da miniporta que inicialize e aloque recursos para um VF no adaptador de rede.
Para obter mais informações, consulte SR-IOV Virtual Functions (VFs).
Crie uma porta virtual (VPort) no comutador NIC e anexe-a ao VF.
Para obter mais informações, consulte Virtual Ports (VPorts).
O diagrama a seguir mostra as etapas envolvidas na inicialização do VF.
NDIS, a pilha de virtualização e o driver de miniporta PF seguem estas etapas durante a sequência de inicialização VF:
O NDIS lê a configuração padrão do switch a partir do registo e emite um pedido de método OID de OID_NIC_SWITCH_CREATE_SWITCH para configurar o switch no adaptador de rede. Os parâmetros que são passados nesta 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 os VPort padrão que estão anexados ao PF.
Depois que o OID tiver sido concluído com êxito pelo driver de miniporta PF, o switch 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.
Um VF é considerado um mecanismo de descarregamento para o adaptador de rede da máquina virtual (VM). Este adaptador é exposto no sistema operativo convidado que é executado na partição secundária 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 subordinada estiver habilitada para descarregamento de VF, a pilha de virtualização emitirá solicitações OID ao controlador da miniporta PF para a alocação de recursos e inicialização de um VF. Depois que o VF é conectado à partição filha e a um VPort no switch NIC, os componentes de rede enviam e recebem pacotes pelo trajeto de dados VF. Para obter mais informações sobre esses caminhos de dados, consulte SR-IOV Data Paths.
Se uma partição filha Hyper-V tiver sido ativada para descarregamento de VF, a pilha de virtualização emitirá um pedido de método OID de OID_NIC_SWITCH_ALLOCATE_VF ao driver de miniporta PF. Os parâmetros que são passados nesta solicitação OID incluem o identificador do comutador NIC no qual o VF está alocado. Outros parâmetros incluem identificadores para a partição filha à qual o VF será anexado.
O driver de miniporta PF aloca os recursos de hardware e software necessários para o VF. O driver de miniporta PF também determina o PCIe Requestor Identifier (RID) para o VF chamando NdisMGetVirtualFunctionLocation. O RID é usado para DMA e remapeamento de interrupção quando solicitações e interrupções DMA são geradas pelo VF.
O RID juntamente com o identificador VF são retornados pelo driver de miniporta 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 um VF, consulte Allocating Resources for a Virtual Function.
A pilha de virtualização cria um VPort no switch NIC realizando uma solicitação de método OID de OID_NIC_SWITCH_CREATE_VPORT para o driver de miniporta PF. Os parâmetros que são passados nesta solicitação OID incluem o identificador do comutador NIC no qual o VPort deve ser criado. Outros parâmetros incluem o identificador do FV ao qual o VPort será anexado.
Nota O VPort padrão no switch NIC sempre existe e está conectado ao PF. Apenas um único VPort não padrão pode ser criado e anexado a um VF.
Antes de encaminhar a solicitação OID para o driver de miniporta PF, o NDIS aloca um identificador VPort válido que é exclusivo no adaptador de rede.
Quando o driver de miniporta PF lida com 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 Hyper-V pode ser iniciada muito antes de um VF e um VPort serem alocados. Durante esse tempo, os componentes de rede no sistema operacional convidado enviam e recebem pacotes pelo caminho de dados sintéticos. Isso envolve o tráfego de pacotes sobre o VPort padrão que está anexado ao PF. Para interligar o tráfego para a partição secundária, a pilha de virtualização configura o VPort padrão com os filtros MAC (controle de acesso à mídia) e VLAN (LAN virtual) para o adaptador de rede da VM da partição secundária.
Após a alocação dos recursos para VF e VPort, a pilha de virtualização emite uma solicitação de método OID de OID_RECEIVE_FILTER_MOVE_FILTER para o driver de miniport PF. Essa solicitação OID move os filtros MAC e VLAN para o adaptador de rede VM do VPort padrão para o VPort que está conectado ao VF. Isso faz com que os pacotes que correspondem a esses filtros sejam encaminhados para o VF VPort através do caminho de dados VF.
Observação Os filtros de recebimento existentes podem ser movidos do VPort padrão para o VPort VF usando OID_RECEIVE_FILTER_MOVE_FILTER. Além disso, é possível definir novos filtros no VF VPort através do uso de OID_RECEIVE_FILTER_SET_FILTER.
Depois que o VF e o VPort são criados com êxito e os filtros MAC foram definidos no VPort, a pilha de virtualização notifica o provedor de serviços virtuais (VSP) Virtual PCI (VPCI). Esse VSP é executado no sistema operacional de gerenciamento da partição pai Hyper-V. A notificação informa o VSP VPCI que o VF foi alocado e anexado com êxito a uma partição subordinada. O VPCI VSP envia mensagens pelo barramento de máquina virtual (VMBus) para o cliente de serviço virtual (VSC) VPCI que opera no sistema operativo convidado da partição subordinada. O VPCI VSC é 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 executado no sistema operacional convidado deteta o adaptador e carrega o driver de miniporta VF. Este controlador regista-se em NDIS. Depois que o driver de miniporta VF tiver sido inicializado e os filtros de pacote apropriados forem configurados no adaptador de rede VF, o caminho de dados VF estará totalmente operacional. Como resultado, o tráfego de pacotes no sistema operacional convidado alternou para esse caminho de dados a partir do caminho de dados sintéticos.