Date: Wed, 7 Sep 2011 16:17:41 +1000 From: Peter Jeremy <peterjeremy@acm.org> To: freebsd-hackers@freebsd.org Subject: Re: excessive use of gettimeofday(2) and other syscalls Message-ID: <20110907061741.GC96277@server.vk2pj.dyndns.org> In-Reply-To: <CAHwLALMwOu8wc5W03dar5fhkWkjN6f7eDGAT4a1u%2BK4eHHSsng@mail.gmail.com> References: <20110906220115.GA25048@freebsd.org> <CAHRgBhRe8n%2BV3nSzRn4_fctHB1nie2ACk7oRVOPJqqKaMUgKrg@mail.gmail.com> <CAF6rxg=kzHP4zr_=LGnJDUQu-xEwgpy6QN=Lk4jqXa6hs=epKg@mail.gmail.com> <CAHRgBhT%2BKi%2BYPiK%2Bhn=fJ91eA=31tOaTPe_5xLSHQawa=%2BFD0Q@mail.gmail.com> <CAHwLALMwOu8wc5W03dar5fhkWkjN6f7eDGAT4a1u%2BK4eHHSsng@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--24zk1gE8NUlDmwG9 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 2011-Sep-06 16:44:48 -0600, Manish Vachharajani <manishv@lineratesystems= =2Ecom> 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). As 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(). This is intended to be much cheaper than gettimeofday(). On 2011-Sep-06 21:15:55 -0400, Rayson Ho <raysonlogin@gmail.com> 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. In order to reduce the cost where the resolution isn't important, FreeBSD provides several non-standard clock types for clock_gettime(2). This 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. --=20 Peter Jeremy --24zk1gE8NUlDmwG9 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (FreeBSD) iEYEARECAAYFAk5nDIUACgkQ/opHv/APuIduQQCggDolZcIxgmfW1vJz/75czqM/ r9gAni6p+QQ8d+mRGkOEQaaqowuNxURU =e7EY -----END PGP SIGNATURE----- --24zk1gE8NUlDmwG9--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110907061741.GC96277>