[ruby-core:65155] Re: [ruby-trunk - Feature #10267] [Open] Number of processors

From: Eric Wong <normalperson@...>
Date: 2014-09-20 05:57:50 UTC
List: ruby-core #65155
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
> On Sat, Sep 20, 2014 at 1:03 PM, Eric Wong <normalperson@yhbt.net> wrote:
> > akr@fsij.org wrote:
> >> matz accepted this feature including the method name,
> >> Etc.nprocessors_online.
> >
> > I think the name is too long.  How about naming it after the GNU
> > coreutils nproc(1) command?
> >
> >         Etc.nproc(:online)
> 
> This is an option. But "proc" is not unclear on ruby context. It is sometimes
> procedure, and it is sometimes process. I like processor or cpu.

OK.  I mainly want the ability to specify type as arg.

> > I think it is important to be able to get all CPUs, not just
> > online CPUs, too
> 
> > (to workaround old SMP bugs in the kernel):
> 
> What bug?

Anything which may involve synchronizing with softirq or workqueues, I
think...  I suppose my fix in 128dd1759d96ad36c379240f8b9463e8acfd37a1
(missing barrier in EPOLL_CTL_MOD) is one example.  I was never able to
reproduce that bug on my HW, but it worries me because some users are
still on old kernels and potentially affected.

> >         Etc.nproc(:all)
> 
> I don't think this is useful. I'd like to explain some kernel internal.
> Now, Linux has three type of number of cpus.
> 
> 1) online
> 2) present
> 3) possible

I think these names are fine for Ruby.

> "all" is not clear to me.
> 
> If you elaborate why you need nproc(:all), I may be able to suggest better
> name.

I just chose "all" because it matched the nproc(1) --all option
and didn't want to use Linux-specific naming.
But online/present/possible is fine, for now, too.

We could also have extra options like:

:cores - exclude HyperThread  (probably useful for Intel users)
:physical - number of sockets (maybe for affinity)

In This Thread

Prev Next