Engine::PluginRet MemoryReclaim::run()

in src/oomd/plugins/MemoryReclaim.cpp [52:83]


Engine::PluginRet MemoryReclaim::run(OomdContext& ctx) {
  using std::chrono::steady_clock;

  int64_t pgscan = 0;
  for (const CgroupContext& cgroup_ctx : ctx.addToCacheAndGet(cgroups_)) {
    if (const auto& memstat = cgroup_ctx.memory_stat()) {
      if (auto pos = memstat->find(kPgscan); pos != memstat->end()) {
        pgscan += pos->second;
      }
    }
  }

  OOMD_SCOPE_EXIT {
    last_pgscan_ = pgscan;
  };

  const auto now = steady_clock::now();

  if (pgscan > last_pgscan_) {
    last_reclaim_at_ = now;
  }

  const auto diff =
      std::chrono::duration_cast<std::chrono::seconds>(now - last_reclaim_at_)
          .count();

  if (diff <= duration_) {
    return Engine::PluginRet::CONTINUE;
  } else {
    return Engine::PluginRet::STOP;
  }
}