Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp4009964ybp; Mon, 7 Oct 2019 01:31:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqxDuylfQfWRsP2XrS+KV6wS3LH3/c86Wm3Pr+/1NUq4EbJnWTvU8HrSMnNFnP59GhxG/B1e X-Received: by 2002:a17:906:c79a:: with SMTP id cw26mr22735538ejb.265.1570437106459; Mon, 07 Oct 2019 01:31:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570437106; cv=none; d=google.com; s=arc-20160816; b=R/+dmJLSEPKAVevk9tnQygA7HLPvvWnxl1TUqnZy2h5MovRcAaufvqZKh49ePsu3KA 5SQntg3g4+rKO1lTtslhOET7sfVEzDalJwb2Y2C/c917qzUyJum9oXEMoPGTbJkCeOf9 v8nlGWI79dgBrLA3b0CyfjxltMhfVv72oEBqxST8VNyviJ081522l8LsvEbZfx71z/OW YykNYpxwtK1eUt7ocad7hPK8WnaUo4gn9sjFqJPEf1S0AjEnRWKsT29KECyX5BcxvWuv H+AF5tkNGSFOUm3YQBqNLhmhlnwLVCtDTaG9dxKRQEcneDwz0lE0GTpunidABltxh4aM gGmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:references:in-reply-to:date :subject:cc:to:from; bh=Vpx3d28u4IbFzMhCQ81hFjiBwQKcBZvMB86XpM1fxss=; b=NOpyqhX4JUbRrbmrNQL4Fq5H7/9A/C2uGMrFPag2w2qNSmyDLkkLT3dB8upwX1I3Il PgsQMVkt14WVt7byVfay1HknyZraGOgF3sBfEOGLzgEvRlWDTgDn3lVOMcNQ7/KYCEvo bUQOyNWvdFC6NSGcTYx54GSkwub1quDTGhiu2DmEGnlrp0/2569/JRu9XhYD2M4ceWM5 kwgfo/jQkSyZZy5rYuKpq7JpVo8zKJL1ZRl5eqmLSbXmHrdQFnLZpMfVgeYKifSF824m jEu2NDPfGKsuNc6idmNJvbJ8EXsOIAXQtynboIXgUcLTeBQOev92w6T4jFV773veswxo yz9w== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d1si7609728eds.148.2019.10.07.01.31.23; Mon, 07 Oct 2019 01:31:46 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727444AbfJGIbI (ORCPT + 99 others); Mon, 7 Oct 2019 04:31:08 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:20446 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727336AbfJGIbG (ORCPT ); Mon, 7 Oct 2019 04:31:06 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x978SMFU100581 for ; Mon, 7 Oct 2019 04:31:06 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2vg097twxf-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 07 Oct 2019 04:31:05 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 7 Oct 2019 09:31:03 +0100 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Mon, 7 Oct 2019 09:30:58 +0100 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x978Uvsx25428140 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 7 Oct 2019 08:30:57 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 29FF711C064; Mon, 7 Oct 2019 08:30:57 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DC2DC11C04C; Mon, 7 Oct 2019 08:30:54 +0000 (GMT) Received: from localhost.in.ibm.com (unknown [9.124.35.220]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP; Mon, 7 Oct 2019 08:30:54 +0000 (GMT) From: Parth Shah To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: peterz@infradead.org, mingo@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, patrick.bellasi@matbug.net, valentin.schneider@arm.com, pavel@ucw.cz, dsmythies@telus.net, quentin.perret@arm.com, rafael.j.wysocki@intel.com, tim.c.chen@linux.intel.com, daniel.lezcano@linaro.org Subject: [RFC v5 1/6] sched/core: Add manual background task classification using sched_setattr syscall Date: Mon, 7 Oct 2019 14:00:46 +0530 X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191007083051.4820-1-parth@linux.ibm.com> References: <20191007083051.4820-1-parth@linux.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 19100708-4275-0000-0000-0000036EC34B X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19100708-4276-0000-0000-00003881D060 Message-Id: <20191007083051.4820-2-parth@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-10-07_01:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1908290000 definitions=main-1910070088 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Small background tasks typically performs some housekeeping work and are less important in the overall scheme of load balancing and scheduling. So provide a way to mark the task which are small background noises with the use of additional flag to the existing task attribute. Also provide an interface from the userspace which uses sched_setattr syscall to mark such tasks. The scheduler may use this as hints to pack such tasks on fewer number of cores. Signed-off-by: Parth Shah --- include/linux/sched.h | 1 + include/uapi/linux/sched.h | 4 +++- kernel/sched/core.c | 9 +++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 1113dd4706ae..e03b85166e34 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1463,6 +1463,7 @@ extern struct pid *cad_pid; #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */ #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ #define PF_MEMALLOC_NOCMA 0x10000000 /* All allocation request will have _GFP_MOVABLE cleared */ +#define PF_CAN_BE_PACKED 0x20000000 /* Provide hints to the scheduler to pack such tasks */ #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */ #define PF_SUSPEND_TASK 0x80000000 /* This thread called freeze_processes() and should not be frozen */ diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h index 617bb59aa8ba..fccb1c57d037 100644 --- a/include/uapi/linux/sched.h +++ b/include/uapi/linux/sched.h @@ -55,6 +55,7 @@ #define SCHED_FLAG_KEEP_PARAMS 0x10 #define SCHED_FLAG_UTIL_CLAMP_MIN 0x20 #define SCHED_FLAG_UTIL_CLAMP_MAX 0x40 +#define SCHED_FLAG_TASK_PACKING 0x80 #define SCHED_FLAG_KEEP_ALL (SCHED_FLAG_KEEP_POLICY | \ SCHED_FLAG_KEEP_PARAMS) @@ -66,6 +67,7 @@ SCHED_FLAG_RECLAIM | \ SCHED_FLAG_DL_OVERRUN | \ SCHED_FLAG_KEEP_ALL | \ - SCHED_FLAG_UTIL_CLAMP) + SCHED_FLAG_UTIL_CLAMP | \ + SCHED_FLAG_TASK_PACKING) #endif /* _UAPI_LINUX_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index fa43ce3962e7..e7cda4aa8696 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4498,6 +4498,8 @@ static void __setscheduler_params(struct task_struct *p, p->rt_priority = attr->sched_priority; p->normal_prio = normal_prio(p); set_load_weight(p, true); + if (attr->sched_flags & SCHED_FLAG_TASK_PACKING) + p->flags |= PF_CAN_BE_PACKED; } /* Actually do priority change: must hold pi & rq lock. */ @@ -4557,6 +4559,8 @@ static int __sched_setscheduler(struct task_struct *p, struct rq_flags rf; int reset_on_fork; int queue_flags = DEQUEUE_SAVE | DEQUEUE_MOVE | DEQUEUE_NOCLOCK; + unsigned long long task_packing_flag = + attr->sched_flags & SCHED_FLAG_TASK_PACKING; struct rq *rq; /* The pi code expects interrupts enabled */ @@ -4686,6 +4690,8 @@ static int __sched_setscheduler(struct task_struct *p, goto change; if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP) goto change; + if (task_packing_flag) + goto change; p->sched_reset_on_fork = reset_on_fork; task_rq_unlock(rq, p, &rf); @@ -5181,6 +5187,9 @@ SYSCALL_DEFINE4(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr, attr.sched_util_max = p->uclamp_req[UCLAMP_MAX].value; #endif + if (p->flags & PF_CAN_BE_PACKED) + attr.sched_flags |= SCHED_FLAG_TASK_PACKING; + rcu_read_unlock(); retval = sched_read_attr(uattr, &attr, size); -- 2.17.1