VirtualBox

Changeset 91265 in vbox


Ignore:
Timestamp:
Sep 15, 2021 8:46:11 PM (3 years ago)
Author:
vboxsync
Message:

VMM/HM: Moved various stats from the hyper heap and into the VM structure. bugref:10093

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/vm.h

    r91263 r91265  
    183183        struct HMCPU    s;
    184184#endif
    185         uint8_t             padding[5888];      /* multiple of 64 */
     185        uint8_t             padding[9984];      /* multiple of 64 */
    186186    } hm;
    187187
  • trunk/include/VBox/vmm/vm.mac

    r91263 r91265  
    6161
    6262    alignb 64
    63     .hm                     resb 5888
     63    .hm                     resb 9984
    6464    alignb 64
    6565    .nem                    resb 512
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r90947 r91265  
    5656            STAM_COUNTER_INC(&pVCpu->hm.s.StatExitReasonNpf); \
    5757        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]); \
    5959        } while (0)
    6060
     
    6666            STAM_COUNTER_INC(&pVCpu->hm.s.StatNestedExitReasonNpf); \
    6767        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]); \
    6969        } while (0)
    7070# endif
     
    33853385    {
    33863386        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]);
    33883388    }
    33893389    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]);
    33913391    RT_NOREF(pVCpu);
    33923392
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r91098 r91265  
    88478847        Assert(uIntType != VMX_EXIT_INT_INFO_TYPE_NMI          || uVector == X86_XCPT_NMI);
    88488848        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]);
    88508850    }
    88518851    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]);
    88538853
    88548854    /*
     
    1141711417        AssertMsg(VmxTransient.uExitReason <= VMX_EXIT_MAX, ("%#x\n", VmxTransient.uExitReason));
    1141811418        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]);
    1142011420        STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatPreExit, &pVCpu->hm.s.StatExitHandling, x);
    1142111421        HMVMX_START_EXIT_DISPATCH_PROF();
     
    1153011530        STAM_COUNTER_INC(&pVCpu->hm.s.StatExitAll);
    1153111531        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]);
    1153311533        STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatPreExit, &pVCpu->hm.s.StatExitHandling, x);
    1153411534        HMVMX_START_EXIT_DISPATCH_PROF();
     
    1269112691        AssertMsg(VmxTransient.uExitReason <= VMX_EXIT_MAX, ("%#x\n", VmxTransient.uExitReason));
    1269212692        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]);
    1269412694        STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatPreExit, &pVCpu->hm.s.StatExitHandling, x);
    1269512695        HMVMX_START_EXIT_DISPATCH_PROF();
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r91120 r91265  
    4141#include <VBox/vmm/cpum.h>
    4242#include <VBox/vmm/stam.h>
    43 #include <VBox/vmm/mm.h>
    4443#include <VBox/vmm/em.h>
    4544#include <VBox/vmm/pdmapi.h>
     
    886885         * Guest Exit reason stats.
    887886         */
    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 
    893887        if (fCpuSupportsVmx)
    894888        {
     
    898892                if (pszExitName)
    899893                {
    900                     rc = STAMR3RegisterF(pVM, &pHmCpu->paStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
     894                    rc = STAMR3RegisterF(pVM, &pHmCpu->aStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
    901895                                         STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/Reason/%02x", idCpu, j);
    902896                    AssertRCReturn(rc, rc);
     
    911905                if (pszExitName)
    912906                {
    913                     rc = STAMR3RegisterF(pVM, &pHmCpu->paStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
     907                    rc = STAMR3RegisterF(pVM, &pHmCpu->aStatExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
    914908                                         STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/Reason/%02x", idCpu, j);
    915909                    AssertRC(rc);
     
    919913        HM_REG_COUNTER(&pHmCpu->StatExitReasonNpf, "/HM/CPU%u/Exit/Reason/#NPF", "Nested page faults");
    920914
    921         pHmCpu->paStatExitReasonR0 = MMHyperR3ToR0(pVM, pHmCpu->paStatExitReason);
    922         Assert(pHmCpu->paStatExitReasonR0 != NIL_RTR0PTR);
    923 
    924915#if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX)
    925916        /*
    926917         * Nested-guest VM-exit reason stats.
    927918         */
    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);
    932919        if (fCpuSupportsVmx)
    933920        {
     
    937924                if (pszExitName)
    938925                {
    939                     rc = STAMR3RegisterF(pVM, &pHmCpu->paStatNestedExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
     926                    rc = STAMR3RegisterF(pVM, &pHmCpu->aStatNestedExitReason, STAMTYPE_COUNTER, STAMVISIBILITY_USED,
    940927                                         STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/NestedGuest/Reason/%02x", idCpu, j);
    941928                    AssertRC(rc);
     
    950937                if (pszExitName)
    951938                {
    952                     rc = STAMR3RegisterF(pVM, &pHmCpu->paStatNestedExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
     939                    rc = STAMR3RegisterF(pVM, &pHmCpu->aStatNestedExitReason[j], STAMTYPE_COUNTER, STAMVISIBILITY_USED,
    953940                                         STAMUNIT_OCCURENCES, pszExitName, "/HM/CPU%u/Exit/NestedGuest/Reason/%02x", idCpu, j);
    954941                    AssertRC(rc);
     
    957944        }
    958945        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);
    961946#endif
    962947
     
    964949         * Injected interrupts stats.
    965950         */
    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);
    981958        }
    982959
     
    984961         * Injected exception stats.
    985962         */
    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);
    1001969        }
    1002970
     
    19461914VMMR3_INT_DECL(void) HMR3Relocate(PVM pVM)
    19471915{
    1948     Log(("HMR3Relocate to %RGv\n", MMHyperGetArea(pVM, 0)));
    1949 
    19501916    /* Fetch the current paging mode during the relocate callback during state loading. */
    19511917    if (VMR3GetState(pVM) == VMSTATE_LOADING)
     
    19891955static int hmR3TermCPU(PVM pVM)
    19901956{
    1991 #ifdef VBOX_WITH_STATISTICS
    1992     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 # endif
    2021     }
    2022 #else
    20231957    RT_NOREF(pVM);
    2024 #endif
    20251958    return VINF_SUCCESS;
    20261959}
  • trunk/src/VBox/VMM/include/HMInternal.h

    r90932 r91265  
    13281328
    13291329#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];
    13381334#endif
    13391335#ifdef HM_PROFILE_EXIT_DISPATCH
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette