]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/oom/oomd-manager.h
network: also introduce UseDomains= for [DHCPv6] section
[thirdparty/systemd.git] / src / oom / oomd-manager.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include "conf-parser.h"
5 #include "oomd-util.h"
6 #include "sd-event.h"
7 #include "varlink.h"
8
9 /* Polling interval for monitoring stats */
10 #define INTERVAL_USEC (1 * USEC_PER_SEC)
11
12 /* Used to weight the averages */
13 #define AVERAGE_SIZE_DECAY 4
14
15 /* Take action if 10s of memory pressure > 60 for more than 30s. We use the "full" value from PSI so this is the
16 * percentage of time all tasks were delayed (i.e. unproductive).
17 * Generally 60 or higher might be acceptable for something like system.slice with no memory.high set; processes in
18 * system.slice are assumed to be less latency sensitive. */
19 #define DEFAULT_MEM_PRESSURE_DURATION_USEC (30 * USEC_PER_SEC)
20 #define DEFAULT_MEM_PRESSURE_LIMIT_PERCENT 60
21 #define DEFAULT_SWAP_USED_LIMIT_PERCENT 90
22
23 #define RECLAIM_DURATION_USEC (30 * USEC_PER_SEC)
24 #define POST_ACTION_DELAY_USEC (15 * USEC_PER_SEC)
25
26 typedef struct Manager Manager;
27
28 struct Manager {
29 sd_bus *bus;
30 sd_event *event;
31
32 Hashmap *polkit_registry;
33
34 bool dry_run;
35 int swap_used_limit_permyriad;
36 loadavg_t default_mem_pressure_limit;
37 usec_t default_mem_pressure_duration_usec;
38
39 /* k: cgroup paths -> v: OomdCGroupContext
40 * Used to detect when to take action. */
41 Hashmap *monitored_swap_cgroup_contexts;
42 Hashmap *monitored_mem_pressure_cgroup_contexts;
43
44 OomdSystemContext system_context;
45
46 usec_t last_reclaim_at;
47 usec_t post_action_delay_start;
48
49 sd_event_source *cgroup_context_event_source;
50
51 Varlink *varlink;
52 };
53
54 Manager* manager_free(Manager *m);
55 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
56
57 int manager_new(Manager **ret);
58
59 int manager_start(Manager *m, bool dry_run, int swap_used_limit_permyriad, int mem_pressure_limit_permyriad, usec_t mem_pressure_usec);
60
61 int manager_get_dump_string(Manager *m, char **ret);
62
63 CONFIG_PARSER_PROTOTYPE(config_parse_oomd_default);