Add metrics displayed by "sar -B" (paging statistics) to PCP archive.
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
.f_json_print = json_print_paging_stats,
.f_svg_print = svg_print_paging_stats,
.f_raw_print = raw_print_paging_stats,
+ .f_pcp_print = pcp_print_paging_stats,
.f_count_new = NULL,
.item_list = NULL,
.desc = "Paging activity",
#endif /* HAVE_PCP */
}
+/*
+ ***************************************************************************
+ * Define PCP metrics for paging statistics.
+ ***************************************************************************
+ */
+void pcp_def_paging_metrics(void)
+{
+#ifdef HAVE_PCP
+ pmiAddMetric("mem.vmstat.pgpgin",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgpgout",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgfault",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgmajfault",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgfree",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgscank",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgscand",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("mem.vmstat.pgsteal",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+#endif /* HAVE_PCP */
+}
+
/*
***************************************************************************
* Define PCP metrics for I/O and transfer rate statistics.
void pcp_def_pcsw_metrics(void);
void pcp_def_irq_metrics(struct activity *);
void pcp_def_swap_metrics(void);
+void pcp_def_paging_metrics(void);
void pcp_def_io_metrics(void);
void pcp_def_memory_metrics(struct activity *);
void pcp_def_queue_metrics(void);
#endif /* HAVE_PCP */
}
+/*
+ ***************************************************************************
+ * Display paging statistics in PCP format.
+ *
+ * IN:
+ * @a Activity structure with statistics.
+ * @curr Index in array for current sample statistics.
+ * @itv Interval of time in 1/100th of a second.
+ * @record_hdr Record header for current sample.
+ ***************************************************************************
+ */
+__print_funct_t pcp_print_paging_stats(struct activity *a, int curr, unsigned long long itv,
+ struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+ char buf[64];
+ struct stats_paging
+ *spc = (struct stats_paging *) a->buf[curr],
+ *spp = (struct stats_paging *) a->buf[!curr];
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgpgin, spc->pgpgin, itv));
+ pmiPutValue("mem.vmstat.pgpgin", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgpgout, spc->pgpgout, itv));
+ pmiPutValue("mem.vmstat.pgpgout", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgfault, spc->pgfault, itv));
+ pmiPutValue("mem.vmstat.pgfault", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgmajfault, spc->pgmajfault, itv));
+ pmiPutValue("mem.vmstat.pgmajfault", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgfree, spc->pgfree, itv));
+ pmiPutValue("mem.vmstat.pgfree", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgscan_kswapd, spc->pgscan_kswapd, itv));
+ pmiPutValue("mem.vmstat.pgscank", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgscan_direct, spc->pgscan_direct, itv));
+ pmiPutValue("mem.vmstat.pgscand", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(spp->pgsteal, spc->pgsteal, itv));
+ pmiPutValue("mem.vmstat.pgsteal", NULL, buf);
+#endif /* HAVE_PCP */
+}
+
/*
***************************************************************************
* Display I/O and transfer rate statistics in PCP format.
(struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_swap_stats
(struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_paging_stats
+ (struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_io_stats
(struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_memory_stats
pcp_def_swap_metrics();
break;
+ case A_PAGE:
+ pcp_def_paging_metrics();
+ break;
+
case A_IO:
pcp_def_io_metrics();
break;