Skip to content

Commit

Permalink
Merge branch 'main' of github.com:performancecopilot/pcp
Browse files Browse the repository at this point in the history
  • Loading branch information
natoscott committed Jul 3, 2024
2 parents ff08c9b + c298c42 commit 4d2f2b2
Show file tree
Hide file tree
Showing 10 changed files with 234 additions and 18 deletions.
19 changes: 9 additions & 10 deletions qa/1595
Original file line number Diff line number Diff line change
Expand Up @@ -37,22 +37,21 @@ _filter()
root=$tmp.root
export LINUX_STATSPATH=$root
pmda="60,$PCP_PMDAS_DIR/linux/pmda_linux.so,linux_init"
memmetrics=`pminfo mem.vmmemctl | LC_COLLATE=POSIX sort`

for mem in $here/linux/sysfs-vmmemctl-*
memmetrics=`pminfo mem.vmmemctl hyperv.balloon | LC_COLLATE=POSIX sort`

for mem in $here/linux/sysfs-*-???
do
base=`basename $mem`
file=`echo $base | sed -e 's/^sysfs-//g' -e 's/-...$//g'`

rm -fr $root
mkdir -p $root/sys/kernel/debug || _fail "root in use when processing $mem"
cp $mem $root/sys/kernel/debug/vmmemctl
cp $mem $root/sys/kernel/debug/$file
cd $root
base=`basename $mem`

echo "== Valgrind checking vmmemctl metric metadata - $base"
_run_valgrind pminfo -L -K clear -K add,$pmda -dmtT $memmetrics 2>&1 \
| _filter

echo "== Valgrind checking vmmemctl metric values - $base"
_run_valgrind pminfo -L -K clear -K add,$pmda -fm $memmetrics 2>&1 \
echo "== Valgrind checking $file metric values and metadata - $base"
_run_valgrind pminfo -L -K clear -K add,$pmda -dfmtT $memmetrics 2>&1 \
| _filter

echo && echo "== done" && echo
Expand Down
109 changes: 103 additions & 6 deletions qa/1595.out
Original file line number Diff line number Diff line change
@@ -1,38 +1,135 @@
QA output created by 1595
== Valgrind checking vmmemctl metric metadata - sysfs-vmmemctl-001
== Valgrind checking hv-balloon metric values and metadata - sysfs-hv-balloon-001
=== std out ===

hyperv.balloon.added PMID: 60.35.9 [Hyper-V balloon memory pages added in bytes]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory pages added in bytes
value 0

hyperv.balloon.ballooned PMID: 60.35.10 [Hyper-V balloon memory given back to host]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory given back to host
value 13421772800

hyperv.balloon.onlined PMID: 60.35.8 [Hyper-V balloon memory onlined after hot adding]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory onlined after hot adding
value 0

hyperv.balloon.pagesize PMID: 60.35.7 [Hyper-V balloon memory page size in bytes]
Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory page size in bytes
value 4096

hyperv.balloon.state PMID: 60.35.6 [State of Hyper-V memory ballooning]
Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: none
Help:
State of Hyper-V memory ballooning
value 1

hyperv.balloon.total_committed PMID: 60.35.11 [Total committed Hyper-V balloon memory]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Total committed Hyper-V balloon memory
value 16491409408

mem.vmmemctl.current PMID: 60.35.4 [Virtual machine balloon memory actually allocated]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Virtual machine balloon memory actually allocated
value 0

mem.vmmemctl.target PMID: 60.35.5 [Virtual machine balloon memory allocation target size]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Virtual machine balloon memory allocation target size
value 0
=== std err ===
=== filtered valgrind report ===
Memcheck, a memory error detector
Command: pminfo -L -K clear -K add,60,PCP_PMDAS_DIR/linux/pmda_linux.so,linux_init -dmtT mem.vmmemctl.current mem.vmmemctl.target
Command: pminfo -L -K clear -K add,60,PCP_PMDAS_DIR/linux/pmda_linux.so,linux_init -dfmtT hyperv.balloon.added hyperv.balloon.ballooned hyperv.balloon.onlined hyperv.balloon.pagesize hyperv.balloon.state hyperv.balloon.total_committed mem.vmmemctl.current mem.vmmemctl.target
LEAK SUMMARY:
definitely lost: 0 bytes in 0 blocks
indirectly lost: 0 bytes in 0 blocks
ERROR SUMMARY: 0 errors from 0 contexts ...
== Valgrind checking vmmemctl metric values - sysfs-vmmemctl-001

== done

== Valgrind checking vmmemctl metric values and metadata - sysfs-vmmemctl-001
=== std out ===

mem.vmmemctl.current PMID: 60.35.4
hyperv.balloon.added PMID: 60.35.9 [Hyper-V balloon memory pages added in bytes]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory pages added in bytes
value 0

hyperv.balloon.ballooned PMID: 60.35.10 [Hyper-V balloon memory given back to host]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory given back to host
value 0

hyperv.balloon.onlined PMID: 60.35.8 [Hyper-V balloon memory onlined after hot adding]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory onlined after hot adding
value 0

hyperv.balloon.pagesize PMID: 60.35.7 [Hyper-V balloon memory page size in bytes]
Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Hyper-V balloon memory page size in bytes
value 0

hyperv.balloon.state PMID: 60.35.6 [State of Hyper-V memory ballooning]
Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: none
Help:
State of Hyper-V memory ballooning
value 0

hyperv.balloon.total_committed PMID: 60.35.11 [Total committed Hyper-V balloon memory]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Total committed Hyper-V balloon memory
value 0

mem.vmmemctl.current PMID: 60.35.4 [Virtual machine balloon memory actually allocated]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Virtual machine balloon memory actually allocated
value 4194304000

mem.vmmemctl.target PMID: 60.35.5
mem.vmmemctl.target PMID: 60.35.5 [Virtual machine balloon memory allocation target size]
Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: byte
Help:
Virtual machine balloon memory allocation target size
value 4193390592
=== std err ===
=== filtered valgrind report ===
Memcheck, a memory error detector
Command: pminfo -L -K clear -K add,60,PCP_PMDAS_DIR/linux/pmda_linux.so,linux_init -fm mem.vmmemctl.current mem.vmmemctl.target
Command: pminfo -L -K clear -K add,60,PCP_PMDAS_DIR/linux/pmda_linux.so,linux_init -dfmtT hyperv.balloon.added hyperv.balloon.ballooned hyperv.balloon.onlined hyperv.balloon.pagesize hyperv.balloon.state hyperv.balloon.total_committed mem.vmmemctl.current mem.vmmemctl.target
LEAK SUMMARY:
definitely lost: 0 bytes in 0 blocks
indirectly lost: 0 bytes in 0 blocks
Expand Down
1 change: 1 addition & 0 deletions qa/common.filter
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,7 @@ _filter_top_pmns()
-e '/^ gluster /d' \
-e '/^ hippi /d' \
-e '/^ hotproc /d' \
-e '/^ hyperv /d' \
-e '/^ hw /d' \
-e '/^ infmxping /d' \
-e '/^ informix /d' \
Expand Down
9 changes: 9 additions & 0 deletions qa/linux/sysfs-hv-balloon-001
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
host_version : 2.0
capabilities : enabled hot_add
state : 1 (Initialized)
page_size : 4096
pages_added : 0
pages_onlined : 0
pages_ballooned : 3276800
total_pages_committed : 4026223
max_dynamic_page_count: 4706304
7 changes: 7 additions & 0 deletions src/pmdas/linux/help
Original file line number Diff line number Diff line change
Expand Up @@ -2189,6 +2189,13 @@ it may not persist in future kernel versions.
@ sysfs.module.zswap.max_pool_percent percentage of memory compressed pool can use
@ sysfs.module.zswap.enabled kernel string indicating zswap module state

@ hyperv.balloon.state State of Hyper-V memory ballooning
@ hyperv.balloon.pagesize Hyper-V balloon memory page size in bytes
@ hyperv.balloon.added Hyper-V balloon memory pages added in bytes
@ hyperv.balloon.onlined Hyper-V balloon memory onlined after hot adding
@ hyperv.balloon.ballooned Hyper-V balloon memory given back to host
@ hyperv.balloon.total_committed Total committed Hyper-V balloon memory

@ hinv.ntape number of Linux scsi tape devices
@ tape.dev.in_flight number of I/Os currently outstanding to this tape device
@ tape.dev.io_ns cumulative amount of time spent waiting for all I/O to complete to tape device
Expand Down
1 change: 1 addition & 0 deletions src/pmdas/linux/linux.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ enum {
REFRESH_SYSFS_KERNEL_EXTFRAG,
REFRESH_SYSFS_MODULE_ZSWAP,
REFRESH_SYSFS_KERNEL_VMMEMCTL,
REFRESH_SYSFS_KERNEL_HVBALLOON,

NUM_REFRESHES /* one more than highest refresh index */
};
Expand Down
38 changes: 38 additions & 0 deletions src/pmdas/linux/pmda.c
Original file line number Diff line number Diff line change
Expand Up @@ -6728,6 +6728,36 @@ static pmdaMetric metrictab[] = {
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,5), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, },

/* hyperv.balloon.state */
{ &sysfs_kernel.hv_balloon_state,
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,6), PM_TYPE_U32, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, },

/* hyperv.balloon.pagesize */
{ &sysfs_kernel.hv_balloon_pagesize,
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,7), PM_TYPE_U32, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, },

/* hyperv.balloon.added */
{ &sysfs_kernel.hv_balloon_added,
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,8), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, },

/* hyperv.balloon.onlined */
{ &sysfs_kernel.hv_balloon_onlined,
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,9), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, },

/* hyperv.balloon.ballooned */
{ &sysfs_kernel.hv_balloon_ballooned,
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,10), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, },

/* hyperv.balloon.total_committed */
{ &sysfs_kernel.hv_balloon_total_committed,
{ PMDA_PMID(CLUSTER_SYSFS_KERNEL,11), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, },

/*
* /proc/interrupts clusters
*/
Expand Down Expand Up @@ -10241,6 +10271,14 @@ linux_fetch(int numpmid, pmID pmidlist[], pmResult **resp, pmdaExt *pmda)
case 5: /* mem.vmmemctl.target */
need_refresh[REFRESH_SYSFS_KERNEL_VMMEMCTL]++;
break;
case 6: /* hyperv.balloon.state */
case 7: /* hyperv.balloon.pagesize */
case 8: /* hyperv.balloon.added */
case 9: /* hyperv.balloon.onlined */
case 10: /* hyperv.balloon.ballooned */
case 11: /* hyperv.balloon.total_committed */
need_refresh[REFRESH_SYSFS_KERNEL_HVBALLOON]++;
break;
}
break;

Expand Down
15 changes: 15 additions & 0 deletions src/pmdas/linux/root_linux
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ root {
tty
zram
fchost
hyperv
}

hinv {
Expand Down Expand Up @@ -639,6 +640,7 @@ mem {
hugepages
vmmemctl
}

mem.vmmemctl {
current 60:35:4
target 60:35:5
Expand Down Expand Up @@ -1560,6 +1562,19 @@ fchost.out {
bytes 60:91:3
}

hyperv {
balloon
}

hyperv.balloon {
state 60:35:6
pagesize 60:35:7
added 60:35:9
onlined 60:35:8
ballooned 60:35:10
total_committed 60:35:11
}

filesys {
capacity 60:5:1
used 60:5:2
Expand Down
36 changes: 36 additions & 0 deletions src/pmdas/linux/sysfs_kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,5 +137,41 @@ refresh_sysfs_kernel(sysfs_kernel_t *sk, int *need_refresh)
}
}

if (need_refresh[REFRESH_SYSFS_KERNEL_HVBALLOON]) {
unsigned long long value;
char name[64];
FILE *fp;

pmsprintf(buf, sizeof(buf), "%s/%s/debug/hv-balloon",
linux_statspath, "sys/kernel");
if ((fp = fopen(buf, "r")) != NULL) {

while (fgets(buf, sizeof(buf), fp) != NULL) {
n = sscanf(buf, "%s : %llu", name, &value);
if (n != 2)
continue;
else if (strcmp(name, "state") == 0)
sk->hv_balloon_state = value;
else if (strcmp(name, "page_size") == 0)
sk->hv_balloon_pagesize = value;
else if (strcmp(name, "pages_added") == 0)
sk->hv_balloon_added = value;
else if (strcmp(name, "pages_onlined") == 0)
sk->hv_balloon_onlined = value;
else if (strcmp(name, "pages_ballooned") == 0)
sk->hv_balloon_ballooned = value;
else if (strcmp(name, "total_pages_committed") == 0)
sk->hv_balloon_total_committed = value;
}
value = sk->hv_balloon_pagesize ? /* fallback to kernel pagesize */
sk->hv_balloon_pagesize : (1 << _pm_pageshift);
sk->hv_balloon_added *= value;
sk->hv_balloon_onlined *= value;
sk->hv_balloon_ballooned *= value;
sk->hv_balloon_total_committed *= value;
fclose(fp);
}
}

return 0;
}
17 changes: 15 additions & 2 deletions src/pmdas/linux/sysfs_kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,25 @@
#define SYSFS_KERNEL_H

typedef struct {
uint64_t uevent_seqnum; /* /sys/kernel/uevent_seqnum */
/* /sys/kernel/uevent_seqnum */
uint64_t uevent_seqnum;
int valid_uevent_seqnum;

/* /sys/module/zswap */
uint32_t zswap_max_pool_percent;
char zswap_enabled[4];
uint64_t vmmemctl_current; /* /sys/kernel/debug/vmmemctl */

/* /sys/kernel/debug/vmmemctl */
uint64_t vmmemctl_current;
uint64_t vmmemctl_target;

/* /sys/kernel/debug/hv-balloon */
uint32_t hv_balloon_state;
uint32_t hv_balloon_pagesize;
uint64_t hv_balloon_added;
uint64_t hv_balloon_onlined;
uint64_t hv_balloon_ballooned;
uint64_t hv_balloon_total_committed;
} sysfs_kernel_t;

/* refresh sysfs_kernel */
Expand Down

0 comments on commit 4d2f2b2

Please sign in to comment.