Страницы

Сохранить статью у себя в соцсети:

понедельник, 18 июня 2012 г.

§ Guest vCPU.

Выбор модели процессора для виртуального окружения.

В 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"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика