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.