@cryptotaxi247 / netdata-1 / commits / cf4f1d2cc

Hyper collector fixes (#18934)

* Fix get instance, dimension rename, remove label * Add vm_net_interface_packets Add vm_net_interface_traffic Switch traffic charts to type area Chart/dimension definition fixes * Remove label from "root" charts * Change vswitch_bytes to vswitch_traffic * Added charts IPsecoffloadBytes, DirectedPackets,BroadcastPackets, MulticastPackets * Fix wrong dimensions * Internal rrdset rename * Switch algorithm on Hypervisor processor chart * Grouping per VM not Hv VPs * Update src/collectors/windows.plugin/perflib-hyperv.c Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud> * Update src/collectors/windows.plugin/perflib-hyperv.c Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud> * Adjust chart priorities Add processor total chart * priority update * Remove duplicate semicolon --------- Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud>

Stelios Fragkakis committed Nov 5, 2024 at 20:02 UTC cf4f1d2ccf00b13363048406fcc2f30c440ea949
2 files changed +399 -94
src/collectors/all.h
+47 -1
@@ -56,7 +56,53 @@
56 #define NETDATA_CHART_PRIO_SYSTEM_PACKETS 7001 // freebsd only
57 #define NETDATA_CHART_PRIO_WINDOWS_THREADS 8001 // Windows only
58 #define NETDATA_CHART_PRIO_WINDOWS_THERMAL_ZONES 8002 // Windows only
59 -#define NETDATA_CHART_PRIO_WINDOWS_HYPERV 9000 // Windows only
59 +
60 +// ----------------------------------------------------------------------------
61 +// Hyper-V
62 +
63 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE 20000
64 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT 20010
65 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL 20020
66 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE 20030
67 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT 20040
68 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED 20050
69 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES 20060
70 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC 20070
71 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC 20080
72 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS 20090
73 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_BROADCAST_PACKETS 20100
74 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS 20110
75 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS 20120
76 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED 20130
77 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES 20140
78 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS 20150
79 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS 20160
80 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH 20170
81 +
82 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC 20400
83 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS 20410
84 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS 20420
85 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS 20430
86 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS 20440
87 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED 20450
88 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS 20460
89 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS 20470
90 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES 20470
91 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES 20480
92 +
93 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH 20600
94 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES 20610
95 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES 20620
96 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE 20630
97 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES 20640
98 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS 20650
99 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS 20660
100 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS 20670
101 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES 20680
102 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES 20690
103 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES 20700
104 +#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS 20710
105 +// ----------------------------------------------------------------------------
106
107 // CPU per core
108
src/collectors/windows.plugin/perflib-hyperv.c
+352 -93
@@ -9,8 +9,6 @@
9
10 #define HYPERV "hyperv"
11
12 -static long chart_priority = NETDATA_CHART_PRIO_WINDOWS_HYPERV;
13 -
12 static void get_and_sanitize_instance_value(
13 PERF_DATA_BLOCK *pDataBlock,
14 PERF_OBJECT_TYPE *pObjectType,
@@ -19,7 +17,7 @@ static void get_and_sanitize_instance_value(
17 size_t buffer_size)
18 {
19 // char wstr[8192];
22 - if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, sizeof(buffer_size))) {
20 + if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, buffer_size)) {
21 strncpyz(buffer, "[unknown]", buffer_size - 1);
22 // return;
23 }
@@ -153,7 +151,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
151 "bytes",
152 _COMMON_PLUGIN_NAME,
153 _COMMON_PLUGIN_MODULE_NAME,
156 - chart_priority++,
154 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL,
155 update_every,
156 RRDSET_TYPE_LINE);
157
@@ -167,7 +165,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
165 "bytes",
166 _COMMON_PLUGIN_NAME,
167 _COMMON_PLUGIN_MODULE_NAME,
170 - chart_priority++,
168 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE,
169 update_every,
170 RRDSET_TYPE_LINE);
171
@@ -181,14 +179,14 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
179 "percentage",
180 _COMMON_PLUGIN_NAME,
181 _COMMON_PLUGIN_MODULE_NAME,
184 - chart_priority++,
182 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT,
183 update_every,
184 RRDSET_TYPE_LINE);
185
188 - p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
189 - p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
190 - p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
191 - p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
186 + p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
187 + p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
188 + p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
189 + p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
190
191 rrdlabels_add(p->st_vm_memory_physical->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
192 rrdlabels_add(p->st_pressure->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
@@ -250,7 +248,7 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
248 "pages",
249 _COMMON_PLUGIN_NAME,
250 _COMMON_PLUGIN_MODULE_NAME,
253 - chart_priority++,
251 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED,
252 update_every,
253 RRDSET_TYPE_LINE);
254
@@ -264,7 +262,7 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
262 "pages",
263 _COMMON_PLUGIN_NAME,
264 _COMMON_PLUGIN_MODULE_NAME,
267 - chart_priority++,
265 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES,
266 update_every,
267 RRDSET_TYPE_LINE);
268
@@ -329,14 +327,12 @@ static bool do_hyperv_health_summary(PERF_DATA_BLOCK *pDataBlock, int update_eve
327 "vms",
328 _COMMON_PLUGIN_NAME,
329 _COMMON_PLUGIN_MODULE_NAME,
332 - chart_priority++,
330 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH,
331 update_every,
332 RRDSET_TYPE_STACKED);
333
334 p->rd_HealthCritical = rrddim_add(p->st_health, "critical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
335 p->rd_HealthOk = rrddim_add(p->st_health, "ok", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
338 -
339 - rrdlabels_add(p->st_health->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
336 }
337
338 SETP_DIM_VALUE(st_health, HealthCritical);
@@ -490,14 +486,13 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
486 "pages",
487 _COMMON_PLUGIN_NAME,
488 _COMMON_PLUGIN_MODULE_NAME,
493 - chart_priority++,
489 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES,
490 update_every,
491 RRDSET_TYPE_LINE);
492
493 p->rd_DeviceSpacePages4K = rrddim_add(p->st_device_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
494 p->rd_DeviceSpacePages2M = rrddim_add(p->st_device_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
495 p->rd_DeviceSpacePages1G = rrddim_add(p->st_device_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
500 - rrdlabels_add(p->st_device_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
496
497 p->st_gpa_space_pages = rrdset_create_localhost(
498 "root_partition_gpa_space_pages",
@@ -509,14 +504,13 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
504 "pages",
505 _COMMON_PLUGIN_NAME,
506 _COMMON_PLUGIN_MODULE_NAME,
512 - chart_priority++,
507 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES,
508 update_every,
509 RRDSET_TYPE_LINE);
510
511 p->rd_GPASpacePages4K = rrddim_add(p->st_gpa_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
512 p->rd_GPASpacePages2M = rrddim_add(p->st_gpa_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
513 p->rd_GPASpacePages1G = rrddim_add(p->st_gpa_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
519 - rrdlabels_add(p->st_gpa_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
514
515 p->st_gpa_space_modifications = rrdset_create_localhost(
516 "root_partition_gpa_space_modifications",
@@ -528,13 +522,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
522 "modifications/s",
523 _COMMON_PLUGIN_NAME,
524 _COMMON_PLUGIN_MODULE_NAME,
531 - chart_priority++,
525 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS,
526 update_every,
527 RRDSET_TYPE_LINE);
528
529 p->rd_GPASpaceModifications =
530 rrddim_add(p->st_gpa_space_modifications, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
537 - rrdlabels_add(p->st_gpa_space_modifications->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
531
532 p->st_attached_devices = rrdset_create_localhost(
533 "root_partition_attached_devices",
@@ -546,12 +539,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
539 "devices",
540 _COMMON_PLUGIN_NAME,
541 _COMMON_PLUGIN_MODULE_NAME,
549 - chart_priority++,
542 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES,
543 update_every,
544 RRDSET_TYPE_LINE);
545
546 p->rd_AttachedDevices = rrddim_add(p->st_attached_devices, "attached", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
554 - rrdlabels_add(p->st_attached_devices->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
547
548 p->st_deposited_pages = rrdset_create_localhost(
549 "root_partition_deposited_pages",
@@ -563,12 +555,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
555 "pages",
556 _COMMON_PLUGIN_NAME,
557 _COMMON_PLUGIN_MODULE_NAME,
566 - chart_priority++,
558 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES,
559 update_every,
560 RRDSET_TYPE_LINE);
561
562 p->rd_DepositedPages = rrddim_add(p->st_deposited_pages, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
571 - rrdlabels_add(p->st_deposited_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
563
564 p->st_DeviceDMAErrors = rrdset_create_localhost(
565 "root_partition_device_dma_errors",
@@ -580,13 +571,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
571 "requests",
572 _COMMON_PLUGIN_NAME,
573 _COMMON_PLUGIN_MODULE_NAME,
583 - chart_priority++,
574 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS,
575 update_every,
576 RRDSET_TYPE_LINE);
577
578 p->rd_DeviceDMAErrors =
579 rrddim_add(p->st_DeviceDMAErrors, "illegal_dma", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
589 - rrdlabels_add(p->st_DeviceDMAErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
580
581 p->st_DeviceInterruptErrors = rrdset_create_localhost(
582 "root_partition_device_interrupt_errors",
@@ -598,13 +588,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
588 "requests",
589 _COMMON_PLUGIN_NAME,
590 _COMMON_PLUGIN_MODULE_NAME,
601 - chart_priority++,
591 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS,
592 update_every,
593 RRDSET_TYPE_LINE);
594
595 p->rd_DeviceInterruptErrors =
596 rrddim_add(p->st_DeviceInterruptErrors, "illegal_interrupt", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
607 - rrdlabels_add(p->st_DeviceInterruptErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
597
598 p->st_DeviceInterruptThrottleEvents = rrdset_create_localhost(
599 "root_partition_device_interrupt_throttle_events",
@@ -616,14 +605,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
605 "events",
606 _COMMON_PLUGIN_NAME,
607 _COMMON_PLUGIN_MODULE_NAME,
619 - chart_priority++,
608 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS,
609 update_every,
610 RRDSET_TYPE_LINE);
611
612 p->rd_DeviceInterruptThrottleEvents =
613 rrddim_add(p->st_DeviceInterruptThrottleEvents, "throttling", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
625 - rrdlabels_add(
626 - p->st_DeviceInterruptThrottleEvents->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
614
615 p->st_IOΤLBFlushesSec = rrdset_create_localhost(
616 "root_partition_io_tlb_flush",
@@ -635,12 +622,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
622 "flushes/s",
623 _COMMON_PLUGIN_NAME,
624 _COMMON_PLUGIN_MODULE_NAME,
638 - chart_priority++,
625 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH,
626 update_every,
627 RRDSET_TYPE_LINE);
628
629 p->rd_IOΤLBFlushesSec = rrddim_add(p->st_IOΤLBFlushesSec, "gpa", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
643 - rrdlabels_add(p->st_IOΤLBFlushesSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
630
631 p->st_AddressSpaces = rrdset_create_localhost(
632 "root_partition_address_space",
@@ -652,12 +638,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
638 "address spaces",
639 _COMMON_PLUGIN_NAME,
640 _COMMON_PLUGIN_MODULE_NAME,
655 - chart_priority++,
641 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE,
642 update_every,
643 RRDSET_TYPE_LINE);
644
645 p->rd_AddressSpaces = rrddim_add(p->st_AddressSpaces, "address_spaces", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
660 - rrdlabels_add(p->st_AddressSpaces->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
646
647 p->st_VirtualTLBPages = rrdset_create_localhost(
648 "root_partition_virtual_tlb_pages",
@@ -669,12 +654,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
654 "pages",
655 _COMMON_PLUGIN_NAME,
656 _COMMON_PLUGIN_MODULE_NAME,
672 - chart_priority++,
657 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES,
658 update_every,
659 RRDSET_TYPE_LINE);
660
661 p->rd_VirtualTLBPages = rrddim_add(p->st_VirtualTLBPages, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
677 - rrdlabels_add(p->st_VirtualTLBPages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
662
663 p->st_VirtualTLBFlushEntiresSec = rrdset_create_localhost(
664 "root_partition_virtual_tlb_flush_entries",
@@ -686,13 +670,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
670 "flushes/s",
671 _COMMON_PLUGIN_NAME,
672 _COMMON_PLUGIN_MODULE_NAME,
689 - chart_priority++,
673 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES,
674 update_every,
675 RRDSET_TYPE_LINE);
676
677 p->rd_VirtualTLBFlushEntiresSec =
678 rrddim_add(p->st_VirtualTLBFlushEntiresSec, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
695 - rrdlabels_add(p->st_VirtualTLBFlushEntiresSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
679 }
680
681 // Set the data for each dimension
@@ -822,10 +805,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
805 HYPERV,
806 HYPERV".vm_storage_device_operations",
807 "VM storage device IOPS",
825 - "operations/sec",
808 + "operations/s",
809 _COMMON_PLUGIN_NAME,
810 _COMMON_PLUGIN_MODULE_NAME,
828 - chart_priority++,
811 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS,
812 update_every,
813 RRDSET_TYPE_LINE);
814
@@ -843,10 +826,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
826 HYPERV,
827 HYPERV".vm_storage_device_bytes",
828 "VM storage device IO",
846 - "bytes/sec",
829 + "bytes/s",
830 _COMMON_PLUGIN_NAME,
831 _COMMON_PLUGIN_MODULE_NAME,
849 - chart_priority++,
832 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES,
833 update_every,
834 RRDSET_TYPE_AREA);
835
@@ -864,10 +847,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
847 HYPERV,
848 HYPERV".vm_storage_device_errors",
849 "VM storage device errors",
867 - "errors/sec",
850 + "errors/s",
851 _COMMON_PLUGIN_NAME,
852 _COMMON_PLUGIN_MODULE_NAME,
870 - chart_priority++,
853 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS,
854 update_every,
855 RRDSET_TYPE_LINE);
856
@@ -1050,21 +1033,21 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1033 p->charts_created = true;
1034
1035 p->st_bytes = rrdset_create_localhost(
1053 - "vswitch_bytes",
1036 + "vswitch_traffic",
1037 windows_shared_buffer,
1038 NULL,
1039 HYPERV,
1057 - HYPERV ".vswitch_bytes",
1040 + HYPERV ".vswitch_traffic",
1041 "Virtual switch traffic",
1059 - "bytes/sec",
1042 + "kilobits/s",
1043 _COMMON_PLUGIN_NAME,
1044 _COMMON_PLUGIN_MODULE_NAME,
1062 - chart_priority++,
1045 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC,
1046 update_every,
1064 - RRDSET_TYPE_LINE);
1047 + RRDSET_TYPE_AREA);
1048
1066 - p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1067 - p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1049 + p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1050 + p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1051 rrdlabels_add(p->st_bytes->rrdlabels, "vswitch", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1052
1053 p->st_packets = rrdset_create_localhost(
@@ -1074,10 +1057,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1057 HYPERV,
1058 HYPERV ".vswitch_packets",
1059 "Virtual switch packets",
1077 - "packets/sec",
1060 + "packets/s",
1061 _COMMON_PLUGIN_NAME,
1062 _COMMON_PLUGIN_MODULE_NAME,
1080 - chart_priority++,
1063 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS,
1064 update_every,
1065 RRDSET_TYPE_LINE);
1066
@@ -1092,10 +1075,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1075 HYPERV,
1076 HYPERV ".vswitch_directed_packets",
1077 "Virtual switch directed packets",
1095 - "packets/sec",
1078 + "packets/s",
1079 _COMMON_PLUGIN_NAME,
1080 _COMMON_PLUGIN_MODULE_NAME,
1098 - chart_priority++,
1081 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS,
1082 update_every,
1083 RRDSET_TYPE_LINE);
1084
@@ -1112,10 +1095,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1095 HYPERV,
1096 HYPERV ".vswitch_broadcast_packets",
1097 "Virtual switch broadcast packets",
1115 - "packets/sec",
1098 + "packets/s",
1099 _COMMON_PLUGIN_NAME,
1100 _COMMON_PLUGIN_MODULE_NAME,
1118 - chart_priority++,
1101 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS,
1102 update_every,
1103 RRDSET_TYPE_LINE);
1104
@@ -1132,10 +1115,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1115 HYPERV,
1116 HYPERV ".vswitch_multicast_packets",
1117 "Virtual switch multicast packets",
1135 - "packets/sec",
1118 + "packets/s",
1119 _COMMON_PLUGIN_NAME,
1120 _COMMON_PLUGIN_MODULE_NAME,
1138 - chart_priority++,
1121 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS,
1122 update_every,
1123 RRDSET_TYPE_LINE);
1124
@@ -1152,10 +1135,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1135 HYPERV,
1136 HYPERV ".vswitch_dropped_packets",
1137 "Virtual switch dropped packets",
1155 - "drops/sec",
1138 + "drops/s",
1139 _COMMON_PLUGIN_NAME,
1140 _COMMON_PLUGIN_MODULE_NAME,
1158 - chart_priority++,
1141 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS,
1142 update_every,
1143 RRDSET_TYPE_LINE);
1144
@@ -1172,10 +1155,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1155 HYPERV,
1156 HYPERV ".vswitch_extensions_dropped_packets",
1157 "Virtual switch extensions dropped packets",
1175 - "drops/sec",
1158 + "drops/s",
1159 _COMMON_PLUGIN_NAME,
1160 _COMMON_PLUGIN_MODULE_NAME,
1178 - chart_priority++,
1161 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS,
1162 update_every,
1163 RRDSET_TYPE_LINE);
1164
@@ -1192,10 +1175,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1175 HYPERV,
1176 HYPERV ".vswitch_packets_flooded",
1177 "Virtual switch flooded packets",
1195 - "packets/sec",
1178 + "packets/s",
1179 _COMMON_PLUGIN_NAME,
1180 _COMMON_PLUGIN_MODULE_NAME,
1198 - chart_priority++,
1181 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED,
1182 update_every,
1183 RRDSET_TYPE_LINE);
1184
@@ -1209,10 +1192,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1192 HYPERV,
1193 HYPERV ".vswitch_learned_mac_addresses",
1194 "Virtual switch learned MAC addresses",
1212 - "mac addresses/sec",
1195 + "mac addresses/s",
1196 _COMMON_PLUGIN_NAME,
1197 _COMMON_PLUGIN_MODULE_NAME,
1215 - chart_priority++,
1198 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES,
1199 update_every,
1200 RRDSET_TYPE_LINE);
1201
@@ -1226,10 +1209,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1209 HYPERV,
1210 HYPERV ".vswitch_purged_mac_addresses",
1211 "Virtual switch purged MAC addresses",
1229 - "mac addresses/sec",
1212 + "mac addresses/s",
1213 _COMMON_PLUGIN_NAME,
1214 _COMMON_PLUGIN_MODULE_NAME,
1232 - chart_priority++,
1215 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES,
1216 update_every,
1217 RRDSET_TYPE_LINE);
1218
@@ -1279,17 +1262,58 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1262 return true;
1263 }
1264
1282 -
1265 struct hypervisor_network_adapter {
1266 bool collected_metadata;
1267 bool charts_created;
1268
1287 - RRDSET *st_packets;
1269 + RRDSET *st_dropped_packets;
1270 DEFINE_RD(DroppedPacketsOutgoingSec);
1271 DEFINE_RD(DroppedPacketsIncomingSec);
1272
1273 + RRDSET *st_send_receive_packets;
1274 + DEFINE_RD(PacketsSentSec);
1275 + DEFINE_RD(PacketsReceivedSec);
1276 +
1277 + RRDSET *st_send_receive_bytes;
1278 + DEFINE_RD(BytesSentSec);
1279 + DEFINE_RD(BytesReceivedSec);
1280 +
1281 + RRDSET *st_IPsecoffloadBytes;
1282 + DEFINE_RD(IPsecoffloadBytesReceivedSec);
1283 + DEFINE_RD(IPsecoffloadBytesSentSec);
1284 +
1285 + RRDSET *st_DirectedPackets;
1286 + DEFINE_RD(DirectedPacketsSentSec);
1287 + DEFINE_RD(DirectedPacketsReceivedSec);
1288 +
1289 + RRDSET *st_BroadcastPackets;
1290 + DEFINE_RD(BroadcastPacketsSentSec);
1291 + DEFINE_RD(BroadcastPacketsReceivedSec);
1292 +
1293 + RRDSET *st_MulticastPackets;
1294 + DEFINE_RD(MulticastPacketsSentSec);
1295 + DEFINE_RD(MulticastPacketsReceivedSec);
1296 +
1297 COUNTER_DATA DroppedPacketsOutgoingSec;
1298 COUNTER_DATA DroppedPacketsIncomingSec;
1299 +
1300 + COUNTER_DATA PacketsSentSec;
1301 + COUNTER_DATA PacketsReceivedSec;
1302 +
1303 + COUNTER_DATA BytesSentSec;
1304 + COUNTER_DATA BytesReceivedSec;
1305 +
1306 + COUNTER_DATA IPsecoffloadBytesReceivedSec;
1307 + COUNTER_DATA IPsecoffloadBytesSentSec;
1308 +
1309 + COUNTER_DATA DirectedPacketsSentSec;
1310 + COUNTER_DATA DirectedPacketsReceivedSec;
1311 +
1312 + COUNTER_DATA BroadcastPacketsSentSec;
1313 + COUNTER_DATA BroadcastPacketsReceivedSec;
1314 +
1315 + COUNTER_DATA MulticastPacketsSentSec;
1316 + COUNTER_DATA MulticastPacketsReceivedSec;
1317 };
1318
1319 // Initialize the keys for the root partition metrics
@@ -1297,6 +1321,21 @@ void initialize_hyperv_network_adapter_keys(struct hypervisor_network_adapter *p
1321 {
1322 p->DroppedPacketsOutgoingSec.key = "Dropped Packets Outgoing/sec";
1323 p->DroppedPacketsIncomingSec.key = "Dropped Packets Incoming/sec";
1324 +
1325 + p->PacketsSentSec.key = "Packets Sent/sec";
1326 + p->PacketsReceivedSec.key = "Packets Received/sec";
1327 +
1328 + p->BytesSentSec.key = "Bytes Sent/sec";
1329 + p->BytesReceivedSec.key = "Bytes Received/sec";
1330 +
1331 + p->IPsecoffloadBytesReceivedSec.key = "IPsec offload Bytes Receive/sec";
1332 + p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
1333 + p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
1334 + p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
1335 + p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
1336 + p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
1337 + p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
1338 + p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
1339 }
1340
1341 void dict_hyperv_network_adapter_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
@@ -1333,32 +1372,197 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1372 GET_INSTANCE_COUNTER(DroppedPacketsIncomingSec);
1373 GET_INSTANCE_COUNTER(DroppedPacketsOutgoingSec);
1374
1375 + GET_INSTANCE_COUNTER(PacketsReceivedSec);
1376 + GET_INSTANCE_COUNTER(PacketsSentSec);
1377 +
1378 + GET_INSTANCE_COUNTER(BytesReceivedSec);
1379 + GET_INSTANCE_COUNTER(BytesSentSec);
1380 +
1381 + GET_INSTANCE_COUNTER(IPsecoffloadBytesReceivedSec);
1382 + GET_INSTANCE_COUNTER(IPsecoffloadBytesSentSec);
1383 +
1384 + GET_INSTANCE_COUNTER(DirectedPacketsSentSec);
1385 + GET_INSTANCE_COUNTER(DirectedPacketsReceivedSec);
1386 +
1387 + GET_INSTANCE_COUNTER(BroadcastPacketsSentSec);
1388 + GET_INSTANCE_COUNTER(BroadcastPacketsReceivedSec);
1389 +
1390 + GET_INSTANCE_COUNTER(MulticastPacketsSentSec);
1391 + GET_INSTANCE_COUNTER(MulticastPacketsReceivedSec);
1392 +
1393 if (!p->charts_created) {
1394 p->charts_created = true;
1338 - p->st_packets = rrdset_create_localhost(
1395 + p->st_dropped_packets = rrdset_create_localhost(
1396 "vm_net_interface_packets_dropped",
1397 windows_shared_buffer,
1398 NULL,
1399 HYPERV,
1400 HYPERV".vm_net_interface_packets_dropped",
1401 "VM interface packets dropped",
1345 - "drops/sec",
1402 + "drops/s",
1403 + _COMMON_PLUGIN_NAME,
1404 + _COMMON_PLUGIN_MODULE_NAME,
1405 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED,
1406 + update_every,
1407 + RRDSET_TYPE_LINE);
1408 +
1409 + p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1410 + p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1411 +
1412 + rrdlabels_add(p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1413 +
1414 + p->st_send_receive_packets = rrdset_create_localhost(
1415 + "vm_net_interface_packets",
1416 + windows_shared_buffer,
1417 + NULL,
1418 + HYPERV,
1419 + HYPERV ".vm_net_interface_packets",
1420 + "VM interface packets",
1421 + "packets/s",
1422 + _COMMON_PLUGIN_NAME,
1423 + _COMMON_PLUGIN_MODULE_NAME,
1424 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
1425 + update_every,
1426 + RRDSET_TYPE_LINE);
1427 +
1428 + p->rd_PacketsReceivedSec = rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1429 + p->rd_PacketsSentSec = rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1430 +
1431 + rrdlabels_add(p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1432 +
1433 + p->st_send_receive_bytes = rrdset_create_localhost(
1434 + "vm_net_interface_traffic",
1435 + windows_shared_buffer,
1436 + NULL,
1437 + HYPERV,
1438 + HYPERV ".vm_net_interface_traffic",
1439 + "VM interface traffic",
1440 + "kilobits/s",
1441 + _COMMON_PLUGIN_NAME,
1442 + _COMMON_PLUGIN_MODULE_NAME,
1443 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
1444 + update_every,
1445 + RRDSET_TYPE_AREA);
1446 +
1447 + p->rd_BytesReceivedSec = rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1448 + p->rd_BytesSentSec = rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1449 + rrdlabels_add(p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1450 +
1451 + p->st_IPsecoffloadBytes = rrdset_create_localhost(
1452 + "vm_net_interface_ipsec_traffic",
1453 + windows_shared_buffer,
1454 + NULL,
1455 + HYPERV,
1456 + HYPERV ".vm_net_interface_ipsec_traffic",
1457 + "VM interface traffic",
1458 + "kilobits/s",
1459 + _COMMON_PLUGIN_NAME,
1460 + _COMMON_PLUGIN_MODULE_NAME,
1461 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC,
1462 + update_every,
1463 + RRDSET_TYPE_AREA);
1464 +
1465 + p->rd_IPsecoffloadBytesReceivedSec =
1466 + rrddim_add(p->st_IPsecoffloadBytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1467 + p->rd_IPsecoffloadBytesSentSec =
1468 + rrddim_add(p->st_IPsecoffloadBytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1469 + rrdlabels_add(
1470 + p->st_IPsecoffloadBytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1471 +
1472 + p->st_DirectedPackets = rrdset_create_localhost(
1473 + "vm_net_interface_directed_packets",
1474 + windows_shared_buffer,
1475 + NULL,
1476 + HYPERV,
1477 + HYPERV ".vm_net_interface_directed_packets",
1478 + "VM interface traffic",
1479 + "packets/s",
1480 + _COMMON_PLUGIN_NAME,
1481 + _COMMON_PLUGIN_MODULE_NAME,
1482 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS,
1483 + update_every,
1484 + RRDSET_TYPE_LINE);
1485 +
1486 + p->rd_DirectedPacketsReceivedSec =
1487 + rrddim_add(p->st_DirectedPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1488 + p->rd_DirectedPacketsSentSec =
1489 + rrddim_add(p->st_DirectedPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1490 + rrdlabels_add(
1491 + p->st_DirectedPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1492 +
1493 + p->st_BroadcastPackets = rrdset_create_localhost(
1494 + "vm_net_interface_broadcast_packets",
1495 + windows_shared_buffer,
1496 + NULL,
1497 + HYPERV,
1498 + HYPERV ".vm_net_interface_broadcast_packets",
1499 + "VM interface broadcast",
1500 + "packets/s",
1501 + _COMMON_PLUGIN_NAME,
1502 + _COMMON_PLUGIN_MODULE_NAME,
1503 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
1504 + update_every,
1505 + RRDSET_TYPE_LINE);
1506 +
1507 + p->rd_BroadcastPacketsReceivedSec =
1508 + rrddim_add(p->st_BroadcastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1509 + p->rd_BroadcastPacketsSentSec =
1510 + rrddim_add(p->st_BroadcastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1511 + rrdlabels_add(
1512 + p->st_BroadcastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1513 +
1514 + p->st_MulticastPackets = rrdset_create_localhost(
1515 + "vm_net_interface_multicast_packets",
1516 + windows_shared_buffer,
1517 + NULL,
1518 + HYPERV,
1519 + HYPERV ".vm_net_interface_multicast_packets",
1520 + "VM interface multicast",
1521 + "packets/s",
1522 _COMMON_PLUGIN_NAME,
1523 _COMMON_PLUGIN_MODULE_NAME,
1348 - chart_priority++,
1524 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS,
1525 update_every,
1526 RRDSET_TYPE_LINE);
1527
1352 - p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1353 - p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1528 + p->rd_MulticastPacketsReceivedSec =
1529 + rrddim_add(p->st_MulticastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1530 + p->rd_MulticastPacketsSentSec =
1531 + rrddim_add(p->st_MulticastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1532 + rrdlabels_add(
1533 + p->st_MulticastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1534 +
1535
1355 - rrdlabels_add(p->st_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1536 }
1537
1358 - SETP_DIM_VALUE(st_packets, DroppedPacketsIncomingSec);
1359 - SETP_DIM_VALUE(st_packets, DroppedPacketsOutgoingSec);
1538 + SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsIncomingSec);
1539 + SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsOutgoingSec);
1540
1361 - rrdset_done(p->st_packets);
1541 + SETP_DIM_VALUE(st_send_receive_packets, PacketsReceivedSec);
1542 + SETP_DIM_VALUE(st_send_receive_packets, PacketsSentSec);
1543 +
1544 + SETP_DIM_VALUE(st_send_receive_bytes, BytesReceivedSec);
1545 + SETP_DIM_VALUE(st_send_receive_bytes, BytesSentSec);
1546 +
1547 + SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesReceivedSec);
1548 + SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesSentSec);
1549 +
1550 + SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsSentSec);
1551 + SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsReceivedSec);
1552 +
1553 + SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsSentSec);
1554 + SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsReceivedSec);
1555 +
1556 + SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsSentSec);
1557 + SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsReceivedSec);
1558 +
1559 + rrdset_done(p->st_IPsecoffloadBytes);
1560 + rrdset_done(p->st_DirectedPackets);
1561 + rrdset_done(p->st_BroadcastPackets);
1562 + rrdset_done(p->st_MulticastPackets);
1563 + rrdset_done(p->st_send_receive_bytes);
1564 + rrdset_done(p->st_send_receive_packets);
1565 + rrdset_done(p->st_dropped_packets);
1566 }
1567 return true;
1568 }
@@ -1375,9 +1579,17 @@ struct hypervisor_processor {
1579 DEFINE_RD(HypervisorRunTime);
1580 DEFINE_RD(RemoteRunTime);
1581
1582 + RRDSET *st_HypervisorProcessorTotal;
1583 + DEFINE_RD(TotalRunTime);
1584 +
1585 COUNTER_DATA GuestRunTime;
1586 COUNTER_DATA HypervisorRunTime;
1587 COUNTER_DATA RemoteRunTime;
1588 + COUNTER_DATA TotalRunTime;
1589 + collected_number GuestRunTime_total;
1590 + collected_number HypervisorRunTime_total;
1591 + collected_number RemoteRunTime_total;
1592 + collected_number TotalRunTime_total;
1593 };
1594
1595
@@ -1386,6 +1598,11 @@ void initialize_hyperv_processor_keys(struct hypervisor_processor *p)
1598 p->GuestRunTime.key = "% Guest Run Time";
1599 p->HypervisorRunTime.key = "% Hypervisor Run Time";
1600 p->RemoteRunTime.key = "% Remote Run Time";
1601 + p->TotalRunTime.key = "% Total Run Time";
1602 + p->GuestRunTime_total = 0;
1603 + p->HypervisorRunTime_total = 0;
1604 + p->RemoteRunTime_total = 0;
1605 + p->TotalRunTime_total = 0;
1606 }
1607
1608 void dict_hyperv_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
@@ -1410,9 +1627,13 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1627
1628 get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1629
1413 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
1630 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1631 continue;
1632
1633 + char *vm = strchr(windows_shared_buffer, ':');
1634 + if (vm)
1635 + *vm = '\0';
1636 +
1637 struct hypervisor_processor *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
1638
1639 if (!p->collected_metadata) {
@@ -1422,39 +1643,77 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1643 GET_INSTANCE_COUNTER(GuestRunTime);
1644 GET_INSTANCE_COUNTER(HypervisorRunTime);
1645 GET_INSTANCE_COUNTER(RemoteRunTime);
1646 + GET_INSTANCE_COUNTER(TotalRunTime);
1647
1648 if (!p->charts_created) {
1649 p->charts_created = true;
1428 - p->st_HypervisorProcessor = rrdset_create_localhost(
1650 + p->st_HypervisorProcessorTotal = rrdset_create_localhost(
1651 "vm_cpu_usage",
1652 windows_shared_buffer,
1653 NULL,
1654 HYPERV,
1655 HYPERV ".vm_cpu_usage",
1434 - "VM CPU usage (100% = 1 core)",
1656 + "VM CPU usage",
1657 "percentage",
1658 _COMMON_PLUGIN_NAME,
1659 _COMMON_PLUGIN_MODULE_NAME,
1438 - chart_priority++,
1660 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE,
1661 update_every,
1662 RRDSET_TYPE_STACKED);
1663
1664 + p->rd_TotalRunTime =
1665 + rrddim_add(p->st_HypervisorProcessorTotal, "usage", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1666 + rrdlabels_add(p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1667 +
1668 + p->st_HypervisorProcessor = rrdset_create_localhost(
1669 + "vm_cpu_usage_by_run_context",
1670 + windows_shared_buffer,
1671 + NULL,
1672 + HYPERV,
1673 + HYPERV ".vm_cpu_usage_by_run_context",
1674 + "VM CPU usage by run context",
1675 + "percentage",
1676 + _COMMON_PLUGIN_NAME,
1677 + _COMMON_PLUGIN_MODULE_NAME,
1678 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
1679 + update_every,
1680 + RRDSET_TYPE_STACKED);
1681 +
1682 p->rd_GuestRunTime =
1443 - rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
1683 + rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1684 p->rd_HypervisorRunTime =
1445 - rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
1685 + rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1686 p->rd_RemoteRunTime =
1447 - rrddim_add(p->st_HypervisorProcessor, "remote", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
1687 + rrddim_add(p->st_HypervisorProcessor, "remote", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1688
1689 rrdlabels_add(p->st_HypervisorProcessor->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1690 }
1691
1452 - SETP_DIM_VALUE(st_HypervisorProcessor, GuestRunTime);
1453 - SETP_DIM_VALUE(st_HypervisorProcessor, HypervisorRunTime);
1454 - SETP_DIM_VALUE(st_HypervisorProcessor, RemoteRunTime);
1692 + p->GuestRunTime_total += (collected_number)p->GuestRunTime.current.Data;
1693 + p->HypervisorRunTime_total += (collected_number)p->HypervisorRunTime.current.Data;
1694 + p->RemoteRunTime_total += (collected_number)p->RemoteRunTime.current.Data;
1695 + p->TotalRunTime_total += (collected_number)p->TotalRunTime.current.Data;
1696 + }
1697
1456 - rrdset_done(p->st_HypervisorProcessor);
1698 + {
1699 + struct hypervisor_processor *p;
1700 + dfe_start_read(item->instance, p) {
1701 + rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number) p->HypervisorRunTime_total);
1702 + rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number) p->GuestRunTime_total);
1703 + rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number) p->RemoteRunTime_total);
1704 + rrdset_done(p->st_HypervisorProcessor);
1705 +
1706 + rrddim_set_by_pointer(p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number) p->TotalRunTime_total);
1707 + rrdset_done(p->st_HypervisorProcessorTotal);
1708 +
1709 + p->GuestRunTime_total = 0;
1710 + p->HypervisorRunTime_total = 0;
1711 + p->RemoteRunTime_total = 0;
1712 + p->TotalRunTime_total = 0;
1713 + }
1714 + dfe_done(p);
1715 }
1716 +
1717 return true;
1718 }
1719