[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] A question on the credit scheduler
2011/12/17 gavin <gbtux@xxxxxxx>: > > At 2011-12-16 23:58:26,"George Dunlap" <George.Dunlap@xxxxxxxxxxxxx> wrote: >>2011/12/16 gavin <gbtux@xxxxxxx>: >>> At 2011-12-16 19:04:19,"George Dunlap" <George.Dunlap@xxxxxxxxxxxxx> wrote: >>> >>>>2011/12/16 zhikai <gbtux@xxxxxxx>: >>>>> Hi All, >>>>> >>>>> In the credit scheduler, the scheduling decision function >>>>>csched_schedule() >>>>> is called in the schedule function in scheduler.c, such as the following. >>>>> next_slice = sched->do_schedule(sched, now, tasklet_work_scheduled); >>>>> >>>>> But, how often the csched_schedule() is called and to run? Does this >>>>> frequency have something to do with the slice of credit scheduler that is >>>>> 30ms? >>>> >>>>The scheduler runs whenever the SCHEDULE_SOFTIRQ is raised. If you >>>>grep through the source code fro that string, you can find all the >>>>places where it's raised. >>>> >>>>Some examples include: >>>>* When the 30ms timeslice is finished >>>>* When a sleeping vcpu of higher priority than what's currently running >>>>wakes up >>>>* When a vcpu blocks >>>>* When a vcpu is migrated from one cpu to another >>>> >>>>30ms is actually a pretty long time; in typical workloads, vcpus block >>>>or are preempted by other waking vcpus without using up their full >>>>timeslice. >>> >>> Thank you very much for your reply. >>> >>> So, the vcpu is very likely to be preempted whenever the SCHEDULE_SOFTIRQ is >>> raised. >> >>It depends; if you have a cpu-burning vcpu running on a cpu all by >>itself, then after its 30ms timeslice, Xen will have no one else to >>run, and so will let it run again. >> >>But yes, if there are other vcpus on the runqueue, or the host is >>moderately busy, it's likely that SCHEDULE_SOFTIRQ will cause a >>context-switch. >> >>> And we cannot find a small timeslice, such as a(ms), which makes the >>> time any vcpu spending on running phase is k*a(ms), k is integer here. There >>> is no such a small timeslice. Is it right? >> >>I'm sorry, I don't really understand your question. Perhaps if you >>told me what you're trying to accomplish? > > I try to describe my idea as the following clearly. But I really don't know > if it will work. Please give me some advice if possible. > > According to the credit scheduler in Xen, a vCPU can run a 30ms timeslice > when it is scheduled on the physical CPU. And, a vCPU with the BOOST > priority will preempt the running one and run additional 10ms. So, what I > think is if we monitor the physical CPU every 10ms and we can get the > mapping information of a physical CPU and a vCPU. And also, we can get the > un-mapping information that a physical CPU isn’t mapped to any vCPU. Thus, > we can get the CPU usage by calculating the proportion of the mapping > information to the total time when we monitored. > > For example, if we monitor the physical CPUs every 10ms and we can get 100 > pairs of pCPU and vCPU in a second, such as (pCPU_id, vCPU_id). If there is > 60 mapping pairs that the pCPU is mapped to a valid vPCU, and 40 un-mapping > pairs that we cannot find the pCPU to be mapped a valid vCPU. So, we can get > the usage of the physical CPUs that is 60%. > > Here, we monitor the physical CPUs every 10ms. We also can monitor them once > less than the 10ms interval, such as 1ms interval. Whatever interval we > choose, we must make sure no CPU content switch in the interval or the > context switch always occur at the edge of interval. Only in this condition, > can this idea work. > > So, I am not sure whether we can find such a time interval that can meet > this condition. In other words, whether we can find such a time interval > that ensures all the CPU content switch occur at the edge of interval. You still haven't described exactly what it is you're trying to accomplish: what is your end goal? It seems to be related somehow to measuring how busy the system is (i.e., the number of active pcpus and idle pcpus); but as I don't know what you want to do with that information, I can't tell you the best way to get it. Regarding a map of pcpus to vcpus, that already exists. The scheduling code will keep track of the currently running vcpu here: per_cpu(schedule_data, pcpu_id).curr You can see examples of the above structure used in xen/common/sched_credit2.c. If "is_idle(per_cpu(schedule_data, pcpu).curr)" is false, then the cpu is running a vcpu; if it is true, then the pcpu is idle (although it may be running a tasklet). Additionally, if all you want is the number of non-idle cpus, the credit1 scheduler keeps track of the idle and non-idle cpus in prv->idlers. You could easily use "cpumask_weight(&prv->idlers)" to find out how many idle cpus there are at any given time. If you know how many online cpus there are, that will give you the busy-ness of the system. So now that you have this instantaneous percentage, what do you want to do with it? -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |