linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* How to get number of physical CPU in linux from user space?
@ 2002-10-24 23:02 chrisl
  2002-10-25  0:47 ` Andrew Walrond
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: chrisl @ 2002-10-24 23:02 UTC (permalink / raw)
  To: linux-kernel

It seems that /proc/cpuinfo will return the number of logical CPU.
If the machine has Intel Hyper-Thread enabled, that number is bigger
than physical CPU number. Usually twice as big.

My question is, what is the reliable way for user space program
to detect the number of physical CPU in the current machine?

If in it is in the kernel, I can read from cpu_sibling_map[]
or phys_cpu_id[]. But it seems not easy read that from
user space.

Of course I can do "gdb /proc/kcore" to get them. But is there
any better way?

Thanks in advance.

Chris




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-24 23:02 How to get number of physical CPU in linux from user space? chrisl
@ 2002-10-25  0:47 ` Andrew Walrond
  2002-10-25  8:26 ` Gianni Tedesco
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 12+ messages in thread
From: Andrew Walrond @ 2002-10-25  0:47 UTC (permalink / raw)
  To: chrisl; +Cc: linux-kernel

I rebuilt 2.5.44 with the ACPI stuff enabled, and I see 2 cpus in 
/proc/cpuinfo:

    daedalus@hercules daedalus $ cat /proc/cpuinfo
    processor    : 0
    vendor_id    : GenuineIntel
    cpu family    : 15
    model        : 2
    model name    : Intel(R) XEON(TM) CPU 2.20GHz
    stepping    : 4
    cpu MHz        : 2200.469
    cache size    : 512 KB
    fdiv_bug    : no
    hlt_bug        : no
    f00f_bug    : no
    coma_bug    : no
    fpu        : yes
    fpu_exception    : yes
    cpuid level    : 2
    wp        : yes
    flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
    mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
    bogomips    : 4341.76

    processor    : 1
    vendor_id    : GenuineIntel
    cpu family    : 15
    model        : 2
    model name    : Intel(R) XEON(TM) CPU 2.20GHz
    stepping    : 4
    cpu MHz        : 2200.469
    cache size    : 512 KB
    fdiv_bug    : no
    hlt_bug        : no
    f00f_bug    : no
    coma_bug    : no
    fpu        : yes
    fpu_exception    : yes
    cpuid level    : 2
    wp        : yes
    flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
    mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
    bogomips    : 4390.91


Also dmesg says:

    daedalus@hercules daedalus $ dmesg
     1462.55 usecs.
    task migration cache decay timeout: 2 msecs.
    enabled ExtINT on CPU#0
    ESR value before enabling vector: 00000000
    ESR value after enabling vector: 00000000
    Booting processor 1/1 eip 2000
    Initializing CPU#1
    masked ExtINT on CPU#1
    ESR value before enabling vector: 00000000
    ESR value after enabling vector: 00000000
    Calibrating delay loop... 4390.91 BogoMIPS
    CPU: Before vendor init, caps: 3febfbff 00000000 00000000, vendor = 0
    CPU: Trace cache: 12K uops, L1 D cache: 8K
    CPU: L2 cache: 512K
    CPU: Physical Processor ID: 0
    CPU: After vendor init, caps: 3febfbff 00000000 00000000 00000000
    Intel machine check reporting enabled on CPU#1.
    CPU#1: Intel P4/Xeon Extended MCE MSRs (12) available
    CPU#1: Thermal monitoring enabled
    CPU:     After generic, caps: 3febfbff 00000000 00000000 00000000
    CPU:             Common caps: 3febfbff 00000000 00000000 00000000
    CPU1: Intel(R) XEON(TM) CPU 2.20GHz stepping 04
    Total of 2 processors activated (8732.67 BogoMIPS).


And a bit further down...

    checking TSC synchronization across 2 CPUs: passed.
    Starting migration thread for cpu 0
    Bringing up 1
    CPU 1 IS NOW UP!
    Starting migration thread for cpu 1
    CPUS done 4294967295

And down some more we seem to have 4 cpus...

    ACPI: Processor [CPU0] (supports C1)
    ACPI: Processor [CPU1] (supports C1)
    ACPI: Processor [CPU2] (supports C1)
    ACPI: Processor [CPU3] (supports C1)

I think with ACPI disabled I had 4 processors listed in /proc/cpuinfo, 
but I'll check.



chrisl@vmware.com wrote:

>It seems that /proc/cpuinfo will return the number of logical CPU.
>If the machine has Intel Hyper-Thread enabled, that number is bigger
>than physical CPU number. Usually twice as big.
>
>My question is, what is the reliable way for user space program
>to detect the number of physical CPU in the current machine?
>
>If in it is in the kernel, I can read from cpu_sibling_map[]
>or phys_cpu_id[]. But it seems not easy read that from
>user space.
>
>Of course I can do "gdb /proc/kcore" to get them. But is there
>any better way?
>
>Thanks in advance.
>
>Chris
>
>
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at  http://www.tux.org/lkml/
>
>  
>



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-24 23:02 How to get number of physical CPU in linux from user space? chrisl
  2002-10-25  0:47 ` Andrew Walrond
@ 2002-10-25  8:26 ` Gianni Tedesco
  2002-10-25  8:27 ` Martin J. Bligh
  2002-10-25 12:38 ` Dave Jones
  3 siblings, 0 replies; 12+ messages in thread
From: Gianni Tedesco @ 2002-10-25  8:26 UTC (permalink / raw)
  To: chrisl; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 683 bytes --]

On Fri, 2002-10-25 at 00:02, chrisl@vmware.com wrote:
> It seems that /proc/cpuinfo will return the number of logical CPU.
> If the machine has Intel Hyper-Thread enabled, that number is bigger
> than physical CPU number. Usually twice as big.
> 
> My question is, what is the reliable way for user space program
> to detect the number of physical CPU in the current machine?

I believe there was talk about representing the CPUs in driverfs
somehow. Not sure of the details though...

-- 
// Gianni Tedesco (gianni at ecsc dot co dot uk)
lynx --source www.scaramanga.co.uk/gianni-at-ecsc.asc | gpg --import
8646BE7D: 6D9F 2287 870E A2C9 8F60 3A3C 91B5 7669 8646 BE7D

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 232 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-24 23:02 How to get number of physical CPU in linux from user space? chrisl
  2002-10-25  0:47 ` Andrew Walrond
  2002-10-25  8:26 ` Gianni Tedesco
@ 2002-10-25  8:27 ` Martin J. Bligh
  2002-10-25 18:20   ` chrisl
  2002-10-25 12:38 ` Dave Jones
  3 siblings, 1 reply; 12+ messages in thread
From: Martin J. Bligh @ 2002-10-25  8:27 UTC (permalink / raw)
  To: chrisl, linux-kernel

Define "physical CPU number" ;-) If you want to deteact which
ones are paired up, I believe that if all but the last bit
of the apicid is the same, they're siblings. You might have to
dig the apicid out of the bootlog if the cpuinfo stuff doesn't
tell you.

M.

--On Thursday, October 24, 2002 4:02 PM -0700 chrisl@vmware.com wrote:

> It seems that /proc/cpuinfo will return the number of logical CPU.
> If the machine has Intel Hyper-Thread enabled, that number is bigger
> than physical CPU number. Usually twice as big.
> 
> My question is, what is the reliable way for user space program
> to detect the number of physical CPU in the current machine?
> 
> If in it is in the kernel, I can read from cpu_sibling_map[]
> or phys_cpu_id[]. But it seems not easy read that from
> user space.
> 
> Of course I can do "gdb /proc/kcore" to get them. But is there
> any better way?
> 
> Thanks in advance.
> 
> Chris
> 
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 
> 



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-24 23:02 How to get number of physical CPU in linux from user space? chrisl
                   ` (2 preceding siblings ...)
  2002-10-25  8:27 ` Martin J. Bligh
@ 2002-10-25 12:38 ` Dave Jones
  2002-10-25 19:07   ` chrisl
  3 siblings, 1 reply; 12+ messages in thread
From: Dave Jones @ 2002-10-25 12:38 UTC (permalink / raw)
  To: chrisl; +Cc: linux-kernel

On Thu, Oct 24, 2002 at 04:02:29PM -0700, chrisl@vmware.com wrote:
 > It seems that /proc/cpuinfo will return the number of logical CPU.
 > If the machine has Intel Hyper-Thread enabled, that number is bigger
 > than physical CPU number. Usually twice as big.
 > 
 > My question is, what is the reliable way for user space program
 > to detect the number of physical CPU in the current machine?
 > 
 > If in it is in the kernel, I can read from cpu_sibling_map[]
 > or phys_cpu_id[]. But it seems not easy read that from
 > user space.
 > 
 > Of course I can do "gdb /proc/kcore" to get them. But is there
 > any better way?

You can perform cpuid instructions in userspace to get the
number of siblings per physical package.

-- 
| Dave Jones.        http://www.codemonkey.org.uk

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-25  8:27 ` Martin J. Bligh
@ 2002-10-25 18:20   ` chrisl
  2002-10-25 18:35     ` David T Hollis
  2002-10-25 18:52     ` Martin J. Bligh
  0 siblings, 2 replies; 12+ messages in thread
From: chrisl @ 2002-10-25 18:20 UTC (permalink / raw)
  To: Martin J. Bligh; +Cc: linux-kernel


On Fri, Oct 25, 2002 at 01:27:00AM -0700, Martin J. Bligh wrote:
> Define "physical CPU number" ;-) If you want to deteact which

I mean the number of cpu chip you can count on the mother board.

> ones are paired up, I believe that if all but the last bit
> of the apicid is the same, they're siblings. You might have to
> dig the apicid out of the bootlog if the cpuinfo stuff doesn't
> tell you.

And you are right. Those apicid, after mask out the siblings,
are put in phys_cpu_id[] array in kernel.

I think about look at bootlog too, but that is not a reliable
way because bootlog might already been flush out after some
time.

Cheers

Chris




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-25 18:20   ` chrisl
@ 2002-10-25 18:35     ` David T Hollis
  2002-10-25 18:52     ` Martin J. Bligh
  1 sibling, 0 replies; 12+ messages in thread
From: David T Hollis @ 2002-10-25 18:35 UTC (permalink / raw)
  To: chrisl; +Cc: Martin J. Bligh, linux-kernel

chrisl@vmware.com wrote:

>On Fri, Oct 25, 2002 at 01:27:00AM -0700, Martin J. Bligh wrote:
>  
>
>>Define "physical CPU number" ;-) If you want to deteact which
>>    
>>
>
>I mean the number of cpu chip you can count on the mother board.
>
>  
>
>>ones are paired up, I believe that if all but the last bit
>>of the apicid is the same, they're siblings. You might have to
>>dig the apicid out of the bootlog if the cpuinfo stuff doesn't
>>tell you.
>>    
>>
>
>And you are right. Those apicid, after mask out the siblings,
>are put in phys_cpu_id[] array in kernel.
>
>I think about look at bootlog too, but that is not a reliable
>way because bootlog might already been flush out after some
>time.
>
>Cheers
>
>Chris
>
>
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at  http://www.tux.org/lkml/
>  
>
Here is what RedHat does in some of their SRPMS to check if you have 
multiple CPUs on your build machine so they can do some parallel builds 
to speed up the build process (kernel, glibc, etc):

egrep -c "^cpu[0-9]+" /proc/stat || :




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-25 18:20   ` chrisl
  2002-10-25 18:35     ` David T Hollis
@ 2002-10-25 18:52     ` Martin J. Bligh
  1 sibling, 0 replies; 12+ messages in thread
From: Martin J. Bligh @ 2002-10-25 18:52 UTC (permalink / raw)
  To: chrisl; +Cc: linux-kernel

>> ones are paired up, I believe that if all but the last bit
>> of the apicid is the same, they're siblings. You might have to
>> dig the apicid out of the bootlog if the cpuinfo stuff doesn't
>> tell you.
> 
> And you are right. Those apicid, after mask out the siblings,
> are put in phys_cpu_id[] array in kernel.

Probably best to just hack /proc/cpuinfo output to include the apicid.

M.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-25 12:38 ` Dave Jones
@ 2002-10-25 19:07   ` chrisl
  0 siblings, 0 replies; 12+ messages in thread
From: chrisl @ 2002-10-25 19:07 UTC (permalink / raw)
  To: Dave Jones, linux-kernel

On Fri, Oct 25, 2002 at 01:38:57PM +0100, Dave Jones wrote:
> 
> You can perform cpuid instructions in userspace to get the
> number of siblings per physical package.
> 
Sure. But the problem is that we don't know for sure how many
of the sibling was enable in the kernel. Kernel support up to
2 siblings right now, but it might be more in later kernel. And
user might turn off sibling in kernel.

So divide the number of cpu in cpuinfo by number of siblings per
physical package do not work reliable.

Any comment to add one entry into /proc/cpuinfo to tell which physical
cpu it belong to? I don't mind submit a patch. It will be something
look like:

processor       : 2
physical cpu	: 1


Cheers

Chris



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: How to get number of physical CPU in linux from user space?
  2002-10-25 18:54 Nakajima, Jun
@ 2002-10-25 19:12 ` chrisl
  0 siblings, 0 replies; 12+ messages in thread
From: chrisl @ 2002-10-25 19:12 UTC (permalink / raw)
  To: Nakajima, Jun; +Cc: Martin J. Bligh, linux-kernel

On Fri, Oct 25, 2002 at 11:54:53AM -0700, Nakajima, Jun wrote:
> Recent distributions or the AC tree has additional fields in /proc/cpu,
> which tell
> - physical package id
> - number of threads 
> for each CPU.

That is exactly what I am looking for.

> 
> Using this info, you should be able to detect it. The problem is that they
> are not using the same keywords. I'm asking them to make those fields
> consistent.

Cool. Any idea when will those feature come to stander linux kernel?

Thanks.

Chris



^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: How to get number of physical CPU in linux from user space?
@ 2002-10-25 19:05 Nakajima, Jun
  0 siblings, 0 replies; 12+ messages in thread
From: Nakajima, Jun @ 2002-10-25 19:05 UTC (permalink / raw)
  To: Nakajima, Jun, chrisl, Martin J. Bligh; +Cc: linux-kernel

I meant /proc/cpuinfo

Thanks,
Jun

-----Original Message-----
From: Nakajima, Jun 
Sent: Friday, October 25, 2002 11:53 AM
To: 'chrisl@vmware.com'; Martin J. Bligh
Cc: linux-kernel@vger.kernel.org
Subject: RE: How to get number of physical CPU in linux from user space?


Recent distributions or the AC tree has additional fields in /proc/cpu,
which tell
- physical package id
- number of threads 
for each CPU.

Using this info, you should be able to detect it. The problem is that they
are not using the same keywords. I'm asking them to make those fields
consistent.

Thanks,
Jun

-----Original Message-----
From: chrisl@vmware.com [mailto:chrisl@vmware.com]
Sent: Friday, October 25, 2002 11:20 AM
To: Martin J. Bligh
Cc: linux-kernel@vger.kernel.org
Subject: Re: How to get number of physical CPU in linux from user space?



On Fri, Oct 25, 2002 at 01:27:00AM -0700, Martin J. Bligh wrote:
> Define "physical CPU number" ;-) If you want to deteact which

I mean the number of cpu chip you can count on the mother board.

> ones are paired up, I believe that if all but the last bit
> of the apicid is the same, they're siblings. You might have to
> dig the apicid out of the bootlog if the cpuinfo stuff doesn't
> tell you.

And you are right. Those apicid, after mask out the siblings,
are put in phys_cpu_id[] array in kernel.

I think about look at bootlog too, but that is not a reliable
way because bootlog might already been flush out after some
time.

Cheers

Chris



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: How to get number of physical CPU in linux from user space?
@ 2002-10-25 18:54 Nakajima, Jun
  2002-10-25 19:12 ` chrisl
  0 siblings, 1 reply; 12+ messages in thread
From: Nakajima, Jun @ 2002-10-25 18:54 UTC (permalink / raw)
  To: chrisl, Martin J. Bligh; +Cc: linux-kernel

Recent distributions or the AC tree has additional fields in /proc/cpu,
which tell
- physical package id
- number of threads 
for each CPU.

Using this info, you should be able to detect it. The problem is that they
are not using the same keywords. I'm asking them to make those fields
consistent.

Thanks,
Jun

-----Original Message-----
From: chrisl@vmware.com [mailto:chrisl@vmware.com]
Sent: Friday, October 25, 2002 11:20 AM
To: Martin J. Bligh
Cc: linux-kernel@vger.kernel.org
Subject: Re: How to get number of physical CPU in linux from user space?



On Fri, Oct 25, 2002 at 01:27:00AM -0700, Martin J. Bligh wrote:
> Define "physical CPU number" ;-) If you want to deteact which

I mean the number of cpu chip you can count on the mother board.

> ones are paired up, I believe that if all but the last bit
> of the apicid is the same, they're siblings. You might have to
> dig the apicid out of the bootlog if the cpuinfo stuff doesn't
> tell you.

And you are right. Those apicid, after mask out the siblings,
are put in phys_cpu_id[] array in kernel.

I think about look at bootlog too, but that is not a reliable
way because bootlog might already been flush out after some
time.

Cheers

Chris



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2002-10-25 19:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-24 23:02 How to get number of physical CPU in linux from user space? chrisl
2002-10-25  0:47 ` Andrew Walrond
2002-10-25  8:26 ` Gianni Tedesco
2002-10-25  8:27 ` Martin J. Bligh
2002-10-25 18:20   ` chrisl
2002-10-25 18:35     ` David T Hollis
2002-10-25 18:52     ` Martin J. Bligh
2002-10-25 12:38 ` Dave Jones
2002-10-25 19:07   ` chrisl
2002-10-25 18:54 Nakajima, Jun
2002-10-25 19:12 ` chrisl
2002-10-25 19:05 Nakajima, Jun

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).