void OomdContext::dump()

in src/oomd/OomdContext.cpp [144:210]


void OomdContext::dump(
    const std::vector<ConstCgroupContextRef>& cgroup_ctxs,
    const bool skip_negligible) {
  auto cgmax = std::numeric_limits<int64_t>::max();
  OLOG << "Dumping OomdContext: ";
  for (const CgroupContext& cgroup_ctx : cgroup_ctxs) {
    auto mem_pressure = cgroup_ctx.mem_pressure().value_or(ResourcePressure{});
    auto io_pressure = cgroup_ctx.io_pressure().value_or(ResourcePressure{});
    auto current_usage = cgroup_ctx.current_usage().value_or(0);
    auto average_usage = cgroup_ctx.average_usage().value_or(0);
    auto memory_low = cgroup_ctx.memory_low().value_or(0);
    auto memory_min = cgroup_ctx.memory_min().value_or(0);
    auto memory_high = cgroup_ctx.memory_high().value_or(cgmax);
    auto memory_high_tmp = cgroup_ctx.memory_high_tmp().value_or(cgmax);
    auto memory_max = cgroup_ctx.memory_max().value_or(cgmax);
    auto memory_protection = cgroup_ctx.memory_protection().value_or(0);
    auto anon_usage = cgroup_ctx.anon_usage().value_or(0);
    auto swap_usage = cgroup_ctx.swap_usage().value_or(0);
    auto io_cost_cumulative = cgroup_ctx.io_cost_cumulative().value_or(0);
    auto io_cost_rate = cgroup_ctx.io_cost_rate().value_or(0);
    auto pg_scan_cumulative = cgroup_ctx.pg_scan_cumulative().value_or(0);
    auto pg_scan_rate = cgroup_ctx.pg_scan_rate().value_or(0);
    auto kill_preference =
        cgroup_ctx.kill_preference().value_or(KillPreference::NORMAL);

    if (skip_negligible) {
      // don't show if <1% pressure && <.1% usage
      auto meminfo = Fs::getMeminfo();
      // TODO(dschatzberg) report error
      if (meminfo) {
        const float press_min = 1;
        const int64_t mem_min = (*meminfo)["MemTotal"] / 1000;
        const int64_t swap_min = (*meminfo)["SwapTotal"] / 1000;

        if (!(mem_pressure.sec_10 >= press_min ||
              mem_pressure.sec_60 >= press_min ||
              mem_pressure.sec_300 >= press_min ||
              io_pressure.sec_10 >= press_min ||
              io_pressure.sec_60 >= press_min ||
              io_pressure.sec_300 >= press_min || current_usage > mem_min ||
              average_usage > mem_min || swap_usage > swap_min)) {
          continue;
        }
      }
    }

    OLOG << "name=" << cgroup_ctx.cgroup().relativePath();
    OLOG << "  pressure=" << mem_pressure.sec_10 << ":" << mem_pressure.sec_60
         << ":" << mem_pressure.sec_300 << "-" << io_pressure.sec_10 << ":"
         << io_pressure.sec_60 << ":" << io_pressure.sec_300;
    OLOG << "  mem=" << (current_usage >> 20) << "MB"
         << " mem_avg=" << (average_usage >> 20) << "MB"
         << " mem_low=" << (memory_low >> 20) << "MB"
         << " mem_min=" << (memory_min >> 20) << "MB"
         << " mem_high=" << (memory_high >> 20) << "MB"
         << " mem_high_tmp=" << (memory_high_tmp >> 20) << "MB"
         << " mem_max=" << (memory_max >> 20) << "MB"
         << " mem_prot=" << (memory_protection >> 20) << "MB"
         << " anon=" << (anon_usage >> 20) << "MB"
         << " swap_usage=" << (swap_usage >> 20) << "MB";
    OLOG << "  io_cost_cumulative=" << io_cost_cumulative
         << " io_cost_rate=" << io_cost_rate;
    OLOG << "  pg_scan_cumulative=" << pg_scan_cumulative
         << " pg_scan_rate=" << pg_scan_rate;
    OLOG << "  kill_preference=" << kill_preference;
  }
}