struct perf_event_sample {
        struct perf_event_header header;
+       u64 time;
        __u32 size;
        unsigned char data[];
 };
                __u64 id;
                __u64 lost;
        } *lost = (void *)e;
-       struct timespec ts;
-
-       if (clock_gettime(CLOCK_MONOTONIC, &ts)) {
-               perror("Can't read clock for timestamp");
-               return;
-       }
 
        if (json_output) {
                jsonw_start_object(json_wtr);
-               jsonw_name(json_wtr, "timestamp");
-               jsonw_uint(json_wtr, ts.tv_sec * 1000000000ull + ts.tv_nsec);
                jsonw_name(json_wtr, "type");
                jsonw_uint(json_wtr, e->header.type);
                jsonw_name(json_wtr, "cpu");
                jsonw_name(json_wtr, "index");
                jsonw_uint(json_wtr, ring->key);
                if (e->header.type == PERF_RECORD_SAMPLE) {
+                       jsonw_name(json_wtr, "timestamp");
+                       jsonw_uint(json_wtr, e->time);
                        jsonw_name(json_wtr, "data");
                        print_data_json(e->data, e->size);
                } else if (e->header.type == PERF_RECORD_LOST) {
                jsonw_end_object(json_wtr);
        } else {
                if (e->header.type == PERF_RECORD_SAMPLE) {
-                       printf("== @%ld.%ld CPU: %d index: %d =====\n",
-                              (long)ts.tv_sec, ts.tv_nsec,
+                       printf("== @%lld.%09lld CPU: %d index: %d =====\n",
+                              e->time / 1000000000ULL, e->time % 1000000000ULL,
                               ring->cpu, ring->key);
                        fprint_hex(stdout, e->data, e->size, " ");
                        printf("\n");
 static int bpf_perf_event_open(int map_fd, int key, int cpu)
 {
        struct perf_event_attr attr = {
-               .sample_type = PERF_SAMPLE_RAW,
+               .sample_type = PERF_SAMPLE_RAW | PERF_SAMPLE_TIME,
                .type = PERF_TYPE_SOFTWARE,
                .config = PERF_COUNT_SW_BPF_OUTPUT,
        };