create ^
title it credit2 only uses one runqueue instead of one runq per socket
thanks
On sab, 2013-12-14 at 02:33 +0100, Dario Faggioli wrote:
> Hi George,
>
BTW, creating a tracking bug entry for this issue.
> Now the question is, for fixing this, would it be preferable to do
> something along this line (i.e., removing the right side of the || and,
> in general, make csched_alloc_pdata() a pcpu 0 only thing)? Or, perhaps,
> should I look into a way to properly initialize the cpu_data array, so
> that cpu_to_socket() actually returns something '< 0' for pcpus not yet
> onlined and identified?
>
I prepared and gave it a quick try to the attached patch... Only to
figure out that it won't work.
Well, it does for certain configurations (so, perhaps, Justin, if that
is your case you may be able to at least do some development on top of
it), but it's not the correct approach... Or at least it's not enough.
In fact, what it does is initializing the pCPU info field used by
cpu_to_socket() to -1, which means now all pCPUs --apart from pCPU 0--
are associated with the proper runqueue.
pCPU 0, OTOH, is always associated with runqueue 0, and that is
necessary and intended, as it does not get the notifier call, and hence
it needs to be initialized when the correct cpu_to_socket() information
is still not available. And that's where the problem is. In fact, this
is fine if pCPU 0 is actually on socket 0, but what if it is, say, on
socket 1? :-O
That happens to be the case on one of my test boxes, and here's what I
get on it:
root@Zhaman:~# xl dmesg |grep runqueue
(XEN) Adding cpu 0 to runqueue 0
(XEN) First cpu on runqueue, activating
(XEN) Adding cpu 1 to runqueue 1
(XEN) First cpu on runqueue, activating
(XEN) Adding cpu 2 to runqueue 1
(XEN) Adding cpu 3 to runqueue 1
(XEN) Adding cpu 4 to runqueue 1
(XEN) Adding cpu 5 to runqueue 1
(XEN) Adding cpu 6 to runqueue 1
(XEN) Adding cpu 7 to runqueue 1
(XEN) Adding cpu 8 to runqueue 0
(XEN) Adding cpu 9 to runqueue 0
(XEN) Adding cpu 10 to runqueue 0
(XEN) Adding cpu 11 to runqueue 0
(XEN) Adding cpu 12 to runqueue 0
(XEN) Adding cpu 13 to runqueue 0
(XEN) Adding cpu 14 to runqueue 0
(XEN) Adding cpu 15 to runqueue 0
root@Zhaman:~# xl dmesg |grep 'runqueue 0'|cat -n
1 (XEN) Adding cpu 0 to runqueue 0
2 (XEN) Adding cpu 8 to runqueue 0
3 (XEN) Adding cpu 9 to runqueue 0
4 (XEN) Adding cpu 10 to runqueue 0
5 (XEN) Adding cpu 11 to runqueue 0
6 (XEN) Adding cpu 12 to runqueue 0
7 (XEN) Adding cpu 13 to runqueue 0
8 (XEN) Adding cpu 14 to runqueue 0
9 (XEN) Adding cpu 15 to runqueue 0
root@Zhaman:~# xl dmesg |grep 'runqueue 1'|cat -n
1 (XEN) Adding cpu 1 to runqueue 1
2 (XEN) Adding cpu 2 to runqueue 1
3 (XEN) Adding cpu 3 to runqueue 1
4 (XEN) Adding cpu 4 to runqueue 1
5 (XEN) Adding cpu 5 to runqueue 1
6 (XEN) Adding cpu 6 to runqueue 1
7 (XEN) Adding cpu 7 to runqueue 1
:-(
I'll keep looking into this, although I can't promise it will be my top
priority for the coming weeks. :-/
If, in the meantime, someone (George?) has an idea on how to solve this,
I gladly accept suggestions. :-)
Regards,
Dario
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)