diff --git a/arch-config/etc/nohang/nohang.conf b/arch-config/etc/nohang/nohang.conf new file mode 100644 index 00000000..77ba2498 --- /dev/null +++ b/arch-config/etc/nohang/nohang.conf @@ -0,0 +1,564 @@ + This is nohang config file. + Lines starting with #, tabs and spaces are comments. + Lines starting with @ contain optional parameters. + All values are case sensitive. + Be careful: nohang doesn't forbid you to shoot yourself in the foot. + + The configuration includes the following sections: + + 1. Common zram settings + 2. Common PSI settings + 3. Poll rate + 4. Warnings and notifications + 5. Soft threshold + 6. Hard threshold + 7. Customize victim selection: adjusting badness of processes + 8. Customize soft corrective actions + 9. Misc settings + 10. Verbosity, debug, logging + + Just read the description of the parameters and edit the values. + Please restart the program after editing the config. + + TODO: improve descriptions + +############################################################################### + + 1. Common zram settings + + Key: zram_checking_enabled + Description: + Type: boolean + Valid values: True | False + Default value: False + +zram_checking_enabled = False + +############################################################################### + + 2. Common PSI settings + + Key: psi_checking_enabled + Description: + Type: boolean + Valid values: True | False + Default value: False + +psi_checking_enabled = False + + Key: psi_path + Description: + Type: string + Valid values: any string + Default value: /proc/pressure/memory + +psi_path = /proc/pressure/memory + + Key: psi_metrics + Description: + Type: string + Valid values: some_avg10, some_avg60, some_avg300, + full_avg10, full_avg60, full_avg300 + Default value: some_avg10 + +psi_metrics = some_avg10 + + Key: psi_excess_duration + Description: + Type: float + Valid values: >= 0 + Default value: 30 + +psi_excess_duration = 30 + + Key: psi_post_action_delay + Description: + Type: float + Valid values: >= 10 + Default value: 20 + +psi_post_action_delay = 20 + +############################################################################### + + 3. Poll rate + + Key: fill_rate_mem + Description: + Type: float + Valid values: >= 100 + Default value: 6000 + +fill_rate_mem = 6000 + + Key: fill_rate_swap + Description: + Type: float + Valid values: >= 100 + Default value: 2000 + +fill_rate_swap = 2000 + + Key: fill_rate_zram + Description: + Type: float + Valid values: >= 100 + Default value: 4000 + +fill_rate_zram = 4000 + + Key: max_sleep + Description: + Type: float + Valid values: >= 0.01 and >= min_sleep + Default value: 3 + +max_sleep = 3 + + Key: min_sleep + Description: + Type: float + Valid values: >= 0.01 and <= max_sleep + Default value: 0.1 + +min_sleep = 0.1 + +############################################################################### + + 4. Warnings and notifications + + 4.1. GUI notifications after corrective actions + + Key: post_action_gui_notifications + Description: + Type: boolean + Valid values: True | False + Default value: False + +post_action_gui_notifications = True + + Key: hide_corrective_action_type + Description: + Type: boolean + Valid values: True | False + Default value: False + +hide_corrective_action_type = False + + 4.2. Low memory warnings + + Key: low_memory_warnings_enabled + Description: + Type: boolean + Valid values: True | False + Default value: False + +low_memory_warnings_enabled = False + + Key: warning_exe + Description: + Type: string + Valid values: any string + Default value: (empty string) + +warning_exe = + + Key: warning_threshold_min_mem + Description: + Type: float (with % or M) + Valid values: from the range [0; 100] % + Default value: 20 % + +warning_threshold_min_mem = 20 % + + Key: warning_threshold_min_swap + Description: + Type: float (with % or M) + Valid values: [0; 100] % or >= 0 M + Default value: 20 % + +warning_threshold_min_swap = 25 % + + Key: warning_threshold_max_zram + Description: + Type: float (with % or M) + Valid values: from the range [0; 100] % + Default value: 45 % + +warning_threshold_max_zram = 45 % + + Key: warning_threshold_max_psi + Description: + Type: float + Valid values: from the range [0; 100] + Default value: 10 + +warning_threshold_max_psi = 10 + + Key: min_post_warning_delay + Description: + Type: float + Valid values: >= 1 + Default value: 60 + +min_post_warning_delay = 60 + + Key: env_cache_time + Description: + Type: float + Valid values: >= 0 + Default value: 300 + +env_cache_time = 300 + +############################################################################### + + 5. Soft threshold (thresholds for sending the SIGTERM signal or + implementing other soft corrective action) + + Key: soft_threshold_min_mem + Description: + Type: float (with % or M) + Valid values: from the range [0; 50] % + Default value: 5 % + +soft_threshold_min_mem = 5 % + + Key: soft_threshold_min_swap + Description: + Type: float (with % or M) + Valid values: [0; 100] % or >= 0 M + Default value: 10 % + +soft_threshold_min_swap = 10 % + + Key: soft_threshold_max_zram + Description: + Type: float (with % or M) + Valid values: from the range [10; 90] % + Default value: 55 % + +soft_threshold_max_zram = 55 % + + Key: soft_threshold_max_psi + Description: + Type: float + Valid values: from the range [5; 100] + Default value: 40 + +soft_threshold_max_psi = 40 + +############################################################################### + + 6. Hard threshold (thresholds for sending the SIGKILL signal) + + Key: hard_threshold_min_mem + Description: + Type: float (with % or M) + Valid values: from the range [0; 50] % + Default value: 2 % + +hard_threshold_min_mem = 2 % + + Key: hard_threshold_min_swap + Description: + Type: float (with % or M) + Valid values: [0; 100] % or >= 0 M + Default value: 4 % + +hard_threshold_min_swap = 4 % + + Key: hard_threshold_max_zram + Description: + Type: float (with % or M) + Valid values: from the range [10; 90] % + Default value: 60 % + +hard_threshold_max_zram = 60 % + + Key: hard_threshold_max_psi + Description: + Type: float + Valid values: from the range [5; 100] + Default value: 90 + +hard_threshold_max_psi = 90 + +############################################################################### + + 7. Customize victim selection: adjusting badness of processes + + 7.1. Ignore positive oom_score_adj + + Key: ignore_positive_oom_score_adj + Description: + Type: boolean + Valid values: True | False + Default value: False + +ignore_positive_oom_score_adj = False + + 7.2.1. Matching process names with RE patterns change their badness + + Syntax: + + @BADNESS_ADJ_RE_NAME badness_adj /// RE_pattern + + New badness value will be += badness_adj + + It is possible to compare multiple patterns + with different badness_adj values. + + Example: + @BADNESS_ADJ_RE_NAME 200 /// ^Web Content$ + + 7.2.2. Matching CGroup_v1-line with RE patterns + + @BADNESS_ADJ_RE_CGROUP_V1 -50 /// ^/system\.slice/ + + @BADNESS_ADJ_RE_CGROUP_V1 50 /// /foo\.service$ + + @BADNESS_ADJ_RE_CGROUP_V1 -50 /// ^/user\.slice/ + + 7.2.3. Matching CGroup_v2-line with RE patterns + + @BADNESS_ADJ_RE_CGROUP_V2 100 /// ^/workload + + 7.2.4. Matching eUIDs with RE patterns + + @BADNESS_ADJ_RE_UID -100 /// ^0$ + + 7.2.5. Matching /proc/[pid]/exe realpath with RE patterns + + Example: + @BADNESS_ADJ_RE_REALPATH 900 /// ^(/usr/bin/stress|/usr/bin/stress-ng)$ + + 7.2.6. Matching cwd with RE patterns + + @BADNESS_ADJ_RE_CWD 200 /// ^/home/ + + 7.2.7. Matching cmdlines with RE patterns + WARNING: using this option can greatly slow down the search for a victim + in conditions of heavily swapping. + + Prefer Chromium tabs and Electron-based apps + @BADNESS_ADJ_RE_CMDLINE 200 /// --type=renderer + + Prefer Firefox tabs (Web Content and WebExtensions) + @BADNESS_ADJ_RE_CMDLINE 100 /// -appomni + + @BADNESS_ADJ_RE_CMDLINE -200 /// ^/usr/lib/virtualbox + + 7.2.8. Matching environ with RE patterns + WARNING: using this option can greatly slow down the search for a victim + in conditions of heavy swapping. + + @BADNESS_ADJ_RE_ENVIRON 100 /// USER=user + + + Note that you can control badness also via systemd units via + OOMScoreAdjust, see + www.freedesktop.org/software/systemd/man/systemd.exec.html#OOMScoreAdjust= + +############################################################################### + + 8. Customize soft corrective actions + + Run the command instead of sending a signal with at soft corrective action + if the victim's name or cgroup matches the regular expression. + + Syntax: + KEY REGEXP SEPARATOR COMMAND + + @SOFT_ACTION_RE_NAME ^foo$ /// kill -USR1 $PID + @SOFT_ACTION_RE_CGROUP_V1 ^/system\.slice/ /// systemctl restart $SERVICE + @SOFT_ACTION_RE_CGROUP_V2 /foo\.service$ /// systemctl restart $SERVICE + + $PID will be replaced by process PID. + $NAME will be replaced by process name. + $SERVICE will be replaced by .service if it exists (overwise it will be + relpaced by empty line) + +############################################################################### + + 9. Misc settings + + Key: max_soft_exit_time + Description: + Type: float + Valid values: >= 0.1 + Default value: 10 + +max_soft_exit_time = 10 + + Key: post_kill_exe + Description: + Type: string + Valid values: any string + Default value: (empty string) + +post_kill_exe = + + Key: min_badness + Description: + Type: integer + Valid values: >= 1 + Default value: 1 + +min_badness = 1 + + Key: post_soft_action_delay + Description: + Type: float + Valid values: >= 0.1 + Default value: 3 + +post_soft_action_delay = 3 + + Key: post_zombie_delay + Description: + Type: float + Valid values: >= 0 + Default value: 0.1 + +post_zombie_delay = 0.1 + + Key: victim_cache_time + Description: + Type: float + Valid values: >= 0 + Default value: 10 + +victim_cache_time = 10 + + Key: exe_timeout + Description: + Type: float + Valid values: >= 0.1 + Default value: 20 + +exe_timeout = 20 + +############################################################################### + + 10. Verbosity, debug, logging + + Key: print_config_at_startup + Description: + Type: boolean + Valid values: True | False + Default value: False + +print_config_at_startup = False + + Key: print_mem_check_results + Description: + Type: boolean + Valid values: True | False + Default value: False + +print_mem_check_results = False + + Key: min_mem_report_interval + Description: + Type: float + Valid values: >= 0 + Default value: 60 + +min_mem_report_interval = 60 + + Key: print_proc_table + Description: + Type: boolean + Valid values: True | False + Default value: False + +print_proc_table = False + + Key: extra_table_info + Description: + WARNING: using "cmdline" or "environ" keys can greatly slow down + the search for a victim in conditions of heavy swapping. + Type: string + Valid values: None, cgroup_v1, cgroup_v2, realpath, + cwd, cmdline, environ + Default value: None + +extra_table_info = None + + Key: print_victim_status + Description: + Type: boolean + Valid values: True | False + Default value: True + +print_victim_status = True + + Key: print_victim_cmdline + Description: + Type: boolean + Valid values: True | False + Default value: False + +print_victim_cmdline = False + + Key: max_victim_ancestry_depth + Description: + Type: integer + Valid values: >= 1 + Default value: 3 + +max_victim_ancestry_depth = 3 + + Key: print_statistics + Description: + Type: boolean + Valid values: True | False + Default value: True + +print_statistics = True + + Key: debug_psi + Description: + Type: boolean + Valid values: True | False + Default value: False + +debug_psi = False + + Key: debug_gui_notifications + Description: + Type: boolean + Valid values: True | False + Default value: False + +debug_gui_notifications = False + + Key: debug_sleep + Description: + Type: boolean + Valid values: True | False + Default value: False + +debug_sleep = False + + Key: debug_threading + Description: + Type: boolean + Valid values: True | False + Default value: False + +debug_threading = False + + Key: separate_log + Description: + Type: boolean + Valid values: True | False + Default value: False + +separate_log = False + +############################################################################### + + Use cases, feature requests and any questions are welcome: + https://github.com/hakavlad/nohang/issues