mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-23 13:09:58 +08:00
malloc: Use hp-timing on libmemusage
Instead of reimplemeting on GETTIME macro.
This commit is contained in:
parent
92ff345137
commit
a75b1e35c5
@ -34,6 +34,7 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include <memusage.h>
|
#include <memusage.h>
|
||||||
|
#include <hp-timing.h>
|
||||||
|
|
||||||
/* Pointer to the real functions. These are determined used `dlsym'
|
/* Pointer to the real functions. These are determined used `dlsym'
|
||||||
when really needed. */
|
when really needed. */
|
||||||
@ -114,6 +115,23 @@ static struct entry buffer[2 * DEFAULT_BUFFER_SIZE];
|
|||||||
static uint32_t buffer_cnt;
|
static uint32_t buffer_cnt;
|
||||||
static struct entry first;
|
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. */
|
/* Update the global data after a successful function call. */
|
||||||
static void
|
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].heap = current_heap;
|
||||||
buffer[idx].stack = current_stack;
|
buffer[idx].stack = current_stack;
|
||||||
GETTIME (buffer[idx].time_low, buffer[idx].time_high);
|
gettime (&buffer[idx]);
|
||||||
|
|
||||||
/* Write out buffer if it is full. */
|
/* Write out buffer if it is full. */
|
||||||
if (idx + 1 == buffer_size)
|
if (idx + 1 == buffer_size)
|
||||||
@ -267,7 +285,7 @@ me (void)
|
|||||||
/* Write the first entry. */
|
/* Write the first entry. */
|
||||||
first.heap = 0;
|
first.heap = 0;
|
||||||
first.stack = 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 it two times since we need the starting and end time. */
|
||||||
write (fd, &first, sizeof (first));
|
write (fd, &first, sizeof (first));
|
||||||
write (fd, &first, sizeof (first));
|
write (fd, &first, sizeof (first));
|
||||||
@ -818,7 +836,7 @@ dest (void)
|
|||||||
stack. */
|
stack. */
|
||||||
first.heap = peak_heap;
|
first.heap = peak_heap;
|
||||||
first.stack = peak_stack;
|
first.stack = peak_stack;
|
||||||
GETTIME (first.time_low, first.time_high);
|
gettime (&first);
|
||||||
write (fd, &first, sizeof (struct entry));
|
write (fd, &first, sizeof (struct entry));
|
||||||
|
|
||||||
/* Close the file. */
|
/* Close the file. */
|
||||||
|
@ -23,15 +23,3 @@
|
|||||||
# warning "GETSP is not defined for this architecture."
|
# warning "GETSP is not defined for this architecture."
|
||||||
# define GETSP 0
|
# define GETSP 0
|
||||||
#endif
|
#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
|
|
||||||
|
@ -16,6 +16,5 @@
|
|||||||
<https://www.gnu.org/licenses/>. */
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
|
#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>
|
#include <sysdeps/generic/memusage.h>
|
||||||
|
@ -18,12 +18,5 @@
|
|||||||
#include <hp-timing.h>
|
#include <hp-timing.h>
|
||||||
|
|
||||||
#define GETSP() ({ register uintptr_t stack_ptr asm ("%r12"); stack_ptr; })
|
#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>
|
#include <sysdeps/generic/memusage.h>
|
||||||
|
@ -16,6 +16,5 @@
|
|||||||
<https://www.gnu.org/licenses/>. */
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#define GETSP() ({ register uintptr_t stack_ptr asm ("rsp"); stack_ptr; })
|
#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>
|
#include <sysdeps/generic/memusage.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user