in src/oomd/plugins/Senpai.cpp [320:347]
bool Senpai::reclaim(const CgroupContext& cgroup_ctx, int64_t size) {
auto has_memory_reclaim_opt = hasMemoryReclaim(cgroup_ctx);
if (has_memory_reclaim_opt && *has_memory_reclaim_opt) {
return (bool)Fs::writeMemReclaimAt(cgroup_ctx.fd(), size);
}
auto current_opt = cgroup_ctx.current_usage();
if (!current_opt) {
return false;
}
int64_t limit = *current_opt - size;
// Poking by setting memory limit and immediately resetting it, which
// prevents sudden allocation later from triggering thrashing
if (memory_high_timeout_.count() > 0) {
if (!writeMemhighTimeout(cgroup_ctx, limit, memory_high_timeout_)) {
return false;
}
} else {
if (!writeMemhigh(cgroup_ctx, limit)) {
return false;
}
}
if (!resetMemhigh(cgroup_ctx)) {
return false;
}
return true;
}