From owner-freebsd-performance@FreeBSD.ORG Mon Jun 2 19:51:25 2008 Return-Path: Delivered-To: freebsd-performance@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 33750106564A for ; Mon, 2 Jun 2008 19:51:25 +0000 (UTC) (envelope-from gary@velocity-servers.net) Received: from longhorn.velocity-servers.net (longhorn.velocity-servers.net [65.99.246.30]) by mx1.freebsd.org (Postfix) with ESMTP id 245858FC1D for ; Mon, 2 Jun 2008 19:51:25 +0000 (UTC) (envelope-from gary@velocity-servers.net) Received: from [70.106.53.131] (helo=dragoon.velocity-servers.net) by longhorn.velocity-servers.net with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69 (FreeBSD)) (envelope-from ) id 1K3G3w-000LSR-SS; Mon, 02 Jun 2008 14:51:25 -0500 X-Mailer: QUALCOMM Windows Eudora Version 7.1.0.9 Date: Mon, 02 Jun 2008 15:51:20 -0400 To: Bruce Evans From: Gary Stanley In-Reply-To: <20080602203217.T3100@delplex.bde.org> References: <2B465A44-2578-4675-AA17-EBE17A072017@chittenden.org> <20080602060624.93F5F8FC4A@mx1.freebsd.org> <20080602203217.T3100@delplex.bde.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - longhorn.velocity-servers.net X-AntiAbuse: Original Domain - freebsd.org X-AntiAbuse: Originator/Caller UID/GID - [26 6] / [26 6] X-AntiAbuse: Sender Address Domain - velocity-servers.net Message-Id: <20080602195125.245858FC1D@mx1.freebsd.org> X-Mailman-Approved-At: Mon, 02 Jun 2008 19:58:46 +0000 Cc: freebsd-performance@freebsd.org Subject: Re: Micro-benchmark for various time syscalls... X-BeenThere: freebsd-performance@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Performance/tuning List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jun 2008 19:51:25 -0000 At 06:55 AM 6/2/2008, Bruce Evans wrote: >On Mon, 2 Jun 2008, Gary Stanley wrote: > >>At 12:54 AM 6/2/2008, Sean Chittenden wrote: >>>PS Is there a reason that time(3) can't be implemented in terms of >>>clock_gettime(CLOCK_SECOND)? 10ms seems precise enough compared to >>>time_t's whole second resolution. >> >>Another interesting idea is to map gettimeofday() to userland, sort >>of like darwin (commpage) and linux (vsyscall) via read only page. > >time() can reasonably be implemented like that, but not gettimeofday(). >gettimeofday() should have an accuracy of 1 usec and it returns a large >data structure that cannot be locked by simple atomic accesses. The >read-only page would have to be updated millions of times per second >or take a pagefault to access to give the same functionality as FreeBSD >gettimeofday(). The updates would cost about 100% of 1 CPU. Other >CPUs could then read the time using locking like that in binuptime() >but more complicated (needs an atomic update for at least the generation >count, and probably more). The pagefaults would give a smaller >pessimization (I guess slightly longer to reach microtime() than via >the current syscall, and identical time in microtime() to do the update >on demand). Here's a sloppy thought :) What about just rewriting gettimeofday in libc to query the TSC and convert it to usecs etc? That would eliminate any costly userland -> kernel overhead. I have a proof of concept here to do this. The only bad thing is the skewing of the TSC..