VirtualBox

Changeset 104407 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Apr 23, 2024 11:16:04 PM (9 months ago)
Author:
vboxsync
Message:

VMM/IEM: Adjusted the TB exit statistics a bit more, adding a few new one, making more of the release stats that doesn't go into the TB, and organizing them to try avoid counting the same exit more than once. bugref:10376 bugref:10653

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/IEMR3.cpp

    r104362 r104407  
    383383        STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.cTbExecThreaded,     STAMTYPE_U64_RESET, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    384384                        "Executed threaded translation block",          "/IEM/CPU%u/re/cTbExecThreaded", idCpu);
    385         STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbExecBreaks,    STAMTYPE_COUNTER,   STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,
    386                         "Times TB execution was interrupted/broken off", "/IEM/CPU%u/re/cTbExecBreaks", idCpu);
     385        STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbThreadedExecBreaks, STAMTYPE_COUNTER,   STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,
     386                        "Times threaded TB execution was interrupted/broken off", "/IEM/CPU%u/re/cTbExecThreadedBreaks", idCpu);
    387387# ifdef VBOX_WITH_STATISTICS
    388388        STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbThreadedExecBreaksWithLookup, STAMTYPE_COUNTER,   STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,
    389                         "Times threaded TB execution was interrupted/broken off on a call with lookup entries", "/IEM/CPU%u/re/cTbExecBreaksWithLookup", idCpu);
     389                        "Times threaded TB execution was interrupted/broken off on a call with lookup entries", "/IEM/CPU%u/re/cTbExecThreadedBreaksWithLookup", idCpu);
    390390        STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbThreadedExecBreaksWithoutLookup, STAMTYPE_COUNTER,   STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,
    391                         "Times threaded TB execution was interrupted/broken off on a call without lookup entries", "/IEM/CPU%u/re/cTbExecBreaksWithoutLookup", idCpu);
     391                        "Times threaded TB execution was interrupted/broken off on a call without lookup entries", "/IEM/CPU%u/re/cTbExecThreadedBreaksWithoutLookup", idCpu);
    392392# endif
    393393
     
    617617
    618618        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbFinished, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    619                         "Number of times the TB finishes execution completely", "/IEM/CPU%u/re/NativeTbFinished", idCpu);
     619                        "Number of times the TB finishes execution completely",
     620                        "/IEM/CPU%u/re/NativeTbFinished", idCpu);
     621#  endif /* VBOX_WITH_STATISTICS */
    620622        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnBreak, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    621                         "Number of times the TB finished through the ReturnBreak label", "/IEM/CPU%u/re/NativeTbExitReturnBreak", idCpu);
     623                        "Number of times the TB finished through the ReturnBreak label",
     624                        "/IEM/CPU%u/re/NativeTbExit/ReturnBreak", idCpu);
     625        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnBreakFF, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
     626                        "Number of times the TB finished through the ReturnBreak label",
     627                        "/IEM/CPU%u/re/NativeTbExit/ReturnBreakFF", idCpu);
    622628        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnWithFlags, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    623                         "Number of times the TB finished through the ReturnWithFlags label", "/IEM/CPU%u/re/NativeTbExitReturnWithFlags", idCpu);
    624 #  endif /* VBOX_WITH_STATISTICS */
     629                        "Number of times the TB finished through the ReturnWithFlags label",
     630                        "/IEM/CPU%u/re/NativeTbExit/ReturnWithFlags", idCpu);
     631        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnOtherStatus, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
     632                        "Number of times the TB finished with some other status value",
     633                        "/IEM/CPU%u/re/NativeTbExit/ReturnOtherStatus", idCpu);
     634        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitLongJump, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
     635                        "Number of times the TB finished via long jump / throw",
     636                        "/IEM/CPU%u/re/NativeTbExit/LongJumps", idCpu);
     637        /* These end up returning VINF_IEM_REEXEC_BREAK and are thus already counted under NativeTbExit/ReturnBreak: */
    625638        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitObsoleteTb, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    626                         "Number of times the TB finished through the ObsoleteTb label", "/IEM/CPU%u/re/NativeTbExitObsoleteTb", idCpu);
     639                        "Number of times the TB finished through the ObsoleteTb label",
     640                        "/IEM/CPU%u/re/NativeTbExit/ReturnBreak/ObsoleteTb", idCpu);
    627641        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatCheckNeedCsLimChecking, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    628                         "Number of times the TB finished through the NeedCsLimChecking label", "/IEM/CPU%u/re/NativeTbExitNeedCsLimChecking", idCpu);
     642                        "Number of times the TB finished through the NeedCsLimChecking label",
     643                        "/IEM/CPU%u/re/NativeTbExit/ReturnBreak/NeedCsLimChecking", idCpu);
    629644        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatCheckBranchMisses, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    630                         "Number of times the TB finished through the CheckBranchMiss label", "/IEM/CPU%u/re/NativeTbExitCheckBranchMiss", idCpu);
     645                        "Number of times the TB finished through the CheckBranchMiss label",
     646                        "/IEM/CPU%u/re/NativeTbExit/ReturnBreak/CheckBranchMiss", idCpu);
     647        /* Raising stuff will either increment NativeTbExit/LongJumps or NativeTbExit/ReturnOtherStatus
     648           depending on whether VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP is defined: */
     649#  ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP
     650#   define RAISE_PREFIX "/IEM/CPU%u/re/NativeTbExit/ReturnOtherStatus/"
     651#  else
     652#   define RAISE_PREFIX "/IEM/CPU%u/re/NativeTbExit/LongJumps/"
     653#  endif
    631654        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseDe, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    632                         "Number of times the TB finished raising a #DE exception", "/IEM/CPU%u/re/NativeTbExitRaiseDe", idCpu);
     655                        "Number of times the TB finished raising a #DE exception",
     656                        RAISE_PREFIX "RaiseDe", idCpu);
    633657        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseUd, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    634                         "Number of times the TB finished raising a #UD exception", "/IEM/CPU%u/re/NativeTbExitRaiseUd", idCpu);
     658                        "Number of times the TB finished raising a #UD exception",
     659                        RAISE_PREFIX "RaiseUd", idCpu);
    635660        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseSseRelated, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    636                         "Number of times the TB finished raising a SSE related exception", "/IEM/CPU%u/re/NativeTbExitRaiseSseRelated", idCpu);
     661                        "Number of times the TB finished raising a SSE related exception",
     662                        RAISE_PREFIX "RaiseSseRelated", idCpu);
    637663        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseAvxRelated, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    638                         "Number of times the TB finished raising a AVX related exception", "/IEM/CPU%u/re/NativeTbExitRaiseAvxRelated", idCpu);
     664                        "Number of times the TB finished raising a AVX related exception",
     665                        RAISE_PREFIX "RaiseAvxRelated", idCpu);
    639666        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseSseAvxFpRelated, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    640                         "Number of times the TB finished raising a SSE/AVX floating point related exception", "/IEM/CPU%u/re/NativeTbExitRaiseSseAvxFpRelated", idCpu);
     667                        "Number of times the TB finished raising a SSE/AVX floating point related exception",
     668                        RAISE_PREFIX "RaiseSseAvxFpRelated", idCpu);
    641669        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseNm, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    642                         "Number of times the TB finished raising a #NM exception", "/IEM/CPU%u/re/NativeTbExitRaiseNm", idCpu);
     670                        "Number of times the TB finished raising a #NM exception",
     671                        RAISE_PREFIX "RaiseNm", idCpu);
    643672        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseGp0, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    644                         "Number of times the TB finished raising a #GP(0) exception", "/IEM/CPU%u/re/NativeTbExitRaiseGp0", idCpu);
     673                        "Number of times the TB finished raising a #GP(0) exception",
     674                        RAISE_PREFIX "RaiseGp0", idCpu);
    645675        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseMf, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    646                         "Number of times the TB finished raising a #MF exception", "/IEM/CPU%u/re/NativeTbExitRaiseMf", idCpu);
     676                        "Number of times the TB finished raising a #MF exception",
     677                        RAISE_PREFIX "RaiseMf", idCpu);
    647678        STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseXf, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
    648                         "Number of times the TB finished raising a #XF exception", "/IEM/CPU%u/re/NativeTbExitRaiseXf", idCpu);
     679                        "Number of times the TB finished raising a #XF exception",
     680                        RAISE_PREFIX "RaiseXf", idCpu);
     681
     682        RTStrPrintf(szPat, sizeof(szPat), "/IEM/CPU%u/re/NativeTbExit/*", idCpu); /* only immediate children, no sub folders */
     683        STAMR3RegisterSum(pVM->pUVM, STAMVISIBILITY_ALWAYS, szPat,
     684                          "Number of times native TB execution finished before the end (not counting thrown memory++ exceptions)",
     685                          "/IEM/CPU%u/re/NativeTbExit", idCpu);
     686
    649687
    650688# endif /* VBOX_WITH_IEM_NATIVE_RECOMPILER */
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