public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] malloc: Use hp-timing on libmemusage
@ 2021-12-28 18:22 Adhemerval Zanella
  0 siblings, 0 replies; only message in thread
From: Adhemerval Zanella @ 2021-12-28 18:22 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a75b1e35c542342f3f3bc5c8ecc9c9c9c7a48c49

commit a75b1e35c542342f3f3bc5c8ecc9c9c9c7a48c49
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Thu Dec 16 13:43:38 2021 -0300

    malloc: Use hp-timing on libmemusage
    
    Instead of reimplemeting on GETTIME macro.

Diff:
---
 malloc/memusage.c            | 24 +++++++++++++++++++++---
 sysdeps/generic/memusage.h   | 12 ------------
 sysdeps/i386/i686/memusage.h |  1 -
 sysdeps/ia64/memusage.h      |  7 -------
 sysdeps/x86_64/memusage.h    |  1 -
 5 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/malloc/memusage.c b/malloc/memusage.c
index de39ad1c1a..eaf4965e5e 100644
--- a/malloc/memusage.c
+++ b/malloc/memusage.c
@@ -34,6 +34,7 @@
 #include <sys/time.h>
 
 #include <memusage.h>
+#include <hp-timing.h>
 
 /* Pointer to the real functions.  These are determined used `dlsym'
    when really needed.  */
@@ -114,6 +115,23 @@ static struct entry buffer[2 * DEFAULT_BUFFER_SIZE];
 static uint32_t buffer_cnt;
 static struct entry first;
 
+static void
+gettime (struct entry *e)
+{
+#if HP_TIMING_INLINE
+  hp_timing_t now;
+  HP_TIMING_NOW (now);
+  e->time_low = now & 0xffffffff;
+  e->time_high = now >> 32;
+#else
+  struct __timespec64 now;
+  uint64_t usecs;
+  __clock_gettime64 (CLOCK_REALTIME, &now);
+  usecs = (uint64_t)now.tv_nsec / 1000 + (uint64_t)now.tv_sec * 1000000;
+  e->time_low = usecs & 0xffffffff;
+  e->time_high = usecs >> 32;
+#endif
+}
 
 /* Update the global data after a successful function call.  */
 static void
@@ -177,7 +195,7 @@ update_data (struct header *result, size_t len, size_t old_len)
 
       buffer[idx].heap = current_heap;
       buffer[idx].stack = current_stack;
-      GETTIME (buffer[idx].time_low, buffer[idx].time_high);
+      gettime (&buffer[idx]);
 
       /* Write out buffer if it is full.  */
       if (idx + 1 == buffer_size)
@@ -267,7 +285,7 @@ me (void)
               /* Write the first entry.  */
               first.heap = 0;
               first.stack = 0;
-              GETTIME (first.time_low, first.time_high);
+              gettime (&first);
               /* Write it two times since we need the starting and end time. */
               write (fd, &first, sizeof (first));
               write (fd, &first, sizeof (first));
@@ -818,7 +836,7 @@ dest (void)
          stack.  */
       first.heap = peak_heap;
       first.stack = peak_stack;
-      GETTIME (first.time_low, first.time_high);
+      gettime (&first);
       write (fd, &first, sizeof (struct entry));
 
       /* Close the file.  */
diff --git a/sysdeps/generic/memusage.h b/sysdeps/generic/memusage.h
index c9bde5cd11..514bd058d2 100644
--- a/sysdeps/generic/memusage.h
+++ b/sysdeps/generic/memusage.h
@@ -23,15 +23,3 @@
 # warning "GETSP is not defined for this architecture."
 # define GETSP 0
 #endif
-
-#ifndef GETTIME
-# define GETTIME(low,high)						   \
-  {									   \
-    struct __timespec64 now;						   \
-    uint64_t usecs;							   \
-    __clock_gettime64 (CLOCK_REALTIME, &now);				   \
-    usecs = (uint64_t)now.tv_nsec / 1000 + (uint64_t)now.tv_sec * 1000000; \
-    low = usecs & 0xffffffff;						   \
-    high = usecs >> 32;							   \
-  }
-#endif
diff --git a/sysdeps/i386/i686/memusage.h b/sysdeps/i386/i686/memusage.h
index 08b7831e12..07b241263c 100644
--- a/sysdeps/i386/i686/memusage.h
+++ b/sysdeps/i386/i686/memusage.h
@@ -16,6 +16,5 @@
    <https://www.gnu.org/licenses/>.  */
 
 #define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
-#define GETTIME(low,high) asm ("rdtsc" : "=a" (low), "=d" (high))
 
 #include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/ia64/memusage.h b/sysdeps/ia64/memusage.h
index 3c3a526007..33fd6ec899 100644
--- a/sysdeps/ia64/memusage.h
+++ b/sysdeps/ia64/memusage.h
@@ -18,12 +18,5 @@
 #include <hp-timing.h>
 
 #define GETSP() ({ register uintptr_t stack_ptr asm ("%r12"); stack_ptr; })
-#define GETTIME(low, high) \
-  {									      \
-    hp_timing_t __now;							      \
-    HP_TIMING_NOW (__now);						      \
-    low = __now & 0xffffffff;						      \
-    high = __now >> 32;							      \
-  }
 
 #include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/x86_64/memusage.h b/sysdeps/x86_64/memusage.h
index 568dd5512d..6652fc5da1 100644
--- a/sysdeps/x86_64/memusage.h
+++ b/sysdeps/x86_64/memusage.h
@@ -16,6 +16,5 @@
    <https://www.gnu.org/licenses/>.  */
 
 #define GETSP() ({ register uintptr_t stack_ptr asm ("rsp"); stack_ptr; })
-#define GETTIME(low,high) asm ("rdtsc" : "=a" (low), "=d" (high))
 
 #include <sysdeps/generic/memusage.h>


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-28 18:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-28 18:22 [glibc] malloc: Use hp-timing on libmemusage Adhemerval Zanella

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).