[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Add a timer mode that disables pending missed ticks
Applied as c/s 16690, although the checked-in patch is smaller. I think the only important fix is to pt_intr_post() and the only bit of the patch I totally omitted was the change to pt_process_missed_ticks(). I don't think that change can be important, but let's see what happens to the error percentage... -- Keir On 4/1/08 23:24, "Dave Winchell" <dwinchell@xxxxxxxxxxxxxxx> wrote: > Hi Dan and Keir, > > Attached is a patch that fixes some issues with the SYNC policy > (no_missed_ticks_pending). > I have not tried to make the change the minimal one, but, rather, just > ported into > the new code what I know to work well. The error for > no_missed_ticks_pending goes from > over 3% to .03% with this change according to my testing. > > Regards, > Dave > > Dan Magenheimer wrote: > >> Hi Dave -- >> >> Did you get your correction ported? If so, it would be nice to see this get >> into 3.1.3. >> >> Note that I just did some very limited testing with timer_mode=2(=SYNC=no >> missed ticks pending) >> on tip of xen-3.1-testing (64-bit Linux hv guest) and the worst error I've >> seen so far >> is 0.012%. But I haven't tried any exotic loads, just LTP. >> >> Thanks, >> Dan >> >> >> >>> -----Original Message----- >>> From: Dave Winchell [mailto:dwinchell@xxxxxxxxxxxxxxx] >>> Sent: Wednesday, December 19, 2007 12:33 PM >>> To: dan.magenheimer@xxxxxxxxxx >>> Cc: Keir Fraser; Shan, Haitao; xen-devel@xxxxxxxxxxxxxxxxxxx; Dong, >>> Eddie; Jiang, Yunhong; Dave Winchell >>> Subject: Re: [Xen-devel] [PATCH] Add a timer mode that >>> disables pending >>> missed ticks >>> >>> >>> Dan, >>> >>> I did some testing with the constant tsc offset SYNC method >>> (now called >>> no_missed_ticks_pending) >>> and found the error to be very high, much larger than 1 %, as >>> I recall. >>> I have not had a chance to submit a correction. I will try to >>> do it later >>> this week or the first week in January. My version of constant tsc >>> offset SYNC method >>> produces .02 % error, so I just need to port that into the >>> current code. >>> >>> The error you got for both of those kernels is what I would expect >>> for the default mode, delay_for_missed_ticks. >>> >>> I'll let Keir answer on how to set the time mode. >>> >>> Regards, >>> Dave >>> >>> Dan Magenheimer wrote: >>> >>> >>> >>>> Anyone make measurements on the final patch? >>>> >>>> I just ran a 64-bit RHEL5.1 pvm kernel and saw a loss of >>>> >>>> >>> about 0.2% with no load. This was xen-unstable tip today >>> with no options specified. 32-bit was about 0.01%. >>> >>> >>>> I think I missed something... how do I run the various >>>> >>>> >>> accounting choices and which ones are known to be appropriate >>> for which kernels? >>> >>> >>>> Thanks, >>>> Dan >>>> >>>> >>>> >>>> >>>> >>>>> -----Original Message----- >>>>> From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx >>>>> [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx]On Behalf Of >>>>> >>>>> >>> Keir Fraser >>> >>> >>>>> Sent: Thursday, December 06, 2007 4:57 AM >>>>> To: Dave Winchell >>>>> Cc: Shan, Haitao; xen-devel@xxxxxxxxxxxxxxxxxxx; Dong, Eddie; Jiang, >>>>> Yunhong >>>>> Subject: Re: [Xen-devel] [PATCH] Add a timer mode that >>>>> disables pending >>>>> missed ticks >>>>> >>>>> >>>>> Please take a look at xen-unstable changeset 16545. >>>>> >>>>> -- Keir >>>>> >>>>> On 26/11/07 20:57, "Dave Winchell" >>>>> >>>>> >>> <dwinchell@xxxxxxxxxxxxxxx> wrote: >>> >>> >>>>> >>>>> >>>>> >>>>>> Keir, >>>>>> >>>>>> The accuracy data I've collected for i/o loads for the >>>>>> various time protocols follows. In addition, the data >>>>>> for cpu loads is shown. >>>>>> >>>>>> The loads labeled cpu and i/o-8 are on an 8 processor AMD box. >>>>>> Two guests, red hat and sles 64 bit, 8 vcpu each. >>>>>> The cpu load is usex -e36 on each guest. >>>>>> (usex is available at http://people.redhat.com/anderson/usex.) >>>>>> i/o load is 8 instances of dd if=/dev/hda6 of=/dev/null. >>>>>> >>>>>> The loads labeled i/o-32 are 32 instances of dd. >>>>>> Also, these are run on 4 cpu AMD box. >>>>>> In addition, there is an idle rh-32bit guest. >>>>>> All three guests are 8vcpu. >>>>>> >>>>>> The loads labeled i/o-4/32 are the same as i/o-32 >>>>>> except that the redhat-64 guest has 4 instances of dd. >>>>>> >>>>>> Date Duration Protocol sles, rhat error load >>>>>> >>>>>> 11/07 23 hrs 40 min ASYNC -4.96 sec, +4.42 sec -.006%, +.005% cpu >>>>>> 11/09 3 hrs 19 min ASYNC -.13 sec, +1.44 sec, -.001%, +.012% cpu >>>>>> >>>>>> 11/08 2 hrs 21 min SYNC -.80 sec, -.34 sec, -.009%, -.004% cpu >>>>>> 11/08 1 hr 25 min SYNC -.24 sec, -.26 sec, -.005%, -.005% cpu >>>>>> 11/12 65 hrs 40 min SYNC -18 sec, -8 sec, -.008%, -.003% cpu >>>>>> >>>>>> 11/08 28 min MIXED -.75 sec, -.67 sec -.045%, -.040% cpu >>>>>> 11/08 15 hrs 39 min MIXED -19. sec,-17.4 sec, -.034%, -.031% cpu >>>>>> >>>>>> >>>>>> 11/14 17 hrs 17 min ASYNC -6.1 sec,-55.7 sec, -.01%, -.09% i/o-8 >>>>>> 11/15 2 hrs 44 min ASYNC -1.47 sec,-14.0 sec, -.015% -.14% i/o-8 >>>>>> >>>>>> 11/13 15 hrs 38 min SYNC -9.7 sec,-12.3 sec, -.017%, -.022% i/o-8 >>>>>> 11/14 48 min SYNC - .46 sec, - .48 sec, -.017%, -.018% i/o-8 >>>>>> >>>>>> 11/14 4 hrs 2 min MIXED -2.9 sec, -4.15 sec, -.020%, -.029% i/o-8 >>>>>> 11/20 16 hrs 2 min MIXED -13.4 sec,-18.1 sec, -.023%, -.031% i/o-8 >>>>>> >>>>>> >>>>>> >>>>>> 11/21 28 min MIXED -2.01 sec, -.67 sec, -.12%, -.04% i/o-32 >>>>>> 11/21 2 hrs 25 min SYNC -.96 sec, -.43 sec, -.011%, -.005% i/o-32 >>>>>> 11/21 40 min ASYNC -2.43 sec, -2.77 sec -.10%, -.11% i/o-32 >>>>>> >>>>>> 11/26 113 hrs 46 min MIXED -297. sec, 13. sec -.07%, .003% i/o-4/32 >>>>>> 11/26 4 hrs 50 min SYNC -3.21 sec, 1.44 sec, -.017%, .01% i/o-4/32 >>>>>> >>>>>> >>>>>> Overhead measurements: >>>>>> >>>>>> Progress in terms of number of passes through a fixed >>>>>> >>>>>> >>>>>> >>>>>> >>>>> system workload >>>>> >>>>> >>>>> >>>>> >>>>>> on an 8 vcpu red hat with an 8 vcpu sles idle. >>>>>> The workload was usex -b48. >>>>>> >>>>>> >>>>>> ASYNC 167 min 145 passes .868 passes/min >>>>>> SYNC 167 min 144 passes .862 passes/min >>>>>> SYNC 1065 min 919 passes .863 passes/min >>>>>> MIXED 221 min 196 passes .887 passes/min >>>>>> >>>>>> >>>>>> Conclusions: >>>>>> >>>>>> The only protocol which meets the .05% accuracy requirement for ntp >>>>>> tracking under the loads >>>>>> above is the SYNC protocol. The worst case accuracies for >>>>>> >>>>>> >>>>>> >>>>>> >>>>> SYNC, MIXED, >>>>> >>>>> >>>>> >>>>> >>>>>> and ASYNC >>>>>> are .022%, .12%, and .14%, respectively. >>>>>> >>>>>> We could reduce the cost of the SYNC method by only >>>>>> >>>>>> >>>>>> >>>>>> >>>>> scheduling the extra >>>>> >>>>> >>>>> >>>>> >>>>>> wakeups if a certain number >>>>>> of ticks are missed. >>>>>> >>>>>> Regards, >>>>>> Dave >>>>>> >>>>>> Keir Fraser wrote: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> On 9/11/07 19:22, "Dave Winchell" >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> <dwinchell@xxxxxxxxxxxxxxx> wrote: >>>>> >>>>> >>>>> >>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> Since I had a high error (~.03%) for the ASYNC method a >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> couple of days ago, >>>>> >>>>> >>>>> >>>>> >>>>>>>> I ran another ASYNC test. I think there may have been something >>>>>>>> wrong with the code I used a couple of days ago for >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> ASYNC. It may have been >>>>> >>>>> >>>>> >>>>> >>>>>>>> missing the immediate delivery of interrupt after context >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> switch in. >>>>> >>>>> >>>>> >>>>> >>>>>>>> My results indicate that either SYNC or ASYNC give >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> acceptable accuracy, >>>>> >>>>> >>>>> >>>>> >>>>>>>> each running consistently around or under .01%. MIXED has >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> a fairly high >>>>> >>>>> >>>>> >>>>> >>>>>>>> error of >>>>>>>> greater than .03%. Probably too close to .05% ntp >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> threshold for comfort. >>>>> >>>>> >>>>> >>>>> >>>>>>>> I don't have an overnight run with SYNC. I plan to leave >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> SYNC running >>>>> >>>>> >>>>> >>>>> >>>>>>>> over the weekend. If you'd rather I can leave MIXED >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> running instead. >>>>> >>>>> >>>>> >>>>> >>>>>>>> It may be too early to pick the protocol and I can run >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>> more overnight tests >>>>> >>>>> >>>>> >>>>> >>>>>>>> next week. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> I'm a bit worried about any unwanted side effects of the >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> SYNC+run_timer >>>>> >>>>> >>>>> >>>>> >>>>>>> approach -- e.g., whether timer wakeups will cause higher >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> system-wide CPU >>>>> >>>>> >>>>> >>>>> >>>>>>> contention. I find it easier to think through the >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> implications of ASYNC. I'm >>>>> >>>>> >>>>> >>>>> >>>>>>> surprised that MIXED loses time, and is less accurate than >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> ASYNC. Perhaps it >>>>> >>>>> >>>>> >>>>> >>>>>>> delivers more timer interrupts than the other approaches, >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> and each interrupt >>>>> >>>>> >>>>> >>>>> >>>>>>> event causes a small accumulated error? >>>>>>> >>>>>>> Overall I would consider MIXED and ASYNC as favourites and >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> if the latter is >>>>> >>>>> >>>>> >>>>> >>>>>>> actually more accurate then I can simply revert the changeset that >>>>>>> implemented MIXED. >>>>>>> >>>>>>> Perhaps rather than running more of the same workloads you >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> could try idle >>>>> >>>>> >>>>> >>>>> >>>>>>> VCPUs and I/O bound VCPUs (e.g., repeated large disc reads >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> to /dev/null)? We >>>>> >>>>> >>>>> >>>>> >>>>>>> don't have any data on workloads that aren't CPU bound, so >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> that's really an >>>>> >>>>> >>>>> >>>>> >>>>>>> obvious place to put any further effort imo. >>>>>>> >>>>>>> -- Keir >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> _______________________________________________ >>>>> Xen-devel mailing list >>>>> Xen-devel@xxxxxxxxxxxxxxxxxxx >>>>> http://lists.xensource.com/xen-devel >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>> >>> >> >> >> > > diff -r cfdbdca5b831 xen/arch/x86/hvm/vpt.c > --- a/xen/arch/x86/hvm/vpt.c Thu Dec 06 15:36:07 2007 +0000 > +++ b/xen/arch/x86/hvm/vpt.c Fri Jan 04 17:58:16 2008 -0500 > @@ -58,7 +58,7 @@ static void pt_process_missed_ticks(stru > > missed_ticks = missed_ticks / (s_time_t) pt->period + 1; > if ( mode_is(pt->vcpu->domain, no_missed_ticks_pending) ) > - pt->do_not_freeze = !pt->pending_intr_nr; > + pt->do_not_freeze = 1; > else > pt->pending_intr_nr += missed_ticks; > pt->scheduled += missed_ticks * pt->period; > @@ -127,7 +127,12 @@ static void pt_timer_fn(void *data) > > pt_lock(pt); > > - pt->pending_intr_nr++; > + if ( mode_is(pt->vcpu->domain, no_missed_ticks_pending) ) { > + pt->pending_intr_nr = 1; > + pt->do_not_freeze = 0; > + } > + else > + pt->pending_intr_nr++; > > if ( !pt->one_shot ) > { > @@ -221,8 +226,6 @@ void pt_intr_post(struct vcpu *v, struct > return; > } > > - pt->do_not_freeze = 0; > - > if ( pt->one_shot ) > { > pt->enabled = 0; > @@ -235,6 +238,10 @@ void pt_intr_post(struct vcpu *v, struct > pt->last_plt_gtime = hvm_get_guest_time(v); > pt->pending_intr_nr = 0; /* 'collapse' all missed ticks */ > } > + else if ( mode_is(v->domain, no_missed_ticks_pending) ) { > + pt->pending_intr_nr--; > + pt->last_plt_gtime = hvm_get_guest_time(v); > + } > else > { > pt->last_plt_gtime += pt->period_cycles; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |