public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [Patch] Use VDSO interface for gettimeofday on aarch64
@ 2018-05-10 18:01 Steve Ellcey
  2018-05-11  0:28 ` Jonathan Nieder
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Steve Ellcey @ 2018-05-10 18:01 UTC (permalink / raw)
  To: libc-alpha


This is a Aarch64 version of gettimeofday that uses the VDSO interface
when it is available.  I did a test with 100000000 gettimeofday calls
on a T88 and the time went from 7.1 seconds to 5.5 seconds.   I also
ran the glibc testsuite and I did not get any regressions.

OK to checkin?

Steve Ellcey
sellcey@cavium.com


2018-05-10  Steve Ellcey  <sellcey@caviumnetworks.com>

	* sysdeps/unix/sysv/linux/aarch64/gettimeofday.c: New file.


diff --git a/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c b/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c
index e69de29..973b6ff 100644
--- a/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c
+++ b/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Get the current time of day and timezone information,
+   putting it into *tv and *tz.  If tz is null, *tz is not filled.
+   Returns 0 on success, -1 on errors.  */
+
+#ifdef SHARED
+
+# define __gettimeofday __redirect___gettimeofday
+# include <sys/time.h>
+# undef __gettimeofday
+# define HAVE_VSYSCALL
+# include <dl-vdso.h>
+# include <sysdep-vdso.h>
+
+static int
+__gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
+{
+  return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
+}
+
+/* PREPARE_VERSION will need an __LP64__ ifdef when ILP32 support
+   goes in.  See _libc_vdso_platform_setup in
+   sysdeps/unix/sysv/linux/aarch64/init-first.c.  */
+
+# undef INIT_ARCH
+# define INIT_ARCH() \
+	   PREPARE_VERSION (linux_version, "LINUX_2.6.39", 123718537); \
+	   void *vdso_gettimeofday = \
+	     _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
+
+libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,
+                    vdso_gettimeofday ?: (void *) __gettimeofday_syscall)
+
+# undef libc_hidden_def
+# define libc_hidden_def(name)                               \
+  __hidden_ver1 (__gettimeofday_syscall, __GI___gettimeofday,  \
+               __gettimeofday_syscall);
+
+#else
+
+# include <sys/time.h>
+# include <sysdep.h>
+int
+__gettimeofday (struct timeval *tv, struct timezone *tz)
+{
+  return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
+}
+#endif
+
+libc_hidden_def (__gettimeofday)
+weak_alias (__gettimeofday, gettimeofday)
+libc_hidden_weak (gettimeofday)

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2018-06-14 16:59 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-10 18:01 [Patch] Use VDSO interface for gettimeofday on aarch64 Steve Ellcey
2018-05-11  0:28 ` Jonathan Nieder
2018-05-11  4:05 ` Siddhesh Poyarekar
2018-05-11  4:44   ` Andrew Pinski
2018-05-11  5:51     ` Siddhesh Poyarekar
2018-05-11 11:16 ` Szabolcs Nagy
2018-05-15 23:07   ` Steve Ellcey
2018-05-16 10:44     ` Szabolcs Nagy
2018-05-16 11:52       ` Adhemerval Zanella
2018-05-16 12:03         ` Szabolcs Nagy
2018-05-16 12:13           ` Szabolcs Nagy
2018-05-16 13:23             ` Adhemerval Zanella
2018-05-22 20:26       ` Steve Ellcey
2018-06-14 13:03         ` [COMMITTED] aarch64: Use an ifunc/VDSO to implement gettimeofday in shared glibc Szabolcs Nagy
2018-06-14 16:59           ` Steve Ellcey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).