From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759350AbbA3ENh (ORCPT ); Thu, 29 Jan 2015 23:13:37 -0500 Received: from szxga03-in.huawei.com ([119.145.14.66]:7223 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751401AbbA3ENg (ORCPT ); Thu, 29 Jan 2015 23:13:36 -0500 Message-ID: <54CB04DC.3090405@huawei.com> Date: Fri, 30 Jan 2015 12:13:16 +0800 From: Zefan Li User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 To: Jason Low CC: Tejun Heo , Peter Zijlstra , , , , , Subject: Re: [RFC][PATCH] cpuset, sched: Fix cpuset sched_relax_domain_level References: <1422478025.4111.31.camel@j-VirtualBox> In-Reply-To: <1422478025.4111.31.camel@j-VirtualBox> X-Enigmail-Version: 1.6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.18.230] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020205.54CB04E3.0172,ss=1,re=0.001,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 816f46330ce0265712a8185a6c66e8a6 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2015/1/29 4:47, Jason Low wrote: > The cpuset.sched_relax_domain_level can control how far we do > immediate load balancing on a system. However, it was found on recent > kernels that echo'ing a value into cpuset.sched_relax_domain_level > did not reduce any immediate load balancing. > > The reason this occurred was because the update_domain_attr_tree() traversal > did not update for the "top_cpuset". This resulted in nothing being changed > when modifying the sched_relax_domain_level parameter. > > This patch was able to address that problem by having update_domain_attr_tree() > allowing updates for the root (top_cpuset) in the cpuset traversal. > > Signed-off-by: Jason Low Thanks for finding this bug! Please Add: Cc: # 3.9+ Fixes: fc560a26acce ("cpuset: replace cpuset->stack_list with cpuset_for_each_descendant_pre()") I'll prepare a different fix for 3.10.y when this patch hits mainline. > --- > kernel/cpuset.c | 12 +++++++----- > 1 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/kernel/cpuset.c b/kernel/cpuset.c > index 64b257f..0f58c54 100644 > --- a/kernel/cpuset.c > +++ b/kernel/cpuset.c > @@ -541,15 +541,17 @@ update_domain_attr(struct sched_domain_attr *dattr, struct cpuset *c) > } > > static void update_domain_attr_tree(struct sched_domain_attr *dattr, > - struct cpuset *root_cs) > + struct cpuset *root_cs, bool update_root) > { > struct cpuset *cp; > struct cgroup_subsys_state *pos_css; > > rcu_read_lock(); > cpuset_for_each_descendant_pre(cp, pos_css, root_cs) { > - if (cp == root_cs) > - continue; I don't think this fix is correct. We should simply remove these two lines, and no other changes are needed. > + if (cp == root_cs) { > + if (!update_root) > + continue; > + } > > /* skip the whole subtree if @cp doesn't have any CPU */ > if (cpumask_empty(cp->cpus_allowed)) { > @@ -644,7 +646,7 @@ static int generate_sched_domains(cpumask_var_t **domains, > dattr = kmalloc(sizeof(struct sched_domain_attr), GFP_KERNEL); > if (dattr) { > *dattr = SD_ATTR_INIT; > - update_domain_attr_tree(dattr, &top_cpuset); > + update_domain_attr_tree(dattr, &top_cpuset, true); > } > cpumask_copy(doms[0], top_cpuset.effective_cpus); > > @@ -752,7 +754,7 @@ restart: > if (apn == b->pn) { > cpumask_or(dp, dp, b->effective_cpus); > if (dattr) > - update_domain_attr_tree(dattr + nslot, b); > + update_domain_attr_tree(dattr + nslot, b, false); > > /* Done with this partition */ > b->pn = -1; >