3

At the end of this post is my /proc/cpuinfo.

I know the Physical cpu number is 2

grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
2 

But how many cores does each cpu have?

The 'cpu cores' shows it has 16 cores.

But use this command it shows there are only 8 cores totally.

grep 'core id' /proc/cpuinfo    
core id         : 16
core id         : 0
core id         : 17
core id         : 1
core id         : 25
core id         : 9
core id         : 26
core id         : 10

Displays the number of sibling CPUs on the same physical CPU for architectures which use hyper-threading. It's 16 on my machine. But there are 4 for physical 0 cpu, and 4 on physical 1 cpu. I really confused.

Can anybody help me?

Below is my /proc/cpuinfo

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 16
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4803.77
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 0
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.22
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 17
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.13
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 1
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.21
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 4
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 25
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.14
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 5
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 9
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.19
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 6
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 26
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.13
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 7
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 10
cpu cores   : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
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 syscall nx lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.20
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

5 Answers 5

8

As per Intels' specs for the processor, it's a quad-core CPU (4 distinct cores), each of which is hyperthreading enabled, which makes it appear as an octo-core.

Given that it's a Xeon, you could quite easily have a dual-socket motherboard, which means there's 2 separate chips, each of which has 4 cores, each of which can run two threads, so effectively appears to the OS as a 16-core machine.

4
  • Yep this would do it. 2 CPUs, 4 cores each. Hyperthreading makes it as if each core counts as two, so 2 * 4 * 2 = 16 processors.
    – aqua
    Jan 14, 2012 at 7:33
  • @auqa What does the 'cpu cores' mean? Is it the physical cores or logical cores? I think the cpu cores mean how many physical cores on a single cpu socket? And what does the 'siblings' means?
    – xiaoming
    Jan 14, 2012 at 7:55
  • @xiaoming: that's been blurred these days by hyperthreading and whatnot. Depends on which marketing people you talk to, and as well which licensing people. Someone like oracle would count your machine as a 16core device and force you buy 16 licenses for oracle. Others might require only 2 licenses because that's how many sockets your machine has.
    – Marc B
    Jan 14, 2012 at 7:56
  • @Marc B how could I know each cpu is 4 cores? Which parameters should i use? In lots of documents they say hte 'cpu cores' is the cores on the physical cpu
    – xiaoming
    Jan 14, 2012 at 8:00
4

Here is a function that I use to check the CPU information.

function CORES(){

  local -i SOCKETS=$(grep -w "physical id" /proc/cpuinfo | sort -u | wc -l)
  [ "${SOCKETS}" -eq 0 ] && SOCKETS="1"
  local -i CORES=$(grep -w "core id" /proc/cpuinfo | sort -u | wc -l)
  [ "${CORES}" -eq 0 ] && CORES="1"
  local -r MODEL=$(grep -w "model name" /proc/cpuinfo | sort -u | awk -F:     '{print $2}')
  local -ir THREADS=$(grep -w "processor" /proc/cpuinfo | sort -u | wc -l)
  local -ir TOTAL_CORES=$(echo $((${SOCKETS}*${CORES})))
  local -ir THREADS_PER_CORE=$(echo $((${THREADS}/${TOTAL_CORES})))

  echo -e "ModelName\t: " $MODEL
  echo -e "Sockets\t\t: " $SOCKETS
  echo -e "Cores/Socket\t: " $CORES
  echo -e "Threads/Core\t: " $THREADS_PER_CORE
  echo -e "TotalCores\t: " $TOTAL_CORES
  echo -e "TotalThreads\t: " $THREADS

}

There are three main components to this:

  1. Number of Physical CPUs ('physical id')
  2. Total number of Cores per Physical CPU ('core id')
  3. Total number of Threads per core per physical CPU ('processor')

The 'model name' is just for informational purposes...

The only bug with it is if the 'physical id' does not exist in /proc/cpuinfo, then it throws this error (which I have yet to get around to fixing...):

$ CORES
-bash: 2/0: division by 0 (error token is "0")
ModelName       :  Intel(R) Xeon(R) CPU X5560 @ 2.80GHz
Sockets         :  0
Cores/Socket    :  0
Threads/Core    :  0
TotalCores      :  0
TotalThreads    :  2

edit: fixed.

Hope that helps!

EDIT: Here is an example of one that has 'physical id' present:

ModelName       :  Intel(R) Xeon(R) CPU X3470 @ 2.93GHz
Sockets         :  2
Cores/Socket    :  1
Threads/Core    :  1
TotalCores      :  2
TotalThreads    :  2

And another

ModelName       :  Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
Sockets         :  2
Cores/Socket    :  2
Threads/Core    :  1
TotalCores      :  4
TotalThreads    :  4

EDIT 2: A big one!

ModelName       :  Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
Sockets         :  2
Cores/Socket    :  6
Threads/Core    :  2
TotalCores      :  12
TotalThreads    :  24

EDIT: The OP's /proc/cpuinfo results

$ CORES
ModelName       :  Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Sockets         :  2
Cores/Socket    :  8
Threads/Core    :  0
TotalCores      :  16
TotalThreads    :  8

This indicates that you have Hyper Threading disabled somewhere (likely in the bios), which is why you have 0 threads per core. In this case TotalThreads = Cores/Socket. This means you have 8 cores per socket that are not Hyper Threaded.

4
  • Your outputs are wrong... X3470, E5520 and E5620 are all 4x core with HT
    – Attie
    Mar 7, 2018 at 17:16
  • @Attie Actually they're not because on some servers we have HT disabled (as per the vendor's requirement). I guess I should have mentioned that :P
    – Hickory420
    Mar 8, 2018 at 9:19
  • But (for example), your output lists E5520 as a 2 core without hyperthreading... unless you've disable hyperthreading and disabled two cores, that's wrong.
    – Attie
    Mar 8, 2018 at 10:23
  • Hmm... You raise a valid point. Unfortunately, I do not have access to these servers anymore, so I cannot confirm this. If you have access to some servers (or even just your own pc), run the function and confirm the output. If the function I have posted is not correctly calculating the numbers, I would like to fix that. That being said, it is possible that thread + cores have been disabled on the E5520. The vendor was (is) very picky about that... Cheers.
    – Hickory420
    Mar 8, 2018 at 23:43
2

It seems to me like /proc/cpuinfo is only showing part of your real physical CPU configuration.

Some fields may indicate that your system has 2 CPU sockets, each of which has 16 physical cores :

  • physical id goes from 0 to 1, so there would be 2 CPU sockets
  • siblings states that you have 16 logical cores per CPU socket
  • cpu cores is also 16, which I interpret as the number of physical cores for the CPU specified in physical id. As to this point, I would say that the CPU does not support HyperThreading, but...

According to the spec of Intel E5620 chip, each chip has 4 physical cores, each of which have 2 logical cores thanks to HyperThreading.

That leads me to the conclusion that, from the point of view of your operating system, you only have partial access to the CPU ressources. I would suggest that you are running from a virtualized environment.

Let's see below my /proc/cpuinfo on a virtual machine hosted on a two-CPU Intel E5430-based server (2 CPU sockets, 4 physical cores, no hyperthreading). The operating system only sees core#0 from CPU#0 and core#0 from CPU#1.

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 23
model name  : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz
stepping    : 10
cpu MHz     : 2659.998
cache size  : 6144 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 4
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts     acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority
bogomips    : 5319.99
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 23
model name  : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz
stepping    : 10
cpu MHz     : 2659.998
cache size  : 6144 KB
physical id : 1
siblings    : 4
core id     : 0
cpu cores   : 4
apicid      : 4
initial apicid  : 4
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority
bogomips    : 5319.78
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:
1

You can parse the /proc/cpuinfo so it is more useful:

paste <(cat /proc/cpuinfo | grep "core id") <(cat /proc/cpuinfo | grep "processor") | sed 's/[[:blank:]]/ /g'

On my machine I see: core id : 0 processor : 0 core id : 1 processor : 1 core id : 2 processor : 2 core id : 3 processor : 3 core id : 0 processor : 4 core id : 1 processor : 5 core id : 2 processor : 6 core id : 3 processor : 7

So 4 cores each with two threads

1
  • Include cat /proc/cpuinfo | grep "physical id" for multi-socket systems
    – Attie
    Mar 7, 2018 at 17:24
0

That's Hyperthreading, which allows a single core to run two threads more-or-less in parallel. More-or-less depends on what instructions each thread is using.

2
  • How could I know the how many cores on a physical cpu?
    – xiaoming
    Jan 14, 2012 at 7:59
  • Google the model name which is this case is E5620.
    – Brian
    Jul 29, 2012 at 11:22

You must log in to answer this question.