Received: by 10.223.164.221 with SMTP id h29csp3822012wrb; Tue, 31 Oct 2017 05:30:52 -0700 (PDT) X-Google-Smtp-Source: ABhQp+Rvfju8GgVFu2D9NlsRSlebK0DCsZ+ZXaf1laGZ5oxMfM+eRxtGiFSUaXPMM6GXtQarUlD6 X-Received: by 10.101.96.1 with SMTP id m1mr1540304pgu.36.1509453052833; Tue, 31 Oct 2017 05:30:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509453052; cv=none; d=google.com; s=arc-20160816; b=lxBHi51vClLGJJZpm3mVI4+LcmLwXC3g75ssYd6RPIswC8jVyqriPFgKUozMf2B3YG fRwaR7rK4t0hAVZ0oCWP/ypiANJSTUZA9BVEtpHeSEFUPf/BnrgLMZLAz3SDd5Oq/SAi VEF+E/IBCh1ajhpTj6W3WkzFAzGHUg/5P08ax+7XyIWj7Fh8qYhPxG6N8aazIiruWsJD wkpzKmjHjHb+F9CTBdFM/x9oPEviJ0KEPmOLJfj4lfGnnn1PPuwKpKavKIxBErf0R+i4 XyUnmUuXASjt8hoBFGr+XUuLaGDAuHii18eSYBrQ/00KhlyErUBdqw+eIRIlubd/n8+s KHLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=KBhIzCr4u+xQkLKrwuTd4SPFzatqA7ufD6q1VDxR0TE=; b=FwmDeOyg0sRTFGTYRkfYGT4BzZiWeKZSS1ucr2p8GecmYdz2PFN5i+IADXnc7i/Gd5 eh7y5yJPHQ54TGq64PKiBwLpaLwnpuJaZhtLoYiPI9Znh6x5pm1e2yzZlcyRTMPCclMc BUocA84LRzTm4GD/8rcnsxjq4xHYyWaB555u72+eLs9K0L6ma5/XY5SBeIwyycP8GmOw TAIqbIWkLGlbGB9JdBaKOTcB+Q4aaCVuqkHrWT9TpW07p+Zz9z70jrz0fTceK3TvmAFP MTkKQzRBnyjQi39mHFcix9H/oWLFslCzY0YdYyOZnn+4h2CbjZv1F0jj32bFO1HA0AeC 6NmQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@evidence-eu-com.20150623.gappssmtp.com header.s=20150623 header.b=LBNcwQvM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k75si1655988pfh.200.2017.10.31.05.30.38; Tue, 31 Oct 2017 05:30:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@evidence-eu-com.20150623.gappssmtp.com header.s=20150623 header.b=LBNcwQvM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752505AbdJaM2s (ORCPT + 99 others); Tue, 31 Oct 2017 08:28:48 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:46460 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751050AbdJaM2q (ORCPT ); Tue, 31 Oct 2017 08:28:46 -0400 Received: by mail-wm0-f68.google.com with SMTP id m72so22226420wmc.1 for ; Tue, 31 Oct 2017 05:28:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=evidence-eu-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=KBhIzCr4u+xQkLKrwuTd4SPFzatqA7ufD6q1VDxR0TE=; b=LBNcwQvMwkyiI8XhwF8iX4KneftiZSNSEIqyJDMGn7YQ8tnvE5vBH+OKQLpXmMSaug 3Rtbu9wDgxAutZZ+7oB5N49KxhU7iSn5cZ0u9rmUHevWPOlE93Kwu0F7uCRbeXA1bVur Df3BOIN+n+a0lKYmt6BZl2PMopMADACKWo9Cwv5JWYEiXCfb5ERJf50FzJgAvau0ABKE FFh4zXeRM25lM9FnQH3xztemK2CmabIyh2ApjkJqPawoWGB4WYUq5/f4dHWhnEKgfwnR qR8DPS8dxcw+1BD7XcrdqXApUl/Odimdc5mlF4nWRSifdndYMBdc6XS3UB1k/98iQtmV c5pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=KBhIzCr4u+xQkLKrwuTd4SPFzatqA7ufD6q1VDxR0TE=; b=gliv6bXKlrZgOPRdfrYnH6rjnGkIQYxsmn5epysUgBZRkHIPjNq49T9ela7g/1GCcp EJYNLHty/zXemuIiipWefeQsPYeuV3D2EIQ2zerNCb9yaQrpBG/YJx/71Ih7mtLEB22d WP5LxXTpVFDCtMVNlZDGIGPNul2/IF4FdnGHLMYBzEx98FjEjHR49EVzqi55EtVCRcFv 22LWCLUq+Yw0GNngC0jTVGWMsSTLW0YbfwRWrPNHd7ATQsiPUZfNzrpcRhfewa6p8Nfc 5H9ywSbmKXvUhCly5ZZ1Tzp8ifYF8WlZeU+qgiEbufwq5ICy3wWBu+JnJOueqlbe+m2n plGA== X-Gm-Message-State: AMCzsaUL0HVwOynOP/hKmu9vw0FuCqRTEHCIvmP54hJfzKkX9ZY/xiKm Zk0J5/d5uUxJZQY/c5l+M6XbnfqA X-Received: by 10.28.191.216 with SMTP id o85mr1952057wmi.115.1509452924414; Tue, 31 Oct 2017 05:28:44 -0700 (PDT) Received: from localhost.localdomain (host92-93-static.8-79-b.business.telecomitalia.it. [79.8.93.92]) by smtp.gmail.com with ESMTPSA id x49sm670622wrb.25.2017.10.31.05.28.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Oct 2017 05:28:43 -0700 (PDT) From: Claudio Scordino To: linux-kernel@vger.kernel.org Cc: Juri Lelli , Claudio Scordino , Luca Abeni , Tommaso Cucinotta , Peter Zijlstra , Ingo Molnar , Thomas Gleixner , Mathieu Poirier Subject: [PATCH] sched/deadline: runtime overrun and deadline miss signals Date: Tue, 31 Oct 2017 13:28:37 +0100 Message-Id: <1509452917-10987-1-git-send-email-claudio@evidence.eu.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Juri Lelli This patch adds the possibility to get the delivery of two signals whenever there is a runtime overrun or a deadline miss, respectively. The request is done through the sched_flags field within the sched_attr structure. Forward port of https://lkml.org/lkml/2009/10/16/170 Signed-off-by: Juri Lelli Signed-off-by: Claudio Scordino Signed-off-by: Luca Abeni Cc: Tommaso Cucinotta CC: Peter Zijlstra CC: Ingo Molnar CC: Thomas Gleixner Cc: Mathieu Poirier --- include/linux/sched.h | 8 ++++++++ include/uapi/linux/sched.h | 2 ++ kernel/sched/core.c | 3 ++- kernel/sched/deadline.c | 13 +++++++++++++ kernel/time/posix-cpu-timers.c | 26 ++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 0f897df..285d1b4 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -473,11 +473,19 @@ struct sched_dl_entity { * has not been executed yet. This flag is useful to avoid race * conditions between the inactive timer handler and the wakeup * code. + * + * @dl_overrun tells if the task asked to be informed about budget + * overruns. + * + * @dl_dmiss tells if the task asked to be informed about deadline + * misses. */ int dl_throttled : 1; int dl_boosted : 1; int dl_yielded : 1; int dl_non_contending : 1; + int dl_overrun : 1; + int dl_dmiss : 1; /* * Bandwidth enforcement timer. Each -deadline task has its diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h index e2a6c7b..544be0c 100644 --- a/include/uapi/linux/sched.h +++ b/include/uapi/linux/sched.h @@ -48,5 +48,7 @@ */ #define SCHED_FLAG_RESET_ON_FORK 0x01 #define SCHED_FLAG_RECLAIM 0x02 +#define SCHED_FLAG_DL_OVERRUN 0x04 +#define SCHED_FLAG_DL_DMISS 0x08 #endif /* _UAPI_LINUX_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 97227df..d79df7a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4041,7 +4041,8 @@ static int __sched_setscheduler(struct task_struct *p, } if (attr->sched_flags & - ~(SCHED_FLAG_RESET_ON_FORK | SCHED_FLAG_RECLAIM)) + ~(SCHED_FLAG_RESET_ON_FORK | SCHED_FLAG_RECLAIM | + SCHED_FLAG_DL_OVERRUN | SCHED_FLAG_DL_DMISS)) return -EINVAL; /* diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 8d1b946..8c1aa61 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1154,6 +1154,17 @@ static void update_curr_dl(struct rq *rq) throttle: if (dl_runtime_exceeded(dl_se) || dl_se->dl_yielded) { dl_se->dl_throttled = 1; + + /* + * If requested, inform the user about deadline misses and/or + * runtime overruns. + */ + if (unlikely(dl_se->flags & SCHED_FLAG_DL_DMISS && + dl_time_before(dl_se->deadline, rq_clock(rq)))) + dl_se->dl_dmiss = 1; + if (dl_se->flags & SCHED_FLAG_DL_OVERRUN) + dl_se->dl_overrun = 1; + __dequeue_task_dl(rq, curr, 0); if (unlikely(dl_se->dl_boosted || !start_dl_timer(curr))) enqueue_task_dl(rq, curr, ENQUEUE_REPLENISH); @@ -2565,6 +2576,8 @@ void __dl_clear_params(struct task_struct *p) dl_se->dl_throttled = 0; dl_se->dl_yielded = 0; dl_se->dl_non_contending = 0; + dl_se->dl_overrun = 0; + dl_se->dl_dmiss = 0; } bool dl_param_changed(struct task_struct *p, const struct sched_attr *attr) diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index 8585ad6..f3616c5 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "posix-timers.h" @@ -790,6 +791,22 @@ check_timers_list(struct list_head *timers, return 0; } +static inline void check_dl_overrun(struct task_struct *tsk) +{ + if (tsk->dl.dl_overrun) { + tsk->dl.dl_overrun = 0; + pr_info("runtime overrun: %s[%d]\n", + tsk->comm, task_pid_nr(tsk)); + __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); + } + if (tsk->dl.dl_dmiss) { + tsk->dl.dl_dmiss = 0; + pr_info("scheduling deadline miss: %s[%d]\n", + tsk->comm, task_pid_nr(tsk)); + __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); + } +} + /* * Check for any per-thread CPU timers that have fired and move them off * the tsk->cpu_timers[N] list onto the firing list. Here we update the @@ -803,6 +820,9 @@ static void check_thread_timers(struct task_struct *tsk, u64 expires; unsigned long soft; + if (dl_task(tsk)) + check_dl_overrun(tsk); + /* * If cputime_expires is zero, then there are no active * per thread CPU timers. @@ -905,6 +925,9 @@ static void check_process_timers(struct task_struct *tsk, struct task_cputime cputime; unsigned long soft; + if (dl_task(tsk)) + check_dl_overrun(tsk); + /* * If cputimer is not running, then there are no active * process wide timers (POSIX 1.b, itimers, RLIMIT_CPU). @@ -1110,6 +1133,9 @@ static inline int fastpath_timer_check(struct task_struct *tsk) return 1; } + if (dl_task(tsk) && (tsk->dl.dl_overrun || tsk->dl.dl_dmiss)) + return 1; + return 0; } -- 2.7.4 From 1584299234589395631@xxx Fri Nov 17 07:58:09 +0000 2017 X-GM-THRID: 1584299234589395631 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread