Setting the CPUID of a XEN guest

After some reading around I've discovered it is possible to configure the CPU vendor and model information that a XEN guest sees.

Most Linux sysadmins will be familiar with cat /proc/cpuinfo to get information about the systems processors. This gives information about the CPU vendor, model and features. For example my desktop gives:

[cellis@cedesktop ~]$ cat /proc/cpuinfo 
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 67
model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 5200+
- snip -

This information is actually exposed via cpuid instruction . This instruction takes a command in the EAX register and populates the EAX, EBX, ECX and EDX registers with the requested data.

If EAX is set to zero, the CPU vendor string is returned. This is a 12 byte ASCII string. Which is stored in the EBX, EDX, ECX (that is certainly logical, I suspect a hangup from the circuit complexity).

The CPU model string is a little more complex, it is a 48 byte ASCII string.

This string is obtained by executing the cpuid instruction 3 times, with EAX set to: 0x80000002, 0x80000003 and 0x80000004.

XEN has the cpuid config option , which defines the values of EAX, EBX, ECX and EDX for specific values of EAX.

Lets take the following XEN config:

cpuid=['0:eax=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,ebx=01110010011101000110111001001001, 
ecx=00000000000000000000000000000000,edx=00000000011110100110100101100010']

This causes the XEN guest to see the CPU vendor string 'Intrbiz', by providing the cpuid register values when EAX = 0.

As such, my XEN VM now reports:

xenvm1:~ # cat /proc/cpuinfo
processor       : 0
vendor_id       : Intrbiz
cpu family      : 0
model           : 0
model name      : Intrbiz XEN virtual CPU
stepping        : 0

The hard part of setting this, is working out the values of the registers. It takes time to convert the text to binary and get the orderings correct.

Instead, you can generate the XEN config right here:

Simply enter your desired CPU vendor and model string and the XEN config will be generated

CPU Vendor: Model: