http://defect.opensolaris.org/bz/show_bug.cgi?id=4015

           Summary: Integer Pipeline processor group is broken
    Classification: Development
           Product: power-mgmt
           Version: unspecified
          Platform: Other
        OS/Version: Solaris
            Status: NEW
          Severity: minor
          Priority: P4
         Component: PAD
        AssignedTo: eric.saxe at sun.com
        ReportedBy: aubrey.li at intel.com
                CC: tesla-dev at opensolaris.org
   Estimated Hours: 0.0


1. The cpu info on my box:

$ psrinfo -vp
The physical processor has 4 cores and 8 virtual processors (0-7)
  The core has 2 virtual processors (0 4)
  The core has 2 virtual processors (1 5)
  The core has 2 virtual processors (2 6)
  The core has 2 virtual processors (3 7)
    x86 (GenuineIntel 106A2 family 6 model 26 step 2 clock 2933 MHz)
      Intel(r) CPU           @ 0000 @ 2.93GHz

2. So we have 4 idle groups and 4 pipeline groups:
$ kstat -m pg | grep Idle
        hardware                        CPU PM Idle Power Domain
        hardware                        CPU PM Idle Power Domain
        hardware                        CPU PM Idle Power Domain
        hardware                        CPU PM Idle Power Domain
$ kstat -m pg | grep Pipe
        hardware                        Integer Pipeline
        hardware                        Integer Pipeline
        hardware                        Integer Pipeline
        hardware                        Integer Pipeline

3. Now check the group:
$ pfexec mdb -k
> cpus::print cpu_t cpu_pg | ::print cpu_pg_t cmt_pgs | ::print group_t
{
    grp_size = 0x5
    grp_capacity = 0x8
    grp_set = 0xffffff014c63e000
}

4. we have 5 level processor group, get the group pointer.
> 0xffffff014c63e000/5K
0xffffff014c63e000:             
ffffff014dfe20e0 ffffff014dfe2198 ffffff014dfe2250 ffffff014dfe2308
ffffff014dfe2478

5. Per my checking, idle group is at level 0, so it's the first element.
> ffffff014dfe20e0::print pg_cmt_t
{
    cmt_pg = {
        pghw_pg = {
            pg_id = 0x4
            pg_relation = 1 (PGR_PHYSICAL)
            pg_class = 0xffffff014e45b3f8
            pg_cpus = {
                grp_size = 0x2
                grp_capacity = 0x2
                grp_set = 0xffffff014e212b28
            }
            pg_cb = {
                thread_swtch = cmt_ev_thread_swtch
                thread_remain = pg_null_op
            }
        }
        pghw_hw = 8 (PGHW_POW_IDLE)
        pghw_instance = 0
        pghw_handle = 0xffffff014d73a3c0
        pghw_kstat = 0xffffff014e2faaf0
    }
    cmt_siblings = 0xffffff014e212bc8
    cmt_parent = 0xffffff014dfe2308
    cmt_children = 0xffffff014e212b78
    cmt_policy = 0x2
    cmt_utilization = 0
    cmt_nchildren = 0x1
    cmt_hint = 0
    cmt_cpus_actv = {
        grp_size = 0x2
        grp_capacity = 0x2
        grp_set = 0xffffff014e212b50
    }
    cmt_cpus_actv_set = {
        bs_set = 0xffffff014d73de60
        bs_words = 0x1
    }
}

6. Check its siblings:

> ffffff014dfe20e0::print pg_cmt_t cmt_siblings | ::print group_t
{
    grp_size = 0x4 <====== correct
    grp_capacity = 0x4
    grp_set = 0xffffff014ee4f5e8
}

7. pipeline group is the last element in the array per step 4 checked.
It should be same as idle group, because on my machine, they both are
created by core_id. But I got:
> ffffff014dfe2478::print pg_cmt_t cmt_siblings | ::print group_t 
{
    grp_size = 0x1 <====== wrong
    grp_capacity = 0x2
    grp_set = 0xffffff014e212ba0
}

8. See, grp_size is wrong, and it's correct(grp_size = 0x4) on the
original B97.

-- 
Configure bugmail: http://defect.opensolaris.org/bz/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

Reply via email to