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