From: Andrew Cooper <andrew.cooper3@citrix.com>
To: George Dunlap <george.dunlap@citrix.com>,
Dario Faggioli <dario.faggioli@citrix.com>,
xen-devel@lists.xenproject.org
Cc: George Dunlap <george.dunlap@eu.citrix.com>,
Meng Xu <mengxu@cis.upenn.edu>
Subject: Re: [PATCH 3/9] xen: sched: make locking for {insert, remove}_vcpu consistent
Date: Thu, 8 Oct 2015 18:23:46 +0100 [thread overview]
Message-ID: <5616A6A2.2090102@citrix.com> (raw)
In-Reply-To: <56169E00.9060902@citrix.com>
On 08/10/15 17:46, George Dunlap wrote:
> On 08/10/15 16:20, Andrew Cooper wrote:
>> On 08/10/15 15:58, George Dunlap wrote:
>>> On 29/09/15 18:31, Andrew Cooper wrote:
>>>> On 29/09/15 17:55, Dario Faggioli wrote:
>>>>> The insert_vcpu() scheduler hook is called with an
>>>>> inconsistent locking strategy. In fact, it is sometimes
>>>>> invoked while holding the runqueue lock and sometimes
>>>>> when that is not the case.
>>>>>
>>>>> In other words, some call sites seems to imply that
>>>>> locking should be handled in the callers, in schedule.c
>>>>> --e.g., in schedule_cpu_switch(), which acquires the
>>>>> runqueue lock before calling the hook; others that
>>>>> specific schedulers should be responsible for locking
>>>>> themselves --e.g., in sched_move_domain(), which does
>>>>> not acquire any lock for calling the hook.
>>>>>
>>>>> The right thing to do seems to always defer locking to
>>>>> the specific schedulers, as it's them that know what, how
>>>>> and when it is best to lock (as in: runqueue locks, vs.
>>>>> private scheduler locks, vs. both, etc.)
>>>>>
>>>>> This patch, therefore:
>>>>> - removes any locking around insert_vcpu() from
>>>>> generic code (schedule.c);
>>>>> - add the _proper_ locking in the hook implementations,
>>>>> depending on the scheduler (for instance, credit2
>>>>> does that already, credit1 and RTDS need to grab
>>>>> the runqueue lock while manipulating runqueues).
>>>>>
>>>>> In case of credit1, remove_vcpu() handling needs some
>>>>> fixing remove_vcpu() too, i.e.:
>>>>> - it manipulates runqueues, so the runqueue lock must
>>>>> be acquired;
>>>>> - *_lock_irq() is enough, there is no need to do
>>>>> _irqsave()
>>>> Nothing in any of generic scheduling code should need interrupts
>>>> disabled at all.
>>>>
>>>> One of the problem-areas identified by Jenny during the ticketlock
>>>> performance work was that the SCHEDULE_SOFTIRQ was a large consumer of
>>>> time with interrupts disabled. (The other large one being the time
>>>> calibration rendezvous, but that is a wildly different can of worms to fix.)
>>> Generic scheduling code is called from interrupt contexts -- namely,
>>> vcpu_wake()
>> There are a lot of codepaths, but I cant see one which is definitely
>> called with interrupts disables. (OTOH, I can see several where
>> interrupts are definitely enabled).
> Oh, I think I misunderstood you. You meant, "No codepaths *calling
> into* generic scheduling code should need interrupts disabled at all".
> I can certainly believe that to be true in most cases; there's no sense
> in saving the flags if we don't need to.
My original statement came from the observation that schedule() runs
with interrupts disabled, and takes between 2.2 and 4 microseconds to
run (as measured during the ticketlock performance analysis).
It is the biggest consumer of time with interrupts disabled, next being
the time calibration rendezvous.
I am going to go out on a limb and say that the majority of that time
does not need to be spent with interrupts disabled. I might easily be
wrong, but I suspect I am not.
~Andrew
next prev parent reply other threads:[~2015-10-08 17:23 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-29 16:55 [PATCH 0/9] xen: sched: improve (a lot! :-D) Credit2 runqueue handling Dario Faggioli
2015-09-29 16:55 ` [PATCH 1/9] xen: sched: fix an 'off by one \t' in credit2 debug dump Dario Faggioli
2015-10-01 5:22 ` Juergen Gross
2015-10-08 14:09 ` George Dunlap
2015-09-29 16:55 ` [PATCH 2/9] xen: sched: improve scope and placement of credit2 boot parameters Dario Faggioli
2015-10-01 5:23 ` Juergen Gross
2015-10-01 7:51 ` Jan Beulich
2015-10-01 8:17 ` Dario Faggioli
2015-09-29 16:55 ` [PATCH 3/9] xen: sched: make locking for {insert, remove}_vcpu consistent Dario Faggioli
2015-09-29 17:31 ` Andrew Cooper
2015-09-29 21:40 ` Dario Faggioli
2015-09-29 21:56 ` Dario Faggioli
2015-09-30 9:00 ` Andrew Cooper
2015-10-08 14:58 ` George Dunlap
2015-10-08 15:20 ` Andrew Cooper
2015-10-08 16:46 ` George Dunlap
2015-10-08 17:23 ` Andrew Cooper [this message]
2015-10-08 20:44 ` Dario Faggioli
2015-10-12 9:44 ` George Dunlap
2015-10-08 20:39 ` Dario Faggioli
2015-10-09 13:05 ` Andrew Cooper
2015-10-09 16:56 ` Dario Faggioli
2015-10-01 8:03 ` Jan Beulich
2015-10-01 11:59 ` Dario Faggioli
2015-09-29 16:55 ` [PATCH 4/9] xen: sched: add .init_pdata hook to the scheduler interface Dario Faggioli
2015-10-01 5:21 ` Juergen Gross
2015-10-01 6:33 ` Dario Faggioli
2015-10-01 7:43 ` Juergen Gross
2015-10-01 9:32 ` Andrew Cooper
2015-10-01 9:40 ` Dario Faggioli
2015-10-01 8:17 ` Jan Beulich
2015-10-01 9:26 ` Dario Faggioli
2015-10-01 10:12 ` Jan Beulich
2015-10-01 10:35 ` Dario Faggioli
2015-10-01 10:47 ` Jan Beulich
2015-09-29 16:56 ` [PATCH 5/9] xen: sched: make implementing .alloc_pdata optional Dario Faggioli
2015-10-01 5:28 ` Juergen Gross
2015-10-01 6:35 ` Dario Faggioli
2015-10-01 7:49 ` Jan Beulich
2015-10-01 8:13 ` Dario Faggioli
2015-09-29 16:56 ` [PATCH 6/9] xen: sched: implement .init_pdata in all schedulers Dario Faggioli
2015-09-29 16:56 ` [PATCH 7/9] xen: sched: fix per-socket runqueue creation in credit2 Dario Faggioli
2015-09-29 16:56 ` [PATCH 8/9] xen: sched: allow for choosing credit2 runqueues configuration at boot Dario Faggioli
2015-10-01 5:48 ` Juergen Gross
2015-10-01 7:23 ` Dario Faggioli
2015-10-01 7:46 ` Juergen Gross
2015-09-29 16:56 ` [PATCH 9/9] xen: sched: per-core runqueues as default in credit2 Dario Faggioli
2015-10-01 5:48 ` Juergen Gross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5616A6A2.2090102@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=dario.faggioli@citrix.com \
--cc=george.dunlap@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=mengxu@cis.upenn.edu \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.