|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH v1 2/6] sched: track time spent in hypervisor tasks
On Fri, 2020-06-12 at 06:43 +0200, Jürgen Groß wrote:
> On 12.06.20 02:22, Volodymyr Babchuk wrote:
> > +void vcpu_end_hyp_task(struct vcpu *v)
> > +{
> > + int delta;
> > +
> > + if ( is_idle_vcpu(v) )
> > + return;
> > +
> > + ASSERT(v->in_hyp_task);
> > +
> > + /* We assume that hypervisor task time will not overflow int */
>
> This will definitely happen for long running VMs. Please use a 64-bit
> variable.
>
It is not suposed to hold long time spans, as I described in the reply
to previous email.
> > + delta = NOW() - v->hyp_entry_time;
> > + atomic_add(delta, &v->sched_unit->hyp_time);
> > +
> > +#ifndef NDEBUG
> > + v->in_hyp_task = false;
> > +#endif
> > +}
> > +
> > /*
> > * Do the actual movement of an unit from old to new CPU. Locks for *both*
> > * CPUs needs to have been taken already when calling this!
> > @@ -2615,6 +2646,7 @@ static void schedule(void)
> >
> > SCHED_STAT_CRANK(sched_run);
> >
> > + vcpu_end_hyp_task(current);
> > rcu_read_lock(&sched_res_rculock);
> >
> > lock = pcpu_schedule_lock_irq(cpu);
> > diff --git a/xen/common/softirq.c b/xen/common/softirq.c
> > index 063e93cbe3..03a29384d1 100644
> > --- a/xen/common/softirq.c
> > +++ b/xen/common/softirq.c
> > @@ -71,7 +71,9 @@ void process_pending_softirqs(void)
> > void do_softirq(void)
> > {
> > ASSERT_NOT_IN_ATOMIC();
> > + vcpu_begin_hyp_task(current);
> > __do_softirq(0);
> > + vcpu_end_hyp_task(current);
>
> This won't work for scheduling. current will either have changed,
> or in x86 case __do_softirq() might just not return. You need to
> handle that case explicitly in schedule() (you did that for the
> old vcpu, but for the case schedule() is returning you need to
> call vcpu_begin_hyp_task(current) there).
>
Well, this is one of questions, I wanted to discuss. I certainly need
to call vcpu_begin_hyp_task(current) after context switch. But what it
is the right place? If my understaning is right, code on x86 platform
will never reach this point. Or I'm wrong there?
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |