Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4345548imm; Wed, 30 May 2018 04:02:27 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJEZkIv+5VJExt13jzlkbsM8cfaMjoebvq9xS59MkB4Fd3QnxhFdwiTEK8D+IK6xqWg0EKL X-Received: by 2002:a62:1f03:: with SMTP id f3-v6mr2310659pff.213.1527678147901; Wed, 30 May 2018 04:02:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527678147; cv=none; d=google.com; s=arc-20160816; b=HWwCZY3iIncOniH6slsNiMk6eahPlp8x4OGEO0zleD5QFYvbG9Oun33672277SunM9 Q1MVaNIo6ekE+i2OUjO0HCKN2AokWzvDwKikRbJo6ntk0LBHVyGalTuDzTHM9GdEnK7b hajPrwGXTEFRKVBNRIHJy3g19WMiRPTaYzS7Ud6YJnbJRyY9NdmNWrhhSoWOaAs8ObHk R2Lq8q078qSiGT9UoUNddX89F/Dg/+ci4fFIRyL2eXL54uiUBDbEDPx19xvsAANwEtCH Au1sBFxkPwGc7QG5T66styBOBnsycwgGuMyyl6e5SCH+8IkzdBM9oDobSHcWzDqcXAJh ep+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=gl0SkmygsYALqJ7UrALo43dAPYlbSZ+RQdefG4rMbWI=; b=eKm+3zOMp/uOjE1ngtob/YmTCl6dnOa6kSbrHASRk96aTz2/AAF38mLV8Tskr3EopA wr2m4/3ofRmT7BG5Mzi1d4zXfMaWSzncGtymyBpJjuP3NOBHXZ8keBie8PxzQZPooPou tv1i0Kpvm/87fGOgE8QUDKwWX6ylmMrj3VockZiBcoeWHHYEi5g8E7b7Ss3SQzKk8hDP bqX56UTZLBSq75TxtV2um3W24p5arAV3R5OI/5vTUQhtuTSa1RmUk1jAD4dAb+PDWUpi Ei5BtH7V+HjHAd67Dd9Lth4actyrey6plBjLWNlW1jmWoyB2MV6HhAuqw2TrAKo3Pj0F oRyQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1-v6si33617509plr.483.2018.05.30.04.02.13; Wed, 30 May 2018 04:02:27 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752370AbeE3LB2 (ORCPT + 99 others); Wed, 30 May 2018 07:01:28 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:54086 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752291AbeE3LBW (ORCPT ); Wed, 30 May 2018 07:01:22 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 520CD15B2; Wed, 30 May 2018 04:01:22 -0700 (PDT) Received: from e110439-lin (e110439-lin.cambridge.arm.com [10.1.210.68]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 630E23F25D; Wed, 30 May 2018 04:01:20 -0700 (PDT) Date: Wed, 30 May 2018 12:01:17 +0100 From: Patrick Bellasi To: Vincent Guittot Cc: Peter Zijlstra , Ingo Molnar , linux-kernel , "Rafael J. Wysocki" , Juri Lelli , Dietmar Eggemann , Morten Rasmussen , viresh kumar , Valentin Schneider , Quentin Perret Subject: Re: [PATCH v5 02/10] sched/rt: add rt_rq utilization tracking Message-ID: <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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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? Don't we expect any strange behaviors on real systems when RT tasks are moved around? Perhaps we should run some tests on Android... -- #include Patrick Bellasi