bug#42044: nproc says "1" on mobile processors

2020-06-26 Thread Adam Borowski
On Fri, Jun 26, 2020 at 07:26:16PM +0100, Pádraig Brady wrote:
> On 25/06/2020 18:37, Adam Borowski wrote:
> > Hi!
> > I'm afraid that `nproc` shows only the number of _currently_ online CPUs,
> > which on mobile processors tends to be 1 when starting a job.  As there's
> > a need to conserve power, holding cores online when they have nothing to
> > do would be a waste, thus they constantly get onlined and offlined.

> > Ie, could you please make nproc include all available CPUs rather than
> > only online ones?
> 
> Does `nproc --all` suffice for your use case?

It works on the mobile box, but doesn't obey affinity mask anymore:

[~]$ numactl -N 0 nproc --all
64
[~]$ numactl -N 0 nproc 
16

I'd wish for fitting all uses, big and small.  Ie, the answer "on this
machine, with currently imposed limits, what's the fastest level of
parallelism?".


Meow.
-- 
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ in the beginning was the boot and root floppies and they were good.
⢿⡄⠘⠷⠚⠋⠀   --  on #linux-sunxi
⠈⠳⣄





bug#42044: nproc says "1" on mobile processors

2020-06-26 Thread Pádraig Brady

On 25/06/2020 18:37, Adam Borowski wrote:

Hi!
I'm afraid that `nproc` shows only the number of _currently_ online CPUs,
which on mobile processors tends to be 1 when starting a job.  As there's
a need to conserve power, holding cores online when they have nothing to
do would be a waste, thus they constantly get onlined and offlined.

For example, on a 10-core box where the processor consists of three
clusters, 4+4+2 cores, topline graph shows:

(▁▁▁ oo)
(▁ ▁ oo)
(▃o)
(oo)
(▂o)
(▁▁▁ oo)
(▁ ▁ oo)
(▁▁  oo)
(▁  ▁oo)
(▁▁  oo)
(▁   oo)

(1 line = 1 second, "o" means offline core, otherwise it's utilization
level.)

Because of noisy GUI (that eg. draws this very graph), the machine keeps
flipping between onlining just CPU 0, or a cluster of CPU4..7.  Thus,
`nproc` will randomly says either "1" or "4", while the user expects to
run her compile with all 10 cores.

I found out that numa_num_task_cpus() from libnuma gets the right answer,
handling both affinity mask and CPUs present-but-currently-offline.  But
alas, it doesn't provide a command-line tool, and thousands of scripts
already use nproc, thus switching a tool would be a waste of effort.

Ie, could you please make nproc include all available CPUs rather than
only online ones?


Does `nproc --all` suffice for your use case?





bug#42044: nproc says "1" on mobile processors

2020-06-25 Thread Adam Borowski
Hi!
I'm afraid that `nproc` shows only the number of _currently_ online CPUs,
which on mobile processors tends to be 1 when starting a job.  As there's
a need to conserve power, holding cores online when they have nothing to
do would be a waste, thus they constantly get onlined and offlined.

For example, on a 10-core box where the processor consists of three
clusters, 4+4+2 cores, topline graph shows:

(▁▁▁ oo)
(▁ ▁ oo)
(▃o)
(oo)
(▂o)
(▁▁▁ oo)
(▁ ▁ oo)
(▁▁  oo)
(▁  ▁oo)
(▁▁  oo)
(▁   oo)

(1 line = 1 second, "o" means offline core, otherwise it's utilization
level.)

Because of noisy GUI (that eg. draws this very graph), the machine keeps
flipping between onlining just CPU 0, or a cluster of CPU4..7.  Thus,
`nproc` will randomly says either "1" or "4", while the user expects to
run her compile with all 10 cores.

I found out that numa_num_task_cpus() from libnuma gets the right answer,
handling both affinity mask and CPUs present-but-currently-offline.  But
alas, it doesn't provide a command-line tool, and thousands of scripts
already use nproc, thus switching a tool would be a waste of effort.

Ie, could you please make nproc include all available CPUs rather than
only online ones?


Meow!
-- 
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ in the beginning was the boot and root floppies and they were good.
⢿⡄⠘⠷⠚⠋⠀   --  on #linux-sunxi
⠈⠳⣄