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

           Summary: cmt_balance schedules thread on any idle CPU instead of
                    shallow idle CPUs
    Classification: Development
           Product: power-mgmt
           Version: unspecified
          Platform: Other
        OS/Version: Solaris
            Status: NEW
          Severity: minor
          Priority: P4
         Component: c-state
        AssignedTo: bill.holler at sun.com
        ReportedBy: bill.holler at sun.com
                CC: tesla-dev at opensolaris.org
   Estimated Hours: 0.0


When cmt_balance() is selecting a CPU within a PG to schedule a thread on
it chooses the first idle CPU it finds.  Instead cmt_balance() could
choose the CPU in the shallowest idle state (C_state).

Currently the last clause of cmt_balance() chooses any idle CPU:
                for (cpu = 0; cpu < GROUP_SIZE(&tpg->cmt_cpus_actv); cpu++) {
                        newcp = GROUP_ACCESS(&tpg->cmt_cpus_actv, cpu);
                        if (newcp->cpu_part == tp->t_cpupart &&
                            newcp->cpu_dispatch_pri == -1) {
                                cp = newcp;
                                break;
                        }
                }
Instead this loop could select the CPU in shallowest idle state.


Some CPUs may not be able to enter deeper idle states.  This algorithm will
favor scheduling onto CPUs that cannot enter deep idle states instead of
CPUs that can.  This can save power.  A CPU in a shallow idle state is also
more likely to have a lower scheduling wakeup latency penalty than a 
deeper idle CPU.  This policy can also help preserve and state setup by
CPUs when they enter deeper idle states (cache flushing etc).

-- 
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