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
|