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





--- Comment #11 from Aubrey.Li <aubrey.li at intel.com>  2008-10-24 17:48:40 ---
Hi Eric,

Let's take a look what the code does.

        /*
         * Balance across siblings in the CPUs CMT lineage
         */
        do {
                pg = GROUP_ACCESS(cmt_pgs, level);

/*
 * assume level = 4, ipipe group

 * 1. let's get "cmt_pgs" first.

 * > cpus::print cpu_t cpu_pg | ::print cpu_pg_t cmt_pgs
 * {
 *   cmt_pgs.grp_size = 0x5
 *   cmt_pgs.grp_capacity = 0x8
 *   cmt_pgs.grp_set = 0xffffff014e1ebf80
 * }
 * > 0xffffff014e1ebf80/5K
 * 0xffffff014e1ebf80:             ffffff014dc4a250 ffffff014dc4a198  
 * ffffff014dc4a308 ffffff014dc4a0e0 ffffff014dc4a478 

 * 2. this is pg.
 * > ffffff014dc4a478::print pg_cmt_t
 * {
 *   cmt_pg = {
 *       pghw_pg = {
 *           pg_id = 0
 *           pg_relation = 1 (PGR_PHYSICAL)
 *           pg_class = 0xffffff014e1ef3f8
 *           pg_cpus = {
 *               grp_size = 0x2
 *               grp_capacity = 0x2
 *               grp_set = 0xffffff014e04d8a8
 *           }
 *           pg_cb = {
 *               thread_swtch = cmt_ev_thread_swtch
 *               thread_remain = pg_null_op
 *           }
 *       }
 *       pghw_hw = 1 (PGHW_IPIPE)
 *       pghw_instance = 0
 *       pghw_handle = 0
 *       pghw_kstat = 0xffffff014e0e36b0
 *   }
 *   cmt_siblings = 0xffffff014e04db78
 *   cmt_parent = 0xffffff014dc4a0e0
 *   cmt_children = 0
 *   cmt_policy = 0x1
 *   cmt_utilization = 0x2
 *   cmt_nchildren = 0
 *   cmt_hint = 0
 *   cmt_cpus_actv = {
 *       grp_size = 0x2
 *       grp_capacity = 0x2
 *       grp_set = 0xffffff014e04d8f8
 *   }
 *   cmt_cpus_actv_set = {
 *       bs_set = 0xffffff014d73ce00
 *       bs_words = 0x1
 *   }
 * }
 */
                siblings = pg->cmt_siblings;

/*
 * 3. get the siblings
 * > 0xffffff014e04db78::print group_t
 * {
 *    grp_size = 0x1
 *    grp_capacity = 0x2
 *    grp_set = 0xffffff014e04dba0
 * }
 */
                nsiblings = GROUP_SIZE(siblings);       /* self inclusive */
/*
 * 4. nsiblings = siblings->grp_size = 1
 */
                if (nsiblings == 1)
                        continue;       /* nobody to balance against */
/*
 * 5. if nsiblings = 1, ipipe group will be ignored.
 */

----snip-----
        } while (++level < GROUP_SIZE(cmt_pgs));

That is not what cmt dispatcher expected, is it?

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