Project

General

Profile

Actions

Bug #14594

open

psrinfo(1M) may fail to emit socket type

Added by Thirteen Oxide 3 months ago. Updated 20 days ago.

Status:
In Progress
Priority:
Low
Category:
cmd - userland programs
Start date:
2022-03-27
Due date:
% Done:

90%

Estimated time:
0.10 h
Difficulty:
Bite-size
Tags:
Gerrit CR:

Description

With SMT-enabled processors, psrinfo -pv does not emit the CPU's socket type even if it is known to the kernel:

root@teapot:~# psrinfo -pv
The physical processor has 28 cores and 56 virtual processors (0-55)
  The core has 2 virtual processors (0-1)
  The core has 2 virtual processors (2-3)
  The core has 2 virtual processors (4-5)
  The core has 2 virtual processors (6-7)
  The core has 2 virtual processors (8-9)
  The core has 2 virtual processors (10-11)
  The core has 2 virtual processors (12-13)
  The core has 2 virtual processors (14-15)
  The core has 2 virtual processors (16-17)
  The core has 2 virtual processors (18-19)
  The core has 2 virtual processors (20-21)
  The core has 2 virtual processors (22-23)
  The core has 2 virtual processors (24-25)
  The core has 2 virtual processors (26-27)
  The core has 2 virtual processors (28-29)
  The core has 2 virtual processors (30-31)
  The core has 2 virtual processors (32-33)
  The core has 2 virtual processors (34-35)
  The core has 2 virtual processors (36-37)
  The core has 2 virtual processors (38-39)
  The core has 2 virtual processors (40-41)
  The core has 2 virtual processors (42-43)
  The core has 2 virtual processors (44-45)
  The core has 2 virtual processors (46-47)
  The core has 2 virtual processors (48-49)
  The core has 2 virtual processors (50-51)
  The core has 2 virtual processors (52-53)
  The core has 2 virtual processors (54-55)
    x86 (AuthenticAMD A00F11 family 25 model 1 step 1 clock 2750 MHz)
      AMD EPYC 7453 28-Core Processor
The physical processor has 28 cores and 56 virtual processors (56-111)
  The core has 2 virtual processors (56-57)
  The core has 2 virtual processors (58-59)
  The core has 2 virtual processors (60-61)
  The core has 2 virtual processors (62-63)
  The core has 2 virtual processors (64-65)
  The core has 2 virtual processors (66-67)
  The core has 2 virtual processors (68-69)
  The core has 2 virtual processors (70-71)
  The core has 2 virtual processors (72-73)
  The core has 2 virtual processors (74-75)
  The core has 2 virtual processors (76-77)
  The core has 2 virtual processors (78-79)
  The core has 2 virtual processors (80-81)
  The core has 2 virtual processors (82-83)
  The core has 2 virtual processors (84-85)
  The core has 2 virtual processors (86-87)
  The core has 2 virtual processors (88-89)
  The core has 2 virtual processors (90-91)
  The core has 2 virtual processors (92-93)
  The core has 2 virtual processors (94-95)
  The core has 2 virtual processors (96-97)
  The core has 2 virtual processors (98-99)
  The core has 2 virtual processors (100-101)
  The core has 2 virtual processors (102-103)
  The core has 2 virtual processors (104-105)
  The core has 2 virtual processors (106-107)
  The core has 2 virtual processors (108-109)
  The core has 2 virtual processors (110-111)
    x86 (AuthenticAMD A00F11 family 25 model 1 step 1 clock 2750 MHz)
      AMD EPYC 7453 28-Core Processor

> fffffeb320006000::print cpu_t cpu_m.mcpu_cpi | ::print struct cpuid_info
{
    cpi_pass = 0x4
    cpi_maxeax = 0x10
    cpi_vendorstr = [ "AuthenticAMD" ]
    cpi_vendor = 0x2
    cpi_family = 0x19
    cpi_model = 0x1
    cpi_step = 0x1
...
    cpi_coreid = 0xd
    cpi_pkgcoreid = 0xd
    cpi_ncore_per_chip = 0x1c
    cpi_ncore_bits = 0x6
    cpi_nthread_bits = 0x2
    cpi_support = [ 0x178bf1ff, 0x2fd3f9ff, 0, 0x7efa320b, 0x75c237ff, 0x219c9db9 ]
    cpi_chiprev = 0x2190002
    cpi_chiprevstr = 0xfffffffffbd90725 "GN-B1" 
    cpi_socket = 0x200001f
    cpi_mwait = {
        mon_min = 0x40
        mon_max = 0x40
        size_actual = 0x40
        buf_actual = 0xfffffeb319734680
        support = 0x7
    }
    cpi_apicid = 0x1a
    cpi_procnodeid = 0
    cpi_procnodes_per_pkg = 0x1
    cpi_compunitid = 0xd
    cpi_cores_per_compunit = 0x1
... 
> 

This is a trivial logic bug in user software, probably just an omission.

Actions #1

Updated by Thirteen Oxide 3 months ago

diff --git a/usr/src/cmd/psrinfo/psrinfo.c b/usr/src/cmd/psrinfo/psrinfo.c
index 19c4ef41ba..69b89f10b7 100644
--- a/usr/src/cmd/psrinfo/psrinfo.c
+++ b/usr/src/cmd/psrinfo/psrinfo.c
@@ -13,6 +13,7 @@
  * Copyright (c) 2012 DEY Storage Systems, Inc.  All rights reserved.
  * Copyright 2012 Nexenta Systems, Inc.  All rights reserved.
  * Copyright 2019 Joyent, Inc.
+ * Copyright 2022 Oxide Computer Co.
  */

 /*
@@ -285,10 +286,6 @@ print_vp(int nspec)
                        if (((len = strlen(vcpu->v_brand)) != 0) &&
                            (strncmp(vcpu->v_brand, vcpu->v_impl, len) != 0))
                                (void) printf("\t%s", vcpu->v_brand);
-                       if (strcmp(vcpu->v_socket, "Unknown") != 0)
-                               (void) printf("\t[ %s: %s ]", _("Socket"),
-                                   vcpu->v_socket);
-                       (void) putchar('\n');
                } else {
                        for (l2 = chip->p_cores; l2; l2 = l2->l_next) {
                                core = l2->l_ptr;
@@ -305,8 +302,13 @@ print_vp(int nspec)
                        }
                        if (((len = strlen(vcpu->v_brand)) != 0) &&
                            (strncmp(vcpu->v_brand, vcpu->v_impl, len) != 0))
-                               (void) printf("      %s\n", vcpu->v_brand);
+                               (void) printf("      %s", vcpu->v_brand);
                }
+               if (strcmp(vcpu->v_socket, "Unknown") != 0) {
+                       (void) printf("\t[ %s: %s ]", _("Socket"),
+                           vcpu->v_socket);
+               }
+               (void) putchar('\n');
        }
 }

Actions #2

Updated by Electric Monk 3 months ago

  • Gerrit CR set to 2081
Actions #3

Updated by Thirteen Oxide 20 days ago

With this change, the same machine reports:

root@teapot:~# psrinfo -pv
The physical processor has 28 cores and 56 virtual processors (0-55)
  The core has 2 virtual processors (0-1)
  The core has 2 virtual processors (2-3)
  The core has 2 virtual processors (4-5)
  The core has 2 virtual processors (6-7)
  The core has 2 virtual processors (8-9)
  The core has 2 virtual processors (10-11)
  The core has 2 virtual processors (12-13)
  The core has 2 virtual processors (14-15)
  The core has 2 virtual processors (16-17)
  The core has 2 virtual processors (18-19)
  The core has 2 virtual processors (20-21)
  The core has 2 virtual processors (22-23)
  The core has 2 virtual processors (24-25)
  The core has 2 virtual processors (26-27)
  The core has 2 virtual processors (28-29)
  The core has 2 virtual processors (30-31)
  The core has 2 virtual processors (32-33)
  The core has 2 virtual processors (34-35)
  The core has 2 virtual processors (36-37)
  The core has 2 virtual processors (38-39)
  The core has 2 virtual processors (40-41)
  The core has 2 virtual processors (42-43)
  The core has 2 virtual processors (44-45)
  The core has 2 virtual processors (46-47)
  The core has 2 virtual processors (48-49)
  The core has 2 virtual processors (50-51)
  The core has 2 virtual processors (52-53)
  The core has 2 virtual processors (54-55)
    x86 (AuthenticAMD A00F11 family 25 model 1 step 1 clock 2750 MHz)
      AMD EPYC 7453 28-Core Processor   [ Socket: SP3 ]
The physical processor has 28 cores and 56 virtual processors (56-111)
  The core has 2 virtual processors (56-57)
  The core has 2 virtual processors (58-59)
  The core has 2 virtual processors (60-61)
  The core has 2 virtual processors (62-63)
  The core has 2 virtual processors (64-65)
  The core has 2 virtual processors (66-67)
  The core has 2 virtual processors (68-69)
  The core has 2 virtual processors (70-71)
  The core has 2 virtual processors (72-73)
  The core has 2 virtual processors (74-75)
  The core has 2 virtual processors (76-77)
  The core has 2 virtual processors (78-79)
  The core has 2 virtual processors (80-81)
  The core has 2 virtual processors (82-83)
  The core has 2 virtual processors (84-85)
  The core has 2 virtual processors (86-87)
  The core has 2 virtual processors (88-89)
  The core has 2 virtual processors (90-91)
  The core has 2 virtual processors (92-93)
  The core has 2 virtual processors (94-95)
  The core has 2 virtual processors (96-97)
  The core has 2 virtual processors (98-99)
  The core has 2 virtual processors (100-101)
  The core has 2 virtual processors (102-103)
  The core has 2 virtual processors (104-105)
  The core has 2 virtual processors (106-107)
  The core has 2 virtual processors (108-109)
  The core has 2 virtual processors (110-111)
    x86 (AuthenticAMD A00F11 family 25 model 1 step 1 clock 2750 MHz)
      AMD EPYC 7453 28-Core Processor   [ Socket: SP3 ]
Actions

Also available in: Atom PDF