From: George Dunlap <George.Dunlap@eu.citrix.com>
To: Kathy Hadley <Kathy.Hadley@dornerworks.com>,
keir.fraser@citrix.com, xen-devel@lists.xensource.com
Subject: Re: [PATCH 1/1] Add .adjust_global callback
Date: Tue, 4 May 2010 10:46:30 -0500 [thread overview]
Message-ID: <q2qde76405a1005040846r44491569n605715e5f6b9193@mail.gmail.com> (raw)
In-Reply-To: <o2tde76405a1005032029wc8b4ef36lca5c318d207c7f77@mail.gmail.com>
[-- Attachment #1.1.1: Type: text/plain, Size: 9840 bytes --]
Keir, the new SCHEDOP_adjust_global needs to have the cpupool_id so that we
can call the "global" parameters for the right pool. Would it make sense to
overload the domid in DOMCTL, making it the cpupool_id if the command is
XEN_DOMCTL_SCHEDOP_{get,put}_global_info? Or should we put it somewhere
else? I glanced around the other hypercalls, and nothing seems much better;
the cpupools stuff is in the DOMCTL file anyway.
-George
On Mon, May 3, 2010 at 10:29 PM, George Dunlap
<George.Dunlap@eu.citrix.com>wrote:
> Hmm, and it also needs to be adjusted for the new cpu pools stuff. I'll
> take a look at it tomorrow.
> -George
>
>
>
>
> On Mon, May 3, 2010 at 4:50 PM, George Dunlap <George.Dunlap@eu.citrix.com
> > wrote:
>
>> Also, the SCHEDOP needs an xsm callback; but I'm not an expert enough in
>> the xsm framework to say what it needs.
>>
>> Other than that:
>>
>> Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
>>
>>
>> On Mon, Apr 19, 2010 at 6:54 AM, Dulloor <dulloor@gmail.com> wrote:
>>
>>> You don't have to explicitly set adjust_global to NULL for credit and
>>> sedf.
>>>
>>> -dulloor
>>>
>>> On Mon, Apr 19, 2010 at 9:39 AM, Kathy Hadley <
>>> Kathy.Hadley@dornerworks.com> wrote:
>>>
>>>> Resubmitting now that I have been added to the Xen-devel mailing list.
>>>>
>>>>
>>>>
>>>> Kathy Hadley
>>>>
>>>> DornerWorks, Ltd.
>>>>
>>>>
>>>>
>>>> *From:* Kathy Hadley
>>>> *Sent:* Friday, April 16, 2010 10:14 AM
>>>> *To:* 'xen-devel@lists.xensource.com'
>>>> *Cc:* 'Keir.Fraser@citrix.com'
>>>> *Subject:* [Xen-Devel] [PATCH 1/1] Add .adjust_global callback
>>>>
>>>>
>>>>
>>>> This patch adds an .adjust_global scheduler callback function, which
>>>> allows adjusting the global scheduler parameters (rather than just one
>>>> domain’s parameters). This patch supports the addition of an ARINC 653
>>>> scheduler (which will be submitted in a subsequent patch), and was suggested
>>>> by George Dunlap and Keir Fraser in response to an earlier patch (ref:
>>>> [Xen-devel] [PATCH 1/1] Xen ARINC 653 scheduler).
>>>>
>>>>
>>>>
>>>> Thanks and regards,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> [image: cid:image001.jpg@01CAD7E0.50E45D70]
>>>>
>>>> *Kathy Hadley
>>>> *DornerWorks, Ltd.
>>>> *Embedded Systems Engineering
>>>>
>>>> *3445 Lake Eastbrook Blvd SE
>>>> Grand Rapids, MI 49546
>>>>
>>>> Direct: 616.389.6127
>>>>
>>>> Tel: 616.245.8369
>>>>
>>>> Fax: 616.245.8372
>>>>
>>>>
>>>>
>>>> Kathy.Hadley@DornerWorks.com
>>>>
>>>> www.DornerWorks.com <http://www.dornerworks.com/>
>>>>
>>>> [image: cid:image002.jpg@01CAD7E0.50E45D70]
>>>>
>>>> *Honored as one of the 2010 “Michigan 50 Companies to Watch”*
>>>>
>>>>
>>>>
>>>> diff -rupN a/xen/common/domctl.c b/xen/common/domctl.c
>>>>
>>>> --- a/xen/common/domctl.c 2010-04-07 12:12:06.000000000 -0400
>>>>
>>>> +++ b/xen/common/domctl.c 2010-04-14 10:57:11.262796000 -0400
>>>>
>>>> @@ -592,22 +592,35 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
>>>>
>>>>
>>>>
>>>> case XEN_DOMCTL_scheduler_op:
>>>>
>>>> {
>>>>
>>>> - struct domain *d;
>>>>
>>>> -
>>>>
>>>> - ret = -ESRCH;
>>>>
>>>> - if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
>>>>
>>>> - break;
>>>>
>>>> + if ( (op->u.scheduler_op.cmd ==
>>>> XEN_DOMCTL_SCHEDOP_put_global_info)
>>>>
>>>> + || (op->u.scheduler_op.cmd ==
>>>> XEN_DOMCTL_SCHEDOP_get_global_info) )
>>>>
>>>> + {
>>>>
>>>> + ret = sched_adjust_global(&op->u.scheduler_op);
>>>>
>>>> + if (op->u.scheduler_op.cmd ==
>>>> XEN_DOMCTL_SCHEDOP_get_global_info)
>>>>
>>>> + {
>>>>
>>>> + if ( copy_to_guest(u_domctl, op, 1) )
>>>>
>>>> + ret = -EFAULT;
>>>>
>>>> + }
>>>>
>>>> + }
>>>>
>>>> + else
>>>>
>>>> + {
>>>>
>>>> + struct domain *d;
>>>>
>>>>
>>>>
>>>> - ret = xsm_scheduler(d);
>>>>
>>>> - if ( ret )
>>>>
>>>> - goto scheduler_op_out;
>>>>
>>>> + ret = -ESRCH;
>>>>
>>>> + if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
>>>>
>>>> + break;
>>>>
>>>>
>>>>
>>>> - ret = sched_adjust(d, &op->u.scheduler_op);
>>>>
>>>> - if ( copy_to_guest(u_domctl, op, 1) )
>>>>
>>>> - ret = -EFAULT;
>>>>
>>>> + ret = xsm_scheduler(d);
>>>>
>>>> + if ( ret )
>>>>
>>>> + goto scheduler_op_out;
>>>>
>>>> +
>>>>
>>>> + ret = sched_adjust(d, &op->u.scheduler_op);
>>>>
>>>> + if ( copy_to_guest(u_domctl, op, 1) )
>>>>
>>>> + ret = -EFAULT;
>>>>
>>>>
>>>>
>>>> - scheduler_op_out:
>>>>
>>>> - rcu_unlock_domain(d);
>>>>
>>>> + scheduler_op_out:
>>>>
>>>> + rcu_unlock_domain(d);
>>>>
>>>> + }
>>>>
>>>> }
>>>>
>>>> break;
>>>>
>>>>
>>>>
>>>> diff -rupN a/xen/common/sched_credit.c b/xen/common/sched_credit.c
>>>>
>>>> --- a/xen/common/sched_credit.c 2010-04-07 12:12:06.000000000
>>>> -0400
>>>>
>>>> +++ b/xen/common/sched_credit.c 2010-04-13 17:30:40.710992000
>>>> -0400
>>>>
>>>> @@ -1404,6 +1404,7 @@ const struct scheduler sched_credit_def
>>>>
>>>> .wake = csched_vcpu_wake,
>>>>
>>>>
>>>>
>>>> .adjust = csched_dom_cntl,
>>>>
>>>> + .adjust_global = NULL,
>>>>
>>>>
>>>>
>>>> .pick_cpu = csched_cpu_pick,
>>>>
>>>> .do_schedule = csched_schedule,
>>>>
>>>> diff -rupN a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c
>>>>
>>>> --- a/xen/common/sched_sedf.c 2010-04-07 12:12:06.000000000 -0400
>>>>
>>>> +++ b/xen/common/sched_sedf.c 2010-04-13 17:30:40.710992000
>>>> -0400
>>>>
>>>> @@ -1473,6 +1473,7 @@ const struct scheduler sched_sedf_def =
>>>>
>>>> .sleep = sedf_sleep,
>>>>
>>>> .wake = sedf_wake,
>>>>
>>>> .adjust = sedf_adjust,
>>>>
>>>> + .adjust_global = NULL,
>>>>
>>>> };
>>>>
>>>>
>>>>
>>>> /*
>>>>
>>>> diff -rupN a/xen/common/schedule.c b/xen/common/schedule.c
>>>>
>>>> --- a/xen/common/schedule.c 2010-04-07 12:12:06.000000000 -0400
>>>>
>>>> +++ b/xen/common/schedule.c 2010-04-14 10:57:11.262796000 -0400
>>>>
>>>> @@ -804,6 +804,21 @@ long sched_adjust(struct domain *d, stru
>>>>
>>>> return ret;
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> +/* Adjust scheduling parameters globally */
>>>>
>>>> +long sched_adjust_global(struct xen_domctl_scheduler_op *op)
>>>>
>>>> +{
>>>>
>>>> + long ret;
>>>>
>>>> +
>>>>
>>>> + if ( (op->sched_id != ops.sched_id)
>>>>
>>>> + || ( (op->cmd != XEN_DOMCTL_SCHEDOP_put_global_info)
>>>>
>>>> + && (op->cmd != XEN_DOMCTL_SCHEDOP_get_global_info) ) )
>>>>
>>>> + return -EINVAL;
>>>>
>>>> +
>>>>
>>>> + ret = SCHED_OP(adjust_global, op);
>>>>
>>>> +
>>>>
>>>> + return ret;
>>>>
>>>> +}
>>>>
>>>> +
>>>>
>>>> static void vcpu_periodic_timer_work(struct vcpu *v)
>>>>
>>>> {
>>>>
>>>> s_time_t now = NOW();
>>>>
>>>> diff -rupN a/xen/include/public/domctl.h b/xen/include/public/domctl.h
>>>>
>>>> --- a/xen/include/public/domctl.h 2010-04-07 12:12:06.000000000 -0400
>>>>
>>>> +++ b/xen/include/public/domctl.h 2010-04-14 10:57:11.262796000
>>>> -0400
>>>>
>>>> @@ -306,6 +306,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_v
>>>>
>>>> /* Set or get info? */
>>>>
>>>> #define XEN_DOMCTL_SCHEDOP_putinfo 0
>>>>
>>>> #define XEN_DOMCTL_SCHEDOP_getinfo 1
>>>>
>>>> +#define XEN_DOMCTL_SCHEDOP_put_global_info 2
>>>>
>>>> +#define XEN_DOMCTL_SCHEDOP_get_global_info 3
>>>>
>>>> struct xen_domctl_scheduler_op {
>>>>
>>>> uint32_t sched_id; /* XEN_SCHEDULER_* */
>>>>
>>>> uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */
>>>>
>>>> diff -rupN a/xen/include/xen/sched.h b/xen/include/xen/sched.h
>>>>
>>>> --- a/xen/include/xen/sched.h 2010-04-07 12:12:06.000000000 -0400
>>>>
>>>> +++ b/xen/include/xen/sched.h 2010-04-13 17:30:40.710992000 -0400
>>>>
>>>> @@ -472,6 +472,7 @@ void sched_destroy_vcpu(struct vcpu *v);
>>>>
>>>> int sched_init_domain(struct domain *d);
>>>>
>>>> void sched_destroy_domain(struct domain *d);
>>>>
>>>> long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *);
>>>>
>>>> +long sched_adjust_global(struct xen_domctl_scheduler_op *);
>>>>
>>>> int sched_id(void);
>>>>
>>>> void sched_tick_suspend(void);
>>>>
>>>> void sched_tick_resume(void);
>>>>
>>>> diff -rupN a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h
>>>>
>>>> --- a/xen/include/xen/sched-if.h 2010-04-07 12:12:06.000000000 -0400
>>>>
>>>> +++ b/xen/include/xen/sched-if.h 2010-04-13 17:30:40.710992000
>>>> -0400
>>>>
>>>> @@ -76,6 +76,7 @@ struct scheduler {
>>>>
>>>> int (*pick_cpu) (struct vcpu *);
>>>>
>>>> int (*adjust) (struct domain *,
>>>>
>>>> struct xen_domctl_scheduler_op *);
>>>>
>>>> + int (*adjust_global) (struct xen_domctl_scheduler_op *);
>>>>
>>>> void (*dump_settings) (void);
>>>>
>>>> void (*dump_cpu_state) (int);
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Xen-devel mailing list
>>>> Xen-devel@lists.xensource.com
>>>> http://lists.xensource.com/xen-devel
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Xen-devel mailing list
>>> Xen-devel@lists.xensource.com
>>> http://lists.xensource.com/xen-devel
>>>
>>>
>>
>
[-- Attachment #1.1.2: Type: text/html, Size: 28087 bytes --]
[-- Attachment #1.2: image002.jpg --]
[-- Type: image/jpeg, Size: 2857 bytes --]
[-- Attachment #1.3: image001.jpg --]
[-- Type: image/jpeg, Size: 3294 bytes --]
[-- Attachment #2: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2010-05-04 15:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-19 13:39 [PATCH 1/1] Add .adjust_global callback Kathy Hadley
2010-04-19 13:54 ` Dulloor
2010-05-03 23:50 ` George Dunlap
2010-05-04 3:29 ` George Dunlap
2010-05-04 15:46 ` George Dunlap [this message]
2010-05-04 16:18 ` Keir Fraser
-- strict thread matches above, loose matches on Subject: below --
2010-04-16 14:14 Kathy Hadley
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=q2qde76405a1005040846r44491569n605715e5f6b9193@mail.gmail.com \
--to=george.dunlap@eu.citrix.com \
--cc=Kathy.Hadley@dornerworks.com \
--cc=keir.fraser@citrix.com \
--cc=xen-devel@lists.xensource.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).