Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4551410imm; Wed, 30 May 2018 07:41:23 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKgGpfY12g5H30/5ofO+6x7ZjgPMEZMUtOmVRgeJwDhzVM4xhv6wCo01C0hTVaqWR86OuZm X-Received: by 2002:a17:902:4603:: with SMTP id o3-v6mr3212407pld.49.1527691283265; Wed, 30 May 2018 07:41:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527691283; cv=none; d=google.com; s=arc-20160816; b=hE6Ksur5ScJQpW5IFAWS+WGzLhAezDOhYfGWja3WIHc7CGsiVAaTG1HzoXDihyjcC1 xaulV2OM7xQOJVxwjByKsnbWYfPEsQ1nrHgzap6xz7NJiMXHmXW1S+zsWGYCcbphyYVm jP2Zr7HYEVmcrBKOdBYCKPQ5L7HWWsZuN3RcFR8zJp8yEowTo9f4HrXkHNDwmua5KQyh 2Ri7S0nG7IxD1ynegzx0gzLTYEQqFTXA3RFxD/E+BesNxZ1W5BV3V0fjgnBy+zSqaGhL CIWLiSlleG/0UIThcA1DtPO47a0tPaIIuST87ghTCdEkVBEgVHG1Tuc/rFOhcvgAh6NO 4+2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=F0KByl4Q3I8dJTi4TOVWpErd8XZqff2uL3oSUyflIOI=; b=XKxa6Sqxq01RfzHIpG4rk8XsfgGb1jCwO5RrS2NMhLhxNTA4rS6aRe+8UN1xJKScSc bxzyu5nvbS6y7PON2QM8H4Fa7tqXhr2LKyo8ZGOhblDxxPPs9v0I7znjuAoAue0eih7o I9y1+vM+JMRMv8nIo+Edd0e+BDQuW1A3G2Ick77X/p6XUTaZGly/vd7PWWWzYTAZFctL aghMjhz8G/MS9LRGO2GPPtJNSdfTq4nPo1NB9XUJdmW/CuCNzUGFpoZg7HI9j+NTR61B KhHaXiarC8hPiYn60MG4oZ8Uq+s7fI5Q4uBfVyXEl/kkHnkQG9WvqxeSuECG0mP2Zagx WRfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=gWAPIUwN; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q8-v6si24716309pgc.505.2018.05.30.07.41.09; Wed, 30 May 2018 07:41:23 -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=@linaro.org header.s=google header.b=gWAPIUwN; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753705AbeE3OkN (ORCPT + 99 others); Wed, 30 May 2018 10:40:13 -0400 Received: from mail-it0-f65.google.com ([209.85.214.65]:52863 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753272AbeE3OkK (ORCPT ); Wed, 30 May 2018 10:40:10 -0400 Received: by mail-it0-f65.google.com with SMTP id m194-v6so2158539itg.2 for ; Wed, 30 May 2018 07:40:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=F0KByl4Q3I8dJTi4TOVWpErd8XZqff2uL3oSUyflIOI=; b=gWAPIUwNUUg3epYJRGZJQD6NK1nyPwvVCm9vlhL9uAppI7EQnzrieF9Qk1vrGAYiYC 3sPLiV72kG3+FMQaSoW90DjR5ua7GVQIEL1p5KR4hsaGv8lWzpY4UOdh86NkN74A6MRx FozAl/lEZcXfTNvbaStocPSh33AStLhruVV68= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=F0KByl4Q3I8dJTi4TOVWpErd8XZqff2uL3oSUyflIOI=; b=b4jGzfq1p6B49foqI62VeikzwnfxsVBWQBFhJ5MLtpD1zFd1LFdQ0wIZoD500cC8ZJ BOhtF8P4E8b7Z23KPcevjKXs1+3y+K/75Mh5SqdvgOtluE9Q0daSakpQTXodXHdylahI gTKvhjWkeNIR/Aj2eEcdYkRNh2zBaqDOtymb5eA8TDrMAiuEPBevio7fOw6JVWfPGLbR aPw2QiP4FdwgkBRTTz57NCWnfF1FHyur0LbnfcBTy1QaQgF4326jqPy17eumef5RdpYN pQCY9bDYS2DnM5VPcFsnTgrehrKZXoL6ASX7DDidvtOGx6PCpm7Duh/BNlD5Tn7RT/Y3 BK6g== X-Gm-Message-State: APt69E3dM4jAjVFn9nXgbZJYVt86xHsZ/Sup11MopEj7rWyGt/bYXnU3 e4b7SL7KsvhbN07QGQIpbRKmrhr6n0zuF/GcVG7oRVT/ X-Received: by 2002:a24:5fca:: with SMTP id r193-v6mr1833199itb.89.1527691209302; Wed, 30 May 2018 07:40:09 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a6b:4cc:0:0:0:0:0 with HTTP; Wed, 30 May 2018 07:39:48 -0700 (PDT) In-Reply-To: <20180530110117.GJ30654@e110439-lin> References: <1527253951-22709-1-git-send-email-vincent.guittot@linaro.org> <1527253951-22709-3-git-send-email-vincent.guittot@linaro.org> <20180525155437.GE30654@e110439-lin> <20180530093203.GG30654@e110439-lin> <20180530110117.GJ30654@e110439-lin> From: Vincent Guittot Date: Wed, 30 May 2018 16:39:48 +0200 Message-ID: Subject: Re: [PATCH v5 02/10] sched/rt: add rt_rq utilization tracking To: Patrick Bellasi Cc: Peter Zijlstra , Ingo Molnar , linux-kernel , "Rafael J. Wysocki" , Juri Lelli , Dietmar Eggemann , Morten Rasmussen , viresh kumar , Valentin Schneider , Quentin Perret Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 30 May 2018 at 13:01, Patrick Bellasi wrote: > On 30-May 12:06, Vincent Guittot wrote: >> On 30 May 2018 at 11:32, Patrick Bellasi wrote: >> > On 29-May 15:29, Vincent Guittot wrote: > > [...] > >> >> >> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c >> >> >> index ef3c4e6..b4148a9 100644 >> >> >> --- a/kernel/sched/rt.c >> >> >> +++ b/kernel/sched/rt.c >> >> >> @@ -5,6 +5,8 @@ >> >> >> */ >> >> >> #include "sched.h" >> >> >> >> >> >> +#include "pelt.h" >> >> >> + >> >> >> int sched_rr_timeslice = RR_TIMESLICE; >> >> >> int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE; >> >> >> >> >> >> @@ -1572,6 +1574,9 @@ pick_next_task_rt(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) >> >> >> >> >> >> rt_queue_push_tasks(rq); >> >> >> >> >> >> + update_rt_rq_load_avg(rq_clock_task(rq), rq, >> >> >> + rq->curr->sched_class == &rt_sched_class); >> >> >> + >> >> >> return p; >> >> >> } >> >> >> >> >> >> @@ -1579,6 +1584,8 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p) >> >> >> { >> >> >> update_curr_rt(rq); >> >> >> >> >> >> + update_rt_rq_load_avg(rq_clock_task(rq), rq, 1); >> >> >> + >> >> >> /* >> >> >> * The previous task needs to be made eligible for pushing >> >> >> * if it is still active >> >> >> @@ -2308,6 +2315,7 @@ static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued) >> >> >> struct sched_rt_entity *rt_se = &p->rt; >> >> >> >> >> >> update_curr_rt(rq); >> >> >> + update_rt_rq_load_avg(rq_clock_task(rq), rq, 1); >> >> > >> >> > Mmm... not entirely sure... can't we fold >> >> > update_rt_rq_load_avg() into update_curr_rt() ? >> >> > >> >> > Currently update_curr_rt() is used in: >> >> > dequeue_task_rt >> >> > pick_next_task_rt >> >> > put_prev_task_rt >> >> > task_tick_rt >> >> > >> >> > while we update_rt_rq_load_avg() only in: >> >> > pick_next_task_rt >> >> > put_prev_task_rt >> >> > task_tick_rt >> >> > and >> >> > update_blocked_averages >> >> > >> >> > Why we don't we need to update at dequeue_task_rt() time ? >> >> >> >> We are tracking rt rq and not sched entities so we want to know when >> >> sched rt will be the running or not sched class on the rq. Tracking >> >> dequeue_task_rt is useless >> > >> > What about (push) migrations? >> >> it doesn't make any difference. put_prev_task_rt() says that the prev >> task that was running, was a rt task so we can account past time at rt >> running time >> and pick_next_task_rt says that the next one will be a rt task so we >> have to account elapse time either to rt or not rt time according. > > Right, I was missing that you are tracking RT (and DL) only at RQ > level... not SE level, thus we will not see migrations of blocked > utilization. > >> I can probably optimize the pick_next_task_rt by doing the below instead: >> >> if (rq->curr->sched_class == &rt_sched_class) >> update_rt_rq_load_avg(rq_clock_task(rq), rq, 0); >> >> If prev task is a rt task, put_prev_task_rt has already done the update > > Right. > > Just one more question about non tracking SE. Once we migrate an RT > task with the current solution we will have to wait for it's PELT > blocked utilization to decay completely before starting to ignore that > task contribution, which means that: > 1. we will see an higher utilization on the original CPU > 2. we don't immediately see the increased utilization on the > destination CPU > > I remember Juri had some patches to track SE utilization thus fixing > the two issues above. Can you remember me why we decided to go just > for the RQ tracking solution? I would say that one main reason is the overhead of tracking per SE Then, what we want to track the other class utilization to replace current rt_avg. And we want something to track steal time of cfs to compensate the fact that cfs util_avg will be lower than what cfs really needs. so we really want rt util_avg to smoothly decrease if a rt task migrate to let time to cfs util_avg to smoothly increase itself as cfs tasks will run more often. Based on some discussion on IRC, I'm studying how to track more accurately the stolen time > Don't we expect any strange behaviors on real systems when RT tasks > are moved around? Which kind of strange behavior ? we don't use rt util_avg for OPP selection when a rt task is running > > Perhaps we should run some tests on Android... > > -- > #include > > Patrick Bellasi