Hyper-V Processor Compatibility deep dive

Hyper-V mette a disposizione nelle impostazioni delle VM l’opzione Processor compatibility, che permette di migrare la VM su un host di virtualizzazione con processore fisico differente.

image

Chiaramente questa impostazione va a sacrificare alcune funzionalità delle CPU per garantire la compatibilità durate la Live Migration, in particolare come riportato in questo documento Virtual Machine processor compatibility mode vengono nascoste alla VM una serie di funzionalità:

  • Processori AMD: SSSE3, SSE4.1, SSE4.A, SSE5, POPCNT, LZCNT, Misaligned SSE, AMD 3DNow!, Extended AMD 3DNow!
  • Processori Intel: SSSE3, SSE4.1, SSE4.2, POPCNT, Misaligned SSE, XSAVE, AVX

Inoltre la cache line della VM viene impostata a 8 bytes sia con CPU Intel che AMD.

Si tenga comunque presente che come riportato nelle seguenti FAQ sempre all’interno del documento indicato precedentemente non è ammessa una Live Migration da host con CPU Intel verso un host con CPU AMD e viceversa:

“Q: What if I try to live migrate a VM with processor compatibility mode from a host A (Intel based) to host B (AMD based)?
A: Live migration attempt will fail since the processor compatibility check will not succeed.

Q: What if I try to add a host (AMD based) to the cluster of all hosts running Intel based processors?
A: Failover cluster supports cluster of hosts with different architectures so you will be allowed to build such a cluster. However, planned downtime (live migration or quick migration) operations between hosts running different processor architecture will not succeed.

Q: What happens if in an unplanned failover of a cluster node if my cluster has some Intel based hosts and the rest are AMD based?
A: There is no impact regardless of VM’s processor compatibility mode in unplanned failover scenario. During unplanned failover VM is essentially restarted in which case VM will relearn about processor features available from the host.

Un’altra applicazione della funzionalità di Processor Compatibility è quella di poter essere utilizzata per il  supporto di sistemi operativi legacy. Va detto però che in Windows Server 2012 è stata rimossa l’opzione specifica che era presente fino a Windows Server 2008 R2.

image

In ogni caso la feature per l’esecuzione di un OS legacy è stata rimossa solo dalla GUI ma non dal cmdlet Set-VMProcessor  che supporta ancora l’opzione CompatibilityForOlderOperatingSystemsEnabled:

Set-VMProcessor TestVM –CompatibilityForOlderOperatingSystemsEnabled $true

E’ possibile impostare tale configurazione per eseguire VM con Windows NT o Windows 2000 anche se va ricordato che a partire da Windows Server 2012 tali sistemi operativi non più ufficialmente supportati. In generale si tenga presente che abilitare l’opzione per l’esecuzione dei sistemi operativi legacy non significa che questi siano supportati, per l’elenco dei Guest OS supportati si veda il seguente Hyper-V Overview.

Per ulteriori dettagli si vedano anche i seguenti: