Received: by 10.223.164.202 with SMTP id h10csp1746512wrb; Thu, 16 Nov 2017 03:43:58 -0800 (PST) X-Google-Smtp-Source: AGs4zMZNTTyPDzU/ih5p9q+t48jLchI6Qr0hBg/vOoRDTqQH9/b6UWIn9FOeUcfdvYEikt2ByH2r X-Received: by 10.101.81.196 with SMTP id i4mr1413456pgq.54.1510832638493; Thu, 16 Nov 2017 03:43:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510832638; cv=none; d=google.com; s=arc-20160816; b=mRI03OM6giE2S7vN37weskk6TieNK6WVHDA/WX1B9i34KM5dwmijKQfoy1dJI2hIa0 Y3anEtXTm4DlrV2vZ//vczeyXYIrAA+BdbHYr3ePTeWwQdUe7Ji9WMJBmLiL/Dsj4P8x dp7gva2/BFdjX5itNrYu8AdIe8UlW2GPhhAgop+tgTS/SKBml/vmJWVCvnIecE1JTYbg EjwjPSX1LssTxuBts6Pd9Z9KxNDwDkvf2RC7suSCI9X05O5WfCyGzJXV7PBNGI5+WART 9GJAmrgNcc7ts8AaYIKgMId9H5pDwcdAqJCFYVxb9qXMWOlozyFLzO9KhBxeH7v1tB1p T3vQ== 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=5zctImTkGacqNkJio3AYNqymnFm6reT26tlzOu8p8ZM=; b=hlKRJ6RJpCcew8K4uYyVQeD3e8W7HRGkHXmWkZBfZkaPJmKH1XKJvEMtHV52uIrmJ3 O2syM4/yT0nEl4McuoQfQbqOo88omrR5xe9mFoli6WB/KT4K6Cc2pkxXjPl0QSzgaWfz p05kzCQeTlZdYtX914RVnH9MYHDpkjasZ7ywYJEL+ViOLllTNQxxWlchUVLQ1xEFI0lw 1hD59y44hZLhMvcV6MDZsSYoeH8/TS+y3UMQfcuzvnrrhPBHkfkTCpBfQKVhH30XNxvv u2hGLOK8rJQA+5O7lKT/ZKItogzUkvSHyddzKHz24yY0COPRZougvOhDcJp3OyiuUnIG cw9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@evidence-eu-com.20150623.gappssmtp.com header.s=20150623 header.b=lgAljyOs; 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 o9si726331pgq.600.2017.11.16.03.43.46; Thu, 16 Nov 2017 03:43:58 -0800 (PST) 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=lgAljyOs; 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 S1759435AbdKPKhP (ORCPT + 91 others); Thu, 16 Nov 2017 05:37:15 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:34834 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933189AbdKPKhD (ORCPT ); Thu, 16 Nov 2017 05:37:03 -0500 Received: by mail-wm0-f68.google.com with SMTP id y80so8428101wmd.0 for ; Thu, 16 Nov 2017 02:37:02 -0800 (PST) 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=5zctImTkGacqNkJio3AYNqymnFm6reT26tlzOu8p8ZM=; b=lgAljyOsZjiJomWga6AqSgFOftnTHrHX8EvBQwI+hfvZC3OQohg14uM5LP4BS2YAnn EWtVHd0NMj7yzioiRrySlyL0wHvEd+oAAnC0hbCx8ZGIik4qvm38m41fPbo7nxI5tpXB cKVOOdyEl6KTi64LdY18hqTd+5dDSU5sYYUlVljO+ZlbK2NjVcF4F80495N3DzL52o3X oXohvYXNUi9updoiHb3e6bacOWApYw6nS/7bu8xkqrXgK805zLghJT4cmyMq0qwDlqnG yhoc2Yz98QVwGpxeSanmzxTvuNGOPlB2hFf7x54PUniTs1Hd3CcQkQ9EQzMX67OZfjTD pTEw== 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=5zctImTkGacqNkJio3AYNqymnFm6reT26tlzOu8p8ZM=; b=UVPKXf1HgfY5GqNB2M4SfI2RzDPPV4H6ETz2YUOj0nbqao4GjrwJQNvyxTctnED4+p zdDF5qZNMqfeaMLHlStPO/DDo2c6azZKkKa3GqsERd+SRxFstngRZfvXF4qs1dzHQsRA ogWqJ3f9RWpHGeQAPF8CUxsjcHtKnfD+pyVQekB50lGmoWG9Qyo5AsSPJs2RKOpwVAxY aAglo3nmdTgAhWVd2Nv1dbwWGmxnETWXo7n3BkSd0TjOuwNlaBVSks99b8IP/GPRy1zn Ubs5H/ZWrVhCeSBEonftOb3xofzbxqhtdNJFQJ6YORDKmpFniTm4ZjfEj36cbPHCZgnS 5S7w== X-Gm-Message-State: AJaThX7+H5XqQ3/sBLMEeJdx04IPdfST/UhrBVoxhQ8rchhfbKurJ0np pT5/VbTW+vUsBrGPXAmUDfzVnys6 X-Received: by 10.28.23.67 with SMTP id 64mr1061154wmx.101.1510828621161; Thu, 16 Nov 2017 02:37:01 -0800 (PST) Received: from andor.evidence (host92-93-static.8-79-b.business.telecomitalia.it. [79.8.93.92]) by smtp.gmail.com with ESMTPSA id n7sm1496922wra.23.2017.11.16.02.37.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 16 Nov 2017 02:37:00 -0800 (PST) From: Claudio Scordino To: linux-kernel@vger.kernel.org Cc: Juri Lelli , Claudio Scordino , Luca Abeni , Tommaso Cucinotta , Peter Zijlstra , Ingo Molnar , Thomas Gleixner Subject: [PATCH v2] sched/deadline: runtime overrun signal Date: Thu, 16 Nov 2017 11:36:38 +0100 Message-Id: <1510828598-3364-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 of getting the delivery of a SIGXCPU signal whenever there is a runtime overrun. 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 Tested-by: Mathieu Poirier Cc: Tommaso Cucinotta CC: Peter Zijlstra CC: Ingo Molnar CC: Thomas Gleixner --- Changes from v1: - fix: do not send the signal in case of yield (reported by Mathieu) - removed the deadline miss signal because not needed in most of the cases --- include/linux/sched.h | 4 ++++ include/uapi/linux/sched.h | 1 + kernel/sched/core.c | 3 ++- kernel/sched/deadline.c | 7 +++++++ kernel/time/posix-cpu-timers.c | 20 ++++++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index a5dc7c9..2ec6014 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -472,11 +472,15 @@ 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 runtime + * overruns. */ int dl_throttled : 1; int dl_boosted : 1; int dl_yielded : 1; int dl_non_contending : 1; + int dl_overrun : 1; /* * Bandwidth enforcement timer. Each -deadline task has its diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h index 30a9e51..beb8ecd 100644 --- a/include/uapi/linux/sched.h +++ b/include/uapi/linux/sched.h @@ -49,5 +49,6 @@ */ #define SCHED_FLAG_RESET_ON_FORK 0x01 #define SCHED_FLAG_RECLAIM 0x02 +#define SCHED_FLAG_DL_OVERRUN 0x04 #endif /* _UAPI_LINUX_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 5b82a00..5bd2498f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4040,7 +4040,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)) return -EINVAL; /* diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index f349f7e..304087c 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1155,6 +1155,12 @@ 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 runtime overruns. */ + if (dl_runtime_exceeded(dl_se) && + (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); @@ -2566,6 +2572,7 @@ 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; } 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 1f27887..48281d9 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "posix-timers.h" @@ -791,6 +792,16 @@ 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); + } +} + /* * 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 @@ -804,6 +815,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. @@ -906,6 +920,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). @@ -1111,6 +1128,9 @@ static inline int fastpath_timer_check(struct task_struct *tsk) return 1; } + if (dl_task(tsk) && tsk->dl.dl_overrun) + return 1; + return 0; } -- 2.7.4 From 1584223117048708552@xxx Thu Nov 16 11:48:18 +0000 2017 X-GM-THRID: 1584098602730403681 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread