Get‑NetAdapter non mostra FullDuplex in VM Hyper‑V: cause, verifiche e best practice

In una VM Hyper‑V collegata a uno switch virtuale esterno, il cmdlet Get‑NetAdapter mostra la velocità ma il campo FullDuplex risulta vuoto. Non è un bug: è il comportamento previsto del layer di virtualizzazione. Qui trovi spiegazione, verifiche e best practice operative.

Indice

Scenario e sintomi

All’interno della VM, l’amministratore esegue:

Get‑NetAdapter | Select Name, FullDuplex, LinkSpeed

L’output riporta correttamente LinkSpeed (es. 100 Mbps) ma la colonna FullDuplex è vuota (valore NULL).

Istintivamente ci si aspetta che la VM “erediti” lo stato duplex dalla scheda fisica dell’host; tuttavia questa aspettativa non si applica al networking virtualizzato.

Perché FullDuplex è vuoto in una VM Hyper‑V

La proprietà FullDuplex di Get‑NetAdapter ha senso solo per schede che parlano su un mezzo fisico (rame o fibra) e che negoziano la modalità half/full duplex a Layer 1. La vNIC della VM, invece, non “vede” il cavo: dialoga con lo switch virtuale attraverso il VMBus.

Punto chiaveDettagli
Il duplex è un attributo fisicoLa negoziazione half/full duplex avviene a Layer 1 fra due NIC reali collegate da un cavo. È un’informazione legata al mezzo, non al traffico virtuale.
La VM usa un adattatore virtualeLa vNIC (driver sintetico NetVSC) scambia frame con il vSwitch tramite VMBus. Non partecipa ad auto‑negotiation fisica → Hyper‑V non popola FullDuplex (risulta NULL).
Dove verificare il duplexControlla la scheda fisica dell’host Hyper‑V (o gli strumenti del vendor, o lo switch fisico) per conoscere Speed & Duplex reali.
Nessun impatto funzionaleL’assenza del valore in VM è normale e non limita le prestazioni; il percorso virtuale opera di fatto in full‑duplex verso il vSwitch.
Non esiste un overrideNon c’è un cmdlet o un’impostazione per “forzare” la VM a mostrare FullDuplex: l’informazione non viene esposta dal layer di virtualizzazione.

Approfondimento tecnico

  • vNIC sintetica (NetVSC): il driver della VM è ottimizzato per dialogare via VMBus con lo switch virtuale. Non effettua alcuna auto‑negotiation elettrica, quindi non ha un concetto di “half” o “full” riferito al filo.
  • OID di duplex: gli adattatori fisici espongono (a livello NDIS) un indicatore di duplex; la vNIC Hyper‑V tipicamente non lo espone perché lo scenario non prevede collision domain né CSMA/CD.
  • Velocità mostrata in VM: LinkSpeed nella VM è un valore logico. In molti ambienti Hyper‑V appare un numero “nominale” (spesso elevato) utile a QoS/prioritizzazione interna; in altri casi può riflettere valori più bassi. Non è la prova della velocità del cavo.
  • SR‑IOV: anche quando usi SR‑IOV (vNIC come Virtual Function), la rappresentazione in guest può non riportare FullDuplex in modo coerente con l’aspettativa “da NIC fisica”; fa fede la porta sullo switch fisico.

Impatto sulle prestazioni

La mancanza del valore FullDuplex nella VM non penalizza il throughput: all’interno dell’host non esistono collisioni e lo scambio con il vSwitch è concettualmente full‑duplex. Le prestazioni dipendono da:

  • capacità della NIC fisica e configurazione dello switch reale;
  • coda e scheduler del vSwitch;
  • offload e accelerazioni (RSS/vRSS, VMQ, SR‑IOV, checksum offload, LSO);
  • CPU/NUMA, storage e stack TCP della VM.

Dove verificare davvero duplex e velocità

Sull’host Hyper‑V (Windows Server / Windows 10/11)

Controlla stato e velocità delle NIC fisiche:

# NIC fisiche con stato e velocità
Get‑NetAdapter -Physical | Select Name, InterfaceDescription, Status, LinkSpeed, MediaConnectionState | Format‑Table -Auto

Molti driver espongono una voce “Speed & Duplex” fra le proprietà avanzate. Se presente, puoi leggerla così:

# Cerca proprietà avanzate legate a Speed/Duplex (nome variabile in base al vendor)
Get‑NetAdapterAdvancedProperty -Name "*" |
  Where‑Object { $.RegistryKeyword -match "Speed|Duplex|Auto" -or $.DisplayName -match "Speed.*Duplex" } |
  Sort‑Object Name | Format‑Table Name, DisplayName, DisplayValue

Se il driver non espone l’impostazione, affidati al pannello del vendor o allo switch fisico.

Sullo switch di rete fisico

Verifica che la porta a cui è collegata la NIC dell’host sia su Auto‑Negotiation oppure, se richiesto, forzata a 100 Mbps full‑duplex su entrambi i lati. Evita forzature asimmetriche (tipica causa di collisioni, errori e throughput spontaneamente basso).

Dentro la VM (per completezza)

È normale vedere FullDuplex vuoto. Puoi comunque rilevare stato e contatori:

# Stato della vNIC in VM
Get‑NetAdapter | Select Name, Status, LinkSpeed, MacAddress | Format‑Table -Auto

Contatori di rete generici per la vNIC della VM

Get‑Counter '\Network Interface(*)\Bytes Total/sec' -SampleInterval 1 -MaxSamples 5 

Best practice di configurazione

  • Preferisci Auto‑Negotiation su NIC fisica e porta di switch. È la pratica consigliata per 100/1000/10G. Forzare la velocità solo quando richiesto da ambienti legacy e sempre in modo simmetrico.
  • Evita l’half‑duplex: è eredità dell’era degli hub; sugli switch moderni non ha senso operativo.
  • Allinea firmware e driver: aggiorna la NIC dell’host, in particolare per funzionalità VMQ/SR‑IOV.
  • Controlla il binding dello vSwitch: verifica quale NIC fisica è associata allo switch virtuale esterno e il suo stato.
  • Bilanciamento del traffico: se usi NIC Teaming o SET (Switch Embedded Teaming), verifica la salute di tutti i membri e la modalità (LACP/Static).

Procedure operative di diagnostica

Verifica rapida host ↔ vSwitch

# Mappa gli switch virtuali e le NIC fisiche sottostanti
Get‑VMSwitch | Select Name, SwitchType, NetAdapterInterfaceDescription, AllowManagementOS | Format‑List

Elenco delle vNIC delle VM e stato

Get‑VMNetworkAdapter -All | Select VMName, SwitchName, Status, MacAddress | Format‑Table -Auto 

Controllo mismatch duplex o velocità

  1. Confronta lo stato della port‑channel o della porta fisica sullo switch con la configurazione della NIC dell’host.
  2. Se vedi errori o performance anomale, imposta temporaneamente 100 Mbps full‑duplex su entrambi i lati (o torna a Auto su entrambi) e testa.
  3. Raccogli contatori in host e VM per correlare l’eventuale perdita di pacchetti al salto fisico.

Performance counter utili

# Elenca i set di contatori Hyper‑V
Get‑Counter -ListSet 'Hyper-V*' | Select -ExpandProperty CounterSetName

Traffico per porta dello vSwitch

Get‑Counter '\Hyper-V Virtual Switch Port(*)\Bytes/sec' -SampleInterval 1 -MaxSamples 10

Pacchetti scartati (se disponibili)

Get‑Counter '\Hyper-V Virtual Switch Port(*)\Dropped Packets' -SampleInterval 1 -MaxSamples 10 

Incrocia i nomi delle porte con l’output di Get‑VMNetworkAdapter per capire quale VM stai osservando.

Script di utilità

Report sintetico del duplex sulla NIC fisica

function Get-HostNicDuplex {
    [CmdletBinding()]
    param(
        [string]$Name = '*'
    )
    $nics = Get-NetAdapter -Name $Name -Physical -ErrorAction SilentlyContinue
    foreach ($nic in $nics) {
        $adv = Get-NetAdapterAdvancedProperty -Name $nic.Name -ErrorAction SilentlyContinue |
               Where-Object { $.RegistryKeyword -match 'Speed|Duplex|Auto' -or $.DisplayName -match 'Speed.*Duplex' }
        [pscustomobject]@{
            Name          = $nic.Name
            Vendor        = $nic.InterfaceDescription
            Status        = $nic.Status
            LinkSpeed     = $nic.LinkSpeed
            DuplexSetting = if ($adv) { $adv.DisplayValue -join '; ' } else { '(non esposto dal driver)' }
        }
    }
}
Esempio d'uso
Get-HostNicDuplex

Mappa rapida vSwitch → NIC fisica

function Get-HVNetworkMap {
    Get-VMSwitch | ForEach-Object {
        $sw = $_
        $nic = $null
        if ($sw.NetAdapterInterfaceDescription) {
            $nic = Get-NetAdapter | Where-Object { $_.InterfaceDescription -eq $sw.NetAdapterInterfaceDescription }
        }
        [pscustomobject]@{
            Switch                 = $sw.Name
            Tipo                   = $sw.SwitchType
            NicFisica              = if ($nic) { $nic.Name } else { '(nessuna: interno/privato)' }
            DescrizioneNicFisica   = $sw.NetAdapterInterfaceDescription
            AllowManagementOS      = $sw.AllowManagementOS
        }
    }
}
Esempio d'uso
Get-HVNetworkMap | Format-Table -Auto

Checklist di troubleshooting

  • Il campo FullDuplex in VM è vuoto? Comportamento atteso.
  • Hai throughput basso o altalenante? Verifica duplex e velocità sulla NIC fisica dell’host e sulla porta dello switch; evita configurazioni asimmetriche.
  • Usi NIC Teaming/SET? Controlla lo stato di tutti i membri e la policy (LACP/Static), poi misura di nuovo.
  • Offload e code: conferma che RSS/vRSS, VMQ e LSO siano coerenti con le best practice del tuo carico.
  • Contatori: confronta i contatori “Hyper‑V Virtual Switch Port” con quelli “Network Interface” per individuare dove si generano scarti.

Domande frequenti

Perché vedo 100 Mbps di LinkSpeed nella VM?
La velocità mostrata nella VM è logica: può riflettere un valore nominale del vSwitch/driver o un valore coerente con policy locali. Non rappresenta l’esatta capacità del collegamento fisico dell’host.

Posso forzare la VM a mostrare “FullDuplex = True”?
No. Non esiste un parametro supportato per popolare quella proprietà in guest: il dato non è esposto dalla vNIC Hyper‑V.

Questo limita le prestazioni?
No. Il percorso VM ↔ vSwitch è full‑duplex per progettazione. I colli di bottiglia reali sono sulla NIC fisica, sulla CPU o sullo storage.

Con SR‑IOV cambia qualcosa?
La VM usa una Virtual Function hardware, ma duplex e velocità restano tematiche del link fisico. Controlla comunque la porta di switch e gli strumenti del vendor.

Uso una Legacy Network Adapter: vedrò differenze?
La legacy NIC è emulata e pensata solo per compatibilità/boot PXE; anche in questo caso non aspettarti un valore affidabile di FullDuplex. Per prestazioni usa sempre la vNIC sintetica.

Ho forzato 100 full sullo switch ma “Auto” sull’host: è un problema?
Sì, è un classico scenario di mismatch. Imposta Auto/Auto o 100 full/100 full su entrambi i lati.

Esempi pratici di verifiche end‑to‑end

Conferma dello stato fisico sull’host

# Verifica che l'host stia linkando come atteso
Get‑NetAdapter -Name "Ethernet*" -Physical | Format‑List Name, Status, LinkSpeed, MediaConnectionState
Get‑HostNicDuplex | Where-Object { $_.Name -like "Ethernet*" }

Correlazione con lo switch virtuale

# Quale NIC fisica alimenta lo switch esterno usato dalla VM?
Get‑VMSwitch -SwitchType External | Select Name, NetAdapterInterfaceDescription | Format‑Table -Auto

Quale switch usa la VM?

Get‑VMNetworkAdapter -VMName "NomeVM" | Select VMName, SwitchName, MacAddress, Status | Format‑Table -Auto 

Misura di throughput

Per validare con numeri, usa strumenti di misurazione (ad es. tra VM e un endpoint fuori dall’host) e osserva i contatori sopra riportati. Se il link fisico è 100 Mbps, aspettati throughput TCP netto inferiore a 100 Mb/s per via dell’overhead di protocollo.

Linee guida operative

  1. Accetta il “NULL” in guest: è by‑design.
  2. Verifica sempre lato host e switch quando indaghi problemi di rete.
  3. Auto‑Negotiation come default sicuro; forzature solo quando necessario e in modo simmetrico.
  4. Monitora con contatori di Hyper‑V e interfacce: sono più utili di un singolo flag.
  5. Aggiorna driver/firmware e rivedi le impostazioni di offload se noti CPU elevata o code in saturazione.

Conclusioni

Il campo FullDuplex vuoto in una VM Hyper‑V non è un errore: è la diretta conseguenza del fatto che la vNIC non effettua negoziazione fisica. La verifica di duplex e velocità va sempre spostata sulla NIC fisica dell’host e sulla porta di switch reale. In termini di prestazioni, il piano dati virtuale opera in full‑duplex e la tua attenzione dovrebbe concentrarsi su link fisico, contatori Hyper‑V, impostazioni di offload e coerenza delle configurazioni tra host e switch.


Suggerimenti operativi (riassunto)

Diagnostica prestazioni

  • Se sospetti mismatch duplex o throughput anomalo, controlla la scheda fisica dell’host e lo switch reale.
  • Usa i contatori Hyper‑V (vNIC e vSwitch) o monitoraggio nella VM per misurare traffico e latenza.

Coerenza delle impostazioni

  • Imposta NIC fisica e porta di switch entrambe su Auto‑Negotiation oppure entrambe su 100 Mbps/full‑duplex.

In sintesi: il valore mancante di FullDuplex in una VM Hyper‑V è un comportamento atteso e non limita le prestazioni. Per conoscere la modalità duplex effettiva, verifica sempre l’interfaccia fisica sull’host o sullo switch di rete.

Indice