Выбор модели процессора для виртуального окружения.
В QEMU, при запуске виртуальной машины, существует возможность указать модель процессора (qemu vcpu). Такая возможность позволяет предопределить виртуальный процессор с набором возможностей (cpu flags). Варьируя набор функций процессора в виртуальной машине можно обеспечить максимальную производительность и функциональность от процессора хост-системы либо обеспечить возможность безопасной миграции (флаги vcpu должны совпадать с флагами хост-системы куда выполняется миграция).
Список всех поддерживаемых моделей можно порсмотреть следующим образом
# qemu-system-x86_64 -cpu ?model
x86 Opteron_G4 AMD Opteron 62xx class CPU
x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron)
x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron)
x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron)
x86 SandyBridge Intel Xeon E312xx (Sandy Bridge)
x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C)
x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7)
x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2)
x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2)
x86 [n270] Intel(R) Atom(TM) CPU N270 @ 1.60GHz
x86 [athlon] QEMU Virtual CPU version 1.1.50
x86 [pentium3]
x86 [pentium2]
x86 [pentium]
x86 [486]
x86 [coreduo] Genuine Intel(R) CPU T2600 @ 2.16GHz
x86 [kvm32] Common 32-bit KVM processor
x86 [qemu32] QEMU Virtual CPU version 1.1.50
x86 [kvm64] Common KVM processor
x86 [core2duo] Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
x86 [phenom] AMD Phenom(tm) 9550 Quad-Core Processor
x86 [qemu64] QEMU Virtual CPU version 1.1.50
В выводе отображаются имена моделей которые можно использовать для передачи в качестве аргумента параметру -cpu при запуске виртуальной машины.
Детальную информацию о каждой модели можно получить просмотрев файл /usr/share/qemu/cpus-x86_64.conf но он есть не во всех дистрибутивах или может находиться в другом месте, поэтому можно воспользоваться универсальной командой
# qemu-system-x86_64 -cpu ?dump
...
x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7)
family 6 model 2 stepping 3 level 2 xlevel 0x8000000a vendor "GenuineIntel"
feature_edx 078bfbfd (sse2 sse fxsr mmx clflush pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de fpu)
feature_ecx 00982201 (popcnt sse4.2|sse4_2 sse4.1|sse4_1 cx16 ssse3 pni|sse3)
extfeature_edx 2191abfd (lm fxsr mmx nx pat cmov pge syscall apic cx8 mce pae msr tsc pse de fpu)
extfeature_ecx 00000001 (lahf_lm)
...
Есть 4 поля feature_edx, feature_ecx, extfeature_edx, extfeature_ecx определяющие набор функций для каждой модели в частности. Полный такой список для каждого поля можно получить командой:
# qemu-system-x86_64 -cpu ?cpuid
Recognized CPUID flags:
f_edx: pbe ia64 tm ht ss sse2 sse fxsr mmx acpi ds clflush pn pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de vme fpu
f_ecx: hypervisor avx osxsave xsave aes popcnt movbe x2apic sse4.2|sse4_2 sse4.1|sse4_1 dca pdcm xtpr cx16 fma cid ssse3 tm2 est smx vmx ds_cpl monitor dtes64 pclmuldq pni|sse3
extf_edx: 3dnow 3dnowext lm rdtscp pdpe1gb fxsr_opt fxsr mmx mmxext nx pse36 pat cmov mca pge mtrr syscall apic cx8 mce pae msr tsc pse de vme fpu
extf_ecx: nodeid_msr cvt16 fma4 wdt skinit xop ibs osvw 3dnowprefetch misalignsse sse4a abm cr8legacy extapic svm cmp_legacy lahf_lm
Выбрав подходящую модель, можно использовать флаг check для проверки совместимости с физическим процессором. Если qemu обнаружит неподдерживаемые функции, он сообщит об этом и продолжит работу
# qemu-system-x86_64 -cpu Nehalem,check
warning: host cpuid 0000_0001 lacks requested flag 'sse4.2|sse4_2' [0x00100000]
warning: host cpuid 0000_0001 lacks requested flag 'popcnt' [0x00800000]
VNC server running on `127.0.0.1:5900'
Если же все хорошо в этом плане, то qemu просто продолжит работу без каких-либо предупреждений
# qemu-system-x86_64 -cpu core2duo,check
VNC server running on `127.0.0.1:5900'
Свою модель процессора можно просмотреть в /proc/cpuinfo или набрав uname -p
Виртуальную машину со всеми доступными флагами имеющимися у хост-системы, можно запустить с помощью "-cpu host".
Передать дополнительные флаги к выбраной модели можно передать так "-cpu qemu64,+sse4_1,+sse4_2"
Но стоит помнить, оптимизируя виртуальный процессор, мы жестко привязываемся к архитектуре физического сервера и в случае миграции, можно будет мигрировать только на такой же сервер.
немного про флаги "Флаги /proc/cpuinfo"
На главную "Аппаратная виртуализация"
Комментариев нет:
Отправить комментарий