All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Peng <chao.p.peng@linux.intel.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: wei.liu2@citrix.com, Ian.Campbell@citrix.com,
	stefano.stabellini@eu.citrix.com, andrew.cooper3@citrix.com,
	Ian.Jackson@eu.citrix.com, xen-devel@lists.xen.org,
	will.auld@intel.com, keir@xen.org, dgdegra@tycho.nsa.gov
Subject: Re: [PATCH v7 01/14] x86: add socket_to_cpumask
Date: Tue, 19 May 2015 14:12:24 +0800	[thread overview]
Message-ID: <20150519061224.GA8239@pengc-linux.bj.intel.com> (raw)
In-Reply-To: <555A0384020000780007B2A7@mail.emea.novell.com>

On Mon, May 18, 2015 at 02:21:40PM +0100, Jan Beulich wrote:
> >>> On 08.05.15 at 10:56, <chao.p.peng@linux.intel.com> wrote:
> > --- a/xen/arch/x86/mpparse.c
> > +++ b/xen/arch/x86/mpparse.c
> > @@ -64,6 +64,9 @@ unsigned int __read_mostly boot_cpu_physical_apicid = BAD_APICID;
> >  static unsigned int __devinitdata num_processors;
> >  static unsigned int __initdata disabled_cpus;
> >  
> > +/* Total detected cpus (may exceed NR_CPUS) */
> > +unsigned int total_cpus;
> > +
> >  /* Bitmask of physically existing CPUs */
> >  physid_mask_t phys_cpu_present_map;
> >  
> > @@ -112,6 +115,8 @@ static int __devinit MP_processor_info_x(struct mpc_config_processor *m,
> >  {
> >   	int ver, apicid, cpu = 0;
> >   	
> > +	total_cpus++;
> > +
> >  	if (!(m->mpc_cpuflag & CPU_ENABLED)) {
> >  		if (!hotplug)
> >  			++disabled_cpus;
> 
> Is there a reason you can't use disabled_cpus and avoid adding yet
> another variable?

The problem is not with disabled_cpus but with num_processors, which
does not keep the original detected cpus in current code.
Hence 'total_cpus = disabled_cpus + num_processors' may not be correct
in some cases.

> 
> > --- a/xen/arch/x86/smpboot.c
> > +++ b/xen/arch/x86/smpboot.c
> > @@ -59,6 +59,9 @@ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_mask);
> >  cpumask_t cpu_online_map __read_mostly;
> >  EXPORT_SYMBOL(cpu_online_map);
> >  
> > +unsigned int nr_sockets __read_mostly;
> > +cpumask_var_t *socket_to_cpumask __read_mostly;
> 
> I'd really like to see the "to" dropped from the name. It has been
> confusing me not for the first time. I'd also prefer the section
> annotations to be at their mandated place, between type and
> variable name.

Agreed, I also disliked this name while I just copied that from
node_to_cpumask.

> >  
> > +    nr_sockets = DIV_ROUND_UP(total_cpus, boot_cpu_data.x86_max_cores *
> > +                                          boot_cpu_data.x86_num_siblings);
> > +    socket_to_cpumask = xzalloc_array(cpumask_var_t, nr_sockets);
> > +    if ( !socket_to_cpumask )
> > +        panic("No memory for socket CPU siblings map");
> > +    for ( socket = 0; socket < nr_sockets; socket++ )
> > +        if ( !zalloc_cpumask_var(socket_to_cpumask + socket) )
> > +            panic("No memory for socket CPU siblings cpumask");
> 
> You might be allocating quite a bit too much memory now that you
> overestimate nr_sockets. Hence at least this second part of the
> change here would better be switched to an on demand allocation
> model.

Agreed.

> > +/*
> > + * This value is calculated by total_cpus/cpus_per_socket with the assumption
> > + * that APIC IDs from MP table are continuous. It's possible that this value
> > + * is less than the real socket number in the system if the APIC IDs from MP
> > + * table are too sparse. Also the value is considered not to change from the
> > + * initial startup. Violation of any of these assumptions may result in errors
> > + * and requires retrofitting all the relevant places.
> > + */
> 
> This all reads pretty frightening. How about using a better estimate of
> core and thread count (i.e. ones matching actually observed values
> instead of the nearest larger powers of two) in the nr_sockets
> calculation? Overestimating nr_sockets is surely better than using too
> small a value, as the alternative of remembering to always bounds
> check socket values before use (not only in your series, but also in
> future changes) is going to be pretty fragile.

OK I will try this.

Chao

  reply	other threads:[~2015-05-19  6:12 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-08  8:56 [PATCH v7 00/14] enable Cache Allocation Technology (CAT) for VMs Chao Peng
2015-05-08  8:56 ` [PATCH v7 01/14] x86: add socket_to_cpumask Chao Peng
2015-05-18 13:21   ` Jan Beulich
2015-05-19  6:12     ` Chao Peng [this message]
2015-05-19  6:28       ` Jan Beulich
2015-05-19  6:47         ` Chao Peng
2015-05-19  6:52           ` Jan Beulich
2015-05-19  7:10             ` Chao Peng
2015-05-19  7:31               ` Jan Beulich
2015-05-19  9:51                 ` Chao Peng
2015-05-19 10:18                   ` Jan Beulich
2015-05-20  3:13                     ` Chao Peng
2015-05-20  9:00                       ` Jan Beulich
2015-05-08  8:56 ` [PATCH v7 02/14] x86: improve psr scheduling code Chao Peng
2015-05-08 10:20   ` Jan Beulich
2015-05-11  1:35     ` Chao Peng
2015-05-08  8:56 ` [PATCH v7 03/14] x86: detect and initialize Intel CAT feature Chao Peng
2015-05-18 13:33   ` Jan Beulich
2015-05-19  7:40     ` Chao Peng
2015-05-19  8:42       ` Jan Beulich
2015-05-19  8:46         ` Jan Beulich
2015-05-19  9:33         ` Chao Peng
2015-05-19 10:22           ` Jan Beulich
2015-05-20  3:21             ` Chao Peng
2015-05-20  9:06               ` Jan Beulich
2015-05-20  9:26                 ` Chao Peng
2015-05-08  8:56 ` [PATCH v7 04/14] x86: maintain COS to CBM mapping for each socket Chao Peng
2015-05-18 13:35   ` Jan Beulich
2015-05-19  7:41     ` Chao Peng
2015-05-08  8:56 ` [PATCH v7 05/14] x86: add COS information for each domain Chao Peng
2015-05-08  8:56 ` [PATCH v7 06/14] x86: expose CBM length and COS number information Chao Peng
2015-05-08  8:56 ` [PATCH v7 07/14] x86: dynamically get/set CBM for a domain Chao Peng
2015-05-14  9:19   ` Dario Faggioli
2015-05-15  1:35     ` Chao Peng
2015-05-18 13:45   ` Jan Beulich
2015-05-08  8:56 ` [PATCH v7 08/14] x86: add scheduling support for Intel CAT Chao Peng
2015-05-08  8:56 ` [PATCH v7 09/14] xsm: add CAT related xsm policies Chao Peng
2015-05-08  8:56 ` [PATCH v7 10/14] tools/libxl: minor name changes for CMT commands Chao Peng
2015-05-08  8:56 ` [PATCH v7 11/14] tools/libxl: add command to show PSR hardware info Chao Peng
2015-05-08  8:56 ` [PATCH v7 12/14] tools/libxl: introduce some socket helpers Chao Peng
2015-05-08  8:56 ` [PATCH v7 13/14] tools: add tools support for Intel CAT Chao Peng
2015-05-08 13:38   ` Ian Campbell
2015-05-08  8:56 ` [PATCH v7 14/14] docs: add xl-psr.markdown Chao Peng
2015-05-08 13:39   ` Ian Campbell
2015-05-08 13:41 ` [PATCH v7 00/14] enable Cache Allocation Technology (CAT) for VMs Ian Campbell
2015-05-08 13:48   ` Jan Beulich
2015-05-08 14:11     ` Ian Campbell
2015-05-11  1:37       ` Chao Peng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150519061224.GA8239@pengc-linux.bj.intel.com \
    --to=chao.p.peng@linux.intel.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=keir@xen.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=will.auld@intel.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.