From owner-freebsd-hackers@FreeBSD.ORG Wed Sep 7 18:41:55 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C95D4106566B for ; Wed, 7 Sep 2011 18:41:55 +0000 (UTC) (envelope-from manishv@lineratesystems.com) Received: from mail-gx0-f179.google.com (mail-gx0-f179.google.com [209.85.161.179]) by mx1.freebsd.org (Postfix) with ESMTP id 8E3DB8FC14 for ; Wed, 7 Sep 2011 18:41:55 +0000 (UTC) Received: by gxk1 with SMTP id 1so129626gxk.10 for ; Wed, 07 Sep 2011 11:41:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.42.141.193 with SMTP id p1mr5336127icu.281.1315420914545; Wed, 07 Sep 2011 11:41:54 -0700 (PDT) Received: by 10.42.19.196 with HTTP; Wed, 7 Sep 2011 11:41:54 -0700 (PDT) In-Reply-To: <20110907061741.GC96277@server.vk2pj.dyndns.org> References: <20110906220115.GA25048@freebsd.org> <20110907061741.GC96277@server.vk2pj.dyndns.org> Date: Wed, 7 Sep 2011 12:41:54 -0600 Message-ID: From: Manish Vachharajani To: Peter Jeremy Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: freebsd-hackers@freebsd.org Subject: Re: excessive use of gettimeofday(2) and other syscalls X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Sep 2011 18:41:55 -0000 This is great info, thanks. Is it worth having some kind of environment variable tunable (or even compile time tunable) to have a "fast" gettimeofday then? Is there a complimentary body of code that assumes gettimeofday is precise? Manish On Wed, Sep 7, 2011 at 12:17 AM, Peter Jeremy wrote: > On 2011-Sep-06 16:44:48 -0600, Manish Vachharajani wrote: >>Under 7.3 (haven't checked 8 or 9) this issue crops up because the >>time system call calls gettimeofday under the hood (see >>lib/libc/gen/time.c). =A0As a result, the kernel tries to get an >>accurate subsecond resolution time that simply gets chopped to the >>nearest second. > > Under 8.x and later, time(3) uses clock_gettime(CLOCK_SECOND,...) > rather than gettimeofday(). =A0This is intended to be much cheaper > than gettimeofday(). > > On 2011-Sep-06 21:15:55 -0400, Rayson Ho wrote: >>IMO, the time returned by gettimeofday does not need to be high >>precision. There are higher resolution time APIs on Linux and I >>believe the application programmers know when to use the slower but >>more accurate clock API. > > There are 3 standard APIs for returning time of day: > time(3) provides second precision > gettimeofday(2) provides microsecond precision > clock_gettime(2) provides nanosecond precision > > By default, FreeBSD attempts to provide resolution as close as > possible to the precision - which makes the 2 system calls fairly > expensive. =A0In order to reduce the cost where the resolution isn't > important, FreeBSD provides several non-standard clock types for > clock_gettime(2). =A0This approach differs from Linux - and it seems > that there is a non-trivial body of code that assumes that calling > gettimeofday() is very cheap. > > There is probably a good case for an API that provides a resolution > of the order of a tick but there is no standard for this. > > -- > Peter Jeremy > --=20 Manish Vachharajani Founder LineRate Systems manishv@lineratesystems.com (609)635-9531 M