WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [RFC] Add static priority into credit scheduler

To: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [RFC] Add static priority into credit scheduler
From: "Su, Disheng" <disheng.su@xxxxxxxxx>
Date: Fri, 20 Mar 2009 17:18:20 +0800
Accept-language: en-US
Acceptlanguage: en-US
Cc: George Dunlap <George.Dunlap@xxxxxxxxxxxxx>, "Su, Disheng" <disheng.su@xxxxxxxxx>, NISHIGUCHI Naoki <nisiguti@xxxxxxxxxxxxxx>
Delivery-date: Fri, 20 Mar 2009 02:20:14 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcmpPM+o1y1gcw1uTv+uoZI76uBi0g==
Thread-topic: [RFC] Add static priority into credit scheduler
Hi all,
        Attached patches add static priority into credit scheduler.
        Currently, credit scheduler has 4 kinds of priority: BOOST, UNDER, OVER 
and IDLE. And the priority of VM is dynamically changed according to the credit 
of VM, or I/O events, the highest priority VM is chosed to be scheduled in for 
each scheduling period. Due to priority is not fixed, which VM will be 
scheduled in is properly unknown. The I/O latency caused by scheduler is well 
analyzed in [1] and [2]. They provides ways to reduce I/O latency and also 
retain CPU and I/O fairness between VMs to some extend.
        There are some cases that reducing latency is much preferable to CPU or 
I/O fairness, such as RTOS guest or VM with device(audio)-assigned. The 
straightforward way is to set static(fixed) highest priority for this VM, to 
make sure it is scheduled each time. Attached patches implemented this kind of 
mechanism, like SCHED_RR/SCHED_FIFO in Linux.
        
        How it works?
        --Users can set RT priority(between 1~100) for domains. The larger the 
number, the higher the priority. Users can also change a RT domain into a 
non-RT domain by setting its priority other than 1~100.  
        --Scheduler always chooses the highest priority domain to run for RT 
domains, no changes for non-RT domains in there. If RT domains have the same 
priority, round robin between this domains for every 30ms. 30ms is the default 
scheduling period, it can be changed to 2ms or other value if needed. 
        --There is still accounting for current running non-RT vcpu in every 
10ms, accounting for all non-RT domains in every 30ms as credit scheduler did 
before. 

        Implementation details:
         -- In order to minimize the modification in the credit scheduler, one 
additional rt runqueue per pcpu is added, and one rt active domain list added 
in csched_private. RT vcpus are added into the rt runqueue in the running pcpu, 
and rt domains are added into rt active domain.
         -- Scheduler always chooses the highest priority in the rt runqueue if 
it's not empty at first, then chooses from normal runqueue instead.
         --__runq_insert/__runq_remove are changed to based on the priority of 
vcpu.
         -- Vcpu accounting is only took effects on the non-RT vcpus as before. 
Non-RT vcpus propotionally share the rest of cpu based on their weight. The 
total weight is changed during adding/removing RT domains, e.g. promoting a 
non-RT domain to a RT domain, total weight is  substracted by the weight of 
non-RT domain.
        
        How to use it:
                set priority(y) of a VM(x) by: "xm sched-credit -d x -p y"
        
        Test results:
        I did some tests with this patches according to following configuration:
                CPU: Intel Core 2 Duo E6850, Xen(1881), 7 VMs created on one 
physical machine A, each 2 VMs pair ping with each other, the other VM has RT 
priority. Another physical machine B connects with it through 1G network card 
directly. Conduct these tests from B to A, e.g ping A from B.
        some test results are uploaded to 
http://wiki.xensource.com/xenwiki/DishengSu, FYI.

        Summary:
        This patches minimize the scheduling latency, while losing CPU, or I/O 
fairness. It can be used as a scheduler for RT guest, for some cases(such as RT 
guest and non-RT guests co-exist). While there are lot of areas to improve real 
time response, such as interrupt latency, Xen I/O model[3].
        Any comments are appreciated. Thanks!

---------------------
[1]Scheduling I/O in Virtual Machine Monitors
[2]Evaluation and Consideration of the Credit Scheduler for Client 
Virtualization 
[3]A step to support real-time in virtual machine

Best Regards,
Disheng, Su

Attachment: static_priority_for_xen.patch
Description: static_priority_for_xen.patch

Attachment: static_priority_for_xen_tools.patch
Description: static_priority_for_xen_tools.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel