int store_loadavg_fixed_point(unsigned long i, unsigned long f, loadavg_t *ret) {
assert(ret);
- if (i >= (~0UL << PRECISION_BITS))
+ if (i >= (~0UL << LOADAVG_PRECISION_BITS))
return -ERANGE;
- i = i << PRECISION_BITS;
- f = DIV_ROUND_UP((f << PRECISION_BITS), 100);
+ i = i << LOADAVG_PRECISION_BITS;
+ f = DIV_ROUND_UP((f << LOADAVG_PRECISION_BITS), 100);
- if (f >= FIXED_POINT_1_0)
+ if (f >= LOADAVG_FIXED_POINT_1_0)
return -ERANGE;
*ret = i | f;
/* Implement floating point using fixed integers, to improve performance when
* calculating load averages. These macros can be used to extract the integer
* and decimal parts of a value. */
-#define PRECISION_BITS 11
-#define FIXED_POINT_1_0 (1 << PRECISION_BITS)
-#define INT_SIDE(x) ((x) >> PRECISION_BITS)
-#define DECIMAL_SIDE(x) INT_SIDE(((x) & (FIXED_POINT_1_0 - 1)) * 100)
+#define LOADAVG_PRECISION_BITS 11
+#define LOADAVG_FIXED_POINT_1_0 (1 << LOADAVG_PRECISION_BITS)
+#define LOADAVG_INT_SIDE(x) ((x) >> LOADAVG_PRECISION_BITS)
+#define LOADAVG_DECIMAL_SIDE(x) LOADAVG_INT_SIDE(((x) & (LOADAVG_FIXED_POINT_1_0 - 1)) * 100)
/* Given a Linux load average (e.g. decimal number 34.89 where 34 is passed as i and 89 is passed as f), convert it
* to a loadavg_t. */
log_debug("Memory pressure for %s is %lu.%02lu%% > %lu.%02lu%% for > %s with reclaim activity",
t->path,
- INT_SIDE(t->memory_pressure.avg10), DECIMAL_SIDE(t->memory_pressure.avg10),
- INT_SIDE(t->mem_pressure_limit), DECIMAL_SIDE(t->mem_pressure_limit),
+ LOADAVG_INT_SIDE(t->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(t->memory_pressure.avg10),
+ LOADAVG_INT_SIDE(t->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(t->mem_pressure_limit),
FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
r = update_monitored_cgroup_contexts_candidates(
log_notice("Killed %s due to memory pressure for %s being %lu.%02lu%% > %lu.%02lu%%"
" for > %s with reclaim activity",
selected, t->path,
- INT_SIDE(t->memory_pressure.avg10), DECIMAL_SIDE(t->memory_pressure.avg10),
- INT_SIDE(t->mem_pressure_limit), DECIMAL_SIDE(t->mem_pressure_limit),
+ LOADAVG_INT_SIDE(t->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(t->memory_pressure.avg10),
+ LOADAVG_INT_SIDE(t->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(t->mem_pressure_limit),
FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
return 0;
}
"System Context:\n",
yes_no(m->dry_run),
PERMYRIAD_AS_PERCENT_FORMAT_VAL(m->swap_used_limit_permyriad),
- INT_SIDE(m->default_mem_pressure_limit), DECIMAL_SIDE(m->default_mem_pressure_limit),
+ LOADAVG_INT_SIDE(m->default_mem_pressure_limit), LOADAVG_DECIMAL_SIDE(m->default_mem_pressure_limit),
FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
oomd_dump_system_context(&m->system_context, f, "\t");
"%s\tPressure: Avg10: %lu.%02lu Avg60: %lu.%02lu Avg300: %lu.%02lu Total: %s\n"
"%s\tCurrent Memory Usage: %s\n",
strempty(prefix), ctx->path,
- strempty(prefix), INT_SIDE(ctx->mem_pressure_limit), DECIMAL_SIDE(ctx->mem_pressure_limit),
+ strempty(prefix), LOADAVG_INT_SIDE(ctx->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(ctx->mem_pressure_limit),
strempty(prefix),
- INT_SIDE(ctx->memory_pressure.avg10), DECIMAL_SIDE(ctx->memory_pressure.avg10),
- INT_SIDE(ctx->memory_pressure.avg60), DECIMAL_SIDE(ctx->memory_pressure.avg60),
- INT_SIDE(ctx->memory_pressure.avg300), DECIMAL_SIDE(ctx->memory_pressure.avg300),
+ LOADAVG_INT_SIDE(ctx->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(ctx->memory_pressure.avg10),
+ LOADAVG_INT_SIDE(ctx->memory_pressure.avg60), LOADAVG_DECIMAL_SIDE(ctx->memory_pressure.avg60),
+ LOADAVG_INT_SIDE(ctx->memory_pressure.avg300), LOADAVG_DECIMAL_SIDE(ctx->memory_pressure.avg300),
FORMAT_TIMESPAN(ctx->memory_pressure.total, USEC_PER_SEC),
strempty(prefix), FORMAT_BYTES(ctx->current_memory_usage));
loadavg_t fp;
assert_se(parse_loadavg_fixed_point("1.23", &fp) == 0);
- assert_se(INT_SIDE(fp) == 1);
- assert_se(DECIMAL_SIDE(fp) == 23);
+ assert_se(LOADAVG_INT_SIDE(fp) == 1);
+ assert_se(LOADAVG_DECIMAL_SIDE(fp) == 23);
assert_se(parse_loadavg_fixed_point("1.80", &fp) == 0);
- assert_se(INT_SIDE(fp) == 1);
- assert_se(DECIMAL_SIDE(fp) == 80);
+ assert_se(LOADAVG_INT_SIDE(fp) == 1);
+ assert_se(LOADAVG_DECIMAL_SIDE(fp) == 80);
assert_se(parse_loadavg_fixed_point("0.07", &fp) == 0);
- assert_se(INT_SIDE(fp) == 0);
- assert_se(DECIMAL_SIDE(fp) == 7);
+ assert_se(LOADAVG_INT_SIDE(fp) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(fp) == 7);
assert_se(parse_loadavg_fixed_point("0.00", &fp) == 0);
- assert_se(INT_SIDE(fp) == 0);
- assert_se(DECIMAL_SIDE(fp) == 0);
+ assert_se(LOADAVG_INT_SIDE(fp) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(fp) == 0);
assert_se(parse_loadavg_fixed_point("4096.57", &fp) == 0);
- assert_se(INT_SIDE(fp) == 4096);
- assert_se(DECIMAL_SIDE(fp) == 57);
+ assert_se(LOADAVG_INT_SIDE(fp) == 4096);
+ assert_se(LOADAVG_DECIMAL_SIDE(fp) == 57);
/* Caps out at 2 digit fracs */
assert_se(parse_loadavg_fixed_point("1.100", &fp) == -ERANGE);
assert_se(write_string_file(path, "some avg10=0.22 avg60=0.17 avg300=1.11 total=58761459\n"
"full avg10=0.23 avg60=0.16 avg300=1.08 total=58464525", WRITE_STRING_FILE_CREATE) == 0);
assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) == 0);
- assert_se(INT_SIDE(rp.avg10) == 0);
- assert_se(DECIMAL_SIDE(rp.avg10) == 22);
- assert_se(INT_SIDE(rp.avg60) == 0);
- assert_se(DECIMAL_SIDE(rp.avg60) == 17);
- assert_se(INT_SIDE(rp.avg300) == 1);
- assert_se(DECIMAL_SIDE(rp.avg300) == 11);
+ assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 22);
+ assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 17);
+ assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 11);
assert_se(rp.total == 58761459);
assert(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0);
- assert_se(INT_SIDE(rp.avg10) == 0);
- assert_se(DECIMAL_SIDE(rp.avg10) == 23);
- assert_se(INT_SIDE(rp.avg60) == 0);
- assert_se(DECIMAL_SIDE(rp.avg60) == 16);
- assert_se(INT_SIDE(rp.avg300) == 1);
- assert_se(DECIMAL_SIDE(rp.avg300) == 8);
+ assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 23);
+ assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 16);
+ assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 8);
assert_se(rp.total == 58464525);
/* Pressure file with extra unsupported fields */
assert_se(write_string_file(path, "some avg5=0.55 avg10=0.22 avg60=0.17 avg300=1.11 total=58761459\n"
"full avg10=0.23 avg60=0.16 avg300=1.08 avg600=2.00 total=58464525", WRITE_STRING_FILE_CREATE) == 0);
assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) == 0);
- assert_se(INT_SIDE(rp.avg10) == 0);
- assert_se(DECIMAL_SIDE(rp.avg10) == 22);
- assert_se(INT_SIDE(rp.avg60) == 0);
- assert_se(DECIMAL_SIDE(rp.avg60) == 17);
- assert_se(INT_SIDE(rp.avg300) == 1);
- assert_se(DECIMAL_SIDE(rp.avg300) == 11);
+ assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 22);
+ assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 17);
+ assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 11);
assert_se(rp.total == 58761459);
assert(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0);
- assert_se(INT_SIDE(rp.avg10) == 0);
- assert_se(DECIMAL_SIDE(rp.avg10) == 23);
- assert_se(INT_SIDE(rp.avg60) == 0);
- assert_se(DECIMAL_SIDE(rp.avg60) == 16);
- assert_se(INT_SIDE(rp.avg300) == 1);
- assert_se(DECIMAL_SIDE(rp.avg300) == 8);
+ assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 23);
+ assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 16);
+ assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+ assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 8);
assert_se(rp.total == 58464525);
}