From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: Re: [PATCH 03 of 11 v3] xen: sched_credit: when picking, make sure we get an idle one, if any Date: Fri, 01 Feb 2013 14:57:11 +0100 Message-ID: <510BC9B7.6030906@ts.fujitsu.com> References: <45d2f5dc459ce84ca7ee.1359716473@Solace> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <45d2f5dc459ce84ca7ee.1359716473@Solace> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Dario Faggioli Cc: Marcus Granado , Dan Magenheimer , Ian Campbell , Anil Madhavapeddy , George Dunlap , Andrew Cooper , Ian Jackson , xen-devel@lists.xen.org, Jan Beulich , Daniel De Graaf , Matt Wilson List-Id: xen-devel@lists.xenproject.org Am 01.02.2013 12:01, schrieb Dario Faggioli: > The pcpu picking algorithm treats two threads of a SMT core the same. > More specifically, if one is idle and the other one is busy, they both > will be assigned a weight of 1. Therefore, when picking begins, if the > first target pcpu is the busy thread (and if there are no other idle > pcpu than its sibling), that will never change. > > This change fixes this by ensuring that, before entering the core of > the picking algorithm, the target pcpu is an idle one (if there is an > idle pcpu at all, of course). > > Signed-off-by: Dario Faggioli Acked-by: Juergen Gross > > diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c > --- a/xen/common/sched_credit.c > +++ b/xen/common/sched_credit.c > @@ -526,6 +526,18 @@ static int > if ( vc->processor == cpu&& IS_RUNQ_IDLE(cpu) ) > cpumask_set_cpu(cpu,&idlers); > cpumask_and(&cpus,&cpus,&idlers); > + > + /* > + * It is important that cpu points to an idle processor, if a suitable > + * one exists (and we can use cpus to check and, possibly, choose a new > + * CPU, as we just&&-ed it with idlers). In fact, if we are on SMT, and > + * cpu points to a busy thread with an idle sibling, both the threads > + * will be considered the same, from the "idleness" calculation point > + * of view", preventing vcpu from being moved to the thread that is > + * actually idle. > + */ > + if ( !cpumask_empty(&cpus)&& !cpumask_test_cpu(cpu,&cpus) ) > + cpu = cpumask_cycle(cpu,&cpus); > cpumask_clear_cpu(cpu,&cpus); > > while ( !cpumask_empty(&cpus) ) > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel > > -- Juergen Gross Principal Developer Operating Systems PBG PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: juergen.gross@ts.fujitsu.com Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html