From d60bd4ca2b10243050c7a5892973f68710dd909e Mon Sep 17 00:00:00 2001 From: Alexey Avramov Date: Thu, 3 Jan 2019 00:05:44 +0900 Subject: [PATCH] fix psi support --- nohang | 37 +++++++++++++++++++++++++------------ nohang.conf | 28 +++++++++++++++------------- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/nohang b/nohang index 333035c..14831ac 100755 --- a/nohang +++ b/nohang @@ -1016,6 +1016,12 @@ gui_notifications = conf_parse_bool('gui_notifications') decrease_oom_score_adj = conf_parse_bool('decrease_oom_score_adj') execute_the_command = conf_parse_bool('execute_the_command') + +ignore_psi = conf_parse_bool('ignore_psi') + + + + regex_matching = conf_parse_bool('regex_matching') re_match_cmdline = conf_parse_bool('re_match_cmdline') @@ -1614,19 +1620,23 @@ psi_min_sleep_time_after_action = psi_avg10_sleep_time ########################################################################## -if psi_support: +if psi_support and not ignore_psi: # ta0 = time() # a0 = psi_mem_some_avg_total() kill_psi_t0 = time() term_psi_t0 = time() +avg_value = '' + + while True: - - if psi_support: - print(rline1(psi_path)) + if psi_support and not ignore_psi: + #print(rline1(psi_path)) avg10 = psi_mem_some_avg10() + if print_mem_check_results: + avg_value = 'PSI mem some avg10: {} | '.format(str(avg10).rjust(6)) if avg10 >= sigkill_psi and time() - kill_psi_t0 >= psi_min_sleep_time_after_action: time0 = time() @@ -1639,8 +1649,8 @@ while True: find_victim_and_send_signal(SIGTERM) term_psi_t0 = time() else: - print('PSI is OK or psi_min_sleep_time_after_action did not pass') - + #print('PSI is OK or psi_min_sleep_time_after_action did not pass') + pass ''' @@ -1701,26 +1711,29 @@ while True: # Output avialable mem sizes if swap_total == 0 and mem_used_zram == 0: - print('MemAvail: {} M, {} %'.format( + print('{}MemAvail: {} M, {} %'.format( human(mem_available, mem_len), - just_percent_mem(mem_available / mem_total))) + just_percent_mem(mem_available / mem_total)), + avg_value) elif swap_total > 0 and mem_used_zram == 0: - print('MemAvail: {} M, {} % | SwapFree: {} M, {} %'.format( + print('{}MemAvail: {} M, {} % | SwapFree: {} M, {} %'.format( human(mem_available, mem_len), just_percent_mem(mem_available / mem_total), human(swap_free, swap_len), - just_percent_swap(swap_free / (swap_total + 0.1)))) + just_percent_swap(swap_free / (swap_total + 0.1))), + avg_value) else: - print('MemAvail: {} M, {} % | SwapFree: {} M, {} % | Mem' + print('{}MemAvail: {} M, {} % | SwapFree: {} M, {} % | Mem' 'UsedZram: {} M, {} %'.format( human(mem_available, mem_len), just_percent_mem(mem_available / mem_total), human(swap_free, swap_len), just_percent_swap(swap_free / (swap_total + 0.1)), human(mem_used_zram, mem_len), - just_percent_mem(mem_used_zram / mem_total))) + just_percent_mem(mem_used_zram / mem_total)), + avg_value) diff --git a/nohang.conf b/nohang.conf index 1a24432..8971bb5 100644 --- a/nohang.conf +++ b/nohang.conf @@ -45,16 +45,6 @@ $SIGTERM_PSI_AVG = 60 $PSI_AVG_TIME = 3 -##################################################################### - - -sigkill_psi_avg10 = 90 -sigterm_psi_avg10 = 60 -psi_avg10_sleep_time = 30 - - - - ##################################################################### 1. Thresholds below which a signal should be sent to the victim @@ -86,6 +76,18 @@ swap_min_sigkill = 5 % zram_max_sigterm = 50 % zram_max_sigkill = 55 % + + Response on PSI memory some avg10 value + (/proc/pressure/memory on systems with Linux 4.20+). + +ignore_psi = True + +sigterm_psi_avg10 = 60 +sigkill_psi_avg10 = 90 + +psi_avg10_sleep_time = 30 + + ##################################################################### 2. The frequency of checking the amount of available memory @@ -130,8 +132,8 @@ min_badness = 50 Valid values are non-negative floating-point numbers. -min_delay_after_sigterm = 1 -min_delay_after_sigkill = 3 +min_delay_after_sigterm = 0.2 +min_delay_after_sigkill = 0.8 Процессы браузера chromium обычно имеют oom_score_adj 200 или 300. Это приводит к тому, что процессы хрома умирают @@ -352,7 +354,7 @@ print_config = False Print memory check results. Valid values are True and False. -print_mem_check_results = True +print_mem_check_results = False Print sleep periods between memory checks. Valid values are True and False.