QEMU 에뮬레이션 모드(KVM 없이)에서 X86 PMU를 활성화할 수 있습니까?

QEMU 에뮬레이션 모드(KVM 없이)에서 X86 PMU를 활성화할 수 있습니까?

perfLinux 시스템에서 실행을 시도했지만 WSL2 및 virtual-box 6.1이 감지되지 않습니다.하드웨어시스템의 PMU.

qemu-system-x86_64그래서 Linux VM에 설치 하고 에뮬레이트된 PMU를 사용하기 위해 에뮬레이션 모드에서 QEMU를 실행해 보았습니다.

하지만 에뮬레이션 모드에서 QEMU를 실행할 때 "PMU 카운터 없음"이라는 커널 로그가 계속 표시됩니다.

나는 또는 qemu-system-x86_64으로 -cpu IvyBridge실행을 시도했지만 -cpu BroadWell아무것도 작동하지 않았습니다.

나는 qemu -cpu help다음과 같은 지원되는 CPU 모델을 실행하여 얻었습니다.

VirtualBox:/mnt$ qemu-system-x86_64 -cpu help
Available CPUs:
x86 486                   (alias configured by machine type)              
x86 486-v1                                                                
x86 Broadwell             (alias configured by machine type)              
x86 Broadwell-IBRS        (alias of Broadwell-v3)                         
x86 Broadwell-noTSX       (alias of Broadwell-v2)                         
x86 Broadwell-noTSX-IBRS  (alias of Broadwell-v4)                         
x86 Broadwell-v1          Intel Core Processor (Broadwell)                
x86 Broadwell-v2          Intel Core Processor (Broadwell, no TSX)        
x86 Broadwell-v3          Intel Core Processor (Broadwell, IBRS)          
x86 Broadwell-v4          Intel Core Processor (Broadwell, no TSX, IBRS)  
x86 Cascadelake-Server    (alias configured by machine type)              
x86 Cascadelake-Server-noTSX  (alias of Cascadelake-Server-v3)                
x86 Cascadelake-Server-v1  Intel Xeon Processor (Cascadelake)              
x86 Cascadelake-Server-v2  Intel Xeon Processor (Cascadelake)              
x86 Cascadelake-Server-v3  Intel Xeon Processor (Cascadelake)              
x86 Conroe                (alias configured by machine type)              
x86 Conroe-v1             Intel Celeron_4x0 (Conroe/Merom Class Core 2)   
x86 Cooperlake            (alias configured by machine type)              
x86 Cooperlake-v1         Intel Xeon Processor (Cooperlake)               
x86 Denverton             (alias configured by machine type)              
x86 Denverton-v1          Intel Atom Processor (Denverton)                
x86 Dhyana                (alias configured by machine type)              
x86 Dhyana-v1             Hygon Dhyana Processor                          
x86 EPYC                  (alias configured by machine type)              
x86 EPYC-IBPB             (alias of EPYC-v2)                              
x86 EPYC-Milan            (alias configured by machine type)              
x86 EPYC-Milan-v1         AMD EPYC-Milan Processor                        
x86 EPYC-Rome             (alias configured by machine type)              
x86 EPYC-Rome-v1          AMD EPYC-Rome Processor                         
x86 EPYC-Rome-v2          AMD EPYC-Rome Processor                         
x86 EPYC-v1               AMD EPYC Processor                              
x86 EPYC-v2               AMD EPYC Processor (with IBPB)                  
x86 EPYC-v3               AMD EPYC Processor                              
x86 Haswell               (alias configured by machine type)              
x86 Haswell-IBRS          (alias of Haswell-v3)                           
x86 Haswell-noTSX         (alias of Haswell-v2)                           
x86 Haswell-noTSX-IBRS    (alias of Haswell-v4)                           
x86 Haswell-v1            Intel Core Processor (Haswell)                  
x86 Haswell-v2            Intel Core Processor (Haswell, no TSX)          
x86 Haswell-v3            Intel Core Processor (Haswell, IBRS)            
x86 Haswell-v4            Intel Core Processor (Haswell, no TSX, IBRS)    
x86 Icelake-Client        (alias configured by machine type)              
x86 Icelake-Client-noTSX  (alias of Icelake-Client-v2)                    
x86 Icelake-Client-v1     Intel Core Processor (Icelake)                  
x86 Icelake-Client-v2     Intel Core Processor (Icelake)                  
x86 Icelake-Server        (alias configured by machine type)              
x86 Icelake-Server-noTSX  (alias of Icelake-Server-v2)                    
x86 Icelake-Server-v1     Intel Xeon Processor (Icelake)                  
x86 Icelake-Server-v2     Intel Xeon Processor (Icelake)                  
x86 IvyBridge             (alias configured by machine type)              
x86 IvyBridge-IBRS        (alias of IvyBridge-v2)                         
x86 IvyBridge-v1          Intel Xeon E3-12xx v2 (Ivy Bridge)              
x86 IvyBridge-v2          Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS)        
x86 KnightsMill           (alias configured by machine type)              
x86 KnightsMill-v1        Intel Xeon Phi Processor (Knights Mill)         
x86 Nehalem               (alias configured by machine type)              
x86 Nehalem-IBRS          (alias of Nehalem-v2)                           
x86 Nehalem-v1            Intel Core i7 9xx (Nehalem Class Core i7)       
x86 Nehalem-v2            Intel Core i7 9xx (Nehalem Core i7, IBRS update)
x86 Opteron_G1            (alias configured by machine type)              
x86 Opteron_G1-v1         AMD Opteron 240 (Gen 1 Class Opteron)           
x86 Opteron_G2            (alias configured by machine type)              
x86 Opteron_G2-v1         AMD Opteron 22xx (Gen 2 Class Opteron)          
x86 Opteron_G3            (alias configured by machine type)              
x86 Opteron_G3-v1         AMD Opteron 23xx (Gen 3 Class Opteron)          
x86 Opteron_G4            (alias configured by machine type)              
x86 Opteron_G4-v1         AMD Opteron 62xx class CPU                      
x86 Opteron_G5            (alias configured by machine type)              
x86 Opteron_G5-v1         AMD Opteron 63xx class CPU                      
x86 Penryn                (alias configured by machine type)              
x86 Penryn-v1             Intel Core 2 Duo P9xxx (Penryn Class Core 2)    
x86 SandyBridge           (alias configured by machine type)              
x86 SandyBridge-IBRS      (alias of SandyBridge-v2)                       
x86 SandyBridge-v1        Intel Xeon E312xx (Sandy Bridge)                
x86 SandyBridge-v2        Intel Xeon E312xx (Sandy Bridge, IBRS update)   
x86 Skylake-Client        (alias configured by machine type)              
x86 Skylake-Client-IBRS   (alias of Skylake-Client-v2)                    
x86 Skylake-Client-noTSX-IBRS  (alias of Skylake-Client-v3)                    
x86 Skylake-Client-v1     Intel Core Processor (Skylake)                  
x86 Skylake-Client-v2     Intel Core Processor (Skylake, IBRS)            
x86 Skylake-Client-v3     Intel Core Processor (Skylake, IBRS)            
x86 Skylake-Server        (alias configured by machine type)              
x86 Skylake-Server-IBRS   (alias of Skylake-Server-v2)                    
x86 Skylake-Server-noTSX-IBRS  (alias of Skylake-Server-v3)                    
x86 Skylake-Server-v1     Intel Xeon Processor (Skylake)                  
x86 Skylake-Server-v2     Intel Xeon Processor (Skylake, IBRS)            
x86 Skylake-Server-v3     Intel Xeon Processor (Skylake, IBRS)            
x86 Snowridge             (alias configured by machine type)              
x86 Snowridge-v1          Intel Atom Processor (SnowRidge)                
x86 Snowridge-v2          Intel Atom Processor (Snowridge, no MPX)        
x86 Westmere              (alias configured by machine type)              
x86 Westmere-IBRS         (alias of Westmere-v2)                          
x86 Westmere-v1           Westmere E56xx/L56xx/X56xx (Nehalem-C)          
x86 Westmere-v2           Westmere E56xx/L56xx/X56xx (IBRS update)        
x86 athlon                (alias configured by machine type)              
x86 athlon-v1             QEMU Virtual CPU version 2.5+                   
x86 core2duo              (alias configured by machine type)              
x86 core2duo-v1           Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz 
x86 coreduo               (alias configured by machine type)              
x86 coreduo-v1            Genuine Intel(R) CPU           T2600  @ 2.16GHz 
x86 kvm32                 (alias configured by machine type)              
x86 kvm32-v1              Common 32-bit KVM processor                     
x86 kvm64                 (alias configured by machine type)              
x86 kvm64-v1              Common KVM processor                            
x86 n270                  (alias configured by machine type)              
x86 n270-v1               Intel(R) Atom(TM) CPU N270   @ 1.60GHz          
x86 pentium               (alias configured by machine type)              
x86 pentium-v1                                                            
x86 pentium2              (alias configured by machine type)              
x86 pentium2-v1                                                           
x86 pentium3              (alias configured by machine type)              
x86 pentium3-v1                                                           
x86 phenom                (alias configured by machine type)              
x86 phenom-v1             AMD Phenom(tm) 9550 Quad-Core Processor         
x86 qemu32                (alias configured by machine type)              
x86 qemu32-v1             QEMU Virtual CPU version 2.5+                   
x86 qemu64                (alias configured by machine type)              
x86 qemu64-v1             QEMU Virtual CPU version 2.5+                   
x86 base                  base CPU model type with no features enabled    
x86 host                  KVM processor with all supported host features  
x86 max                   Enables all features supported by the accelerator in the current host

Recognized CPUID flags:
  3dnow 3dnowext 3dnowprefetch abm ace2 ace2-en acpi adx aes amd-no-ssb
  amd-ssbd amd-stibp apic arat arch-capabilities avic avx avx2
  avx512-4fmaps avx512-4vnniw avx512-bf16 avx512-vpopcntdq avx512bitalg
  avx512bw avx512cd avx512dq avx512er avx512f avx512ifma avx512pf
  avx512vbmi avx512vbmi2 avx512vl avx512vnni bmi1 bmi2 cid cldemote clflush
  clflushopt clwb clzero cmov cmp-legacy core-capability cr8legacy cx16 cx8
  dca de decodeassists ds ds-cpl dtes64 erms est extapic f16c flushbyasid
  fma fma4 fpu fsgsbase fsrm fxsr fxsr-opt gfni hle ht hypervisor ia64 ibpb
  ibrs ibrs-all ibs intel-pt invpcid invtsc kvm-asyncpf kvm-hint-dedicated
  kvm-mmu kvm-nopiodelay kvm-poll-control kvm-pv-eoi kvm-pv-ipi
  kvm-pv-sched-yield kvm-pv-tlb-flush kvm-pv-unhalt kvm-steal-time kvmclock
  kvmclock kvmclock-stable-bit la57 lahf-lm lbrv lm lwp mca mce md-clear
  mds-no misalignsse mmx mmxext monitor movbe movdir64b movdiri mpx msr
  mtrr nodeid-msr npt nrip-save nx osvw pae pat pause-filter pbe pcid
  pclmulqdq pcommit pdcm pdpe1gb perfctr-core perfctr-nb pfthreshold pge
  phe phe-en pku pmm pmm-en pn pni popcnt pschange-mc-no pse pse36 rdctl-no
  rdpid rdrand rdseed rdtscp rsba rtm sep sha-ni skinit skip-l1dfl-vmentry
  smap smep smx spec-ctrl split-lock-detect ss ssb-no ssbd sse sse2 sse4.1
  sse4.2 sse4a ssse3 stibp svm svm-lock svme-addr-chk syscall taa-no tbm
  tce tm tm2 topoext tsc tsc-adjust tsc-deadline tsc-scale tsx-ctrl umip
  v-vmsave-vmload vaes vgif virt-ssbd vmcb-clean vme vmx vmx-activity-hlt
  vmx-activity-shutdown vmx-activity-wait-sipi vmx-apicv-register
  vmx-apicv-vid vmx-apicv-x2apic vmx-apicv-xapic vmx-cr3-load-noexit
  vmx-cr3-store-noexit vmx-cr8-load-exit vmx-cr8-store-exit vmx-desc-exit
  vmx-encls-exit vmx-entry-ia32e-mode vmx-entry-load-bndcfgs
  vmx-entry-load-efer vmx-entry-load-pat vmx-entry-load-perf-global-ctrl
  vmx-entry-load-rtit-ctl vmx-entry-noload-debugctl vmx-ept vmx-ept-1gb
  vmx-ept-2mb vmx-ept-advanced-exitinfo vmx-ept-execonly vmx-eptad
  vmx-eptp-switching vmx-exit-ack-intr vmx-exit-clear-bndcfgs
  vmx-exit-clear-rtit-ctl vmx-exit-load-efer vmx-exit-load-pat
  vmx-exit-load-perf-global-ctrl vmx-exit-nosave-debugctl
  vmx-exit-save-efer vmx-exit-save-pat vmx-exit-save-preemption-timer
  vmx-flexpriority vmx-hlt-exit vmx-ins-outs vmx-intr-exit vmx-invept
  vmx-invept-all-context vmx-invept-single-context
  vmx-invept-single-context vmx-invept-single-context-noglobals
  vmx-invlpg-exit vmx-invpcid-exit vmx-invvpid vmx-invvpid-all-context
  vmx-invvpid-single-addr vmx-io-bitmap vmx-io-exit vmx-monitor-exit
  vmx-movdr-exit vmx-msr-bitmap vmx-mtf vmx-mwait-exit vmx-nmi-exit
  vmx-page-walk-4 vmx-page-walk-5 vmx-pause-exit vmx-ple vmx-pml
  vmx-posted-intr vmx-preemption-timer vmx-rdpmc-exit vmx-rdrand-exit
  vmx-rdseed-exit vmx-rdtsc-exit vmx-rdtscp-exit vmx-secondary-ctls
  vmx-shadow-vmcs vmx-store-lma vmx-true-ctls vmx-tsc-offset
  vmx-unrestricted-guest vmx-vintr-pending vmx-vmfunc
  vmx-vmwrite-vmexit-fields vmx-vnmi vmx-vnmi-pending vmx-vpid
  vmx-wbinvd-exit vmx-xsaves vmx-zero-len-inject vpclmulqdq waitpkg
  wbnoinvd wdt x2apic xcrypt xcrypt-en xgetbv1 xop xsave xsavec xsaveerptr
  xsaveopt xsaves xstore xstore-en xtpr

VirtualBox:/mnt$ qemu-system-x86_64 --version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.28)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

그렇다면 QEMU의 에뮬레이션 모드에서(KVM을 사용하지 않고) PMU 카운터를 활성화할 수 있습니까?

답변1

커널 드라이버(KVM과 유사)나 실제 PMU 하드웨어 없이 PMU를 에뮬레이트하는 것은 불가능하다고 생각합니다. KVM에서 PMU는 perf_event_create_kernel_counterPMU 하드웨어를 처리하는 커널 성능 프레임워크인 커널 공간을 통해 가상화됩니다. 따라서 WSL 성능 문제의 핵심은 HyperV가 PMU 가상화를 지원합니까?입니다. 이 질문에 대한 명확한 답은 없지만 아마도 다음과 같은 대답이 나올 것 같습니다. 아니요.

관련 정보