From owner-freebsd-arch@FreeBSD.ORG Sun Dec 16 23:38:02 2012 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 95BFAE12; Sun, 16 Dec 2012 23:38:02 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: from mail-wg0-f52.google.com (mail-wg0-f52.google.com [74.125.82.52]) by mx1.freebsd.org (Postfix) with ESMTP id CA0258FC0C; Sun, 16 Dec 2012 23:38:01 +0000 (UTC) Received: by mail-wg0-f52.google.com with SMTP id 12so2282032wgh.31 for ; Sun, 16 Dec 2012 15:38:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=EzfZxHJTGDewpVwapnVhmR8/61Cb4ukJOWIIGg2UEeA=; b=cqJwGKUCQwqkhTfJiARESFkdJ7l/e3tOVWZrp5WEIc53HlQQQslem/tlzoCoJl5R9O T3sOT4z+Qxu2zvLi0VtAVfOlgdc6W+bDh538sYzuHbhdKSVREkoHkPxlp1yfLePXFkyE LyNbNLZ3t+uJc4YGrvaRJ0dBEpE9UC4XTQwzMhRNWWHI2Fd4uHeTtfzRokJlyKDbkge1 zc0YFOzz55VxqASWzMlAbXm8bSFWs2ZBoqU+gOvtaO20B9BfOENSyQblTfL1+NfNpuh6 nWRHl5TqXPTAEXLK1h41hYW4MwRLMOomiGV0QLLYheyysg+Slhiu29P5O/R20/r6Bd+e xqBg== Received: by 10.194.57.206 with SMTP id k14mr13795024wjq.26.1355701080847; Sun, 16 Dec 2012 15:38:00 -0800 (PST) Received: from mavbook.mavhome.dp.ua (mavhome.mavhome.dp.ua. [213.227.240.37]) by mx.google.com with ESMTPS id i2sm8826403wiw.3.2012.12.16.15.37.58 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 16 Dec 2012 15:37:59 -0800 (PST) Sender: Alexander Motin Message-ID: <50CE5B54.3050905@FreeBSD.org> Date: Mon, 17 Dec 2012 01:37:56 +0200 From: Alexander Motin User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20120628 Thunderbird/13.0.1 MIME-Version: 1.0 To: FreeBSD Current , freebsd-arch@freebsd.org Subject: Re: [RFC/RFT] calloutng References: <50CCAB99.4040308@FreeBSD.org> In-Reply-To: <50CCAB99.4040308@FreeBSD.org> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Cc: Davide Italiano X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 Dec 2012 23:38:02 -0000 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