VirtualBox

Changeset 108882 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Apr 8, 2025 10:53:54 AM (5 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168333
Message:

VMM/GIC: bugref:10877 Stats cleanup (drop redundant/implied R3 suffix), add stats for commands, debugging/work-in-progress.

Location:
trunk/src/VBox/VMM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/GICAll.cpp

    r108864 r108882  
    17251725    uint16_t idxIntr;
    17261726    PGICCPU  pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    1727     STAM_PROFILE_START(&pGicCpu->CTX_SUFF_Z(StatProfIntrAck), x);
     1727    STAM_PROFILE_START(&pGicCpu->StatProfIntrAck, x);
    17281728    uint16_t const uIntId = gicGetHighestPriorityPendingIntr(pGicDev, pGicCpu, fGroup0, fGroup1, &idxIntr, &bIntrPriority);
    17291729    if (uIntId != GIC_INTID_RANGE_SPECIAL_NO_INTERRUPT)
     
    17381738        if (bIntrPriority >= pGicCpu->bIntrPriorityMask)
    17391739        {
    1740             STAM_PROFILE_STOP(&pGicCpu->CTX_SUFF_Z(StatProfIntrAck), x);
     1740            STAM_PROFILE_STOP(&pGicCpu->StatProfIntrAck, x);
    17411741            return GIC_INTID_RANGE_SPECIAL_NO_INTERRUPT;
    17421742        }
     
    17631763        if (bIntrGroupPriority >= bRunningGroupPriority)
    17641764        {
    1765             STAM_PROFILE_STOP(&pGicCpu->CTX_SUFF_Z(StatProfIntrAck), x);
     1765            STAM_PROFILE_STOP(&pGicCpu->StatProfIntrAck, x);
    17661766            return GIC_INTID_RANGE_SPECIAL_NO_INTERRUPT;
    17671767        }
     
    18571857
    18581858    LogFlowFunc(("uIntId=%u\n", uIntId));
    1859     STAM_PROFILE_STOP(&pGicCpu->CTX_SUFF_Z(StatProfIntrAck), x);
     1859    STAM_PROFILE_STOP(&pGicCpu->StatProfIntrAck, x);
    18601860    return uIntId;
    18611861}
     
    25892589#ifdef VBOX_WITH_STATISTICS
    25902590    PVMCPU pVCpu = VMMGetCpuById(pVM, 0);
    2591     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatSetSpi));
     2591    STAM_COUNTER_INC(&pVCpu->gic.s.StatSetSpi);
    25922592    PGICCPU pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    25932593#endif
    2594     STAM_PROFILE_START(&pGicCpu->CTX_SUFF_Z(StatProfSetSpi), a);
     2594    STAM_PROFILE_START(&pGicCpu->StatProfSetSpi, a);
    25952595
    25962596    uint16_t const uIntId  = GIC_INTID_RANGE_SPI_START + uSpiIntId;
     
    26122612
    26132613    int const rc = VBOXSTRICTRC_VAL(gicDistUpdateIrqState(pVM, pGicDev));
    2614     STAM_PROFILE_STOP(&pGicCpu->CTX_SUFF_Z(StatProfSetSpi), a);
     2614    STAM_PROFILE_STOP(&pGicCpu->StatProfSetSpi, a);
    26152615
    26162616    PDMDevHlpCritSectLeave(pDevIns, pDevIns->pCritSectRoR3);
     
    26302630    PGICCPU    pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    26312631
    2632     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatSetPpi));
    2633     STAM_PROFILE_START(&pGicCpu->CTX_SUFF_Z(StatProfSetPpi), b);
     2632    STAM_COUNTER_INC(&pVCpu->gic.s.StatSetPpi);
     2633    STAM_PROFILE_START(&pGicCpu->StatProfSetPpi, b);
    26342634
    26352635    uint32_t const uIntId  = GIC_INTID_RANGE_PPI_START + uPpiIntId;
     
    26512651
    26522652    int const rc = VBOXSTRICTRC_VAL(gicReDistUpdateIrqState(pGicDev, pVCpu));
    2653     STAM_PROFILE_STOP(&pGicCpu->CTX_SUFF_Z(StatProfSetPpi), b);
     2653    STAM_PROFILE_STOP(&pGicCpu->StatProfSetPpi, b);
    26542654
    26552655    PDMDevHlpCritSectLeave(pDevIns, pDevIns->pCritSectRoR3);
     
    27002700#ifdef VBOX_WITH_STATISTICS
    27012701    PGICCPU pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    2702     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatSetSgi));
    2703     STAM_PROFILE_START(&pGicCpu->CTX_SUFF_Z(StatProfSetSgi), c);
     2702    STAM_COUNTER_INC(&pVCpu->gic.s.StatSetSgi);
     2703    STAM_PROFILE_START(&pGicCpu->StatProfSetSgi, c);
    27042704#else
    27052705    PCGICCPU pGicCpu = VMCPU_TO_GICCPU(pVCpu);
     
    27562756    }
    27572757
    2758     STAM_PROFILE_STOP(&pGicCpu->CTX_SUFF_Z(StatProfSetSgi), c);
     2758    STAM_PROFILE_STOP(&pGicCpu->StatProfSetSgi, c);
    27592759    return VINF_SUCCESS;
    27602760}
     
    27722772    Assert(pu64Value);
    27732773
    2774     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatSysRegRead));
     2774    STAM_COUNTER_INC(&pVCpu->gic.s.StatSysRegRead);
    27752775
    27762776    *pu64Value = 0;
     
    29002900    LogFlowFunc(("pVCpu=%p u32Reg=%#x{%s} u64Value=%RX64\n", pVCpu, u32Reg, gicIccGetRegDescription(u32Reg), u64Value));
    29012901
    2902     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatSysRegWrite));
     2902    STAM_COUNTER_INC(&pVCpu->gic.s.StatSysRegWrite);
    29032903
    29042904    PPDMDEVINS pDevIns = VMCPU_TO_DEVINS(pVCpu);
     
    31973197    uint32_t uValue = 0;
    31983198
    3199     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatMmioRead));
     3199    STAM_COUNTER_INC(&pVCpu->gic.s.StatMmioRead);
    32003200
    32013201    VBOXSTRICTRC rc = VBOXSTRICTRC_VAL(gicDistReadRegister(pDevIns, pVCpu, offReg, &uValue));
     
    32203220    uint32_t uValue = *(uint32_t *)pv;
    32213221
    3222     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatMmioWrite));
     3222    STAM_COUNTER_INC(&pVCpu->gic.s.StatMmioWrite);
    32233223    LogFlowFunc(("[%u]: offReg=%#RX16 (%s) uValue=%#RX32\n", pVCpu->idCpu, offReg, gicDistGetRegDescription(offReg), uValue));
    32243224
     
    32483248    PVMCPUCC pVCpu = pVM->CTX_SUFF(apCpus)[idReDist];
    32493249
    3250     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatMmioRead));
     3250    STAM_COUNTER_INC(&pVCpu->gic.s.StatMmioRead);
    32513251
    32523252    /* Redistributor or SGI/PPI frame? */
     
    32893289    PVMCPUCC pVCpu = pVM->CTX_SUFF(apCpus)[idReDist];
    32903290
    3291     STAM_COUNTER_INC(&pVCpu->gic.s.CTX_SUFF_Z(StatMmioWrite));
     3291    STAM_COUNTER_INC(&pVCpu->gic.s.StatMmioWrite);
    32923292
    32933293    /* Redistributor or SGI/PPI frame? */
  • trunk/src/VBox/VMM/VMMAll/GITSAll.cpp

    r108878 r108882  
    137137
    138138
     139#if 0
    139140static const char * gitsGetCommandName(uint8_t uCmdId)
    140141{
     
    166167    }
    167168}
     169#endif
    168170
    169171
     
    420422    pGitsDev->uCmdReadReg        = 0;
    421423    pGitsDev->uCmdWriteReg       = 0;
    422     RT_ZERO(pGitsDev->auCt);
     424    RT_ZERO(pGitsDev->aCtes);
    423425}
    424426
     
    498500                        RT_BF_GET(uReg, GITS_BF_CTRL_REG_CWRITER_RETRY), uReg & GITS_BF_CTRL_REG_CWRITER_OFFSET_MASK);
    499501    }
     502
     503    /* Interrupt Collection Table. */
     504    {
     505        pHlp->pfnPrintf(pHlp, "  Collection Table:\n");
     506        bool fHasValidCtes = false;
     507        for (unsigned i = 0; i < RT_ELEMENTS(pGitsDev->aCtes); i++)
     508        {
     509            if (pGitsDev->aCtes[i].fValid)
     510            {
     511                AssertCompile(sizeof(pGitsDev->aCtes[i].idTargetCpu) == sizeof(uint16_t));
     512                pHlp->pfnPrintf(pHlp, "    aCtes[%u].idTargetCpu = %#RX16\n", i, pGitsDev->aCtes[i].idTargetCpu);
     513                fHasValidCtes = true;
     514            }
     515        }
     516        if (!fHasValidCtes)
     517            pHlp->pfnPrintf(pHlp, "    Empty (no valid entries)\n");
     518    }
    500519}
    501520
     
    513532        if (!fIsEmpty)
    514533        {
    515             uint32_t const cCmdQueuePages = (pGitsDev->uCmdBaseReg.u & GITS_BF_CTRL_REG_CBASER_SIZE_MASK) + 1;
     534            uint32_t const cCmdQueuePages = RT_BF_GET(pGitsDev->uCmdBaseReg.u, GITS_BF_CTRL_REG_CBASER_SIZE) + 1;
    516535            uint32_t const cbCmdQueue     = cCmdQueuePages << GITS_CMD_QUEUE_PAGE_SHIFT;
    517536            AssertRelease(cbCmdQueue <= cbBuf); /** @todo Paranoia; make this a debug assert later. */
     
    538557                /* The write offset has wrapped around, read till end of buffer followed by wrapped-around data. */
    539558                uint32_t const cbForward = cbCmdQueue - offRead;
    540                 uint32_t const cbWrapped = offRead;
     559                uint32_t const cbWrapped = offWrite;
    541560                Assert(cbForward + cbWrapped <= cbBuf);
    542561                rc  = PDMDevHlpPhysReadMeta(pDevIns, GCPhysCmds, pvBuf, cbForward);
     
    575594                            uint32_t const uTargetCpuId      = RT_BF_GET(uDw2, GITS_BF_CMD_MAPC_DW2_RDBASE);
    576595                            uint16_t const uIntrCollectionId = RT_BF_GET(uDw2, GITS_BF_CMD_MAPC_DW2_IC_ID);
    577                             AssertRelease(uIntrCollectionId < RT_ELEMENTS(pGitsDev->auCt)); /** @todo later figure ideal/correct CT size. */
     596                            AssertRelease(uIntrCollectionId < RT_ELEMENTS(pGitsDev->aCtes)); /** @todo later figure ideal/correct CT size. */
    578597
    579598                            GITS_CRIT_SECT_ENTER(pDevIns);
    580599                            Assert(!RT_BF_GET(pGitsDev->uTypeReg.u, GITS_BF_CTRL_REG_TYPER_PTA));
    581                             pGitsDev->auCt[uIntrCollectionId].fValid      = fValid;
    582                             pGitsDev->auCt[uIntrCollectionId].idTargetCpu = uTargetCpuId;
     600                            pGitsDev->aCtes[uIntrCollectionId].fValid      = fValid;
     601                            pGitsDev->aCtes[uIntrCollectionId].idTargetCpu = uTargetCpuId;
    583602                            GITS_CRIT_SECT_LEAVE(pDevIns);
     603                            STAM_COUNTER_INC(&pGitsDev->StatCmdMapc);
    584604                            break;
    585605                        }
     
    588608                        {
    589609                            /* Nothing to do since all previous commands have committed their changes to device state. */
     610                            STAM_COUNTER_INC(&pGitsDev->StatCmdSync);
    590611                            break;
    591612                        }
     
    594615                        {
    595616                            /* Nothing to do as we currently do not cache interrupt mappings. */
     617                            STAM_COUNTER_INC(&pGitsDev->StatCmdInvall);
    596618                            break;
    597619                        }
    598620
    599621                        default:
    600                             AssertReleaseMsgFailed(("Cmd=%#x (%s)\n", uCmdId, gitsGetCommandName(uCmdId)));
     622                            //AssertReleaseMsgFailed(("Cmd=%#x (%s) idxCmd=%u cCmds=%u cbCmds=%u\n", uCmdId,
     623                            //                        gitsGetCommandName(uCmdId), idxCmd, cCmds, cbCmds));
     624                            //break;
    601625                            break;
    602626                    }
  • trunk/src/VBox/VMM/VMMR3/GICR3.cpp

    r108864 r108882  
    962962     */
    963963#ifdef VBOX_WITH_STATISTICS
     964# define GICCPU_REG_COUNTER(a_pvReg, a_pszNameFmt, a_pszDesc) \
     965         PDMDevHlpSTAMRegisterF(pDevIns, a_pvReg, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, \
     966                                a_pszDesc, a_pszNameFmt, idCpu)
     967# define GICCPU_PROF_COUNTER(a_pvReg, a_pszNameFmt, a_pszDesc) \
     968         PDMDevHlpSTAMRegisterF(pDevIns, a_pvReg, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, \
     969                                a_pszDesc, a_pszNameFmt, idCpu)
    964970# define GIC_REG_COUNTER(a_pvReg, a_pszNameFmt, a_pszDesc) \
    965971         PDMDevHlpSTAMRegisterF(pDevIns, a_pvReg, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, \
    966                                 a_pszDesc, a_pszNameFmt, idCpu)
    967 # define GIC_PROF_COUNTER(a_pvReg, a_pszNameFmt, a_pszDesc) \
    968          PDMDevHlpSTAMRegisterF(pDevIns, a_pvReg, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, \
    969                                 a_pszDesc, a_pszNameFmt, idCpu)
    970 
     972                                a_pszDesc, a_pszNameFmt)
     973
     974    /* Redistributor. */
    971975    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
    972976    {
     
    974978        PGICCPU pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    975979
    976         GIC_REG_COUNTER(&pGicCpu->StatMmioReadR3,    "%u/MmioRead",     "Number of MMIO reads in R3.");
    977         GIC_REG_COUNTER(&pGicCpu->StatMmioWriteR3,   "%u/MmioWrite",    "Number of MMIO writes in R3.");
    978         GIC_REG_COUNTER(&pGicCpu->StatSysRegReadR3,  "%u/SysRegRead",   "Number of system register reads in R3.");
    979         GIC_REG_COUNTER(&pGicCpu->StatSysRegWriteR3, "%u/SysRegWrite",  "Number of system register writes in R3.");
    980         GIC_REG_COUNTER(&pGicCpu->StatSetSpiR3,      "%u/SetSpi",       "Number of set SPI callbacks in R3.");
    981         GIC_REG_COUNTER(&pGicCpu->StatSetPpiR3,      "%u/SetPpi",       "Number of set PPI callbacks in R3.");
    982         GIC_REG_COUNTER(&pGicCpu->StatSetSgiR3,      "%u/SetSgi",       "Number of SGIs generated in R3.");
    983 
    984         GIC_PROF_COUNTER(&pGicCpu->StatProfIntrAckR3, "%u/Prof/IntrAck", "Profiling of interrupt acknowledge (IAR) in R3.");
    985         GIC_PROF_COUNTER(&pGicCpu->StatProfSetSpiR3,  "%u/Prof/SetSpi",  "Profiling of set SPI callback in R3.");
    986         GIC_PROF_COUNTER(&pGicCpu->StatProfSetPpiR3,  "%u/Prof/SetPpi",  "Profiling of set PPI callback in R3.");
    987         GIC_PROF_COUNTER(&pGicCpu->StatProfSetSgiR3,  "%u/Prof/SetSgi",  "Profiling of SGIs generated in R3.");
    988     }
    989 # undef GIC_REG_COUNTER
    990 # undef GIC_PROF_COUNTER
     980        GICCPU_REG_COUNTER(&pGicCpu->StatMmioRead,    "%u/MmioRead",     "Number of MMIO reads.");
     981        GICCPU_REG_COUNTER(&pGicCpu->StatMmioWrite,   "%u/MmioWrite",    "Number of MMIO writes.");
     982        GICCPU_REG_COUNTER(&pGicCpu->StatSysRegRead,  "%u/SysRegRead",   "Number of system register reads.");
     983        GICCPU_REG_COUNTER(&pGicCpu->StatSysRegWrite, "%u/SysRegWrite",  "Number of system register writes.");
     984        GICCPU_REG_COUNTER(&pGicCpu->StatSetSpi,      "%u/SetSpi",       "Number of set SPI callbacks.");
     985        GICCPU_REG_COUNTER(&pGicCpu->StatSetPpi,      "%u/SetPpi",       "Number of set PPI callbacks.");
     986        GICCPU_REG_COUNTER(&pGicCpu->StatSetSgi,      "%u/SetSgi",       "Number of SGIs generated.");
     987
     988        GICCPU_PROF_COUNTER(&pGicCpu->StatProfIntrAck, "%u/Prof/IntrAck", "Profiling of interrupt acknowledge (IAR).");
     989        GICCPU_PROF_COUNTER(&pGicCpu->StatProfSetSpi,  "%u/Prof/SetSpi",  "Profiling of set SPI callback.");
     990        GICCPU_PROF_COUNTER(&pGicCpu->StatProfSetPpi,  "%u/Prof/SetPpi",  "Profiling of set PPI callback.");
     991        GICCPU_PROF_COUNTER(&pGicCpu->StatProfSetSgi,  "%u/Prof/SetSgi",  "Profiling of SGIs generated.");
     992    }
     993
     994    /* ITS. */
     995    PGITSDEV pGitsDev = &pGicDev->Gits;
     996    GIC_REG_COUNTER(&pGitsDev->StatCmdMapc,    "ITS/Commands/MAPC",   "Number of MAPC commands executed.");
     997    GIC_REG_COUNTER(&pGitsDev->StatCmdSync,    "ITS/Commands/SYNC",   "Number of SYNC commands executed.");
     998    GIC_REG_COUNTER(&pGitsDev->StatCmdInvall,  "ITS/Commands/INVALL", "Number of INVALL commands executed.");
     999
     1000# undef GICCPU_REG_COUNTER
     1001# undef GICCPU_PROF_COUNTER
    9911002#endif
    9921003
  • trunk/src/VBox/VMM/include/GICInternal.h

    r108864 r108882  
    233233     * @{ */
    234234#ifdef VBOX_WITH_STATISTICS
    235     /** Number of MMIO reads in R3. */
    236     STAMCOUNTER                 StatMmioReadR3;
    237     /** Number of MMIO writes in R3. */
    238     STAMCOUNTER                 StatMmioWriteR3;
    239     /** Number of MSR reads in R3. */
    240     STAMCOUNTER                 StatSysRegReadR3;
    241     /** Number of MSR writes in R3. */
    242     STAMCOUNTER                 StatSysRegWriteR3;
     235    /** Number of MMIO reads. */
     236    STAMCOUNTER                 StatMmioRead;
     237    /** Number of MMIO writes. */
     238    STAMCOUNTER                 StatMmioWrite;
     239    /** Number of MSR reads. */
     240    STAMCOUNTER                 StatSysRegRead;
     241    /** Number of MSR writes. */
     242    STAMCOUNTER                 StatSysRegWrite;
    243243    /** Number of set SPI callbacks. */
    244     STAMCOUNTER                 StatSetSpiR3;
     244    STAMCOUNTER                 StatSetSpi;
    245245    /** Number of set PPI callbacks. */
    246     STAMCOUNTER                 StatSetPpiR3;
     246    STAMCOUNTER                 StatSetPpi;
    247247    /** Number of SGIs generated. */
    248     STAMCOUNTER                 StatSetSgiR3;
     248    STAMCOUNTER                 StatSetSgi;
    249249
    250250    /** Profiling of interrupt acknowledge (IAR). */
    251     STAMPROFILE                 StatProfIntrAckR3;
     251    STAMPROFILE                 StatProfIntrAck;
    252252    /** Profiling of set SPI callback. */
    253     STAMPROFILE                 StatProfSetSpiR3;
     253    STAMPROFILE                 StatProfSetSpi;
    254254    /** Profiling of set PPI callback. */
    255     STAMPROFILE                 StatProfSetPpiR3;
     255    STAMPROFILE                 StatProfSetPpi;
    256256    /** Profiling of set SGI function. */
    257     STAMPROFILE                 StatProfSetSgiR3;
     257    STAMPROFILE                 StatProfSetSgi;
    258258#endif
    259259    /** @} */
  • trunk/src/VBox/VMM/include/GITSInternal.h

    r108877 r108882  
    3636#include <VBox/gic-its.h>
    3737#include <VBox/vmm/pdmthread.h>
     38#include <VBox/vmm/stam.h>
    3839
    3940/** @defgroup grp_gits_int       Internal
     
    157158     */
    158159    /** The collection table. */
    159     GITSCTE                 auCt[2048];
     160    GITSCTE                 aCtes[2048];
    160161    /** @} */
    161162
     
    166167    /** Padding. */
    167168    uint8_t                 afPadding0[7];
     169    /** @} */
     170
     171    /** @name Statistics.
     172     * @{ */
     173#ifdef VBOX_WITH_STATISTICS
     174    STAMCOUNTER             StatCmdMapc;
     175    STAMCOUNTER             StatCmdSync;
     176    STAMCOUNTER             StatCmdInvall;
     177#endif
    168178    /** @} */
    169179} GITSDEV;
     
    177187AssertCompileMemberAlignment(GITSDEV, uCmdWriteReg, 4);
    178188AssertCompileMemberAlignment(GITSDEV, hEvtCmdQueue, 8);
     189AssertCompileMemberAlignment(GITSDEV, aCtes, 8);
    179190AssertCompileMemberAlignment(GITSDEV, uArchRev, 8);
    180191
Note: See TracChangeset for help on using the changeset viewer.

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