How to calculate total number of cores on my servers ?

Hi,

I want to get total number of cores on my all non-global zones on Solaris 10. I got two methods and both are giving different results. Below link is a script, which tells me that total cores are 8
Mandalika's scratchpad: Oracle Solaris: Show Me the CPU, vCPU, Core Counts and the Socket-Core-vCPU Mapping

Total number of physical processors: 2
Number of virtual processors: 16
Total number of cores: 8
Number of cores per physical processor: 4
Number of hardware threads (strands or vCPUs) per core: 2
Processor speed: 3067 MHz (3.06 GHz)

But below command, tells me, total cores are 16

# echo "`kstat -m cpu_info|grep -w core_id|uniq|wc -l` core(s) "
      16 core(s)

Which is supposed to be accurate and I should keep using in all servers ?

Thanks

Ref: IBM: Virtual processor core (VPC)

In an old script I have

kstat -m cpu_info | nawk '$2=="on-line" {lcpu++} $1=="pg_id" && s[$2]++==0 {core++} END {print core?core+0:lcpu+0}'

Looks like I missed something. I want to set 1 core for one non-global zone. But even after setting up ncpu in zone configuration, I still see all core and vCPUs inside zone.

bash-3.2# kstat cpu_info|grep core_id|sort -u|wc -l
       4
bash-3.2# kstat -m cpu_info | nawk '$2=="on-line" {lcpu++} $1=="pg_id" && s[$2]++==0 {core++} END {print core?core+0:lcpu+0}'
32
bash-3.2# zonecfg -z zone1 info capped-cpu
capped-cpu:
        [ncpus: 1.00]
bash-3.2# zlogin zone1
[Connected to zone 'zone1' pts/4]
Last login: Fri May 17 14:50:23 on pts/4
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
You have new mail.
# kstat cpu_info|grep core_id|sort -u|wc -l
       4
# kstat -m cpu_info | nawk '$2=="on-line" {lcpu++} $1=="pg_id" && s[$2]++==0 {core++} END {print core?core+0:lcpu+0}'
32
#

But if I set dedicated CPU, it shows me correct CPU. Should above example not show me out as 1 , because I set ncpu 1 ?

bash-3.2# zonecfg -z zone1 info dedicated-cpu
dedicated-cpu:
        ncpus: 3
bash-3.2#
bash-3.2# zlogin zone1
[Connected to zone 'zone1' pts/4]
Last login: Fri May 17 14:54:22 on pts/4
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
You have new mail.
# kstat cpu_info|grep core_id|sort -u|wc -l
       1
# kstat -m cpu_info | nawk '$2=="on-line" {lcpu++} $1=="pg_id" && s[$2]++==0 {core++} END {print core?core+0:lcpu+0}'
3
# 

I wanted to restrict core with this zone. But looks like, it is restricting vCPU. isn't ?

You have 8 core with hyperthreading ON.
Operating systems will interpret those as 16 cores (2 threads per core).

Maximum value for ncpu property on your system is = 16 (1600%)
One can set for a zone an arbitrary decimal number, say 1.37, which will get you 137% out of 1600% cpu time.
Not specific cores, but cpu time governed by the FSS scheduler.

This could be the reason why utilities are reporting 'strange' results inside non-global zone using ncpu property.
Also, applications which use utilities to optimize their work (count the cores/threads to optimize them self), may exhibit performance impact when using ncpu.

On the other hand, dedicated-cpu property sets fix number of cores for that zone (out of 16).
Utilities inside non-global zone will report this correctly and applications relaying on those will get correct number to work with.

Mixing those properties is ill-advised and incompatible.
So in your case, set a 1 dedicated-cpu resourse to global zone and other 15 on non-global zones as you see fit to achieve complete isolation.

There is an option to use psets as well, which group the core(s) in specific group, which you can then assign to zones.
For instance, making a 8 core pset named dbpset, assigning it to 2 zones - both zones will show 8 cores inside.

Hope that helps
Regards
Peasant

1 Like