Sun Solaris - Find out number of processors and cores

Our SPARC server is running Sun Solaris 10; I would like to find out the actual number of processors and the number of cores for each processor.

The output of psrinfo and prtdiag is ambiguous:

$psrinfo -v
Status of virtual processor 0 as of: dd/mm/yyyy hh:mm:ss
  on-line since dd/mm/yyyy hh:mm:ss.
  The sparcv9 processor operates at 1592 MHz,
        and has a sparcv9 floating point processor.
Status of virtual processor 1 as of: dd/mm/yyyy hh:mm:ss
  on-line since dd/mm/yyyy hh:mm:ss.
  The sparcv9 processor operates at 1592 MHz,
        and has a sparcv9 floating point processor.
Status of virtual processor 2 as of: dd/mm/yyyy hh:mm:ss
  on-line since dd/mm/yyyy hh:mm:ss.
  The sparcv9 processor operates at 1592 MHz,
        and has a sparcv9 floating point processor.
Status of virtual processor 3 as of: dd/mm/yyyy hh:mm:ss
  on-line since dd/mm/yyyy hh:mm:ss.
  The sparcv9 processor operates at 1592 MHz,
        and has a sparcv9 floating point processor.

_

$prtdiag -v
System Configuration: Sun Microsystems  sun4u Sun Fire V445
System clock frequency: 199 MHZ
Memory size: 32GB
==================================== CPUs ====================================
               E$          CPU                    CPU
CPU  Freq      Size        Implementation         Mask    Status      Location
---  --------  ----------  ---------------------  -----   ------      --------
0    1592 MHz  1MB         SUNW,UltraSPARC-IIIi    3.4    on-line     MB/C0/P0
1    1592 MHz  1MB         SUNW,UltraSPARC-IIIi    3.4    on-line     MB/C1/P0
2    1592 MHz  1MB         SUNW,UltraSPARC-IIIi    3.4    on-line     MB/C2/P0
3    1592 MHz  1MB         SUNW,UltraSPARC-IIIi    3.4    on-line     MB/C3/P0

_

$more /etc/release
                       Solaris 10 8/07 s10s_u4wos_12b SPARC
           Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                            Assembled 16 August 2007
                          Patch Cluster - EIS 29/01/08(v3.1.5)

What other methods can I use?

EDITED:

It looks like we have a 4 processor system with one core each:

$psrinfo -p
4

_

$psrinfo -pv
The physical processor has 1 virtual processor (0)
  UltraSPARC-IIIi (portid 0 impl 0x16 ver 0x34 clock 1592 MHz)
The physical processor has 1 virtual processor (1)
  UltraSPARC-IIIi (portid 1 impl 0x16 ver 0x34 clock 1592 MHz)
The physical processor has 1 virtual processor (2)
  UltraSPARC-IIIi (portid 2 impl 0x16 ver 0x34 clock 1592 MHz)
The physical processor has 1 virtual processor (3)
  UltraSPARC-IIIi (portid 3 impl 0x16 ver 0x34 clock 1592 MHz)

Solution 1:

The command psrinfo -pv is the command you are looking for. It gives you the number of physical cpus plus the count of virtual processor per physical processor.

For example on a V880 it looks like this:

The physical processor has 1 virtual processor (0)
  UltraSPARC-III+ (portid 0 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (1)
  UltraSPARC-III+ (portid 1 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (2)
  UltraSPARC-III+ (portid 2 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (3)
  UltraSPARC-III+ (portid 3 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (4)
  UltraSPARC-III+ (portid 4 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (5)
  UltraSPARC-III+ (portid 5 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (6)
  UltraSPARC-III+ (portid 6 impl 0x15 ver 0x23 clock 900 MHz)
The physical processor has 1 virtual processor (7)
  UltraSPARC-III+ (portid 7 impl 0x15 ver 0x23 clock 900 MHz)

Hope that helps. :-)

EDIT

A multicore machine has e.g. this output

The physical processor has 4 virtual processors (0-3)
  SPARC64-VI (portid 1024 impl 0x6 ver 0x93 clock 2150 MHz)
The physical processor has 4 virtual processors (8-11)
  SPARC64-VI (portid 1032 impl 0x6 ver 0x93 clock 2150 MHz)

Solution 2:

You can check the number of physical processors using the psrinfo -p command.

root@sunt2000:/ # uname -a SunOS sunt2000 5.10 Generic_139555-08 sun4v sparc SUNW,Sun-Fire-T200

Checking the number of physical processors

root@sunt2000:/ # psrinfo

-p 1

Verbose output from the same command above.

root@sunt2000:/ # psrinfo -vp

The physical processor has 32 virtual processors (0-31)

UltraSPARC-T1 (chipid 0, clock 1200 MHz)

Below is a Sun Fire V445 that has the UltraSPARC IIIi and it is single core.

root@sunv445:/ # uname -a

SunOS sunv445 5.10 Generic_120011-14 sun4u sparc SUNW,Sun-Fire-V445

root@sunv445:/ # psrinfo

0 on-line since 11/05/2008 04:27:24

1 on-line since 11/05/2008 04:27:24

2 on-line since 11/05/2008 04:27:16

It has 3 physical processors.

root@sunv445:/ # psrinfo -p

3

I believe only UltraSPARCs IV are dual core. No issues with IIIi

root@sunv445:/ # psrinfo -vp

The physical processor has 1 virtual processor (0)

UltraSPARC-IIIi (portid 0 impl 0x16 ver 0x34 clock 1592 MHz)

The physical processor has 1 virtual processor (1)

UltraSPARC-IIIi (portid 1 impl 0x16 ver 0x34 clock 1592 MHz)

The physical processor has 1 virtual processor (2)

UltraSPARC-IIIi (portid 2 impl 0x16 ver 0x34 clock 1592 MHz)

Solution 3:

Total number of cores in a system is "kstat cpu_info | grep core_id | uniq | wc -l" Divide the total number of cores by the output of "psrinfo -p" to get the cores per physical processor