[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aTNh6dlxJD9bvho-@skinsburskii.localdomain>
Date: Fri, 5 Dec 2025 14:51:21 -0800
From: Stanislav Kinsburskii <skinsburskii@...ux.microsoft.com>
To: Nuno Das Neves <nunodasneves@...ux.microsoft.com>
Cc: linux-hyperv@...r.kernel.org, linux-kernel@...r.kernel.org,
kys@...rosoft.com, haiyangz@...rosoft.com, wei.liu@...nel.org,
decui@...rosoft.com, longli@...rosoft.com, mhklinux@...look.com,
prapal@...ux.microsoft.com, mrathor@...ux.microsoft.com,
paekkaladevi@...ux.microsoft.com
Subject: Re: [PATCH v2 2/3] mshv: Add definitions for stats pages
On Fri, Dec 05, 2025 at 10:58:41AM -0800, Nuno Das Neves wrote:
> Add the definitions for hypervisor, logical processor, and partition
> stats pages.
>
> Move the definition for the VP stats page to its rightful place in
> hvhdk.h, and add the missing members.
>
> These enum members retain their CamelCase style, since they are imported
> directly from the hypervisor code They will be stringified when printing
> the stats out, and retain more readability in this form.
>
Acked-by: Stanislav Kinsburskii <skinsburskii@...ux.microsoft.com>
> Signed-off-by: Nuno Das Neves <nunodasneves@...ux.microsoft.com>
> ---
> drivers/hv/mshv_root_main.c | 17 --
> include/hyperv/hvhdk.h | 437 ++++++++++++++++++++++++++++++++++++
> 2 files changed, 437 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
> index f59a4ab47685..19006b788e85 100644
> --- a/drivers/hv/mshv_root_main.c
> +++ b/drivers/hv/mshv_root_main.c
> @@ -38,23 +38,6 @@ MODULE_AUTHOR("Microsoft");
> MODULE_LICENSE("GPL");
> MODULE_DESCRIPTION("Microsoft Hyper-V root partition VMM interface /dev/mshv");
>
> -/* TODO move this to another file when debugfs code is added */
> -enum hv_stats_vp_counters { /* HV_THREAD_COUNTER */
> -#if defined(CONFIG_X86)
> - VpRootDispatchThreadBlocked = 202,
> -#elif defined(CONFIG_ARM64)
> - VpRootDispatchThreadBlocked = 94,
> -#endif
> - VpStatsMaxCounter
> -};
> -
> -struct hv_stats_page {
> - union {
> - u64 vp_cntrs[VpStatsMaxCounter]; /* VP counters */
> - u8 data[HV_HYP_PAGE_SIZE];
> - };
> -} __packed;
> -
> struct mshv_root mshv_root;
>
> enum hv_scheduler_type hv_scheduler_type;
> diff --git a/include/hyperv/hvhdk.h b/include/hyperv/hvhdk.h
> index 469186df7826..51abbcd0ec37 100644
> --- a/include/hyperv/hvhdk.h
> +++ b/include/hyperv/hvhdk.h
> @@ -10,6 +10,443 @@
> #include "hvhdk_mini.h"
> #include "hvgdk.h"
>
> +enum hv_stats_hypervisor_counters { /* HV_HYPERVISOR_COUNTER */
> + HvLogicalProcessors = 1,
> + HvPartitions = 2,
> + HvTotalPages = 3,
> + HvVirtualProcessors = 4,
> + HvMonitoredNotifications = 5,
> + HvModernStandbyEntries = 6,
> + HvPlatformIdleTransitions = 7,
> + HvHypervisorStartupCost = 8,
> + HvIOSpacePages = 10,
> + HvNonEssentialPagesForDump = 11,
> + HvSubsumedPages = 12,
> + HvStatsMaxCounter
> +};
> +
> +enum hv_stats_partition_counters { /* HV_PROCESS_COUNTER */
> + PartitionVirtualProcessors = 1,
> + PartitionTlbSize = 3,
> + PartitionAddressSpaces = 4,
> + PartitionDepositedPages = 5,
> + PartitionGpaPages = 6,
> + PartitionGpaSpaceModifications = 7,
> + PartitionVirtualTlbFlushEntires = 8,
> + PartitionRecommendedTlbSize = 9,
> + PartitionGpaPages4K = 10,
> + PartitionGpaPages2M = 11,
> + PartitionGpaPages1G = 12,
> + PartitionGpaPages512G = 13,
> + PartitionDevicePages4K = 14,
> + PartitionDevicePages2M = 15,
> + PartitionDevicePages1G = 16,
> + PartitionDevicePages512G = 17,
> + PartitionAttachedDevices = 18,
> + PartitionDeviceInterruptMappings = 19,
> + PartitionIoTlbFlushes = 20,
> + PartitionIoTlbFlushCost = 21,
> + PartitionDeviceInterruptErrors = 22,
> + PartitionDeviceDmaErrors = 23,
> + PartitionDeviceInterruptThrottleEvents = 24,
> + PartitionSkippedTimerTicks = 25,
> + PartitionPartitionId = 26,
> +#if IS_ENABLED(CONFIG_X86_64)
> + PartitionNestedTlbSize = 27,
> + PartitionRecommendedNestedTlbSize = 28,
> + PartitionNestedTlbFreeListSize = 29,
> + PartitionNestedTlbTrimmedPages = 30,
> + PartitionPagesShattered = 31,
> + PartitionPagesRecombined = 32,
> + PartitionHwpRequestValue = 33,
> +#elif IS_ENABLED(CONFIG_ARM64)
> + PartitionHwpRequestValue = 27,
> +#endif
> + PartitionStatsMaxCounter
> +};
> +
> +enum hv_stats_vp_counters { /* HV_THREAD_COUNTER */
> + VpTotalRunTime = 1,
> + VpHypervisorRunTime = 2,
> + VpRemoteNodeRunTime = 3,
> + VpNormalizedRunTime = 4,
> + VpIdealCpu = 5,
> + VpHypercallsCount = 7,
> + VpHypercallsTime = 8,
> +#if IS_ENABLED(CONFIG_X86_64)
> + VpPageInvalidationsCount = 9,
> + VpPageInvalidationsTime = 10,
> + VpControlRegisterAccessesCount = 11,
> + VpControlRegisterAccessesTime = 12,
> + VpIoInstructionsCount = 13,
> + VpIoInstructionsTime = 14,
> + VpHltInstructionsCount = 15,
> + VpHltInstructionsTime = 16,
> + VpMwaitInstructionsCount = 17,
> + VpMwaitInstructionsTime = 18,
> + VpCpuidInstructionsCount = 19,
> + VpCpuidInstructionsTime = 20,
> + VpMsrAccessesCount = 21,
> + VpMsrAccessesTime = 22,
> + VpOtherInterceptsCount = 23,
> + VpOtherInterceptsTime = 24,
> + VpExternalInterruptsCount = 25,
> + VpExternalInterruptsTime = 26,
> + VpPendingInterruptsCount = 27,
> + VpPendingInterruptsTime = 28,
> + VpEmulatedInstructionsCount = 29,
> + VpEmulatedInstructionsTime = 30,
> + VpDebugRegisterAccessesCount = 31,
> + VpDebugRegisterAccessesTime = 32,
> + VpPageFaultInterceptsCount = 33,
> + VpPageFaultInterceptsTime = 34,
> + VpGuestPageTableMaps = 35,
> + VpLargePageTlbFills = 36,
> + VpSmallPageTlbFills = 37,
> + VpReflectedGuestPageFaults = 38,
> + VpApicMmioAccesses = 39,
> + VpIoInterceptMessages = 40,
> + VpMemoryInterceptMessages = 41,
> + VpApicEoiAccesses = 42,
> + VpOtherMessages = 43,
> + VpPageTableAllocations = 44,
> + VpLogicalProcessorMigrations = 45,
> + VpAddressSpaceEvictions = 46,
> + VpAddressSpaceSwitches = 47,
> + VpAddressDomainFlushes = 48,
> + VpAddressSpaceFlushes = 49,
> + VpGlobalGvaRangeFlushes = 50,
> + VpLocalGvaRangeFlushes = 51,
> + VpPageTableEvictions = 52,
> + VpPageTableReclamations = 53,
> + VpPageTableResets = 54,
> + VpPageTableValidations = 55,
> + VpApicTprAccesses = 56,
> + VpPageTableWriteIntercepts = 57,
> + VpSyntheticInterrupts = 58,
> + VpVirtualInterrupts = 59,
> + VpApicIpisSent = 60,
> + VpApicSelfIpisSent = 61,
> + VpGpaSpaceHypercalls = 62,
> + VpLogicalProcessorHypercalls = 63,
> + VpLongSpinWaitHypercalls = 64,
> + VpOtherHypercalls = 65,
> + VpSyntheticInterruptHypercalls = 66,
> + VpVirtualInterruptHypercalls = 67,
> + VpVirtualMmuHypercalls = 68,
> + VpVirtualProcessorHypercalls = 69,
> + VpHardwareInterrupts = 70,
> + VpNestedPageFaultInterceptsCount = 71,
> + VpNestedPageFaultInterceptsTime = 72,
> + VpPageScans = 73,
> + VpLogicalProcessorDispatches = 74,
> + VpWaitingForCpuTime = 75,
> + VpExtendedHypercalls = 76,
> + VpExtendedHypercallInterceptMessages = 77,
> + VpMbecNestedPageTableSwitches = 78,
> + VpOtherReflectedGuestExceptions = 79,
> + VpGlobalIoTlbFlushes = 80,
> + VpGlobalIoTlbFlushCost = 81,
> + VpLocalIoTlbFlushes = 82,
> + VpLocalIoTlbFlushCost = 83,
> + VpHypercallsForwardedCount = 84,
> + VpHypercallsForwardingTime = 85,
> + VpPageInvalidationsForwardedCount = 86,
> + VpPageInvalidationsForwardingTime = 87,
> + VpControlRegisterAccessesForwardedCount = 88,
> + VpControlRegisterAccessesForwardingTime = 89,
> + VpIoInstructionsForwardedCount = 90,
> + VpIoInstructionsForwardingTime = 91,
> + VpHltInstructionsForwardedCount = 92,
> + VpHltInstructionsForwardingTime = 93,
> + VpMwaitInstructionsForwardedCount = 94,
> + VpMwaitInstructionsForwardingTime = 95,
> + VpCpuidInstructionsForwardedCount = 96,
> + VpCpuidInstructionsForwardingTime = 97,
> + VpMsrAccessesForwardedCount = 98,
> + VpMsrAccessesForwardingTime = 99,
> + VpOtherInterceptsForwardedCount = 100,
> + VpOtherInterceptsForwardingTime = 101,
> + VpExternalInterruptsForwardedCount = 102,
> + VpExternalInterruptsForwardingTime = 103,
> + VpPendingInterruptsForwardedCount = 104,
> + VpPendingInterruptsForwardingTime = 105,
> + VpEmulatedInstructionsForwardedCount = 106,
> + VpEmulatedInstructionsForwardingTime = 107,
> + VpDebugRegisterAccessesForwardedCount = 108,
> + VpDebugRegisterAccessesForwardingTime = 109,
> + VpPageFaultInterceptsForwardedCount = 110,
> + VpPageFaultInterceptsForwardingTime = 111,
> + VpVmclearEmulationCount = 112,
> + VpVmclearEmulationTime = 113,
> + VpVmptrldEmulationCount = 114,
> + VpVmptrldEmulationTime = 115,
> + VpVmptrstEmulationCount = 116,
> + VpVmptrstEmulationTime = 117,
> + VpVmreadEmulationCount = 118,
> + VpVmreadEmulationTime = 119,
> + VpVmwriteEmulationCount = 120,
> + VpVmwriteEmulationTime = 121,
> + VpVmxoffEmulationCount = 122,
> + VpVmxoffEmulationTime = 123,
> + VpVmxonEmulationCount = 124,
> + VpVmxonEmulationTime = 125,
> + VpNestedVMEntriesCount = 126,
> + VpNestedVMEntriesTime = 127,
> + VpNestedSLATSoftPageFaultsCount = 128,
> + VpNestedSLATSoftPageFaultsTime = 129,
> + VpNestedSLATHardPageFaultsCount = 130,
> + VpNestedSLATHardPageFaultsTime = 131,
> + VpInvEptAllContextEmulationCount = 132,
> + VpInvEptAllContextEmulationTime = 133,
> + VpInvEptSingleContextEmulationCount = 134,
> + VpInvEptSingleContextEmulationTime = 135,
> + VpInvVpidAllContextEmulationCount = 136,
> + VpInvVpidAllContextEmulationTime = 137,
> + VpInvVpidSingleContextEmulationCount = 138,
> + VpInvVpidSingleContextEmulationTime = 139,
> + VpInvVpidSingleAddressEmulationCount = 140,
> + VpInvVpidSingleAddressEmulationTime = 141,
> + VpNestedTlbPageTableReclamations = 142,
> + VpNestedTlbPageTableEvictions = 143,
> + VpFlushGuestPhysicalAddressSpaceHypercalls = 144,
> + VpFlushGuestPhysicalAddressListHypercalls = 145,
> + VpPostedInterruptNotifications = 146,
> + VpPostedInterruptScans = 147,
> + VpTotalCoreRunTime = 148,
> + VpMaximumRunTime = 149,
> + VpHwpRequestContextSwitches = 150,
> + VpWaitingForCpuTimeBucket0 = 151,
> + VpWaitingForCpuTimeBucket1 = 152,
> + VpWaitingForCpuTimeBucket2 = 153,
> + VpWaitingForCpuTimeBucket3 = 154,
> + VpWaitingForCpuTimeBucket4 = 155,
> + VpWaitingForCpuTimeBucket5 = 156,
> + VpWaitingForCpuTimeBucket6 = 157,
> + VpVmloadEmulationCount = 158,
> + VpVmloadEmulationTime = 159,
> + VpVmsaveEmulationCount = 160,
> + VpVmsaveEmulationTime = 161,
> + VpGifInstructionEmulationCount = 162,
> + VpGifInstructionEmulationTime = 163,
> + VpEmulatedErrataSvmInstructions = 164,
> + VpPlaceholder1 = 165,
> + VpPlaceholder2 = 166,
> + VpPlaceholder3 = 167,
> + VpPlaceholder4 = 168,
> + VpPlaceholder5 = 169,
> + VpPlaceholder6 = 170,
> + VpPlaceholder7 = 171,
> + VpPlaceholder8 = 172,
> + VpPlaceholder9 = 173,
> + VpPlaceholder10 = 174,
> + VpSchedulingPriority = 175,
> + VpRdpmcInstructionsCount = 176,
> + VpRdpmcInstructionsTime = 177,
> + VpPerfmonPmuMsrAccessesCount = 178,
> + VpPerfmonLbrMsrAccessesCount = 179,
> + VpPerfmonIptMsrAccessesCount = 180,
> + VpPerfmonInterruptCount = 181,
> + VpVtl1DispatchCount = 182,
> + VpVtl2DispatchCount = 183,
> + VpVtl2DispatchBucket0 = 184,
> + VpVtl2DispatchBucket1 = 185,
> + VpVtl2DispatchBucket2 = 186,
> + VpVtl2DispatchBucket3 = 187,
> + VpVtl2DispatchBucket4 = 188,
> + VpVtl2DispatchBucket5 = 189,
> + VpVtl2DispatchBucket6 = 190,
> + VpVtl1RunTime = 191,
> + VpVtl2RunTime = 192,
> + VpIommuHypercalls = 193,
> + VpCpuGroupHypercalls = 194,
> + VpVsmHypercalls = 195,
> + VpEventLogHypercalls = 196,
> + VpDeviceDomainHypercalls = 197,
> + VpDepositHypercalls = 198,
> + VpSvmHypercalls = 199,
> + VpBusLockAcquisitionCount = 200,
> + VpUnused = 201,
> + VpRootDispatchThreadBlocked = 202,
> +#elif IS_ENABLED(CONFIG_ARM64)
> + VpSysRegAccessesCount = 9,
> + VpSysRegAccessesTime = 10,
> + VpSmcInstructionsCount = 11,
> + VpSmcInstructionsTime = 12,
> + VpOtherInterceptsCount = 13,
> + VpOtherInterceptsTime = 14,
> + VpExternalInterruptsCount = 15,
> + VpExternalInterruptsTime = 16,
> + VpPendingInterruptsCount = 17,
> + VpPendingInterruptsTime = 18,
> + VpGuestPageTableMaps = 19,
> + VpLargePageTlbFills = 20,
> + VpSmallPageTlbFills = 21,
> + VpReflectedGuestPageFaults = 22,
> + VpMemoryInterceptMessages = 23,
> + VpOtherMessages = 24,
> + VpLogicalProcessorMigrations = 25,
> + VpAddressDomainFlushes = 26,
> + VpAddressSpaceFlushes = 27,
> + VpSyntheticInterrupts = 28,
> + VpVirtualInterrupts = 29,
> + VpApicSelfIpisSent = 30,
> + VpGpaSpaceHypercalls = 31,
> + VpLogicalProcessorHypercalls = 32,
> + VpLongSpinWaitHypercalls = 33,
> + VpOtherHypercalls = 34,
> + VpSyntheticInterruptHypercalls = 35,
> + VpVirtualInterruptHypercalls = 36,
> + VpVirtualMmuHypercalls = 37,
> + VpVirtualProcessorHypercalls = 38,
> + VpHardwareInterrupts = 39,
> + VpNestedPageFaultInterceptsCount = 40,
> + VpNestedPageFaultInterceptsTime = 41,
> + VpLogicalProcessorDispatches = 42,
> + VpWaitingForCpuTime = 43,
> + VpExtendedHypercalls = 44,
> + VpExtendedHypercallInterceptMessages = 45,
> + VpMbecNestedPageTableSwitches = 46,
> + VpOtherReflectedGuestExceptions = 47,
> + VpGlobalIoTlbFlushes = 48,
> + VpGlobalIoTlbFlushCost = 49,
> + VpLocalIoTlbFlushes = 50,
> + VpLocalIoTlbFlushCost = 51,
> + VpFlushGuestPhysicalAddressSpaceHypercalls = 52,
> + VpFlushGuestPhysicalAddressListHypercalls = 53,
> + VpPostedInterruptNotifications = 54,
> + VpPostedInterruptScans = 55,
> + VpTotalCoreRunTime = 56,
> + VpMaximumRunTime = 57,
> + VpWaitingForCpuTimeBucket0 = 58,
> + VpWaitingForCpuTimeBucket1 = 59,
> + VpWaitingForCpuTimeBucket2 = 60,
> + VpWaitingForCpuTimeBucket3 = 61,
> + VpWaitingForCpuTimeBucket4 = 62,
> + VpWaitingForCpuTimeBucket5 = 63,
> + VpWaitingForCpuTimeBucket6 = 64,
> + VpHwpRequestContextSwitches = 65,
> + VpPlaceholder2 = 66,
> + VpPlaceholder3 = 67,
> + VpPlaceholder4 = 68,
> + VpPlaceholder5 = 69,
> + VpPlaceholder6 = 70,
> + VpPlaceholder7 = 71,
> + VpPlaceholder8 = 72,
> + VpContentionTime = 73,
> + VpWakeUpTime = 74,
> + VpSchedulingPriority = 75,
> + VpVtl1DispatchCount = 76,
> + VpVtl2DispatchCount = 77,
> + VpVtl2DispatchBucket0 = 78,
> + VpVtl2DispatchBucket1 = 79,
> + VpVtl2DispatchBucket2 = 80,
> + VpVtl2DispatchBucket3 = 81,
> + VpVtl2DispatchBucket4 = 82,
> + VpVtl2DispatchBucket5 = 83,
> + VpVtl2DispatchBucket6 = 84,
> + VpVtl1RunTime = 85,
> + VpVtl2RunTime = 86,
> + VpIommuHypercalls = 87,
> + VpCpuGroupHypercalls = 88,
> + VpVsmHypercalls = 89,
> + VpEventLogHypercalls = 90,
> + VpDeviceDomainHypercalls = 91,
> + VpDepositHypercalls = 92,
> + VpSvmHypercalls = 93,
> + VpLoadAvg = 94,
> + VpRootDispatchThreadBlocked = 95,
> +#endif
> + VpStatsMaxCounter
> +};
> +
> +enum hv_stats_lp_counters { /* HV_CPU_COUNTER */
> + LpGlobalTime = 1,
> + LpTotalRunTime = 2,
> + LpHypervisorRunTime = 3,
> + LpHardwareInterrupts = 4,
> + LpContextSwitches = 5,
> + LpInterProcessorInterrupts = 6,
> + LpSchedulerInterrupts = 7,
> + LpTimerInterrupts = 8,
> + LpInterProcessorInterruptsSent = 9,
> + LpProcessorHalts = 10,
> + LpMonitorTransitionCost = 11,
> + LpContextSwitchTime = 12,
> + LpC1TransitionsCount = 13,
> + LpC1RunTime = 14,
> + LpC2TransitionsCount = 15,
> + LpC2RunTime = 16,
> + LpC3TransitionsCount = 17,
> + LpC3RunTime = 18,
> + LpRootVpIndex = 19,
> + LpIdleSequenceNumber = 20,
> + LpGlobalTscCount = 21,
> + LpActiveTscCount = 22,
> + LpIdleAccumulation = 23,
> + LpReferenceCycleCount0 = 24,
> + LpActualCycleCount0 = 25,
> + LpReferenceCycleCount1 = 26,
> + LpActualCycleCount1 = 27,
> + LpProximityDomainId = 28,
> + LpPostedInterruptNotifications = 29,
> + LpBranchPredictorFlushes = 30,
> +#if IS_ENABLED(CONFIG_X86_64)
> + LpL1DataCacheFlushes = 31,
> + LpImmediateL1DataCacheFlushes = 32,
> + LpMbFlushes = 33,
> + LpCounterRefreshSequenceNumber = 34,
> + LpCounterRefreshReferenceTime = 35,
> + LpIdleAccumulationSnapshot = 36,
> + LpActiveTscCountSnapshot = 37,
> + LpHwpRequestContextSwitches = 38,
> + LpPlaceholder1 = 39,
> + LpPlaceholder2 = 40,
> + LpPlaceholder3 = 41,
> + LpPlaceholder4 = 42,
> + LpPlaceholder5 = 43,
> + LpPlaceholder6 = 44,
> + LpPlaceholder7 = 45,
> + LpPlaceholder8 = 46,
> + LpPlaceholder9 = 47,
> + LpPlaceholder10 = 48,
> + LpReserveGroupId = 49,
> + LpRunningPriority = 50,
> + LpPerfmonInterruptCount = 51,
> +#elif IS_ENABLED(CONFIG_ARM64)
> + LpCounterRefreshSequenceNumber = 31,
> + LpCounterRefreshReferenceTime = 32,
> + LpIdleAccumulationSnapshot = 33,
> + LpActiveTscCountSnapshot = 34,
> + LpHwpRequestContextSwitches = 35,
> + LpPlaceholder2 = 36,
> + LpPlaceholder3 = 37,
> + LpPlaceholder4 = 38,
> + LpPlaceholder5 = 39,
> + LpPlaceholder6 = 40,
> + LpPlaceholder7 = 41,
> + LpPlaceholder8 = 42,
> + LpPlaceholder9 = 43,
> + LpSchLocalRunListSize = 44,
> + LpReserveGroupId = 45,
> + LpRunningPriority = 46,
> +#endif
> + LpStatsMaxCounter
> +};
> +
> +/*
> + * Hypervisor statsitics page format
> + */
> +struct hv_stats_page {
> + union {
> + u64 hv_cntrs[HvStatsMaxCounter]; /* Hypervisor counters */
> + u64 pt_cntrs[PartitionStatsMaxCounter]; /* Partition counters */
> + u64 vp_cntrs[VpStatsMaxCounter]; /* VP counters */
> + u64 lp_cntrs[LpStatsMaxCounter]; /* LP counters */
> + u8 data[HV_HYP_PAGE_SIZE];
> + };
> +} __packed;
> +
> /* Bits for dirty mask of hv_vp_register_page */
> #define HV_X64_REGISTER_CLASS_GENERAL 0
> #define HV_X64_REGISTER_CLASS_IP 1
> --
> 2.34.1
Powered by blists - more mailing lists