projects
/
collectd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
084d0fd
)
Increase turbostat_read() resiliency when sched_getaffinity() fails
author
Pablo Llopis
<pablo.llopis@cern.ch>
Fri, 15 Dec 2017 13:57:33 +0000
(14:57 +0100)
committer
Pavel Rochnyack
<pavel2000@ngs.ru>
Sat, 27 Oct 2018 13:21:25 +0000
(20:21 +0700)
src/turbostat.c
patch
|
blob
|
history
diff --git
a/src/turbostat.c
b/src/turbostat.c
index
49c3968
..
31d458d
100644
(file)
--- a/
src/turbostat.c
+++ b/
src/turbostat.c
@@
-1456,6
+1456,7
@@
err:
static int turbostat_read(void) {
int ret;
static int turbostat_read(void) {
int ret;
+ int sched_getaffinity_ret;
if (!allocated) {
if ((ret = setup_all_buffers()) < 0)
if (!allocated) {
if ((ret = setup_all_buffers()) < 0)
@@
-1473,12
+1474,12
@@
static int turbostat_read(void) {
}
}
}
}
- /*
Saving the scheduling affinity, as it will be modified by get_counters */
- if (sched_getaffinity(0, cpu_saved_affinity_setsize,
- cpu_saved_affinity_set) != 0) {
- ERROR("turbostat plugin: Unable to save the CPU affinity: %s", STRERRNO);
- return -1;
- }
+ /*
Try to save the scheduling affinity, as it will be modified by
+ * get_counters. If the call is unsuccessfull, this will be handled later
+ * on by restoring affinity to cpu_present_set instead.
+ */
+ sched_getaffinity_ret = sched_getaffinity(0, cpu_saved_affinity_setsize,
+ cpu_saved_affinity_set);
if (!initialized) {
if ((ret = for_all_cpus(get_counters, EVEN_COUNTERS)) < 0)
if (!initialized) {
if ((ret = for_all_cpus(get_counters, EVEN_COUNTERS)) < 0)
@@
-1518,8
+1519,16
@@
out:
* This might fail if the number of CPU changed, but we can't do anything in
* that case..
*/
* This might fail if the number of CPU changed, but we can't do anything in
* that case..
*/
- (void)sched_setaffinity(0, cpu_saved_affinity_setsize,
- cpu_saved_affinity_set);
+ if (sched_getaffinity_ret == 0)
+ (void)sched_setaffinity(0, cpu_saved_affinity_setsize,
+ cpu_saved_affinity_set);
+ else {
+ /*
+ * The previous call to sched_getaffinity() failed, so
+ * reset the affinity to all present cpus.
+ */
+ (void)sched_setaffinity(0, cpu_present_setsize, cpu_present_set);
+ }
return ret;
}
return ret;
}