]> pd.if.org Git - nbds/blobdiff - runtime/lwt.c
add perf test driver
[nbds] / runtime / lwt.c
index 83e8ee1a1306ef8bfa3fc6ddab5bec357bf26c2b..a986567bcb05023f8e6bafb541035fe5266f9900 100644 (file)
@@ -6,19 +6,19 @@
  */
 #include <stdio.h>
 #include "common.h"
-#include "runtime_local.h"
+#include "rlocal.h"
 #include "lwt.h"
 #include "mem.h"
 
-#define LWT_BUFFER_SCALE 16
-#define LWT_BUFFER_SIZE (1 << LWT_BUFFER_SCALE)
+#define LWT_BUFFER_SCALE 20
+#define LWT_BUFFER_SIZE (1ULL << LWT_BUFFER_SCALE)
 #define LWT_BUFFER_MASK (LWT_BUFFER_SIZE - 1)
 
 volatile int halt_ = 0;
 
 typedef struct lwt_record {
     uint64_t timestamp;
-    const char *format;
+    uint64_t format;
     size_t value1;
     size_t value2;
 } lwt_record_t;
@@ -51,15 +51,15 @@ void lwt_set_trace_level (const char *flags)
     }
 }
 
-static inline void dump_record (FILE *file, int thread_id, lwt_record_t *r, uint64_t offset)
+static void dump_record (FILE *file, int thread_id, lwt_record_t *r, uint64_t offset)
 {
     // print the record if its trace category is enabled at a high enough level
-    int flag  =  (size_t)r->format >> 56;
-    int level = ((size_t)r->format >> 48) & 0xFF;
+    int flag  =  r->format >> 56;
+    int level = (r->format >> 48) & 0xFF;
     if (flag_state_[(unsigned)flag] >= level) {
         char s[3] = {flag, level, '\0'};
         fprintf(file, "%09llu %d %s ", ((uint64_t)r->timestamp - offset) >> 5, thread_id, s);
-        const char *format = (const char *)((size_t)r->format & MASK(48)); // strip out the embedded flags
+        const char *format = (const char *)(size_t)(r->format & MASK(48)); // strip out the embedded flags
         fprintf(file, format, r->value1, r->value2);
         fprintf(file, "\n");
     }
@@ -118,9 +118,8 @@ void lwt_dump (const char *file_name)
     }
 }
 
-void lwt_trace_i (const char *format, size_t value1, size_t value2) {
-    if (halt_)
-        return;
+void lwt_trace_i (uint64_t format, size_t value1, size_t value2) {
+    while (halt_) {}
     LOCALIZE_THREAD_LOCAL(tid_, int);
     lwt_buffer_t *tb = lwt_buf_[tid_];
     if (tb != NULL) {