From owner-svn-src-all@FreeBSD.ORG Fri Jun 22 08:09:03 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1A091106564A; Fri, 22 Jun 2012 08:09:03 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: from mail-lb0-f182.google.com (mail-lb0-f182.google.com [209.85.217.182]) by mx1.freebsd.org (Postfix) with ESMTP id D715A8FC12; Fri, 22 Jun 2012 08:09:01 +0000 (UTC) Received: by lbon10 with SMTP id n10so3979240lbo.13 for ; Fri, 22 Jun 2012 01:08:54 -0700 (PDT) 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=8HIyPyCPmtu17dYLtBtk4zhogIHbPbrHS+kVhInLupI=; b=xjREB0lyB5q2BN/vsIPKtvHxrp4yIa5tLk4Zz2ohOWJZc54Vsp1BmGPsChC0z6HRHt w65eWIDDwMWZh3pmVBSaiRfga4mwQWjPMnNIE8r0813zR6O06OpU+RNZ0Gmlgp5GY51I YfEnxdm9n9iVKZA4LTLebq8fX7Tc6/+wNbgB1O6+USX0nedr5U4L7qN7EJFHG6uwv4Jw UJW7mwTFgVtV6CheLIZIoD1yFFS41a8CQso4mC41HVhu6mlqrY1SIKgs30n6lLzUhoQN twhOU8QflMF2o61dXmMir03nQi1lPkigf7JyHXeR/U2vOlX/PHDPXVjCaTTQw7V6qV10 Jk5A== Received: by 10.152.132.40 with SMTP id or8mr1199663lab.24.1340352534664; Fri, 22 Jun 2012 01:08:54 -0700 (PDT) Received: from mavbook2.mavhome.dp.ua (pc.mavhome.dp.ua. [212.86.226.226]) by mx.google.com with ESMTPS id fd1sm20373044lbb.7.2012.06.22.01.08.52 (version=SSLv3 cipher=OTHER); Fri, 22 Jun 2012 01:08:53 -0700 (PDT) Sender: Alexander Motin Message-ID: <4FE42812.3050807@FreeBSD.org> Date: Fri, 22 Jun 2012 11:08:50 +0300 From: Alexander Motin User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:12.0) Gecko/20120506 Thunderbird/12.0.1 MIME-Version: 1.0 To: Konstantin Belousov References: <201206220706.q5M76fbO062751@svn.freebsd.org> In-Reply-To: <201206220706.q5M76fbO062751@svn.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r237433 - in head/sys: amd64/include arm/include conf i386/include ia64/include kern mips/include pc98/include powerpc/include sparc64/include sys x86/include x86/x86 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jun 2012 08:09:03 -0000 On 06/22/12 10:06, Konstantin Belousov wrote: > Author: kib > Date: Fri Jun 22 07:06:40 2012 > New Revision: 237433 > URL: http://svn.freebsd.org/changeset/base/237433 > > Log: > Implement mechanism to export some kernel timekeeping data to > usermode, using shared page. The structures and functions have vdso > prefix, to indicate the intended location of the code in some future. > > The versioned per-algorithm data is exported in the format of struct > vdso_timehands, which mostly repeats the content of in-kernel struct > timehands. Usermode reading of the structure can be lockless. > Compatibility export for 32bit processes on 64bit host is also > provided. Kernel also provides usermode with indication about > currently used timecounter, so that libc can fall back to syscall if > configured timecounter is unknown to usermode code. > > The shared data updates are initiated both from the tc_windup(), where > a fast task is queued to do the update, and from sysctl handlers which > change timecounter. A manual override switch > kern.timecounter.fast_gettime allows to turn off the mechanism. > > Only x86 architectures export the real algorithm data, and there, only > for tsc timecounter. HPET counters page could be exported as well, but > I prefer to not further glue the kernel and libc ABI there until > proper vdso-based solution is developed. > > Minimal stubs neccessary for non-x86 architectures to still compile > are provided. > > Discussed with: bde > Reviewed by: jhb > Tested by: flo > MFC after: 1 month > @@ -1360,6 +1367,7 @@ tc_windup(void) > #endif > > timehands = th; > + taskqueue_enqueue_fast(taskqueue_fast,&tc_windup_push_vdso_task); > } > > /* Report or change the active timecounter hardware. */ This taskqueue_enqueue_fast() will schedule extra thread to run each time hardclock() fires. One thread may be not a big problem, but together with callout swi and possible other threads woken up there it will wake up several other CPU cores from sleep just to put them back in few microseconds. Now davide@ and me are trying to fix that by avoiding callout SWI use for simple tasks. Please, let's not create another problem same time. -- Alexander Motin