Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753647AbcKHSww (ORCPT ); Tue, 8 Nov 2016 13:52:52 -0500 Received: from foss.arm.com ([217.140.101.70]:38988 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752576AbcKHSwt (ORCPT ); Tue, 8 Nov 2016 13:52:49 -0500 Date: Tue, 8 Nov 2016 18:53:09 +0000 From: Juri Lelli To: Luca Abeni Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Ingo Molnar , Claudio Scordino , Steven Rostedt Subject: Re: [RFC v3 1/6] Track the active utilisation Message-ID: <20161108185309.GG16920@e106622-lin> References: <1477317998-7487-1-git-send-email-luca.abeni@unitn.it> <1477317998-7487-2-git-send-email-luca.abeni@unitn.it> <20161101164451.GA2769@ARMvm> <20161101221014.27eb441a@utopia> <20161108175635.GF16920@e106622-lin> <20161108191730.29c54a98@utopia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161108191730.29c54a98@utopia> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3153 Lines: 73 On 08/11/16 19:17, Luca Abeni wrote: > Hi Juri, > > On Tue, 8 Nov 2016 17:56:35 +0000 > Juri Lelli wrote: > [...] > > > > > static void switched_to_dl(struct rq *rq, struct task_struct > > > > > *p) { > > > > > + add_running_bw(&p->dl, &rq->dl); > > > > > > > > > > /* If p is not queued we will update its parameters at > > > > > next wakeup. */ if (!task_on_rq_queued(p)) > > > > > > > > Don't we also need to remove bw in task_dead_dl()? > > > I think task_dead_dl() is invoked after invoking dequeue_task_dl(), > > > which takes care of this... Or am I wrong? (I think I explicitly > > > tested this, and modifications to task_dead_dl() turned out to be > > > unneeded) > > > > > > > Mmm. You explicitly check that TASK_ON_RQ_MIGRATING or DEQUEUE_SLEEP > > (which btw can be actually put together with an or condition), so I > > don't think that any of those turn out to be true when the task dies. > I might be very wrong here, but I think do_exit() just does something > like > tsk->state = TASK_DEAD; > and then invokes schedule(), and __schedule() does > if (!preempt && prev->state) { > if (unlikely(signal_pending_state(prev->state, prev))) { > prev->state = TASK_RUNNING; > } else { > deactivate_task(rq, prev, DEQUEUE_SLEEP); > [...] > so dequeue_task_dl() will see DEQUEUE_SLEEP... Or am I misunderstanding > what you are saying? > > > Also, AFAIU, do_exit() works on current and the TASK_DEAD case is > > handled in finish_task_switch(), so I don't think we are taking care > > of the "task is dying" condition. > Ok, so I am missing something... The state is set to TASK_DEAD, and > then schedule() is called... So, __schedule() sees the dying task as > "prev" and invokes deactivate_task() with the DEQUEUE_SLEEP flag... > After that, finish_task_switch() calls task_dead_dl(). Is this wrong? > If not, why aren't we taking care of the "task is dying" condition? > No, I think you are right. But, semantically this cleanup goes in task_dead_dl(), IMHO. It's most probably moot if it complicates things, but it might be helpful to differentiate the case between a task that is actually going to sleep (and for which we want to activate the timer) and a task that is dying (and for which we want to release bw immediately). So, it actually matters for next patch, not here. But, maybe we want to do things clean from start? > > > Peter, does what I'm saying make any sense? :) > > > > I still have to set up things here to test these patches (sorry, I was > > travelling), but could you try to create some tasks and that kill them > > from another shell to see if the accounting deviates or not? Or did > > you already do this test? > I think this is one of the tests I tried... > I have to check if I changed this code after the test (but I do not > think I did). Anyway, tomorrow I'll write a script for automating this > test, and I'll leave it running for some hours. > OK, thanks. As said I think that you actually handle the case already, but I'll try to setup testing as well soon. Thanks, - Juri