* [PATCH] [sched] Don't account time after deadline twice @ 2014-06-30 1:26 Zhihui Zhang 2014-07-01 13:08 ` Peter Zijlstra 0 siblings, 1 reply; 5+ messages in thread From: Zhihui Zhang @ 2014-06-30 1:26 UTC (permalink / raw) To: mingo, peterz; +Cc: linux-kernel Unless we want to double-penalize an overrun task, the time after the deadline and before the current time is already accounted in the negative dl_se->runtime value. So we can leave it as is in the case of dmiss && rorun. Signed-off-by: Zhihui Zhang <zzhsuny@gmail.com> --- kernel/sched/deadline.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index fc4f98b1..67df0d6 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -579,10 +579,8 @@ int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se) * the next instance. Thus, if we do not account that, we are * stealing bandwidth from the system at each deadline miss! */ - if (dmiss) { - dl_se->runtime = rorun ? dl_se->runtime : 0; - dl_se->runtime -= rq_clock(rq) - dl_se->deadline; - } + if (dmiss && !rorun) + dl_se->runtime = dl_se->deadline - rq_clock(rq); return 1; } -- 1.8.1.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [sched] Don't account time after deadline twice 2014-06-30 1:26 [PATCH] [sched] Don't account time after deadline twice Zhihui Zhang @ 2014-07-01 13:08 ` Peter Zijlstra 2014-07-01 13:59 ` Juri Lelli 0 siblings, 1 reply; 5+ messages in thread From: Peter Zijlstra @ 2014-07-01 13:08 UTC (permalink / raw) To: Zhihui Zhang; +Cc: mingo, linux-kernel, Juri Lelli [-- Attachment #1: Type: text/plain, Size: 1121 bytes --] On Sun, Jun 29, 2014 at 09:26:10PM -0400, Zhihui Zhang wrote: > Unless we want to double-penalize an overrun task, the time after the deadline > and before the current time is already accounted in the negative dl_se->runtime > value. So we can leave it as is in the case of dmiss && rorun. Juri? > Signed-off-by: Zhihui Zhang <zzhsuny@gmail.com> > --- > kernel/sched/deadline.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c > index fc4f98b1..67df0d6 100644 > --- a/kernel/sched/deadline.c > +++ b/kernel/sched/deadline.c > @@ -579,10 +579,8 @@ int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se) > * the next instance. Thus, if we do not account that, we are > * stealing bandwidth from the system at each deadline miss! > */ > - if (dmiss) { > - dl_se->runtime = rorun ? dl_se->runtime : 0; > - dl_se->runtime -= rq_clock(rq) - dl_se->deadline; > - } > + if (dmiss && !rorun) > + dl_se->runtime = dl_se->deadline - rq_clock(rq); > > return 1; > } > -- > 1.8.1.2 > [-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [sched] Don't account time after deadline twice 2014-07-01 13:08 ` Peter Zijlstra @ 2014-07-01 13:59 ` Juri Lelli [not found] ` <CADFvMYKzpihC3GLwNFZW0KCrZQY5FDSH5EQd4iLmHLK+hauDWA@mail.gmail.com> 0 siblings, 1 reply; 5+ messages in thread From: Juri Lelli @ 2014-07-01 13:59 UTC (permalink / raw) To: Peter Zijlstra; +Cc: Zhihui Zhang, mingo, linux-kernel On Tue, 1 Jul 2014 15:08:16 +0200 Peter Zijlstra <peterz@infradead.org> wrote: > On Sun, Jun 29, 2014 at 09:26:10PM -0400, Zhihui Zhang wrote: > > Unless we want to double-penalize an overrun task, the time after the deadline > > and before the current time is already accounted in the negative dl_se->runtime > > value. So we can leave it as is in the case of dmiss && rorun. > > Juri? > > > Signed-off-by: Zhihui Zhang <zzhsuny@gmail.com> > > --- > > kernel/sched/deadline.c | 6 ++---- > > 1 file changed, 2 insertions(+), 4 deletions(-) > > > > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c > > index fc4f98b1..67df0d6 100644 > > --- a/kernel/sched/deadline.c > > +++ b/kernel/sched/deadline.c > > @@ -579,10 +579,8 @@ int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se) > > * the next instance. Thus, if we do not account that, we are > > * stealing bandwidth from the system at each deadline miss! > > */ > > - if (dmiss) { > > - dl_se->runtime = rorun ? dl_se->runtime : 0; If we didn't return 0 before, we are going to throttle (or replenish) the entity, and you want runtime to be <=0. So, this is needed. > > - dl_se->runtime -= rq_clock(rq) - dl_se->deadline; > > - } A little pessimism in some cases, due to the fact that we use both rq_clock and rq_clock_task (for the budget). Thanks, - Juri > > + if (dmiss && !rorun) > > + dl_se->runtime = dl_se->deadline - rq_clock(rq); > > > > return 1; > > } > > -- > > 1.8.1.2 > > ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <CADFvMYKzpihC3GLwNFZW0KCrZQY5FDSH5EQd4iLmHLK+hauDWA@mail.gmail.com>]
* Re: [PATCH] [sched] Don't account time after deadline twice [not found] ` <CADFvMYKzpihC3GLwNFZW0KCrZQY5FDSH5EQd4iLmHLK+hauDWA@mail.gmail.com> @ 2014-07-03 9:50 ` Juri Lelli 2014-07-04 1:41 ` Zhihui Zhang 0 siblings, 1 reply; 5+ messages in thread From: Juri Lelli @ 2014-07-03 9:50 UTC (permalink / raw) To: Zhihui Zhang; +Cc: Peter Zijlstra, mingo, linux-kernel On Wed, 2 Jul 2014 19:44:04 -0400 Zhihui Zhang <zzhsuny@gmail.com> wrote: > My point is that rq_clock(rq) - dl_se->deadline is already part of > dl_se->runtime, which is decremented before calling dl_runtime_exceeded(). But, we decrement dl_se->runtime looking at rq_clock_task(rq), that is in general <= rq_clock(rq), that we use to handle deadlines. So, if we do like you suggest, in some cases we could end up stealing some bandwidth from the system. Indeed, we prefer some pessimism here. Thanks, - Juri > So the following line is not needed in the case of both overrun and missing > deadline: > > dl_se->runtime -= rq_clock(rq) - dl_se->deadline; > > Or did I miss anything? > > thanks, > > > On Tue, Jul 1, 2014 at 9:59 AM, Juri Lelli <juri.lelli@gmail.com> wrote: > > > On Tue, 1 Jul 2014 15:08:16 +0200 > > Peter Zijlstra <peterz@infradead.org> wrote: > > > > > On Sun, Jun 29, 2014 at 09:26:10PM -0400, Zhihui Zhang wrote: > > > > Unless we want to double-penalize an overrun task, the time after the > > deadline > > > > and before the current time is already accounted in the negative > > dl_se->runtime > > > > value. So we can leave it as is in the case of dmiss && rorun. > > > > > > Juri? > > > > > > > Signed-off-by: Zhihui Zhang <zzhsuny@gmail.com> > > > > --- > > > > kernel/sched/deadline.c | 6 ++---- > > > > 1 file changed, 2 insertions(+), 4 deletions(-) > > > > > > > > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c > > > > index fc4f98b1..67df0d6 100644 > > > > --- a/kernel/sched/deadline.c > > > > +++ b/kernel/sched/deadline.c > > > > @@ -579,10 +579,8 @@ int dl_runtime_exceeded(struct rq *rq, struct > > sched_dl_entity *dl_se) > > > > * the next instance. Thus, if we do not account that, we are > > > > * stealing bandwidth from the system at each deadline miss! > > > > */ > > > > - if (dmiss) { > > > > - dl_se->runtime = rorun ? dl_se->runtime : 0; > > > > If we didn't return 0 before, we are going to throttle (or replenish) > > the entity, and you want runtime to be <=0. So, this is needed. > > > > > > - dl_se->runtime -= rq_clock(rq) - dl_se->deadline; > > > > - } > > > > A little pessimism in some cases, due to the fact that we use both > > rq_clock and rq_clock_task (for the budget). > > > > Thanks, > > > > - Juri > > > > > > + if (dmiss && !rorun) > > > > + dl_se->runtime = dl_se->deadline - rq_clock(rq); > > > > > > > > return 1; > > > > } > > > > -- > > > > 1.8.1.2 > > > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [sched] Don't account time after deadline twice 2014-07-03 9:50 ` Juri Lelli @ 2014-07-04 1:41 ` Zhihui Zhang 0 siblings, 0 replies; 5+ messages in thread From: Zhihui Zhang @ 2014-07-04 1:41 UTC (permalink / raw) To: Juri Lelli; +Cc: Peter Zijlstra, mingo, linux-kernel We calculate difference between two readings of a clock to see how much time has elapsed. Part of the time between rq_clock(rq) - dl_se->deadline can indeed be accounted for by reading a different clock (i.e., rq_clock_task()) if the task was running during the period. And that is how dl_se->runtime is obtained. After all, both clocks are running independently, right? Furthermore, the caller of dl_runtime_exceeded() will still use rq_clock() and dl_se->deadline to determine if we throttle or replenish. Anyway, I have failed to see any steal of time. Could you please give a concrete example (perhaps with numbers)? thanks, -Zhihui On Thu, Jul 3, 2014 at 5:50 AM, Juri Lelli <juri.lelli@gmail.com> wrote: > On Wed, 2 Jul 2014 19:44:04 -0400 > Zhihui Zhang <zzhsuny@gmail.com> wrote: > >> My point is that rq_clock(rq) - dl_se->deadline is already part of >> dl_se->runtime, which is decremented before calling dl_runtime_exceeded(). > > But, we decrement dl_se->runtime looking at rq_clock_task(rq), that is > in general <= rq_clock(rq), that we use to handle deadlines. So, if we > do like you suggest, in some cases we could end up stealing some > bandwidth from the system. Indeed, we prefer some pessimism here. > > Thanks, > > - Juri > >> So the following line is not needed in the case of both overrun and missing >> deadline: >> >> dl_se->runtime -= rq_clock(rq) - dl_se->deadline; >> >> Or did I miss anything? >> >> thanks, >> >> >> On Tue, Jul 1, 2014 at 9:59 AM, Juri Lelli <juri.lelli@gmail.com> wrote: >> >> > On Tue, 1 Jul 2014 15:08:16 +0200 >> > Peter Zijlstra <peterz@infradead.org> wrote: >> > >> > > On Sun, Jun 29, 2014 at 09:26:10PM -0400, Zhihui Zhang wrote: >> > > > Unless we want to double-penalize an overrun task, the time after the >> > deadline >> > > > and before the current time is already accounted in the negative >> > dl_se->runtime >> > > > value. So we can leave it as is in the case of dmiss && rorun. >> > > >> > > Juri? >> > > >> > > > Signed-off-by: Zhihui Zhang <zzhsuny@gmail.com> >> > > > --- >> > > > kernel/sched/deadline.c | 6 ++---- >> > > > 1 file changed, 2 insertions(+), 4 deletions(-) >> > > > >> > > > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c >> > > > index fc4f98b1..67df0d6 100644 >> > > > --- a/kernel/sched/deadline.c >> > > > +++ b/kernel/sched/deadline.c >> > > > @@ -579,10 +579,8 @@ int dl_runtime_exceeded(struct rq *rq, struct >> > sched_dl_entity *dl_se) >> > > > * the next instance. Thus, if we do not account that, we are >> > > > * stealing bandwidth from the system at each deadline miss! >> > > > */ >> > > > - if (dmiss) { >> > > > - dl_se->runtime = rorun ? dl_se->runtime : 0; >> > >> > If we didn't return 0 before, we are going to throttle (or replenish) >> > the entity, and you want runtime to be <=0. So, this is needed. >> > >> > > > - dl_se->runtime -= rq_clock(rq) - dl_se->deadline; >> > > > - } >> > >> > A little pessimism in some cases, due to the fact that we use both >> > rq_clock and rq_clock_task (for the budget). >> > >> > Thanks, >> > >> > - Juri >> > >> > > > + if (dmiss && !rorun) >> > > > + dl_se->runtime = dl_se->deadline - rq_clock(rq); >> > > > >> > > > return 1; >> > > > } >> > > > -- >> > > > 1.8.1.2 >> > > > >> > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-07-04 1:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-30 1:26 [PATCH] [sched] Don't account time after deadline twice Zhihui Zhang
2014-07-01 13:08 ` Peter Zijlstra
2014-07-01 13:59 ` Juri Lelli
[not found] ` <CADFvMYKzpihC3GLwNFZW0KCrZQY5FDSH5EQd4iLmHLK+hauDWA@mail.gmail.com>
2014-07-03 9:50 ` Juri Lelli
2014-07-04 1:41 ` Zhihui Zhang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome