bool Senpai::reclaim()

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;
}