Hello Xen developers,
I am new to this mailing list. I examined Credit
scheduling and found that it does load balancing between symmetric multi
processors (SMP). In the function, csched_load_balance(),
it checks whether the physical CPU(PCPU) N+1 has something to do when PCPU N is
nothing to do. Note: N is CPU ID. If so, N takes the job of N+1. If N+1 is
idling, then N+2 is checked. In this scheme, N+1, N+2, … are checked in
this order because csched_load_balance() assumes SMP. On Hyperthread/Multi-core/NUMA,
it is better to check the closest neighbor first, i.e. the same Hyperthread CPU
first, then the same socket CPU second, then others. To find the closest
neighbor first, I am thinking to have a 2 dimensional array. I.e. for CPU N,
Neighbor[N, 0] = CPU
ID of the same Hyperthread CPU
Neighbor[N, 1] = CPU
ID of the same socket CPU
Neighbor[N, 2] = CPU
ID of the same socket CPU
Neighbor[N, 3] = CPU
ID of others
Neighbor[N, 4] = CPU
ID of others
…….
1. Has anyone ever
talked about or implemented csched_load_balance() for Hyperthread/Multi-core/NUMA?
2. is my
understanding above correct?
3. Is the current
implementation of csched_load_balance() the result of evaluation even on Hyperthread/Multi-core/NUMA?
4. Do you have better idea for finding closest
neighbor first?
5. Do you have an idea how to build the array, Neighbor[]?
Thank you.
-Caz Yokoyama, caz at caztech dot com. 503-804-1028(m).