Changeset 91265 in vbox
- Timestamp:
- Sep 15, 2021 8:46:11 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
-
include/VBox/vmm/vm.h (modified) (1 diff)
-
include/VBox/vmm/vm.mac (modified) (1 diff)
-
src/VBox/VMM/VMMR0/HMSVMR0.cpp (modified) (3 diffs)
-
src/VBox/VMM/VMMR0/HMVMXR0.cpp (modified) (4 diffs)
-
src/VBox/VMM/VMMR3/HM.cpp (modified) (12 diffs)
-
src/VBox/VMM/include/HMInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/vm.h
r91263 r91265 183 183 struct HMCPU s; 184 184 #endif 185 uint8_t padding[ 5888]; /* multiple of 64 */185 uint8_t padding[9984]; /* multiple of 64 */ 186 186 } hm; 187 187 -
trunk/include/VBox/vmm/vm.mac
r91263 r91265 61 61 62 62 alignb 64 63 .hm resb 588863 .hm resb 9984 64 64 alignb 64 65 65 .nem resb 512 -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r90947 r91265 56 56 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitReasonNpf); \ 57 57 else \ 58 STAM_COUNTER_INC(&pVCpu->hm.s. paStatExitReasonR0[(u64ExitCode) & MASK_EXITREASON_STAT]); \58 STAM_COUNTER_INC(&pVCpu->hm.s.aStatExitReason[(u64ExitCode) & MASK_EXITREASON_STAT]); \ 59 59 } while (0) 60 60 … … 66 66 STAM_COUNTER_INC(&pVCpu->hm.s.StatNestedExitReasonNpf); \ 67 67 else \ 68 STAM_COUNTER_INC(&pVCpu->hm.s. paStatNestedExitReasonR0[(u64ExitCode) & MASK_EXITREASON_STAT]); \68 STAM_COUNTER_INC(&pVCpu->hm.s.aStatNestedExitReason[(u64ExitCode) & MASK_EXITREASON_STAT]); \ 69 69 } while (0) 70 70 # endif … … 3385 3385 { 3386 3386 Assert(pEvent->n.u8Vector <= X86_XCPT_LAST); 3387 STAM_COUNTER_INC(&pVCpu->hm.s. paStatInjectedXcptsR0[pEvent->n.u8Vector]);3387 STAM_COUNTER_INC(&pVCpu->hm.s.aStatInjectedXcpts[pEvent->n.u8Vector]); 3388 3388 } 3389 3389 else 3390 STAM_COUNTER_INC(&pVCpu->hm.s. paStatInjectedIrqsR0[pEvent->n.u8Vector & MASK_INJECT_IRQ_STAT]);3390 STAM_COUNTER_INC(&pVCpu->hm.s.aStatInjectedIrqs[pEvent->n.u8Vector & MASK_INJECT_IRQ_STAT]); 3391 3391 RT_NOREF(pVCpu); 3392 3392 -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r91098 r91265 8847 8847 Assert(uIntType != VMX_EXIT_INT_INFO_TYPE_NMI || uVector == X86_XCPT_NMI); 8848 8848 Assert(uIntType != VMX_EXIT_INT_INFO_TYPE_PRIV_SW_XCPT || uVector == X86_XCPT_DB); 8849 STAM_COUNTER_INC(&pVCpu->hm.s. paStatInjectedXcptsR0[uVector]);8849 STAM_COUNTER_INC(&pVCpu->hm.s.aStatInjectedXcpts[uVector]); 8850 8850 } 8851 8851 else 8852 STAM_COUNTER_INC(&pVCpu->hm.s. paStatInjectedIrqsR0[uVector & MASK_INJECT_IRQ_STAT]);8852 STAM_COUNTER_INC(&pVCpu->hm.s.aStatInjectedIrqs[uVector & MASK_INJECT_IRQ_STAT]); 8853 8853 8854 8854 /* … … 11417 11417 AssertMsg(VmxTransient.uExitReason <= VMX_EXIT_MAX, ("%#x\n", VmxTransient.uExitReason)); 11418 11418 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitAll); 11419 STAM_COUNTER_INC(&pVCpu->hm.s. paStatExitReasonR0[VmxTransient.uExitReason & MASK_EXITREASON_STAT]);11419 STAM_COUNTER_INC(&pVCpu->hm.s.aStatExitReason[VmxTransient.uExitReason & MASK_EXITREASON_STAT]); 11420 11420 STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatPreExit, &pVCpu->hm.s.StatExitHandling, x); 11421 11421 HMVMX_START_EXIT_DISPATCH_PROF(); … … 11530 11530 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitAll); 11531 11531 STAM_COUNTER_INC(&pVCpu->hm.s.StatNestedExitAll); 11532 STAM_COUNTER_INC(&pVCpu->hm.s. paStatNestedExitReasonR0[VmxTransient.uExitReason & MASK_EXITREASON_STAT]);11532 STAM_COUNTER_INC(&pVCpu->hm.s.aStatNestedExitReason[VmxTransient.uExitReason & MASK_EXITREASON_STAT]); 11533 11533 STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatPreExit, &pVCpu->hm.s.StatExitHandling, x); 11534 11534 HMVMX_START_EXIT_DISPATCH_PROF(); … … 12691 12691 AssertMsg(VmxTransient.uExitReason <= VMX_EXIT_MAX, ("%#x\n", VmxTransient.uExitReason)); 12692 12692 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitAll); 12693 STAM_COUNTER_INC(&pVCpu->hm.s. paStatExitReasonR0[VmxTransient.uExitReason & MASK_EXITREASON_STAT]);12693 STAM_COUNTER_INC(&pVCpu->hm.s.aStatExitReason[VmxTransient.uExitReason & MASK_EXITREASON_STAT]); 12694 12694 STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatPreExit, &pVCpu->hm.s.StatExitHandling, x); 12695 12695 HMVMX_START_EXIT_DISPATCH_PROF(); -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r91120 r91265 41 41 #include <VBox/vmm/cpum.h> 42 42 #include <VBox/vmm/stam.h> 43 #include <VBox/vmm/mm.h>44 43 #include <VBox/vmm/em.h> 45 44 #include <VBox/vmm/pdmapi.h> … … 886 885 * Guest Exit reason stats. 887 886 */ 888 pHmCpu->paStatExitReason = NULL;889 rc = MMHyperAlloc(pVM, MAX_EXITREASON_STAT * sizeof(*pHmCpu->paStatExitReason), 0 /* uAlignment */, MM_TAG_HM,890 (void **)&pHmCpu->paStatExitReason);891 AssertRCReturn(rc, rc);892 893 887 if (fCpuSupportsVmx) 894 888 { … … 898 892 if (pszExitName) 899 893 { 900 rc = STAMR3RegisterF(pVM, &pHmCpu-> paStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,894 rc = STAMR3RegisterF(pVM, &pHmCpu->aStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 901 895 STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/Reason/%02x", idCpu, j); 902 896 AssertRCReturn(rc, rc); … … 911 905 if (pszExitName) 912 906 { 913 rc = STAMR3RegisterF(pVM, &pHmCpu-> paStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,907 rc = STAMR3RegisterF(pVM, &pHmCpu->aStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 914 908 STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/Reason/%02x", idCpu, j); 915 909 AssertRC(rc); … … 919 913 HM_REG_COUNTER(&pHmCpu->StatExitReasonNpf, "/HM/CPU%u/Exit/Reason/#NPF", "Nested page faults"); 920 914 921 pHmCpu->paStatExitReasonR0 = MMHyperR3ToR0(pVM, pHmCpu->paStatExitReason);922 Assert(pHmCpu->paStatExitReasonR0 != NIL_RTR0PTR);923 924 915 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 925 916 /* 926 917 * Nested-guest VM-exit reason stats. 927 918 */ 928 pHmCpu->paStatNestedExitReason = NULL;929 rc = MMHyperAlloc(pVM, MAX_EXITREASON_STAT * sizeof(*pHmCpu->paStatNestedExitReason), 0 /* uAlignment */, MM_TAG_HM,930 (void **)&pHmCpu->paStatNestedExitReason);931 AssertRCReturn(rc, rc);932 919 if (fCpuSupportsVmx) 933 920 { … … 937 924 if (pszExitName) 938 925 { 939 rc = STAMR3RegisterF(pVM, &pHmCpu-> paStatNestedExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,926 rc = STAMR3RegisterF(pVM, &pHmCpu->aStatNestedExitReason, STAMTYPE_COUNTER, STAMVISIBILITY_USED, 940 927 STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/NestedGuest/Reason/%02x", idCpu, j); 941 928 AssertRC(rc); … … 950 937 if (pszExitName) 951 938 { 952 rc = STAMR3RegisterF(pVM, &pHmCpu-> paStatNestedExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,939 rc = STAMR3RegisterF(pVM, &pHmCpu->aStatNestedExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 953 940 STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/NestedGuest/Reason/%02x", idCpu, j); 954 941 AssertRC(rc); … … 957 944 } 958 945 HM_REG_COUNTER(&pHmCpu->StatNestedExitReasonNpf, "/HM/CPU%u/Exit/NestedGuest/Reason/#NPF", "Nested page faults"); 959 pHmCpu->paStatNestedExitReasonR0 = MMHyperR3ToR0(pVM, pHmCpu->paStatNestedExitReason);960 Assert(pHmCpu->paStatNestedExitReasonR0 != NIL_RTR0PTR);961 946 #endif 962 947 … … 964 949 * Injected interrupts stats. 965 950 */ 966 { 967 uint32_t const cInterrupts = 0xff + 1; 968 rc = MMHyperAlloc(pVM, sizeof(STAMCOUNTER) * cInterrupts, 8, MM_TAG_HM, (void **)&pHmCpu->paStatInjectedIrqs); 969 AssertRCReturn(rc, rc); 970 pHmCpu->paStatInjectedIrqsR0 = MMHyperR3ToR0(pVM, pHmCpu->paStatInjectedIrqs); 971 Assert(pHmCpu->paStatInjectedIrqsR0 != NIL_RTR0PTR); 972 for (unsigned j = 0; j < cInterrupts; j++) 973 { 974 char aszIntrName[64]; 975 RTStrPrintf(&aszIntrName[0], sizeof(aszIntrName), "Interrupt %u", j); 976 rc = STAMR3RegisterF(pVM, &pHmCpu->paStatInjectedIrqs[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 977 STAMUNIT_OCCURENCES, aszIntrName, 978 "/HM/CPU%u/EventInject/InjectIntr/%02X", idCpu, j); 979 AssertRC(rc); 980 } 951 char szDesc[64]; 952 for (unsigned j = 0; j < RT_ELEMENTS(pHmCpu->aStatInjectedIrqs); j++) 953 { 954 RTStrPrintf(&szDesc[0], sizeof(szDesc), "Interrupt %u", j); 955 rc = STAMR3RegisterF(pVM, &pHmCpu->aStatInjectedIrqs[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 956 STAMUNIT_OCCURENCES, szDesc, "/HM/CPU%u/EventInject/InjectIntr/%02X", idCpu, j); 957 AssertRC(rc); 981 958 } 982 959 … … 984 961 * Injected exception stats. 985 962 */ 986 { 987 uint32_t const cXcpts = X86_XCPT_LAST + 1; 988 rc = MMHyperAlloc(pVM, sizeof(STAMCOUNTER) * cXcpts, 8, MM_TAG_HM, (void **)&pHmCpu->paStatInjectedXcpts); 989 AssertRCReturn(rc, rc); 990 pHmCpu->paStatInjectedXcptsR0 = MMHyperR3ToR0(pVM, pHmCpu->paStatInjectedXcpts); 991 Assert(pHmCpu->paStatInjectedXcptsR0 != NIL_RTR0PTR); 992 for (unsigned j = 0; j < cXcpts; j++) 993 { 994 char aszXcptName[64]; 995 RTStrPrintf(&aszXcptName[0], sizeof(aszXcptName), "%s exception", hmR3GetXcptName(j)); 996 rc = STAMR3RegisterF(pVM, &pHmCpu->paStatInjectedXcpts[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 997 STAMUNIT_OCCURENCES, aszXcptName, 998 "/HM/CPU%u/EventInject/InjectXcpt/%02X", idCpu, j); 999 AssertRC(rc); 1000 } 963 for (unsigned j = 0; j < RT_ELEMENTS(pHmCpu->aStatInjectedXcpts); j++) 964 { 965 RTStrPrintf(&szDesc[0], sizeof(szDesc), "%s exception", hmR3GetXcptName(j)); 966 rc = STAMR3RegisterF(pVM, &pHmCpu->aStatInjectedXcpts[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED, 967 STAMUNIT_OCCURENCES, szDesc, "/HM/CPU%u/EventInject/InjectXcpt/%02X", idCpu, j); 968 AssertRC(rc); 1001 969 } 1002 970 … … 1946 1914 VMMR3_INT_DECL(void) HMR3Relocate(PVM pVM) 1947 1915 { 1948 Log(("HMR3Relocate to %RGv\n", MMHyperGetArea(pVM, 0)));1949 1950 1916 /* Fetch the current paging mode during the relocate callback during state loading. */ 1951 1917 if (VMR3GetState(pVM) == VMSTATE_LOADING) … … 1989 1955 static int hmR3TermCPU(PVM pVM) 1990 1956 { 1991 #ifdef VBOX_WITH_STATISTICS1992 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)1993 {1994 PVMCPU pVCpu = pVM->apCpusR3[idCpu]; NOREF(pVCpu);1995 if (pVCpu->hm.s.paStatExitReason)1996 {1997 MMHyperFree(pVM, pVCpu->hm.s.paStatExitReason);1998 pVCpu->hm.s.paStatExitReason = NULL;1999 pVCpu->hm.s.paStatExitReasonR0 = NIL_RTR0PTR;2000 }2001 if (pVCpu->hm.s.paStatInjectedIrqs)2002 {2003 MMHyperFree(pVM, pVCpu->hm.s.paStatInjectedIrqs);2004 pVCpu->hm.s.paStatInjectedIrqs = NULL;2005 pVCpu->hm.s.paStatInjectedIrqsR0 = NIL_RTR0PTR;2006 }2007 if (pVCpu->hm.s.paStatInjectedXcpts)2008 {2009 MMHyperFree(pVM, pVCpu->hm.s.paStatInjectedXcpts);2010 pVCpu->hm.s.paStatInjectedXcpts = NULL;2011 pVCpu->hm.s.paStatInjectedXcptsR0 = NIL_RTR0PTR;2012 }2013 # if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX)2014 if (pVCpu->hm.s.paStatNestedExitReason)2015 {2016 MMHyperFree(pVM, pVCpu->hm.s.paStatNestedExitReason);2017 pVCpu->hm.s.paStatNestedExitReason = NULL;2018 pVCpu->hm.s.paStatNestedExitReasonR0 = NIL_RTR0PTR;2019 }2020 # endif2021 }2022 #else2023 1957 RT_NOREF(pVM); 2024 #endif2025 1958 return VINF_SUCCESS; 2026 1959 } -
trunk/src/VBox/VMM/include/HMInternal.h
r90932 r91265 1328 1328 1329 1329 #ifdef VBOX_WITH_STATISTICS 1330 R3PTRTYPE(PSTAMCOUNTER) paStatExitReason; 1331 R0PTRTYPE(PSTAMCOUNTER) paStatExitReasonR0; 1332 R3PTRTYPE(PSTAMCOUNTER) paStatInjectedIrqs; 1333 R0PTRTYPE(PSTAMCOUNTER) paStatInjectedIrqsR0; 1334 R3PTRTYPE(PSTAMCOUNTER) paStatInjectedXcpts; 1335 R0PTRTYPE(PSTAMCOUNTER) paStatInjectedXcptsR0; 1336 R3PTRTYPE(PSTAMCOUNTER) paStatNestedExitReason; 1337 R0PTRTYPE(PSTAMCOUNTER) paStatNestedExitReasonR0; 1330 STAMCOUNTER aStatExitReason[MAX_EXITREASON_STAT]; 1331 STAMCOUNTER aStatNestedExitReason[MAX_EXITREASON_STAT]; 1332 STAMCOUNTER aStatInjectedIrqs[256]; 1333 STAMCOUNTER aStatInjectedXcpts[X86_XCPT_LAST + 1]; 1338 1334 #endif 1339 1335 #ifdef HM_PROFILE_EXIT_DISPATCH
Note:
See TracChangeset
for help on using the changeset viewer.

