pcp
[Top] [All Lists]

[PATCH] pmda/linux: Update max bandwidth iff the .config changes

To: pcp@xxxxxxxxxxx
Subject: [PATCH] pmda/linux: Update max bandwidth iff the .config changes
From: Hemant Kumar <hemant@xxxxxxxxxxxxxxxxxx>
Date: Mon, 16 May 2016 02:41:37 +0530
Cc: nathans@xxxxxxxxxx
Delivered-to: pcp@xxxxxxxxxxx
Add a check for max memory bandwidth.conf file against the last modified
time and accordingly update the metric values.

Signed-off-by: Hemant Kumar <hemant@xxxxxxxxxxxxxxxxxx>
---
 src/pmdas/linux/mem_bandwidth.c | 24 ++++++++++++++++++++++++
 src/pmdas/linux/numa_meminfo.c  |  3 ++-
 src/pmdas/linux/numa_meminfo.h  |  1 +
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/pmdas/linux/mem_bandwidth.c b/src/pmdas/linux/mem_bandwidth.c
index 3827f85..d9b92e2 100644
--- a/src/pmdas/linux/mem_bandwidth.c
+++ b/src/pmdas/linux/mem_bandwidth.c
@@ -18,6 +18,9 @@
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
 
 #include "pmapi.h"
 #include "impl.h"
@@ -31,6 +34,27 @@
 #define SUPP_VERSION "1.0"
 #define MAX_NAME_LEN 512
 
+/*
+ * Check whether bandwidth.conf has changed
+ */
+int bandwidth_conf_changed(char *conf_path)
+{
+    struct stat stat_buf;
+    static time_t last_mtime;
+
+    if (stat(conf_path, &stat_buf) != 0) {
+       fprintf(stderr, "Cannot stat %s\n", conf_path);
+       return 1;
+    }
+
+    if (stat_buf.st_mtime != last_mtime) {
+       last_mtime = stat_buf.st_mtime;
+       return 1;
+    }
+
+    return 0;
+}
+
 static void skim_through_whitespace(char *start_ptr, char *end_ptr)
 {
     while ((start_ptr != end_ptr) && isspace(*start_ptr))
diff --git a/src/pmdas/linux/numa_meminfo.c b/src/pmdas/linux/numa_meminfo.c
index 2e9c279..3ff0a29 100644
--- a/src/pmdas/linux/numa_meminfo.c
+++ b/src/pmdas/linux/numa_meminfo.c
@@ -141,7 +141,8 @@ int refresh_numa_meminfo(numa_meminfo_t *numa_meminfo, 
proc_cpuinfo_t *proc_cpui
     }
 
     /* Read NUMA bandwidth info from the bandwidth.conf file (optional) */
-    get_memory_bandwidth_conf(numa_meminfo, idp->it_numinst);
+    if (bandwidth_conf_changed(numa_meminfo->bandwidth_conf))
+       get_memory_bandwidth_conf(numa_meminfo, idp->it_numinst);
 
     return 0;
 }
diff --git a/src/pmdas/linux/numa_meminfo.h b/src/pmdas/linux/numa_meminfo.h
index aa5a79f..f8244ac 100644
--- a/src/pmdas/linux/numa_meminfo.h
+++ b/src/pmdas/linux/numa_meminfo.h
@@ -32,3 +32,4 @@ typedef struct {
 
 extern int refresh_numa_meminfo(numa_meminfo_t *, proc_cpuinfo_t *, 
proc_stat_t *);
 extern int get_memory_bandwidth_conf(numa_meminfo_t *, int);
+extern int bandwidth_conf_changed(char *conf_path);
-- 
1.9.3

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] pmda/linux: Update max bandwidth iff the .config changes, Hemant Kumar <=