]> granicus.if.org Git - sysstat/commitdiff
sadf: PCP: Add support for A_PAGE activity
authorSebastien GODARD <sysstat@users.noreply.github.com>
Wed, 20 Mar 2019 16:07:33 +0000 (17:07 +0100)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Wed, 20 Mar 2019 16:07:33 +0000 (17:07 +0100)
Add metrics displayed by "sar -B" (paging statistics) to PCP archive.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
activity.c
pcp_def_metrics.c
pcp_def_metrics.h
pcp_stats.c
pcp_stats.h
sadf_misc.c

index fb711bca503577581f42b455eb283ffded26d7ca..f41f19bec71f9dc52a9f5bbcc23b1ada00727ca4 100644 (file)
@@ -278,6 +278,7 @@ struct activity paging_act = {
        .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",
index 6737d8b9443841de96a685010ea7128bff3c2886..61f71e3e0828ea218b08672539c9d86ae53d2e45 100644 (file)
@@ -203,6 +203,48 @@ void pcp_def_swap_metrics(void)
 #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.
index b2fcc764b6d34c99d1b3b4c35df8be4e76573ec9..f9c22645ca680ef8fa0696dd4a30c10d6d8a287e 100644 (file)
@@ -16,6 +16,7 @@ void pcp_def_cpu_metrics(struct activity *);
 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);
index 57a91f3be82063b1b272ae979d90d888d7c0c580..1e82a602596324427e6928947ef68334062459c5 100644 (file)
@@ -267,6 +267,60 @@ __print_funct_t pcp_print_swap_stats(struct activity *a, int curr, unsigned long
 #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.
index b16823562a8b9633579b99ef4b6699238e9fe361..01e2074b311a7d749cb7189a114c24798106f5aa 100644 (file)
@@ -21,6 +21,8 @@ __print_funct_t pcp_print_irq_stats
        (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
index 3ce164356eec1902a924cb9a6e63da2a47722a5b..0147a37b5ff8b1f545be19dc2306cf1a56ddd81b 100644 (file)
@@ -513,6 +513,10 @@ __printf_funct_t print_pcp_statistics(int *tab, int action, struct activity *act
                                        pcp_def_swap_metrics();
                                        break;
 
+                               case A_PAGE:
+                                       pcp_def_paging_metrics();
+                                       break;
+
                                case A_IO:
                                        pcp_def_io_metrics();
                                        break;