Date: Mon, 17 Dec 2012 01:37:56 +0200 From: Alexander Motin <mav@FreeBSD.org> To: FreeBSD Current <freebsd-current@freebsd.org>, freebsd-arch@freebsd.org Cc: Davide Italiano <davide@freebsd.org> Subject: Re: [RFC/RFT] calloutng Message-ID: <50CE5B54.3050905@FreeBSD.org> In-Reply-To: <50CCAB99.4040308@FreeBSD.org> References: <50CCAB99.4040308@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi. Here is one more version. Unless something new will be found/reported this may be the last one, because me and Davide are quite satisfied with the results. If everything will be fine, I think we could commit it to HEAD closer to the end of the week: http://people.freebsd.org/~mav/calloutng_12_16.patch Changes in this version: -- Removed couple of redundant variables in callout implementation, that reduced sizeof(struct callout) by two pointers and simplified some internal code. -- syscons driver was made to schedule only 1-2 callouts per second instead of 20-30 before when console is in graphical mode and there are few other things to do. Now my laptop has only about 30 interrupts per second total during idle periods with X running. -- i8254 eventtimer driver was optimized to work faster in disabled by default one-shot mode. -- Few kernel functions were added to make KPIs more complete. -- Man pages were updated. -- Some style fixes were made. On 15.12.2012 18:55, Alexander Motin wrote: > I'm sorry to interrupt review, but as usual good ideas came during the > final testing, causing another round. :) Here is updated patch for > HEAD, that includes several new changes: > http://people.freebsd.org/~mav/calloutng_12_15.patch > > The new changes are: > -- Precision and event aggregation code was reworked. Instead of > previous -prec/+prec representation, precision is now single-sided -- > -0/+prec. It allowed to significantly improve precision on long time > intervals for APIs which imply that event should not happen before the > specified time. Depending on CPU activity, mistake for long time > intervals now will never be more then 1-500ms, even if specified > precision allows more. > -- Some minor optimizations were made to reduce callout overhead and > latency by 1.5-2us. Now on Core2Duo amd64 system with LAPIC eventtimer > and TSC timecounter usleep(1) call from user-level executes in just > 5-6us, instead of 7-8us before. Now it can do 180K cycles per second on > single CPU with only partial CPU load. > -- Number of kernel subsystems (dcons, syscons, yarrow, led, atkbd, > setrlimit) were modified to reduce number of interrupts, also with event > aggregation by explicit specification of the acceptable events > precision. Now my Core2Duo test system has only 30 interrupts per second > in idle. If not remaining syscons events, it could easily be 15. My > IvyBridge ultrabook first time in its history shown 5.5 hours of battery > time with full screen brightness and 10 hours with lid closed. > -- Some kernel functions were added to make KPIs more complete. > > I've successfully tested this patch on amd64 and arm. > -- Alexander Motin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50CE5B54.3050905>