summaryrefslogtreecommitdiffstats
path: root/kernel/time
diff options
context:
space:
mode:
authorArun Raghavan <arun@arunraghavan.net>2017-03-01 09:53:09 -0500
committerThomas Gleixner <tglx@linutronix.de>2017-03-13 16:32:15 -0400
commite7ea7c9806a2681807257ea89085339d33f7fa0b (patch)
tree10c31f31e93c29475e2a443db27109238f89aa6b /kernel/time
parent4495c08e84729385774601b5146d51d9e5849f81 (diff)
rlimits: Print more information when CPU/RT limits are exceeded
When a process is sent a SIGKILL because it exceeded CPU or RT limits, the cause may not be obvious in userspace -- daemonised processes just get killed, and even foreground process just see a 'Killed' message. The lack of any information on why this might be happening in logs can be confusing to users who are not aware of this mechanism. Add messages which dump the process name and tid in dmesg when a process exceeds its CPU or RT limits (soft and hard) in order to make it clearer to people debugging such issues. Signed-off-by: Arun Raghavan <arun@arunraghavan.net> Link: http://lkml.kernel.org/r/20170301145309.27214-1-arun@arunraghavan.net Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/time')
-rw-r--r--kernel/time/posix-cpu-timers.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index 4513ad16a253..76bea3a47d4b 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -825,6 +825,8 @@ static void check_thread_timers(struct task_struct *tsk,
825 * At the hard limit, we just die. 825 * At the hard limit, we just die.
826 * No need to calculate anything else now. 826 * No need to calculate anything else now.
827 */ 827 */
828 pr_info("CPU Watchdog Timeout (hard): %s[%d]\n",
829 tsk->comm, task_pid_nr(tsk));
828 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk); 830 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
829 return; 831 return;
830 } 832 }
@@ -836,8 +838,7 @@ static void check_thread_timers(struct task_struct *tsk,
836 soft += USEC_PER_SEC; 838 soft += USEC_PER_SEC;
837 sig->rlim[RLIMIT_RTTIME].rlim_cur = soft; 839 sig->rlim[RLIMIT_RTTIME].rlim_cur = soft;
838 } 840 }
839 printk(KERN_INFO 841 pr_info("RT Watchdog Timeout (soft): %s[%d]\n",
840 "RT Watchdog Timeout: %s[%d]\n",
841 tsk->comm, task_pid_nr(tsk)); 842 tsk->comm, task_pid_nr(tsk));
842 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); 843 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
843 } 844 }
@@ -935,6 +936,8 @@ static void check_process_timers(struct task_struct *tsk,
935 * At the hard limit, we just die. 936 * At the hard limit, we just die.
936 * No need to calculate anything else now. 937 * No need to calculate anything else now.
937 */ 938 */
939 pr_info("RT Watchdog Timeout (hard): %s[%d]\n",
940 tsk->comm, task_pid_nr(tsk));
938 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk); 941 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
939 return; 942 return;
940 } 943 }
@@ -942,6 +945,8 @@ static void check_process_timers(struct task_struct *tsk,
942 /* 945 /*
943 * At the soft limit, send a SIGXCPU every second. 946 * At the soft limit, send a SIGXCPU every second.
944 */ 947 */
948 pr_info("CPU Watchdog Timeout (soft): %s[%d]\n",
949 tsk->comm, task_pid_nr(tsk));
945 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); 950 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
946 if (soft < hard) { 951 if (soft < hard) {
947 soft++; 952 soft++;