alignment-faults                               { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); }
 emulation-faults                               { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); }
 dummy                                          { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
+duration_time                                  { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
 bpf-output                                     { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
 
        /*
 
        expr__add_id(&pctx, name, avg);
        for (i = 0; metric_events[i]; i++) {
                struct saved_value *v;
+               struct stats *stats;
+               double scale;
 
-               v = saved_value_lookup(metric_events[i], cpu, false);
-               if (!v)
-                       break;
-               expr__add_id(&pctx, metric_events[i]->name, avg_stats(&v->stats));
+               if (!strcmp(metric_events[i]->name, "duration_time")) {
+                       stats = &walltime_nsecs_stats;
+                       scale = 1e-9;
+               } else {
+                       v = saved_value_lookup(metric_events[i], cpu, false);
+                       if (!v)
+                               break;
+                       stats = &v->stats;
+                       scale = 1.0;
+               }
+               expr__add_id(&pctx, metric_events[i]->name, avg_stats(stats)*scale);
        }
        if (!metric_events[i]) {
                const char *p = metric_expr;