[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen: add hypercall option to temporarily pin a vcpu



>>> On 26.02.16 at 12:20, <dario.faggioli@xxxxxxxxxx> wrote:
> On Fri, 2016-02-26 at 12:14 +0100, Juergen Gross wrote:
>> On 26/02/16 11:39, Jan Beulich wrote:
>> > 
>> > > @@ -670,7 +676,13 @@ int cpu_disable_scheduler(unsigned int cpu)
>> > >              if ( cpumask_empty(&online_affinity) &&
>> > >                   cpumask_test_cpu(cpu, v->cpu_hard_affinity) )
>> > >              {
>> > > -                printk(XENLOG_DEBUG "Breaking affinity for
>> > > %pv\n", v);
>> > > +                if ( v->affinity_broken )
>> > > +                {
>> > > +                    /* The vcpu is temporarily pinned, can't
>> > > move it. */
>> > > +                    vcpu_schedule_unlock_irqrestore(lock, flags,
>> > > v);
>> > > +                    ret = -EBUSY;
>> > > +                    continue;
>> > > +                }
>> > So far the function can only return 0 or -EAGAIN. By using
>> > "continue"
>> > here you will make it impossible for the caller to reliably
>> > determine
>> > whether possibly both things failed. Despite -EBUSY being a logical
>> > choice here, I think you'd better use -EAGAIN here too. And it
>> > needs
>> > to be determined whether continuing the loop in this as well as the
>> > pre-existing cases is actually the right thing to do.
>> EBUSY vs. EAGAIN: by returning EAGAIN I would signal to Xen tools
>> that
>> the hypervisor is currently not able to do the desired operation
>> (especially removing a cpu from a cpupool), but the situation will
>> change automatically via scheduling. EBUSY will stop retries in Xen
>> tools and this is want I want here: I can't be sure the situation
>> will change soon.
>> 
> I agree with this.

I'm of two minds here: I can see your viewpoint, but considering
this is called "temporarily pin a vcpu" the condition is supposed to
be going away again soon.

>> Regarding continuation of the loop: I think you are right in the
>> EBUSY case: I should break out of the loop. I should not do so in the
>> EAGAIN case as I want to remove as many vcpus from the physical cpu
>> as
>> possible without returning to the Xen tools in between.
>> 
> And with this too.
> 
> And I think that, if we indeed break out of the loop on EBUSY, that
> will also make it possible to figure out properly what actually went
> wrong, so it should be fine from that point of view as well.

Yes indeed.

>> > > @@ -679,6 +691,8 @@ int cpu_disable_scheduler(unsigned int cpu)
>> > >                      v->affinity_broken = 1;
>> > >                  }
>> > >  
>> > > +                printk(XENLOG_DEBUG "Breaking affinity for
>> > > %pv\n", v);
>> > Wouldn't it be even better to make this the "else" to the
>> > preceding if(), since in the suspend case this is otherwise going
>> > to be printed for every vCPU not currently running on pCPU0?
>> Yes, I'll change it.
>> 
> On this, can (either of) you elaborate a bit more? I don't think I'm
> following...

In addition to Jürgen's reply: My main concern here is that on
a bug system this message would get printed for almost every
vCPU in the system, which could end up being a lot of noise.

And there's a similar message on the resume side I think -
perhaps that one should be silenced too.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.