diff --git a/driver/driver.go b/driver/driver.go
index d5060a7..bfe8d9b 100644
--- a/driver/driver.go
+++ b/driver/driver.go
@@ -131,7 +131,7 @@
 	fmt.Printf("Benchmark%s-%d %8d\t%10d ns/op", name, runtime.GOMAXPROCS(-1), res.N, res.RunTime)
 	var metrics []string
 	for metric := range res.Metrics {
-		if metric == "time" {
+		if metric == "ns/op" {
 			// Already reported from res.RunTime.
 			continue
 		}
@@ -232,7 +232,7 @@
 	f(N)
 	res.Duration = time.Since(t0)
 	res.RunTime = uint64(time.Since(t0)) / N
-	res.Metrics["time"] = res.RunTime
+	res.Metrics["ns/op"] = res.RunTime
 	pprof.StopCPUProfile()
 
 	latencyCollect(&res)
@@ -248,18 +248,18 @@
 
 	mstats1 := new(runtime.MemStats)
 	runtime.ReadMemStats(mstats1)
-	res.Metrics["allocated"] = (mstats1.TotalAlloc - mstats0.TotalAlloc) / N
-	res.Metrics["allocs"] = (mstats1.Mallocs - mstats0.Mallocs) / N
-	res.Metrics["sys-total"] = mstats1.Sys
-	res.Metrics["sys-heap"] = mstats1.HeapSys
-	res.Metrics["sys-stack"] = mstats1.StackSys
-	res.Metrics["gc-pause-total"] = (mstats1.PauseTotalNs - mstats0.PauseTotalNs) / N
+	res.Metrics["allocated-bytes/op"] = (mstats1.TotalAlloc - mstats0.TotalAlloc) / N
+	res.Metrics["allocs/op"] = (mstats1.Mallocs - mstats0.Mallocs) / N
+	res.Metrics["bytes-from-system"] = mstats1.Sys
+	res.Metrics["heap-bytes-from-system"] = mstats1.HeapSys
+	res.Metrics["stack-bytes-from-system"] = mstats1.StackSys
+	res.Metrics["STW-ns/op"] = (mstats1.PauseTotalNs - mstats0.PauseTotalNs) / N
 	collectGo12MemStats(&res, mstats0, mstats1)
 	numGC := uint64(mstats1.NumGC - mstats0.NumGC)
 	if numGC == 0 {
-		res.Metrics["gc-pause-one"] = 0
+		res.Metrics["STW-ns/GC"] = 0
 	} else {
-		res.Metrics["gc-pause-one"] = (mstats1.PauseTotalNs - mstats0.PauseTotalNs) / numGC
+		res.Metrics["STW-ns/GC"] = (mstats1.PauseTotalNs - mstats0.PauseTotalNs) / numGC
 	}
 	return res
 }
@@ -321,9 +321,9 @@
 		cnt = len(latency.data)
 	}
 	sort.Sort(latency.data[:cnt])
-	res.Metrics["latency-50"] = latency.data[cnt*50/100]
-	res.Metrics["latency-95"] = latency.data[cnt*95/100]
-	res.Metrics["latency-99"] = latency.data[cnt*99/100]
+	res.Metrics["P50-ns/op"] = latency.data[cnt*50/100]
+	res.Metrics["P95-ns/op"] = latency.data[cnt*95/100]
+	res.Metrics["P99-ns/op"] = latency.data[cnt*99/100]
 }
 
 // chooseN chooses the next number of iterations for benchmark.
diff --git a/driver/driver_go12.go b/driver/driver_go12.go
index 8dfed01..7a99810 100644
--- a/driver/driver_go12.go
+++ b/driver/driver_go12.go
@@ -12,6 +12,6 @@
 
 // New mem stats added in Go1.2
 func collectGo12MemStats(res *Result, mstats0, mstats1 *runtime.MemStats) {
-	res.Metrics["sys-gc"] = mstats1.GCSys
-	res.Metrics["sys-other"] = mstats1.OtherSys + mstats1.MSpanSys + mstats1.MCacheSys + mstats1.BuckHashSys
+	res.Metrics["GC-bytes-from-system"] = mstats1.GCSys
+	res.Metrics["other-bytes-from-system"] = mstats1.OtherSys + mstats1.MSpanSys + mstats1.MCacheSys + mstats1.BuckHashSys
 }
diff --git a/driver/driver_unix.go b/driver/driver_unix.go
index f41f4f9..ec05eee 100644
--- a/driver/driver_unix.go
+++ b/driver/driver_unix.go
@@ -34,7 +34,7 @@
 		return
 	}
 	if vm := getVMPeak(); vm != 0 {
-		res.Metrics["virtual-mem"] = vm
+		res.Metrics["peak-VM-bytes"] = vm
 	}
 	usage := new(syscall.Rusage)
 	if err := syscall.Getrusage(0, usage); err != nil {
@@ -42,8 +42,8 @@
 		// Deliberately ignore the error.
 		return
 	}
-	res.Metrics["rss"] = uint64(usage.Maxrss) * rssMultiplier
-	res.Metrics["cputime"] = (cpuTime(usage) - cpuTime(&ss.Rusage)) / ss.N
+	res.Metrics["peak-RSS-bytes"] = uint64(usage.Maxrss) * rssMultiplier
+	res.Metrics["user+sys-ns/op"] = (cpuTime(usage) - cpuTime(&ss.Rusage)) / ss.N
 }
 
 func RunAndCollectSysStats(cmd *exec.Cmd, res *Result, N uint64, prefix string) (string, error) {
@@ -57,9 +57,9 @@
 	t1 := time.Now()
 	usage := cmd.ProcessState.SysUsage().(*syscall.Rusage)
 	res.RunTime = uint64(t1.Sub(t0)) / N
-	res.Metrics[prefix+"time"] = res.RunTime
-	res.Metrics[prefix+"cputime"] = cpuTime(usage) / N
-	res.Metrics[prefix+"rss"] = uint64(usage.Maxrss) * rssMultiplier
+	res.Metrics[prefix+"ns/op"] = res.RunTime
+	res.Metrics[prefix+"user+sys-ns/op"] = cpuTime(usage) / N
+	res.Metrics[prefix+"peak-RSS-bytes"] = uint64(usage.Maxrss) * rssMultiplier
 	return out.String(), nil
 }
 
diff --git a/driver/driver_windows.go b/driver/driver_windows.go
index 777bee7..33ab74c 100644
--- a/driver/driver_windows.go
+++ b/driver/driver_windows.go
@@ -223,8 +223,8 @@
 		log.Printf("GetProcessTimes failed: %v", err)
 		return
 	}
-	res.Metrics["cputime"] = (getCPUTime(CPU) - getCPUTime(ss.CPU)) / ss.N
-	res.Metrics["rss"] = uint64(Mem.PeakWorkingSetSize)
+	res.Metrics["user+sys-ns/op"] = (getCPUTime(CPU) - getCPUTime(ss.CPU)) / ss.N
+	res.Metrics["peak-RSS-bytes"] = uint64(Mem.PeakWorkingSetSize)
 }
 
 func RunAndCollectSysStats(cmd *exec.Cmd, res *Result, N uint64, prefix string) (string, error) {
@@ -248,7 +248,7 @@
 	t1 := time.Now()
 
 	res.RunTime = uint64(t1.Sub(t0)) / N
-	res.Metrics[prefix+"time"] = res.RunTime
+	res.Metrics[prefix+"ns/op"] = res.RunTime
 
 	childMu.Lock()
 	children = childProcesses
@@ -280,8 +280,8 @@
 		rss += uint64(Mem.PeakWorkingSetSize)
 	}
 
-	res.Metrics[prefix+"cputime"] = cputime
-	res.Metrics[prefix+"rss"] = rss
+	res.Metrics[prefix+"user+sys-ns/op"] = cputime
+	res.Metrics[prefix+"peak-RSS-bytes"] = rss
 	return out.String(), nil
 }
 
