From d79b8871827a5f199fd44bc43acd5cf60c358054 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Date: Tue, 16 Nov 2021 14:35:39 +0100 Subject: [PATCH] Remove ovni_clock_update() The clock is now managed by the user, using the ovni_clock_now() function to sample the current value and ovni_ev_set_clock() to set the event clock timestamp. This change allows events with custom clock values. --- ovni.c | 39 ++++++++++----------------------------- ovni.h | 15 ++++++++------- test/flush.c | 2 +- test_speed.c | 2 +- 4 files changed, 20 insertions(+), 38 deletions(-) diff --git a/ovni.c b/ovni.c index 23d2144..a902c7c 100644 --- a/ovni.c +++ b/ovni.c @@ -313,7 +313,7 @@ uint64_t rdtsc(void) #endif uint64_t -ovni_get_clock(void) +ovni_clock_now(void) { struct timespec tp; uint64_t ns = 1000LL * 1000LL * 1000LL; @@ -331,21 +331,12 @@ ovni_get_clock(void) #endif /* ENABLE_SLOW_CHECKS */ raw = tp.tv_sec * ns + tp.tv_nsec; - rthread.clockvalue = (uint64_t) raw; #endif /* USE_RDTSC */ return raw; } -/* Sets the current time so that all subsequent events have the new - * timestamp */ -void -ovni_clock_update(void) -{ - rthread.clockvalue = ovni_get_clock(); -} - //static void //hexdump(uint8_t *buf, size_t size) //{ @@ -400,10 +391,10 @@ flush_evbuf(void) return ret; } -static void -ovni_ev_set_clock(struct ovni_ev *ev) +void +ovni_ev_set_clock(struct ovni_ev *ev, uint64_t clock) { - ev->header.clock = rthread.clockvalue; + ev->header.clock = clock; } uint64_t @@ -483,14 +474,12 @@ ovni_flush(void) assert(rthread.ready); assert(rproc.ready); - ovni_clock_update(); - ovni_ev_set_clock(&pre); + ovni_ev_set_clock(&pre, ovni_clock_now()); ovni_ev_set_mcv(&pre, "OF["); ret = flush_evbuf(); - ovni_clock_update(); - ovni_ev_set_clock(&post); + ovni_ev_set_clock(&post, ovni_clock_now()); ovni_ev_set_mcv(&post, "OF]"); /* Add the two flush events */ @@ -534,9 +523,9 @@ ovni_ev_add_jumbo(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize) if(rthread.evlen + totalsize >= OVNI_MAX_EV_BUF) { /* Measure the flush times */ - t0 = ovni_get_clock(); + t0 = ovni_clock_now(); flush_evbuf(); - t1 = ovni_get_clock(); + t1 = ovni_clock_now(); flushed = 1; } @@ -555,9 +544,6 @@ ovni_ev_add_jumbo(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize) { /* Emit the flush events *after* the user event */ add_flush_events(t0, t1); - - /* Set the current clock to the last event */ - rthread.clockvalue = t1; } } @@ -573,9 +559,9 @@ ovni_ev_add(struct ovni_ev *ev) if(rthread.evlen + size >= OVNI_MAX_EV_BUF) { /* Measure the flush times */ - t0 = ovni_get_clock(); + t0 = ovni_clock_now(); flush_evbuf(); - t1 = ovni_get_clock(); + t1 = ovni_clock_now(); flushed = 1; } @@ -586,22 +572,17 @@ ovni_ev_add(struct ovni_ev *ev) { /* Emit the flush events *after* the user event */ add_flush_events(t0, t1); - - /* Set the current clock to the last event */ - rthread.clockvalue = t1; } } void ovni_ev_jumbo_emit(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize) { - ovni_ev_set_clock(ev); ovni_ev_add_jumbo(ev, buf, bufsize); } void ovni_ev_emit(struct ovni_ev *ev) { - ovni_ev_set_clock(ev); ovni_ev_add(ev); } diff --git a/ovni.h b/ovni.h index 45f2bb5..c5d24ad 100644 --- a/ovni.h +++ b/ovni.h @@ -101,9 +101,6 @@ struct ovni_rthread { /* Current thread id */ pid_t tid; - /* Clock value of the events being emitted */ - uint64_t clockvalue; - /* Stream trace file descriptor */ int streamfd; @@ -143,13 +140,16 @@ void ovni_thread_free(void); int ovni_thread_isready(void); -void ovni_clock_update(void); - void ovni_ev_set_mcv(struct ovni_ev *ev, const char *mcv); +/* Gets the event clock in ns */ uint64_t ovni_ev_get_clock(const struct ovni_ev *ev); -uint64_t ovni_get_clock(void); +/* Sets the event clock in ns */ +void ovni_ev_set_clock(struct ovni_ev *ev, uint64_t clock); + +/* Returns the current value of the ovni clock in ns */ +uint64_t ovni_clock_now(void); void ovni_payload_add(struct ovni_ev *ev, const uint8_t *buf, int size); @@ -159,7 +159,8 @@ int ovni_payload_size(const struct ovni_ev *ev); void ovni_add_cpu(int index, int phyid); -/* Set the current clock in the event and queue it */ +/* Adds the event to the events buffer. The buffer is flushed first if the event + * doesn't fit in the buffer. */ void ovni_ev_emit(struct ovni_ev *ev); void ovni_ev_jumbo_emit(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize); diff --git a/test/flush.c b/test/flush.c index e442751..33b5a67 100644 --- a/test/flush.c +++ b/test/flush.c @@ -56,8 +56,8 @@ init(void) static void emit(uint8_t *buf, size_t size) { struct ovni_ev ev = {0}; - ovni_clock_update(); ovni_ev_set_mcv(&ev, "O$$"); + ovni_ev_set_clock(&ev, ovni_clock_now()); ovni_ev_jumbo_emit(&ev, buf, size); } diff --git a/test_speed.c b/test_speed.c index 461e3a2..b1280c5 100644 --- a/test_speed.c +++ b/test_speed.c @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) for(i=0; i