diff --git a/nohang/nohang b/nohang/nohang index 3d16e0d..d8477cc 100755 --- a/nohang/nohang +++ b/nohang/nohang @@ -1909,10 +1909,26 @@ def check_zram_ex(): return None, None, mem_used_zram -def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0): +def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0, + mem_available): """ """ + if mem_available <= hard_threshold_min_mem_kb: + ma_hard_threshold_exceded = True + else: + ma_hard_threshold_exceded = False + + if mem_available <= soft_threshold_min_mem_kb: + ma_soft_threshold_exceded = True + else: + ma_soft_threshold_exceded = False + + if mem_available <= warning_threshold_min_mem_kb: + ma_warning_threshold_exceded = True + else: + ma_warning_threshold_exceded = False + delta0 = monotonic() - x0 x0 = monotonic() @@ -1945,8 +1961,13 @@ def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0): ) ) + log('mem_avail_hard_threshold_exceded: {}\nmem_avail_soft_threshol' + 'd_exceded: {}\nmem_avail_warning_threshold_exceeded {}'.format( + ma_hard_threshold_exceded, ma_soft_threshold_exceded, + ma_warning_threshold_exceded)) + if (psi_kill_exceeded_timer >= psi_excess_duration and - psi_post_action_delay_exceeded): + psi_post_action_delay_exceeded and ma_hard_threshold_exceded): mem_info = 'PSI avg ({}) > hard_threshold_max_psi ({})\n' \ 'PSI avg exceeded psi_excess_duration (value' \ @@ -1977,7 +1998,7 @@ def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0): ) if (psi_term_exceeded_timer >= psi_excess_duration and - psi_post_action_delay_exceeded): + psi_post_action_delay_exceeded and ma_soft_threshold_exceded): mem_info = 'PSI avg ({}) > soft_threshold_max_psi ({})\n' \ 'PSI avg exceeded psi_excess_duration (value' \ @@ -1993,7 +2014,8 @@ def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0): if low_memory_warnings_enabled: - if psi_avg_value >= warning_threshold_max_psi: + if (psi_avg_value >= warning_threshold_max_psi and + ma_warning_threshold_exceded): return ('WARN', None, psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0) @@ -2102,7 +2124,8 @@ def implement_corrective_action( if CHECK_PSI: (psi_threshold, psi_info, psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0) = check_psi_ex( - psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0) + psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0, + mem_available) if (masf_threshold is SIGKILL or zram_threshold is SIGKILL or psi_threshold is SIGKILL): @@ -2274,15 +2297,13 @@ def implement_corrective_action( elif iva == 1: if vwd and d > sensitivity_test_time + 10: - log("The victim doesn't respond on corrective action' \ - ' in {} sec".format( - round(d, 3))) + log('The victim doesn\'t respond on corrective action' + ' in {} sec'.format(round(d, 3))) break if not vwd and d > sensitivity_test_time: - log("The victim doesn't respond on corrective actio' \ - 'n in {} sec".format( - round(d, 3))) + log('The victim doesn\'t respond on corrective action' + ' in {} sec'.format(round(d, 3))) break elif iva == 2: @@ -3529,7 +3550,8 @@ while True: if CHECK_PSI: (psi_threshold, psi_info, psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0) = check_psi_ex( - psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0) + psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0, + mem_available) if print_mem_check_results: