From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932531AbdKFOkm (ORCPT ); Mon, 6 Nov 2017 09:40:42 -0500 Received: from mail-eopbgr50132.outbound.protection.outlook.com ([40.107.5.132]:48698 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752714AbdKFOki (ORCPT ); Mon, 6 Nov 2017 09:40:38 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Subject: [PATCH 2/4] sched: Account per task_group nr_iowait From: Kirill Tkhai To: mingo@redhat.com, peterz@infradead.org, linux-kernel@vger.kernel.org, ktkhai@virtuozzo.com Date: Mon, 06 Nov 2017 17:40:32 +0300 Message-ID: <150997923220.4082.7025655919924328239.stgit@localhost.localdomain> In-Reply-To: <150997831079.4082.2128628793286090861.stgit@localhost.localdomain> References: <150997831079.4082.2128628793286090861.stgit@localhost.localdomain> User-Agent: StGit/0.18 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: AM5P194CA0015.EURP194.PROD.OUTLOOK.COM (2603:10a6:203:8f::25) To VI1PR0801MB1343.eurprd08.prod.outlook.com (2603:10a6:800:3b::7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dfbe2d7a-ba86-471c-6a24-08d525245679 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:VI1PR0801MB1343; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;3:Xe9tkwcEhycShXtEPu37xkS+KCKM/vci1JhH+SZMy6N0QrfXc8KdaSIOaQ9m+KQoGOvhLAdnuiOeoevBrg/a3pxVJ6A6Zt2VOuym89CgEDmmBHDuXoS7JsyVc2jyEcwFugSH8MX1ODm1Ab21gFRvoLRUdgA0loxsF/en67g+MhvbkBxuIjXZk2ZdNIiW/PYiAHobka/QqHHZ62dpfnnVHFbZpeO9x4FYwkHumd/Poe2T496XDISRCH34tagKw3w7;25:Ub4s8FmIBDXTqy1UOIM28WQEvllAHkIkKOFqFzyfC4Cd/Ekl543ecP0xHg6kdKj4sOzIVi+SF2gRaV9HsAFPxzgHedStOtk2+wn65p9ITy2sVuBYIMWKLaee/ma79BtZ3zsT8IANzlg8i5x4QidOx+wom9vm1AO0pH1RTWvJa41zQAlFvbDCHlszQJpNd/Y5zzk8Jai5rpy5dypTnfmQY694BqyfpnL4P79q56C6XQudxsDvTrzf5/XBx3UirpDW6WPUZX4c+iUfhFOJRgyn5UtiVsEj6JcVPSQ9GB8FIAvM5BGqYS6phw6DLz3pJFzAsqsQvyMcMuOtdUoX5OX4ow==;31:Pv3+eY8K99WlhGcctFfK2JCqZjxiHNQ716TNDhHhxxg7dfWllB8WZHJEc3sA5re/ptbcXKholvz5QxVQOvc0LNrtzXDuwEgzdpLmHJUTXNnqJTpkbIzzgsssK6DLt9lbska1bxnpIt1vAhZUi46Ss1SX2GwhpSvc5QLKpASv0maxuCSdHG2FHLCVmj/NGVF32qOLohqwxfMhsgScAKRmWms2B/CSxuk9F4lU5YEZVOk= X-MS-TrafficTypeDiagnostic: VI1PR0801MB1343: X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;20:PsY4AyniEPatyaGHZ9TiHt9MVzbhyQ1F5AE7jasDPKEP0uOogHLpUDbz6A953rFl9xOuf6GJdOm2BZsR0IZ8x33T0DCsnT1n69NdcuqUTL0rHg8iejtQf2XbQC+glWrJ6wRPD1jvruRjLt5t7i+HkZg8fA8d6QE3T8MmaAdn4/vEwwVH2inyqneLmWnZ/DmXvP7zFWFXeiSWrfaphZN9tNySkyQgcJsCcJI8jZMyk1hXEv0Kbq6ZS4PM5T4doFmDunaSPKaOCWOoMmcEVFjqBBxLUPq/NUad6s7c2nM47wZE470xx565wvOUHtRUZ1fY7OxaSTjB0JHpVUE68QolL0jtfaE15ByFV6+kw/TXJsxaBFzfNE45PowVbCvZETwfF/fkj8x6TppQ52bwItXwJOrZ/Fs/0BVUvpirk0fIdjQ=;4:7yPtK8LPiWW8pcGrQwMw+pEyTWn+Y7rYeVvLfR/DOgV5UCXuWHfuWnDcXWF0AhtTkD54ej8Tm8NzJz10IYB9D+wIdn119GtUP7t/u+gYG/lDmhtSVOzD5vgVjq6u8rS+U92UFze3djlDCcASCdlZzre5QgISZ415dLnfSUZkvmilRo6oYuKAmzhcXfo1JC0j7Dx5j8q5xDSWe+kkEivJIJX8BqNTimDAkSAoH0H9MvltFwACG3Iyv8e7pbbR/8BkUBnzcR18RxYLa0Ymjq33HQ== X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3231021)(100000703101)(100105400095)(3002001)(93006095)(93001095)(10201501046)(6041248)(20161123564025)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0801MB1343;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0801MB1343; X-Forefront-PRVS: 048396AFA0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(6009001)(376002)(346002)(199003)(189002)(58126008)(316002)(105586002)(47776003)(83506002)(7736002)(103116003)(478600001)(33646002)(189998001)(101416001)(16526018)(66066001)(305945005)(106356001)(54356999)(76176999)(50986999)(8936002)(53936002)(68736007)(3846002)(97736004)(81156014)(6506006)(86362001)(8676002)(61506002)(5660300001)(50466002)(230700001)(25786009)(6116002)(81166006)(23676003)(2906002)(9686003)(55016002)(2950100002);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1343;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4MDFNQjEzNDM7MjM6cnpvUEFJSnBBZkxLK1pUT0s2OUlhSzVH?= =?utf-8?B?eHliTW01RUJtbFlWY0xhQ3RZcGh3U01FZzk2SjV5MjVSOFBHbzMxWFlRZExi?= =?utf-8?B?WHRLUHJldUhHRzhtM3RETm9mTTZwVmlqMU5qd1QwRWgvMVY4dG50Q0NSMzdK?= =?utf-8?B?cXRXb2srUjNiTkY0Z1VWb09DeGhGVWs5VStVRWJNT29EMS9vdlo3eDA4T2gx?= =?utf-8?B?TGJEMUp1dUlUWmRFbUJVRjFQNDRTdUs0WG5PWGhGMkJ1bG1WVHk0aGw1NWht?= =?utf-8?B?TFJjU0xiUXhTVkNkYTFlOEdPbjUwV08zRzg0MENaMFlTenExWkxVMEh0WUd4?= =?utf-8?B?MytGdmVzbllVSWFlNzNIdUQxVmJCdEVOYWs4SFA5YzFTaW1JZ3dQa3lxRGgy?= =?utf-8?B?UnpFOWdURGt0YUFuTHY2b3VURWtKOHhYcnAwUUM3cC9hMjNuV2FramJuUklN?= =?utf-8?B?Wkh5d1NVaXRPb2lLaTN3Y3FraDFadGNoQ3dkdkV0SFhJZDVhTEg1OFc5SUE3?= =?utf-8?B?VEpib1ZGTy93NlB1MXBkem9YSGtOT2FNQ2hTK2o1VzVFQ0NPUGNJVS9MVkdB?= =?utf-8?B?WWZXbDc4MXhyeVNuTnZ3R2I1SzNoeDkydGhUdkYrL3FPczdMVDM4bmFNZUpr?= =?utf-8?B?NndrRUJ3dXF0Y29kaEl6MDhFZ3RSV2Y1K1YzYXRYYkxtYTdINjc2ZG5UQUE0?= =?utf-8?B?OHdPeVdSR2R0VGNhNmJPMFlLaU1TR0NyU2U4aTg2c2t2RHIwdDRNMnVQcHRj?= =?utf-8?B?bS9pengzcnJsWWx2OVFXWk95SDBPZFdSZ21hR1ZHWG80T2x4endaUW5JQU4x?= =?utf-8?B?YjhhcjhkK1k4RUdJMlU4aDVIQ2tOWFZITGx2QWJrNGV0Q3NaWkxZcFg4TDh5?= =?utf-8?B?SkJHbTJUZjZ4S0tHeXAwS2twQlB0VVVqeTFLMzA1ZEEzZHZ5TE4rdndOZVhV?= =?utf-8?B?UGFFd3R2T3NlQmphYkJNcnowMkpGdVkxelUrc0tLQ0RUQ0JTR3pteTNoazFp?= =?utf-8?B?YjBxRVVmMU15aTVoeXdvZG8zMFVPMlVWRElnc1Q2anlDUDlNWHJYMHpReE4z?= =?utf-8?B?eGN2N0ZCbnAvN3NZT1BYV2lSY0ZQUUZJS2hSamZSWmhSZ1g0QjJsODBwckZv?= =?utf-8?B?Tmd2SVJKRmdvbk1pS09Pb1lnazF4bFA4c3JKb1pZbjEzeDhYd0xvMDAwUmM2?= =?utf-8?B?VndWTHRLTDQ2clJ2YjBVOTZiRlYxRE1jdjA4NGJXM2FBRWNPOGlzbzJRWDBP?= =?utf-8?B?c3JFWTRwbjhaMjRJTGc4RUlZY0phNEhFcDZTVjlsRlN4US8yVjVpbUFmSWVk?= =?utf-8?B?Nk9TeFRNU2RwdnR4QkZOMkpucU5tc2pnN3JrblVUanJvOU9IN20wRXdVRDVK?= =?utf-8?B?MktPWmZHemVBYU5RcXh0OVNGL2tJMnNSVkNnM3IvVXkyRWcxV2NKdS9YR3RU?= =?utf-8?Q?qA6Mcdcg=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;6:D9jrP9e7tlB/DG72NeLKFz+W9I9lotXAIXt+1OhY4jx/04vyMOK4cWzufeGT6o77HEkQ4UMZw5lhyCW4J6wmjyicbImx4XTXnizdzUIlvvM4PYQOdOuOXdgbX3DkbjXnXTB4DKArnexqPEDh88gUU2GtHxawWOYK13utJPB6eTS2rIC8AXaWWd7NhkAZtd6pZCsT923XUFs0OGH3xRisMW3DU6yYzRsOmkIcT8m0YEbx0UA0nMbZ8EGYzSXCGX4s6ydkSOgEif73YPJZwvpoz1rTb+uo3Xv1HgIF8sqk9jEou1HUC+4MXfjDI89GoVLY4FAiBav4eaNVE99rSePSl4OIndRfYr5KKQ3cbpozlKc=;5:7WKRTw08md1vAq6zArGbd+yx5ikZ0JvXIOYbWGNVXotKsqndO1vdI+3jicCibrel5HjaDWiPfw3+2dU4EmXjqZwTpjeOLdAraz58oeBBHM0jOz0lbUlHp1RauVNj1rorEXzjN3+iKibJAuK9KsB1WhD48QVi6qYfdixVvui1sQ0=;24:0D6dsqoF+CokgZ23CY/XLLx1/PULdnexVFYbO5E1AIzS11XvLVNvtRWkVT59m5JTR7V3mFJIVhBPZssUZuRyHUdaw/5HUGkNU7sW//grF24=;7:h62ZKsgzQ5XKw2EtvUJ/c3GkbDqGq1+4GcybNptAaVJDW/6pN+pYE8pmmOilvlQ1+/FKPotS46irXjNvx48iNKrKaNXL2UM9IvB1NvOatmI+zTcXTsHcHNb+0+c35wXJ00XLU5SWY70HYD3VsnGk+VCtO+0YuMVWStG/fSnynvOaZZqIZyVQgiY93mWwaZSCVN4EmxgNK4HX8B2Im+Xa7ODI/GOF0DKnxnM5Z5Iw8JnhixI/uE34yZW6YQBvZTru SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;20:hy8oArfMyCcFMznhQQ1IDVdYz7WI5GrV4qU5Q/A7pqtOnBRIg3nvFtz0vsVHLI6aE1ubfvrkrL+Wxc+YsuYSCDFlzzR/8uUsgPcnyt3/+wdlWfG4QXXOjGxVF4C3CCmBlQvnCDv09KpgqSacX0EnhBmdYejbHD4Xy5lfipObyQM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2017 14:40:33.8578 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dfbe2d7a-ba86-471c-6a24-08d525245679 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1343 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The patch makes number of task_group's tasks in iowait state be tracked separately. This may be useful for containers to check nr_iowait state of a single one. Signed-off-by: Kirill Tkhai --- kernel/sched/core.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ kernel/sched/sched.h | 5 +++++ 2 files changed, 50 insertions(+) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 712ee54edaa1..86d1ad5f49bd 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -796,12 +796,32 @@ void deactivate_task(struct rq *rq, struct task_struct *p, int flags) static void task_iowait_start(struct rq *rq, struct task_struct *p) { +#ifdef CONFIG_CGROUP_SCHED + struct task_group *tg = task_group(p); + + /* Task's sched_task_group is changed under both of the below locks */ + BUG_ON(!raw_spin_is_locked(&p->pi_lock) && !raw_spin_is_locked(&rq->lock)); + while (task_group_is_autogroup(tg)) + tg = tg->parent; + atomic_inc(&tg->stat[rq->cpu].nr_iowait); +#endif + atomic_inc(&rq->nr_iowait); delayacct_blkio_start(); } static void task_iowait_end(struct rq *rq, struct task_struct *p) { +#ifdef CONFIG_CGROUP_SCHED + struct task_group *tg = task_group(p); + + /* Task's sched_task_group is changed under both of the below locks */ + BUG_ON(!raw_spin_is_locked(&p->pi_lock) && !raw_spin_is_locked(&rq->lock)); + while (task_group_is_autogroup(tg)) + tg = tg->parent; + atomic_dec(&tg->stat[rq->cpu].nr_iowait); +#endif + delayacct_blkio_end(); atomic_dec(&rq->nr_iowait); } @@ -5805,6 +5825,9 @@ void __init sched_init(void) sched_clock_init(); wait_bit_init(); +#ifdef CONFIG_CGROUP_SCHED + alloc_size += nr_cpu_ids * sizeof(struct tg_stat); +#endif #ifdef CONFIG_FAIR_GROUP_SCHED alloc_size += 2 * nr_cpu_ids * sizeof(void **); #endif @@ -5814,6 +5837,10 @@ void __init sched_init(void) if (alloc_size) { ptr = (unsigned long)kzalloc(alloc_size, GFP_NOWAIT); +#ifdef CONFIG_CGROUP_SCHED + root_task_group.stat = (struct tg_stat *)ptr; + ptr += nr_cpu_ids * sizeof(struct tg_stat); +#endif #ifdef CONFIG_FAIR_GROUP_SCHED root_task_group.se = (struct sched_entity **)ptr; ptr += nr_cpu_ids * sizeof(void **); @@ -6133,6 +6160,8 @@ static DEFINE_SPINLOCK(task_group_lock); static void sched_free_group(struct task_group *tg) { + if (tg->stat) + kfree(tg->stat); free_fair_sched_group(tg); free_rt_sched_group(tg); autogroup_free(tg); @@ -6154,6 +6183,10 @@ struct task_group *sched_create_group(struct task_group *parent) if (!alloc_rt_sched_group(tg, parent)) goto err; + tg->stat = kzalloc(sizeof(struct tg_stat) * nr_cpu_ids, 0); + if (!tg->stat) + goto err; + return tg; err: @@ -6207,8 +6240,16 @@ void sched_offline_group(struct task_group *tg) static void sched_change_group(struct task_struct *tsk, int type) { + int cpu = 0, queued = task_on_rq_queued(tsk); struct task_group *tg; + if (!queued && tsk->in_iowait && type == TASK_MOVE_GROUP) { + cpu = task_cpu(tsk); + tg = task_group(tsk); + while (task_group_is_autogroup(tg)) + tg = tg->parent; + atomic_dec(&tg->stat[cpu].nr_iowait); + } /* * All callers are synchronized by task_rq_lock(); we do not use RCU * which is pointless here. Thus, we pass "true" to task_css_check() @@ -6216,6 +6257,10 @@ static void sched_change_group(struct task_struct *tsk, int type) */ tg = container_of(task_css_check(tsk, cpu_cgrp_id, true), struct task_group, css); + + if (!queued && tsk->in_iowait && type == TASK_MOVE_GROUP) + atomic_inc(&tg->stat[cpu].nr_iowait); + tg = autogroup_task_group(tsk, tg); tsk->sched_task_group = tg; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 58787e3631c7..5e7cb18e1340 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -290,6 +290,10 @@ struct cfs_bandwidth { #endif }; +struct tg_stat { + atomic_t nr_iowait; +}; + /* task group related information */ struct task_group { struct cgroup_subsys_state css; @@ -330,6 +334,7 @@ struct task_group { #endif struct cfs_bandwidth cfs_bandwidth; + struct tg_stat *stat; }; #ifdef CONFIG_FAIR_GROUP_SCHED