Merge "veyron2/ipc: Change ReflectInvoker to return an error."
diff --git a/lib/testutil/stats.go b/lib/testutil/benchmark/stats.go
similarity index 62%
rename from lib/testutil/stats.go
rename to lib/testutil/benchmark/stats.go
index d3d3397..62790a6 100644
--- a/lib/testutil/stats.go
+++ b/lib/testutil/benchmark/stats.go
@@ -1,4 +1,4 @@
-package testutil
+package benchmark
 
 import (
 	"bytes"
@@ -10,9 +10,9 @@
 	"v.io/core/veyron/lib/stats/histogram"
 )
 
-// BenchStats is a simple helper for gathering additional statistics
-// like histogram during benchmarks. This is not thread safe.
-type BenchStats struct {
+// Stats is a simple helper for gathering additional statistics like histogram
+// during benchmarks. This is not thread safe.
+type Stats struct {
 	numBuckets int
 	unit       time.Duration
 	min, max   int64
@@ -24,35 +24,36 @@
 
 type durationSlice []time.Duration
 
-// NewBenchStats creates a new BenchStats instance. If numBuckets is not
-// positive, the default value (16) will be used.
-func NewBenchStats(numBuckets int) *BenchStats {
+// NewStats creates a new Stats instance. If numBuckets is not positive,
+// the default value (16) will be used.
+func NewStats(numBuckets int) *Stats {
 	if numBuckets <= 0 {
 		numBuckets = 16
 	}
-	return &BenchStats{
+	return &Stats{
 		// Use one more bucket for the last unbounded bucket.
 		numBuckets: numBuckets + 1,
 		durations:  make(durationSlice, 0, 100000),
 	}
 }
 
-// Add adds an elapsed time per operation to the BenchStats.
-func (stats *BenchStats) Add(d time.Duration) {
+// Add adds an elapsed time per operation to the stats.
+func (stats *Stats) Add(d time.Duration) {
 	stats.durations = append(stats.durations, d)
 	stats.dirty = true
 }
 
 // Clear resets the stats, removing all values.
-func (stats *BenchStats) Clear() {
+func (stats *Stats) Clear() {
 	stats.durations = stats.durations[:0]
-	stats.dirty = true
+	stats.histogram = nil
+	stats.dirty = false
 }
 
 // maybeUpdate updates internal stat data if there was any newly added
 // stats since this was updated.
-func (stats *BenchStats) maybeUpdate() {
-	if !stats.dirty || len(stats.durations) == 0 {
+func (stats *Stats) maybeUpdate() {
+	if !stats.dirty {
 		return
 	}
 
@@ -79,9 +80,12 @@
 	// Adjust the min/max according to the new unit.
 	stats.min /= int64(stats.unit)
 	stats.max /= int64(stats.unit)
-
+	numBuckets := stats.numBuckets
+	if n := int(stats.max - stats.min + 1); n < numBuckets {
+		numBuckets = n
+	}
 	stats.histogram = histogram.New(histogram.Options{
-		NumBuckets: stats.numBuckets,
+		NumBuckets: numBuckets,
 		// max(i.e., Nth lower bound) = min + (1 + growthFactor)^(numBuckets-2).
 		GrowthFactor:       math.Pow(float64(stats.max-stats.min), 1/float64(stats.numBuckets-2)) - 1,
 		SmallestBucketSize: 1.0,
@@ -94,16 +98,20 @@
 	stats.dirty = false
 }
 
-// Print writes textual output of the BenchStats.
-func (stats *BenchStats) Print(w io.Writer) {
+// Print writes textual output of the Stats.
+func (stats *Stats) Print(w io.Writer) {
 	stats.maybeUpdate()
 
-	fmt.Fprintf(w, "Histogram (unit: %s)\n", fmt.Sprintf("%v", stats.unit)[1:])
-	stats.histogram.Value().Print(w)
+	if stats.histogram == nil {
+		fmt.Fprint(w, "Histogram (empty)\n")
+	} else {
+		fmt.Fprintf(w, "Histogram (unit: %s)\n", fmt.Sprintf("%v", stats.unit)[1:])
+		stats.histogram.Value().Print(w)
+	}
 }
 
-// String returns the textual output of the BenchStats as string.
-func (stats *BenchStats) String() string {
+// String returns the textual output of the Stats as string.
+func (stats *Stats) String() string {
 	var b bytes.Buffer
 	stats.Print(&b)
 	return b.String()
diff --git a/lib/testutil/benchmark/stats_test.go b/lib/testutil/benchmark/stats_test.go
new file mode 100644
index 0000000..7072963
--- /dev/null
+++ b/lib/testutil/benchmark/stats_test.go
@@ -0,0 +1,29 @@
+package benchmark_test
+
+import (
+	"strings"
+	"testing"
+	"time"
+
+	"v.io/core/veyron/lib/testutil/benchmark"
+)
+
+func TestStatsBasic(t *testing.T) {
+	stats := benchmark.NewStats(16)
+	if !strings.Contains(stats.String(), "Histogram (empty)") {
+		t.Errorf("unexpect stats output:\n%s\n", stats.String())
+	}
+
+	for i := time.Duration(1); i <= 10; i++ {
+		stats.Add(i * time.Millisecond)
+	}
+
+	if !strings.Contains(stats.String(), "Count: 10 ") {
+		t.Errorf("unexpect stats output:\n%s\n", stats.String())
+	}
+
+	stats.Clear()
+	if !strings.Contains(stats.String(), "Histogram (empty)") {
+		t.Errorf("unexpect stats output:\n%s\n", stats.String())
+	}
+}
diff --git a/lib/testutil/benchmark/util.go b/lib/testutil/benchmark/util.go
new file mode 100644
index 0000000..ef76c2a
--- /dev/null
+++ b/lib/testutil/benchmark/util.go
@@ -0,0 +1,191 @@
+package benchmark
+
+import (
+	"bufio"
+	"bytes"
+	"fmt"
+	"os"
+	"runtime"
+	"sort"
+	"strings"
+	"sync"
+	"testing"
+)
+
+var (
+	curB         *testing.B
+	curBenchName string
+	curStats     map[string]*Stats
+
+	orgStdout  *os.File
+	nextOutPos int
+
+	injectCond *sync.Cond
+	injectDone chan struct{}
+)
+
+// AddStats adds a new unnamed Stats instance to the current benchmark. You need
+// to run benchmarks by calling RunTestMain() to inject the stats to the
+// benchmark results. If numBuckets is not positive, the default value (16) will
+// be used. Please note that this calls b.ResetTimer() since it may be blocked
+// until the previous benchmark stats is printed out. So AddStats() should
+// typically be called at the very beginning of each benchmark function.
+func AddStats(b *testing.B, numBuckets int) *Stats {
+	return AddStatsWithName(b, "", numBuckets)
+}
+
+// AddStatsWithName adds a new named Stats instance to the current benchmark.
+// With this, you can add multiple stats in a single benchmark. You need
+// to run benchmarks by calling RunTestMain() to inject the stats to the
+// benchmark results. If numBuckets is not positive, the default value (16) will
+// be used. Please note that this calls b.ResetTimer() since it may be blocked
+// until the previous benchmark stats is printed out. So AddStatsWithName()
+// should typically be called at the very beginning of each benchmark function.
+func AddStatsWithName(b *testing.B, name string, numBuckets int) *Stats {
+	var benchName string
+	for i := 1; ; i++ {
+		pc, _, _, ok := runtime.Caller(i)
+		if !ok {
+			panic("benchmark function not found")
+		}
+		p := strings.Split(runtime.FuncForPC(pc).Name(), ".")
+		benchName = p[len(p)-1]
+		if strings.HasPrefix(benchName, "Benchmark") {
+			break
+		}
+	}
+	procs := runtime.GOMAXPROCS(-1)
+	if procs != 1 {
+		benchName = fmt.Sprintf("%s-%d", benchName, procs)
+	}
+
+	stats := NewStats(numBuckets)
+
+	if injectCond != nil {
+		// We need to wait until the previous benchmark stats is printed out.
+		injectCond.L.Lock()
+		for curB != nil && curBenchName != benchName {
+			injectCond.Wait()
+		}
+
+		curB = b
+		curBenchName = benchName
+		curStats[name] = stats
+
+		injectCond.L.Unlock()
+	}
+
+	b.ResetTimer()
+	return stats
+}
+
+// RunTestMain runs the tests with enabling injection of benchmark stats. It
+// returns an exit code to pass to os.Exit.
+func RunTestMain(m *testing.M) int {
+	startStatsInjector()
+	defer stopStatsInjector()
+	return m.Run()
+}
+
+// startStatsInjector starts stats injection to benchmark results.
+func startStatsInjector() {
+	orgStdout = os.Stdout
+	r, w, _ := os.Pipe()
+	os.Stdout = w
+	nextOutPos = 0
+
+	resetCurBenchStats()
+
+	injectCond = sync.NewCond(&sync.Mutex{})
+	injectDone = make(chan struct{})
+	go func() {
+		defer close(injectDone)
+
+		scanner := bufio.NewScanner(r)
+		scanner.Split(splitLines)
+		for scanner.Scan() {
+			injectStatsIfFinished(scanner.Text())
+		}
+		if err := scanner.Err(); err != nil {
+			panic(err)
+		}
+	}()
+}
+
+// stopStatsInjector stops stats injection and restores os.Stdout.
+func stopStatsInjector() {
+	os.Stdout.Close()
+	<-injectDone
+	injectCond = nil
+	os.Stdout = orgStdout
+}
+
+// splitLines is a split function for a bufio.Scanner that returns each line
+// of text, teeing texts to the original stdout even before each line ends.
+func splitLines(data []byte, eof bool) (advance int, token []byte, err error) {
+	if eof && len(data) == 0 {
+		return 0, nil, nil
+	}
+
+	if i := bytes.IndexByte(data, '\n'); i >= 0 {
+		orgStdout.Write(data[nextOutPos : i+1])
+		nextOutPos = 0
+		return i + 1, data[0:i], nil
+	}
+
+	orgStdout.Write(data[nextOutPos:])
+	nextOutPos = len(data)
+
+	if eof {
+		// This is a final, non-terminated line. Return it.
+		return len(data), data, nil
+	}
+
+	return 0, nil, nil
+}
+
+// injectStatsIfFinished prints out the stats if the current benchmark finishes.
+func injectStatsIfFinished(line string) {
+	injectCond.L.Lock()
+	defer injectCond.L.Unlock()
+
+	// We assume that the benchmark results start with the benchmark name.
+	if curB == nil || !strings.HasPrefix(line, curBenchName) {
+		return
+	}
+
+	if !curB.Failed() {
+		// Output all stats in alphabetical order.
+		names := make([]string, 0, len(curStats))
+		for name := range curStats {
+			names = append(names, name)
+		}
+		sort.Strings(names)
+		for _, name := range names {
+			stats := curStats[name]
+			// The output of stats starts with a header like "Histogram (unit: ms)"
+			// followed by statistical properties and the buckets. Add the stats name
+			// if it is a named stats and indent them as Go testing outputs.
+			lines := strings.Split(stats.String(), "\n")
+			if n := len(lines); n > 0 {
+				if name != "" {
+					name = ": " + name
+				}
+				fmt.Fprintf(orgStdout, "--- %s%s\n", lines[0], name)
+				for _, line := range lines[1 : n-1] {
+					fmt.Fprintf(orgStdout, "\t%s\n", line)
+				}
+			}
+		}
+	}
+
+	resetCurBenchStats()
+	injectCond.Signal()
+}
+
+// resetCurBenchStats resets the current benchmark stats.
+func resetCurBenchStats() {
+	curB = nil
+	curBenchName = ""
+	curStats = make(map[string]*Stats)
+}
diff --git a/lib/testutil/benchmark/util_test.go b/lib/testutil/benchmark/util_test.go
new file mode 100644
index 0000000..bc10242
--- /dev/null
+++ b/lib/testutil/benchmark/util_test.go
@@ -0,0 +1,73 @@
+package benchmark
+
+import (
+	"bytes"
+	"fmt"
+	"io"
+	"os"
+	"regexp"
+	"strings"
+	"testing"
+	"time"
+)
+
+func BenchmarkTest(b *testing.B) {
+	stats := AddStats(b, 0)
+	for i := 1; i <= b.N; i++ {
+		time.Sleep(1 * time.Microsecond)
+		stats.Add(time.Duration(i) * time.Microsecond)
+	}
+}
+
+func BenchmarkTestMulti(b *testing.B) {
+	stats1 := AddStatsWithName(b, "S1", 0)
+	stats2 := AddStatsWithName(b, "S2", 0)
+	for i := 1; i <= b.N; i++ {
+		time.Sleep(1 * time.Microsecond)
+		stats1.Add(time.Duration(i) * time.Microsecond)
+		stats2.Add(time.Duration(i) * time.Millisecond)
+	}
+}
+
+func TestStatsInjection(t *testing.T) {
+	stdout := os.Stdout
+	r, w, _ := os.Pipe()
+	os.Stdout = w
+
+	outC := make(chan string)
+	go func() {
+		b := new(bytes.Buffer)
+		io.Copy(b, r)
+		r.Close()
+		outC <- b.String()
+	}()
+
+	startStatsInjector()
+
+	fmt.Printf("%s\t", "BenchmarkTest")
+	result := testing.Benchmark(BenchmarkTest)
+	fmt.Println(result.String())
+
+	fmt.Printf("%s\t", "BenchmarkTestMulti")
+	result = testing.Benchmark(BenchmarkTestMulti)
+	fmt.Println(result.String())
+
+	stopStatsInjector()
+
+	w.Close()
+	os.Stdout = stdout
+	out := <-outC
+
+	if strings.Count(out, "Histogram") != 3 {
+		t.Errorf("unexpected stats output:\n%s", out)
+	}
+	if matched, _ := regexp.MatchString("Histogram.*\\)\n", out); !matched {
+		t.Errorf("unnamed stats not found:\n%s", out)
+	}
+	if matched, _ := regexp.MatchString("Histogram.*\\): S1\n", out); !matched {
+		t.Errorf("stats S1 not found:\n%s", out)
+	}
+	if matched, _ := regexp.MatchString("Histogram.*\\): S2\n", out); !matched {
+		t.Errorf("stats S2 not found:\n%s", out)
+	}
+}
diff --git a/runtimes/google/ipc/benchmark/README.txt b/runtimes/google/ipc/benchmark/README.txt
new file mode 100644
index 0000000..f3fa1fc
--- /dev/null
+++ b/runtimes/google/ipc/benchmark/README.txt
@@ -0,0 +1,129 @@
+This directory contains code uses to measure the performance of the Vanadium IPC
+stack.
+
+================================================================================
+
+The ipc_test.go file uses GO's testing package to run benchmarks. Each
+benchmark involves one server and one client. The server has two very simple
+methods that echo the data received from the client back to the client.
+
+client ---- Echo(payload) ----> server
+client <--- return payload ---- server
+
+There are two versions of the Echo method:
+ - Echo(payload []byte) ([]byte], error)
+ - EchoStream() <[]byte,[]byte> error
+
+The first benchmarks use the non-streaming version of Echo with a varying
+payload size. The second benchmarks use the streaming version with varying
+number of chunks and payload sizes. The third one is for measuring the
+performance with multiple clients hosted in the same process.
+
+This test creates a VC before the benchmark begins. So, the VC creation
+overhead is excluded.
+
+$ v23 go test -bench=. -timeout=1h -cpu=1 -benchtime=5s \
+  v.io/core/veyron/runtimes/google/ipc/benchmark
+PASS
+Benchmark____1B	    1000	   8301357 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 7  Max: 17  Avg: 7.89
+	------------------------------------------------------------
+	[  7,   8)   505   50.5%   50.5%  #####
+	[  8,   9)   389   38.9%   89.4%  ####
+	[  9,  10)    38    3.8%   93.2%  
+	[ 10,  11)    12    1.2%   94.4%  
+	[ 11,  12)     4    0.4%   94.8%  
+	[ 12,  14)    19    1.9%   96.7%  
+	[ 14,  16)    23    2.3%   99.0%  
+	[ 16,  18)    10    1.0%  100.0%  
+	[ 18,  21)     0    0.0%  100.0%  
+	[ 21,  24)     0    0.0%  100.0%  
+	[ 24, inf)     0    0.0%  100.0%  
+Benchmark___10B	    1000	   8587341 ns/op	   0.00 MB/s
+...
+
+RESULTS.txt has the full benchmark results.
+
+================================================================================
+
+bmserver/main.go and bmclient/main.go are simple command-line tools to run the
+benchmark server and client as separate processes. Unlike the benchmarks above,
+this test includes the startup cost of name resolution, creating the VC, etc. in
+the first RPC.
+
+$ v23 go run bmserver/main.go \
+  -veyron.tcp.address=localhost:8888 -acl='{"In":{"...":"R"}}'
+
+(In a different shell)
+$ v23 go run bmclient/main.go \
+  -server=/localhost:8888 -iterations=100 -chunk_count=0 -payload_size=10
+iterations: 100  chunk_count: 0  payload_size: 10
+elapsed time: 1.369034277s
+Histogram (unit: ms)
+Count: 100  Min: 7  Max: 94  Avg: 13.17
+------------------------------------------------------------
+[  7,   8)    1    1.0%    1.0%  
+[  8,   9)    4    4.0%    5.0%  
+[  9,  10)   17   17.0%   22.0%  ##
+[ 10,  12)   24   24.0%   46.0%  ##
+[ 12,  15)   24   24.0%   70.0%  ##
+[ 15,  19)   28   28.0%   98.0%  ###
+[ 19,  24)    1    1.0%   99.0%  
+[ 24,  32)    0    0.0%   99.0%  
+[ 32,  42)    0    0.0%   99.0%  
+[ 42,  56)    0    0.0%   99.0%  
+[ 56,  75)    0    0.0%   99.0%  
+[ 75, 101)    1    1.0%  100.0%  
+[101, 136)    0    0.0%  100.0%  
+[136, 183)    0    0.0%  100.0%  
+[183, 247)    0    0.0%  100.0%  
+[247, 334)    0    0.0%  100.0%  
+[334, inf)    0    0.0%  100.0%  
+
+
+On a Raspberry Pi, everything is much slower. The same tests show the following
+results:
+
+$ ./benchmarks.test -test.bench=. -test.cpu=1 -test.benchtime=5s 2>/dev/null
+PASS
+Benchmark____1B             500          21316148 ns/op
+Benchmark___10B             500          23304638 ns/op
+Benchmark__100B             500          21860446 ns/op
+Benchmark___1KB             500          24000346 ns/op
+Benchmark__10KB             200          37530575 ns/op
+Benchmark_100KB             100         136243310 ns/op
+Benchmark_N_RPCs____1_chunk_____1B           500          19957506 ns/op
+Benchmark_N_RPCs____1_chunk____10B           500          22868392 ns/op
+Benchmark_N_RPCs____1_chunk___100B           500          19635412 ns/op
+Benchmark_N_RPCs____1_chunk____1KB           500          22572190 ns/op
+Benchmark_N_RPCs____1_chunk___10KB           500          37570948 ns/op
+Benchmark_N_RPCs___10_chunks___1KB           100          51670740 ns/op
+Benchmark_N_RPCs__100_chunks___1KB            50         364938740 ns/op
+Benchmark_N_RPCs_1000_chunks___1KB             2        3586374500 ns/op
+Benchmark_1_RPC_N_chunks_____1B    10000           1034042 ns/op
+Benchmark_1_RPC_N_chunks____10B     5000           1894875 ns/op
+Benchmark_1_RPC_N_chunks___100B     5000           2857289 ns/op
+Benchmark_1_RPC_N_chunks____1KB     5000           6465839 ns/op
+Benchmark_1_RPC_N_chunks___10KB      100          80019430 ns/op
+Benchmark_1_RPC_N_chunks__100KB Killed
+
+The simple 1 KB RPCs take an average of 24 ms. The streaming equivalent takes
+about 22 ms, and streaming many 1 KB chunks takes about 6.5 ms per chunk.
+
+
+$ ./bmserver --address=localhost:8888 --acl='{"...":"A"}'
+
+$ ./bmclient --server=/localhost:8888 --count=10 --payload_size=1000
+CallEcho 0 2573406000
+CallEcho 1 44669000
+CallEcho 2 54442000
+CallEcho 3 33934000
+CallEcho 4 47985000
+CallEcho 5 61324000
+CallEcho 6 51654000
+CallEcho 7 47043000
+CallEcho 8 44995000
+CallEcho 9 53166000
+
+On the pi, the first RPC takes ~2.5 sec to execute.
diff --git a/runtimes/google/ipc/benchmark/RESULTS.txt b/runtimes/google/ipc/benchmark/RESULTS.txt
new file mode 100644
index 0000000..b884698
--- /dev/null
+++ b/runtimes/google/ipc/benchmark/RESULTS.txt
@@ -0,0 +1,1532 @@
+* 'Benchmark___NNB' shows the average time to execute a simple Echo RPC with a payload
+  of NN bytes.
+* 'Benchmark___CC_chunk____NNB' shows the average time to execute a streaming RPC with
+  a payload of CC chunks of NN bytes.
+* 'Benchmark__per_chunk___NNB' shows the average time to send one chunk of NN bytes.
+* 'Benchmark___NNB_mux___CC_chunks___MMB' shows the average time to execute a simple
+  Echo RPC with a payload of NN bytes while streaming payloads of CC chunks of MM bytes
+  continuously in the same process.
+
+================================================================================
+Date: 01/06/2015
+Platform: Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz,  66114888KB Memory
+
+Benchmark____1B	    2000	   5135719 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 6  Avg: 4.50
+	------------------------------------------------------------
+	[  4,   5)  1077   53.9%   53.9%  #####
+	[  5,   6)   843   42.2%   96.0%  ####
+	[  6, inf)    80    4.0%  100.0%  
+Benchmark____1B-2	    2000	   4968273 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 6  Avg: 4.32
+	------------------------------------------------------------
+	[  4,   5)  1364   68.2%   68.2%  #######
+	[  5,   6)   628   31.4%   99.6%  ###
+	[  6, inf)     8    0.4%  100.0%  
+Benchmark___10B	    2000	   5207706 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.58
+	------------------------------------------------------------
+	[  4,   5)  1380   69.0%   69.0%  #######
+	[  5,   6)   137    6.9%   75.9%  #
+	[  6,   7)   424   21.2%   97.1%  ##
+	[  7, inf)    59    3.0%  100.0%  
+Benchmark___10B-2	    2000	   5012485 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.35
+	------------------------------------------------------------
+	[  4,   5)  1541   77.1%   77.1%  ########
+	[  5,   6)   221   11.1%   88.1%  #
+	[  6,   7)   236   11.8%   99.9%  #
+	[  7, inf)     2    0.1%  100.0%  
+Benchmark__100B	    2000	   5313342 ns/op	   0.04 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 10  Avg: 4.62
+	------------------------------------------------------------
+	[  4,   5)  1505   75.2%   75.2%  ########
+	[  5,   6)   122    6.1%   81.4%  #
+	[  6,   7)    56    2.8%   84.2%  
+	[  7,   8)   259   13.0%   97.1%  #
+	[  8,   9)    57    2.9%  100.0%  
+	[  9,  10)     0    0.0%  100.0%  
+	[ 10, inf)     1    0.1%  100.0%  
+Benchmark__100B-2	    2000	   4997534 ns/op	   0.04 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.34
+	------------------------------------------------------------
+	[  4,   5)  1649   82.5%   82.5%  ########
+	[  5,   6)    18    0.9%   83.4%  
+	[  6,   7)   332   16.6%  100.0%  ##
+	[  7, inf)     1    0.1%  100.0%  
+Benchmark___1KB	    2000	   5247848 ns/op	   0.38 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 9  Avg: 4.62
+	------------------------------------------------------------
+	[  4,   5)  1626   81.3%   81.3%  ########
+	[  5,   6)    67    3.4%   84.7%  
+	[  6,   7)    12    0.6%   85.2%  
+	[  7,   8)    64    3.2%   88.5%  
+	[  8,   9)   196    9.8%   98.2%  #
+	[  9, inf)    35    1.8%  100.0%  
+Benchmark___1KB-2	    2000	   4925061 ns/op	   0.41 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.31
+	------------------------------------------------------------
+	[  4,   5)  1720   86.0%   86.0%  #########
+	[  5,   6)    12    0.6%   86.6%  
+	[  6,   7)   198    9.9%   96.5%  #
+	[  7, inf)    70    3.5%  100.0%  
+Benchmark__10KB	    2000	   5498704 ns/op	   3.64 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 11  Avg: 4.79
+	------------------------------------------------------------
+	[  4,   5)  1577   78.9%   78.9%  ########
+	[  5,   6)    94    4.7%   83.6%  
+	[  6,   7)    47    2.4%   85.9%  
+	[  7,   8)     0    0.0%   85.9%  
+	[  8,   9)    89    4.5%   90.4%  
+	[  9,  10)   123    6.2%   96.5%  #
+	[ 10,  12)    70    3.5%  100.0%  
+	[ 12, inf)     0    0.0%  100.0%  
+Benchmark__10KB-2	    2000	   5046850 ns/op	   3.96 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 9  Avg: 4.42
+	------------------------------------------------------------
+	[  4,   5)  1689   84.5%   84.5%  ########
+	[  5,   6)    50    2.5%   87.0%  
+	[  6,   7)     0    0.0%   87.0%  
+	[  7,   8)   251   12.6%   99.5%  #
+	[  8,   9)     7    0.4%   99.9%  
+	[  9, inf)     3    0.2%  100.0%  
+Benchmark_100KB	    1000	   7995692 ns/op	  25.01 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 6  Max: 13  Avg: 7.50
+	------------------------------------------------------------
+	[  6,   7)   685   68.5%   68.5%  #######
+	[  7,   8)    55    5.5%   74.0%  #
+	[  8,   9)    17    1.7%   75.7%  
+	[  9,  10)     0    0.0%   75.7%  
+	[ 10,  11)     0    0.0%   75.7%  
+	[ 11,  12)    63    6.3%   82.0%  #
+	[ 12,  14)   180   18.0%  100.0%  ##
+	[ 14, inf)     0    0.0%  100.0%  
+Benchmark_100KB-2	    1000	   6064046 ns/op	  32.98 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 9  Avg: 5.77
+	------------------------------------------------------------
+	[  5,   6)   762   76.2%   76.2%  ########
+	[  6,   7)     3    0.3%   76.5%  
+	[  7,   8)     0    0.0%   76.5%  
+	[  8,   9)   173   17.3%   93.8%  ##
+	[  9, inf)    62    6.2%  100.0%  #
+
+Benchmark____1_chunk_____1B	    2000	   5445727 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.87
+	------------------------------------------------------------
+	[  4,   5)   664   33.2%   33.2%  ###
+	[  5,   6)   940   47.0%   80.2%  #####
+	[  6,   7)   395   19.8%  100.0%  ##
+	[  7, inf)     1    0.1%  100.0%  
+Benchmark____1_chunk_____1B-2	    2000	   5178446 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 6  Avg: 4.46
+	------------------------------------------------------------
+	[  4,   5)  1130   56.5%   56.5%  ######
+	[  5,   6)   825   41.2%   97.8%  ####
+	[  6, inf)    45    2.2%  100.0%  
+Benchmark____1_chunk____10B	    2000	   5545419 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.89
+	------------------------------------------------------------
+	[  4,   5)   985   49.2%   49.2%  #####
+	[  5,   6)   473   23.7%   72.9%  ##
+	[  6,   7)   321   16.1%   89.0%  ##
+	[  7, inf)   221   11.1%  100.0%  #
+Benchmark____1_chunk____10B-2	    2000	   5217440 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 6  Avg: 4.55
+	------------------------------------------------------------
+	[  4,   5)  1311   65.5%   65.5%  #######
+	[  5,   6)   279   14.0%   79.5%  #
+	[  6, inf)   410   20.5%  100.0%  ##
+Benchmark____1_chunk___100B	    2000	   5607749 ns/op	   0.04 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 9  Avg: 5.00
+	------------------------------------------------------------
+	[  4,   5)   981   49.1%   49.1%  #####
+	[  5,   6)   614   30.7%   79.8%  ###
+	[  6,   7)    10    0.5%   80.2%  
+	[  7,   8)   216   10.8%   91.1%  #
+	[  8,   9)   178    8.9%  100.0%  #
+	[  9, inf)     1    0.1%  100.0%  
+Benchmark____1_chunk___100B-2	    2000	   5221803 ns/op	   0.04 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.48
+	------------------------------------------------------------
+	[  4,   5)  1421   71.0%   71.0%  #######
+	[  5,   6)   223   11.2%   82.2%  #
+	[  6,   7)   329   16.4%   98.7%  ##
+	[  7, inf)    27    1.4%  100.0%  
+Benchmark____1_chunk____1KB	    2000	   5499778 ns/op	   0.36 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 10  Avg: 4.74
+	------------------------------------------------------------
+	[  4,   5)  1456   72.8%   72.8%  #######
+	[  5,   6)   214   10.7%   83.5%  #
+	[  6,   7)    12    0.6%   84.1%  
+	[  7,   8)    72    3.6%   87.7%  
+	[  8,   9)   205   10.2%   98.0%  #
+	[  9,  10)    40    2.0%  100.0%  
+	[ 10, inf)     1    0.1%  100.0%  
+Benchmark____1_chunk____1KB-2	    2000	   5131389 ns/op	   0.39 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 7  Avg: 4.41
+	------------------------------------------------------------
+	[  4,   5)  1621   81.1%   81.1%  ########
+	[  5,   6)    89    4.5%   85.5%  
+	[  6,   7)   149    7.5%   93.0%  #
+	[  7, inf)   141    7.1%  100.0%  #
+Benchmark____1_chunk___10KB	    2000	   5747560 ns/op	   3.48 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 11  Avg: 5.12
+	------------------------------------------------------------
+	[  4,   5)  1023   51.2%   51.2%  #####
+	[  5,   6)   598   29.9%   81.1%  ###
+	[  6,   7)    78    3.9%   85.0%  
+	[  7,   8)     1    0.1%   85.0%  
+	[  8,   9)    72    3.6%   88.6%  
+	[  9,  10)   164    8.2%   96.8%  #
+	[ 10,  12)    64    3.2%  100.0%  
+	[ 12, inf)     0    0.0%  100.0%  
+Benchmark____1_chunk___10KB-2	    2000	   5240887 ns/op	   3.82 MB/s
+--- Histogram (unit: ms)
+	Count: 2000  Min: 4  Max: 10  Avg: 4.55
+	------------------------------------------------------------
+	[  4,   5)  1515   75.8%   75.8%  ########
+	[  5,   6)   208   10.4%   86.2%  #
+	[  6,   7)     0    0.0%   86.2%  
+	[  7,   8)   231   11.6%   97.7%  #
+	[  8,   9)    29    1.5%   99.2%  
+	[  9,  10)    16    0.8%  100.0%  
+	[ 10, inf)     1    0.1%  100.0%  
+Benchmark____1_chunk__100KB	    1000	   8096470 ns/op	  24.70 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 6  Max: 13  Avg: 7.54
+	------------------------------------------------------------
+	[  6,   7)   687   68.7%   68.7%  #######
+	[  7,   8)    64    6.4%   75.1%  #
+	[  8,   9)     1    0.1%   75.2%  
+	[  9,  10)     0    0.0%   75.2%  
+	[ 10,  11)     0    0.0%   75.2%  
+	[ 11,  12)    24    2.4%   77.6%  
+	[ 12,  14)   224   22.4%  100.0%  ##
+	[ 14, inf)     0    0.0%  100.0%  
+Benchmark____1_chunk__100KB-2	    1000	   6401830 ns/op	  31.24 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 11  Avg: 5.91
+	------------------------------------------------------------
+	[  5,   6)   748   74.8%   74.8%  #######
+	[  6,   7)    14    1.4%   76.2%  
+	[  7,   8)     1    0.1%   76.3%  
+	[  8,   9)   106   10.6%   86.9%  #
+	[  9,  10)    81    8.1%   95.0%  #
+	[ 10,  11)    46    4.6%   99.6%  
+	[ 11, inf)     4    0.4%  100.0%  
+Benchmark___10_chunk_____1B	    1000	   7091901 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 14  Avg: 6.78
+	------------------------------------------------------------
+	[  5,   6)    28    2.8%    2.8%  
+	[  6,   7)   819   81.9%   84.7%  ########
+	[  7,   8)    10    1.0%   85.7%  
+	[  8,   9)    25    2.5%   88.2%  
+	[  9,  10)     0    0.0%   88.2%  
+	[ 10,  12)    30    3.0%   91.2%  
+	[ 12,  14)    86    8.6%   99.8%  #
+	[ 14,  16)     2    0.2%  100.0%  
+	[ 16,  19)     0    0.0%  100.0%  
+	[ 19, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk_____1B-2	    1000	   6297751 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 11  Avg: 5.68
+	------------------------------------------------------------
+	[  5,   6)   759   75.9%   75.9%  ########
+	[  6,   7)   118   11.8%   87.7%  #
+	[  7,   8)     0    0.0%   87.7%  
+	[  8,   9)    14    1.4%   89.1%  
+	[  9,  10)    40    4.0%   93.1%  
+	[ 10,  11)    51    5.1%   98.2%  #
+	[ 11, inf)    18    1.8%  100.0%  
+Benchmark___10_chunk____10B	    1000	   7358008 ns/op	   0.03 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 6  Max: 16  Avg: 6.88
+	------------------------------------------------------------
+	[  6,   7)   845   84.5%   84.5%  ########
+	[  7,   8)     9    0.9%   85.4%  
+	[  8,   9)    28    2.8%   88.2%  
+	[  9,  10)     0    0.0%   88.2%  
+	[ 10,  11)     0    0.0%   88.2%  
+	[ 11,  13)    29    2.9%   91.1%  
+	[ 13,  15)    86    8.6%   99.7%  #
+	[ 15,  17)     3    0.3%  100.0%  
+	[ 17,  20)     0    0.0%  100.0%  
+	[ 20,  23)     0    0.0%  100.0%  
+	[ 23, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk____10B-2	    1000	   6307487 ns/op	   0.03 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 12  Avg: 5.67
+	------------------------------------------------------------
+	[  5,   6)   779   77.9%   77.9%  ########
+	[  6,   7)   103   10.3%   88.2%  #
+	[  7,   8)     2    0.2%   88.4%  
+	[  8,   9)     9    0.9%   89.3%  
+	[  9,  10)    40    4.0%   93.3%  
+	[ 10,  11)    32    3.2%   96.5%  
+	[ 11,  13)    35    3.5%  100.0%  
+	[ 13, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk___100B	    1000	   7583639 ns/op	   0.26 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 6  Max: 16  Avg: 6.96
+	------------------------------------------------------------
+	[  6,   7)   833   83.3%   83.3%  ########
+	[  7,   8)    27    2.7%   86.0%  
+	[  8,   9)    22    2.2%   88.2%  
+	[  9,  10)     5    0.5%   88.7%  
+	[ 10,  11)     0    0.0%   88.7%  
+	[ 11,  13)    26    2.6%   91.3%  
+	[ 13,  15)    68    6.8%   98.1%  #
+	[ 15,  17)    19    1.9%  100.0%  
+	[ 17,  20)     0    0.0%  100.0%  
+	[ 20,  23)     0    0.0%  100.0%  
+	[ 23, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk___100B-2	    1000	   6213319 ns/op	   0.32 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 11  Avg: 5.56
+	------------------------------------------------------------
+	[  5,   6)   831   83.1%   83.1%  ########
+	[  6,   7)    58    5.8%   88.9%  #
+	[  7,   8)     0    0.0%   88.9%  
+	[  8,   9)     0    0.0%   88.9%  
+	[  9,  10)    58    5.8%   94.7%  #
+	[ 10,  11)    52    5.2%   99.9%  #
+	[ 11, inf)     1    0.1%  100.0%  
+Benchmark___10_chunk____1KB	    1000	   7839146 ns/op	   2.55 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 6  Max: 17  Avg: 7.15
+	------------------------------------------------------------
+	[  6,   7)   793   79.3%   79.3%  ########
+	[  7,   8)    60    6.0%   85.3%  #
+	[  8,   9)     4    0.4%   85.7%  
+	[  9,  10)    26    2.6%   88.3%  
+	[ 10,  11)     1    0.1%   88.4%  
+	[ 11,  13)     0    0.0%   88.4%  
+	[ 13,  15)    31    3.1%   91.5%  
+	[ 15,  18)    85    8.5%  100.0%  #
+	[ 18,  21)     0    0.0%  100.0%  
+	[ 21,  25)     0    0.0%  100.0%  
+	[ 25,  29)     0    0.0%  100.0%  
+	[ 29, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk____1KB-2	    1000	   6437679 ns/op	   3.11 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 13  Avg: 5.79
+	------------------------------------------------------------
+	[  5,   6)   757   75.7%   75.7%  ########
+	[  6,   7)   129   12.9%   88.6%  #
+	[  7,   8)     1    0.1%   88.7%  
+	[  8,   9)     0    0.0%   88.7%  
+	[  9,  10)    17    1.7%   90.4%  
+	[ 10,  12)    51    5.1%   95.5%  #
+	[ 12,  14)    45    4.5%  100.0%  
+	[ 14,  16)     0    0.0%  100.0%  
+	[ 16, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk___10KB	    1000	  10124684 ns/op	  19.75 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 8  Max: 20  Avg: 9.76
+	------------------------------------------------------------
+	[  8,   9)   746   74.6%   74.6%  #######
+	[  9,  10)     6    0.6%   75.2%  
+	[ 10,  11)    53    5.3%   80.5%  #
+	[ 11,  12)     3    0.3%   80.8%  
+	[ 12,  13)     0    0.0%   80.8%  
+	[ 13,  15)     0    0.0%   80.8%  
+	[ 15,  17)    56    5.6%   86.4%  #
+	[ 17,  20)   135   13.5%   99.9%  #
+	[ 20,  23)     1    0.1%  100.0%  
+	[ 23,  27)     0    0.0%  100.0%  
+	[ 27,  32)     0    0.0%  100.0%  
+	[ 32,  38)     0    0.0%  100.0%  
+	[ 38, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk___10KB-2	    1000	   7345578 ns/op	  27.23 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 14  Avg: 6.95
+	------------------------------------------------------------
+	[  5,   6)   153   15.3%   15.3%  ##
+	[  6,   7)   616   61.6%   76.9%  ######
+	[  7,   8)    43    4.3%   81.2%  
+	[  8,   9)     2    0.2%   81.4%  
+	[  9,  10)     1    0.1%   81.5%  
+	[ 10,  12)    73    7.3%   88.8%  #
+	[ 12,  14)   104   10.4%   99.2%  #
+	[ 14,  16)     8    0.8%  100.0%  
+	[ 16,  19)     0    0.0%  100.0%  
+	[ 19, inf)     0    0.0%  100.0%  
+Benchmark___10_chunk__100KB	     200	  31538364 ns/op	  63.41 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 24  Max: 37  Avg: 31.07
+	------------------------------------------------------------
+	[ 24,  25)    5    2.5%    2.5%  
+	[ 25,  26)   60   30.0%   32.5%  ###
+	[ 26,  27)    2    1.0%   33.5%  
+	[ 27,  28)    0    0.0%   33.5%  
+	[ 28,  29)    0    0.0%   33.5%  
+	[ 29,  31)    0    0.0%   33.5%  
+	[ 31,  33)    0    0.0%   33.5%  
+	[ 33,  36)  129   64.5%   98.0%  ######
+	[ 36,  39)    4    2.0%  100.0%  
+	[ 39,  43)    0    0.0%  100.0%  
+	[ 43,  48)    0    0.0%  100.0%  
+	[ 48,  54)    0    0.0%  100.0%  
+	[ 54,  61)    0    0.0%  100.0%  
+	[ 61, inf)    0    0.0%  100.0%  
+Benchmark___10_chunk__100KB-2	     500	  19099352 ns/op	 104.72 MB/s
+--- Histogram (unit: ms)
+	Count: 500  Min: 14  Max: 27  Avg: 18.58
+	------------------------------------------------------------
+	[ 14,  15)   53   10.6%   10.6%  #
+	[ 15,  16)  109   21.8%   32.4%  ##
+	[ 16,  17)   15    3.0%   35.4%  
+	[ 17,  18)    0    0.0%   35.4%  
+	[ 18,  19)    2    0.4%   35.8%  
+	[ 19,  21)  161   32.2%   68.0%  ###
+	[ 21,  23)  141   28.2%   96.2%  ###
+	[ 23,  26)   18    3.6%   99.8%  
+	[ 26,  29)    1    0.2%  100.0%  
+	[ 29,  33)    0    0.0%  100.0%  
+	[ 33,  38)    0    0.0%  100.0%  
+	[ 38,  44)    0    0.0%  100.0%  
+	[ 44,  51)    0    0.0%  100.0%  
+	[ 51, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk_____1B	     500	  19824819 ns/op	   0.01 MB/s
+--- Histogram (unit: ms)
+	Count: 500  Min: 16  Max: 34  Avg: 19.44
+	------------------------------------------------------------
+	[ 16,  17)  272   54.4%   54.4%  #####
+	[ 17,  18)   15    3.0%   57.4%  
+	[ 18,  19)    2    0.4%   57.8%  
+	[ 19,  20)   38    7.6%   65.4%  #
+	[ 20,  22)   33    6.6%   72.0%  #
+	[ 22,  24)   23    4.6%   76.6%  
+	[ 24,  27)   41    8.2%   84.8%  #
+	[ 27,  30)   64   12.8%   97.6%  #
+	[ 30,  34)   11    2.2%   99.8%  
+	[ 34,  39)    1    0.2%  100.0%  
+	[ 39,  45)    0    0.0%  100.0%  
+	[ 45,  53)    0    0.0%  100.0%  
+	[ 53,  63)    0    0.0%  100.0%  
+	[ 63,  75)    0    0.0%  100.0%  
+	[ 75,  89)    0    0.0%  100.0%  
+	[ 89, 106)    0    0.0%  100.0%  
+	[106, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk_____1B-2	     500	  14793583 ns/op	   0.01 MB/s
+--- Histogram (unit: ms)
+	Count: 500  Min: 11  Max: 23  Avg: 14.28
+	------------------------------------------------------------
+	[ 11,  12)   15    3.0%    3.0%  
+	[ 12,  13)  210   42.0%   45.0%  ####
+	[ 13,  14)  107   21.4%   66.4%  ##
+	[ 14,  15)   19    3.8%   70.2%  
+	[ 15,  16)    1    0.2%   70.4%  
+	[ 16,  18)   23    4.6%   75.0%  
+	[ 18,  20)   91   18.2%   93.2%  ##
+	[ 20,  23)   31    6.2%   99.4%  #
+	[ 23,  26)    3    0.6%  100.0%  
+	[ 26,  30)    0    0.0%  100.0%  
+	[ 30,  35)    0    0.0%  100.0%  
+	[ 35,  41)    0    0.0%  100.0%  
+	[ 41, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk____10B	     300	  24818102 ns/op	   0.08 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 20  Max: 35  Avg: 24.38
+	------------------------------------------------------------
+	[ 20,  21)    7    2.3%    2.3%  
+	[ 21,  22)  145   48.3%   50.7%  #####
+	[ 22,  23)   29    9.7%   60.3%  #
+	[ 23,  24)    4    1.3%   61.7%  
+	[ 24,  26)   25    8.3%   70.0%  #
+	[ 26,  28)    4    1.3%   71.3%  
+	[ 28,  30)   24    8.0%   79.3%  #
+	[ 30,  33)   43   14.3%   93.7%  #
+	[ 33,  37)   19    6.3%  100.0%  #
+	[ 37,  42)    0    0.0%  100.0%  
+	[ 42,  48)    0    0.0%  100.0%  
+	[ 48,  55)    0    0.0%  100.0%  
+	[ 55,  63)    0    0.0%  100.0%  
+	[ 63,  73)    0    0.0%  100.0%  
+	[ 73,  85)    0    0.0%  100.0%  
+	[ 85, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk____10B-2	     500	  15081537 ns/op	   0.13 MB/s
+--- Histogram (unit: ms)
+	Count: 500  Min: 11  Max: 25  Avg: 14.57
+	------------------------------------------------------------
+	[ 11,  12)    1    0.2%    0.2%  
+	[ 12,  13)  182   36.4%   36.6%  ####
+	[ 13,  14)  143   28.6%   65.2%  ###
+	[ 14,  15)   23    4.6%   69.8%  
+	[ 15,  17)    7    1.4%   71.2%  
+	[ 17,  19)   51   10.2%   81.4%  #
+	[ 19,  21)   55   11.0%   92.4%  #
+	[ 21,  24)   34    6.8%   99.2%  #
+	[ 24,  28)    4    0.8%  100.0%  
+	[ 28,  32)    0    0.0%  100.0%  
+	[ 32,  37)    0    0.0%  100.0%  
+	[ 37,  43)    0    0.0%  100.0%  
+	[ 43,  51)    0    0.0%  100.0%  
+	[ 51,  60)    0    0.0%  100.0%  
+	[ 60, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk___100B	     300	  27491526 ns/op	   0.73 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 23  Max: 38  Avg: 26.94
+	------------------------------------------------------------
+	[ 23,  24)  104   34.7%   34.7%  ###
+	[ 24,  25)   67   22.3%   57.0%  ##
+	[ 25,  26)   10    3.3%   60.3%  
+	[ 26,  27)    8    2.7%   63.0%  
+	[ 27,  29)   23    7.7%   70.7%  #
+	[ 29,  31)    0    0.0%   70.7%  
+	[ 31,  33)   22    7.3%   78.0%  #
+	[ 33,  36)   57   19.0%   97.0%  ##
+	[ 36,  40)    9    3.0%  100.0%  
+	[ 40,  45)    0    0.0%  100.0%  
+	[ 45,  51)    0    0.0%  100.0%  
+	[ 51,  58)    0    0.0%  100.0%  
+	[ 58,  66)    0    0.0%  100.0%  
+	[ 66,  76)    0    0.0%  100.0%  
+	[ 76,  88)    0    0.0%  100.0%  
+	[ 88, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk___100B-2	     500	  15897395 ns/op	   1.26 MB/s
+--- Histogram (unit: ms)
+	Count: 500  Min: 12  Max: 24  Avg: 15.40
+	------------------------------------------------------------
+	[ 12,  13)    5    1.0%    1.0%  
+	[ 13,  14)  226   45.2%   46.2%  #####
+	[ 14,  15)  107   21.4%   67.6%  ##
+	[ 15,  16)   16    3.2%   70.8%  
+	[ 16,  17)    0    0.0%   70.8%  
+	[ 17,  19)   12    2.4%   73.2%  
+	[ 19,  21)   92   18.4%   91.6%  ##
+	[ 21,  24)   35    7.0%   98.6%  #
+	[ 24,  27)    7    1.4%  100.0%  
+	[ 27,  31)    0    0.0%  100.0%  
+	[ 31,  36)    0    0.0%  100.0%  
+	[ 36,  42)    0    0.0%  100.0%  
+	[ 42, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk____1KB	     200	  30390593 ns/op	   6.58 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 25  Max: 41  Avg: 29.77
+	------------------------------------------------------------
+	[ 25,  26)   68   34.0%   34.0%  ###
+	[ 26,  27)   26   13.0%   47.0%  #
+	[ 27,  28)    8    4.0%   51.0%  
+	[ 28,  29)    9    4.5%   55.5%  
+	[ 29,  31)   18    9.0%   64.5%  #
+	[ 31,  33)    1    0.5%   65.0%  
+	[ 33,  36)   24   12.0%   77.0%  #
+	[ 36,  39)   39   19.5%   96.5%  ##
+	[ 39,  43)    7    3.5%  100.0%  
+	[ 43,  48)    0    0.0%  100.0%  
+	[ 48,  54)    0    0.0%  100.0%  
+	[ 54,  61)    0    0.0%  100.0%  
+	[ 61,  70)    0    0.0%  100.0%  
+	[ 70,  81)    0    0.0%  100.0%  
+	[ 81,  94)    0    0.0%  100.0%  
+	[ 94, 110)    0    0.0%  100.0%  
+	[110, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk____1KB-2	     500	  17949156 ns/op	  11.14 MB/s
+--- Histogram (unit: ms)
+	Count: 500  Min: 14  Max: 26  Avg: 17.41
+	------------------------------------------------------------
+	[ 14,  15)  120   24.0%   24.0%  ##
+	[ 15,  16)  169   33.8%   57.8%  ###
+	[ 16,  17)   28    5.6%   63.4%  #
+	[ 17,  18)    6    1.2%   64.6%  
+	[ 18,  19)    2    0.4%   65.0%  
+	[ 19,  21)   19    3.8%   68.8%  
+	[ 21,  23)   87   17.4%   86.2%  ##
+	[ 23,  26)   66   13.2%   99.4%  #
+	[ 26,  29)    3    0.6%  100.0%  
+	[ 29,  33)    0    0.0%  100.0%  
+	[ 33,  38)    0    0.0%  100.0%  
+	[ 38,  44)    0    0.0%  100.0%  
+	[ 44, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk___10KB	     100	  51722516 ns/op	  38.67 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 42  Max: 57  Avg: 51.22
+	------------------------------------------------------------
+	[ 42,  43)    1    1.0%    1.0%  
+	[ 43,  44)    0    0.0%    1.0%  
+	[ 44,  45)   14   14.0%   15.0%  #
+	[ 45,  46)    1    1.0%   16.0%  
+	[ 46,  48)    2    2.0%   18.0%  
+	[ 48,  50)    0    0.0%   18.0%  
+	[ 50,  52)   17   17.0%   35.0%  ##
+	[ 52,  55)   58   58.0%   93.0%  ######
+	[ 55,  59)    7    7.0%  100.0%  #
+	[ 59,  64)    0    0.0%  100.0%  
+	[ 64,  70)    0    0.0%  100.0%  
+	[ 70,  77)    0    0.0%  100.0%  
+	[ 77,  85)    0    0.0%  100.0%  
+	[ 85,  95)    0    0.0%  100.0%  
+	[ 95, 107)    0    0.0%  100.0%  
+	[107, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk___10KB-2	     300	  28968863 ns/op	  69.04 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 22  Max: 34  Avg: 28.47
+	------------------------------------------------------------
+	[ 22,  23)   30   10.0%   10.0%  #
+	[ 23,  24)   18    6.0%   16.0%  #
+	[ 24,  25)    6    2.0%   18.0%  
+	[ 25,  26)    0    0.0%   18.0%  
+	[ 26,  27)    0    0.0%   18.0%  
+	[ 27,  29)   63   21.0%   39.0%  ##
+	[ 29,  31)  102   34.0%   73.0%  ###
+	[ 31,  34)   77   25.7%   98.7%  ###
+	[ 34,  37)    4    1.3%  100.0%  
+	[ 37,  41)    0    0.0%  100.0%  
+	[ 41,  46)    0    0.0%  100.0%  
+	[ 46,  52)    0    0.0%  100.0%  
+	[ 52, inf)    0    0.0%  100.0%  
+Benchmark__100_chunk__100KB	      30	 251752470 ns/op	  79.44 MB/s
+--- Histogram (unit: ms)
+	Count: 30  Min: 243  Max: 257  Avg: 251.23
+	------------------------------------------------------------
+	[243, 244)   5   16.7%   16.7%  ##
+	[244, 245)   1    3.3%   20.0%  
+	[245, 246)   4   13.3%   33.3%  #
+	[246, 247)   0    0.0%   33.3%  
+	[247, 249)   0    0.0%   33.3%  
+	[249, 251)   0    0.0%   33.3%  
+	[251, 253)   0    0.0%   33.3%  
+	[253, 256)  14   46.7%   80.0%  #####
+	[256, 260)   6   20.0%  100.0%  ##
+	[260, 264)   0    0.0%  100.0%  
+	[264, 269)   0    0.0%  100.0%  
+	[269, 275)   0    0.0%  100.0%  
+	[275, 283)   0    0.0%  100.0%  
+	[283, 292)   0    0.0%  100.0%  
+	[292, inf)   0    0.0%  100.0%  
+Benchmark__100_chunk__100KB-2	      50	 131868524 ns/op	 151.67 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 127  Max: 137  Avg: 131.44
+	------------------------------------------------------------
+	[127, 128)   3    6.0%    6.0%  #
+	[128, 129)  13   26.0%   32.0%  ###
+	[129, 130)   9   18.0%   50.0%  ##
+	[130, 131)   1    2.0%   52.0%  
+	[131, 132)   1    2.0%   54.0%  
+	[132, 134)   2    4.0%   58.0%  
+	[134, 136)  14   28.0%   86.0%  ###
+	[136, 138)   7   14.0%  100.0%  #
+	[138, 141)   0    0.0%  100.0%  
+	[141, 144)   0    0.0%  100.0%  
+	[144, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk_____1B	      50	 147894706 ns/op	   0.01 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 123  Max: 195  Avg: 147.42
+	------------------------------------------------------------
+	[123, 124)   1    2.0%    2.0%  
+	[124, 125)   0    0.0%    2.0%  
+	[125, 126)   0    0.0%    2.0%  
+	[126, 128)   0    0.0%    2.0%  
+	[128, 131)   0    0.0%    2.0%  
+	[131, 135)   1    2.0%    4.0%  
+	[135, 140)  20   40.0%   44.0%  ####
+	[140, 147)  19   38.0%   82.0%  ####
+	[147, 156)   1    2.0%   84.0%  
+	[156, 169)   0    0.0%   84.0%  
+	[169, 186)   2    4.0%   88.0%  
+	[186, 209)   6   12.0%  100.0%  #
+	[209, 239)   0    0.0%  100.0%  
+	[239, 279)   0    0.0%  100.0%  
+	[279, 333)   0    0.0%  100.0%  
+	[333, 404)   0    0.0%  100.0%  
+	[404, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk_____1B-2	     100	 112701633 ns/op	   0.02 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 109  Max: 128  Avg: 112.17
+	------------------------------------------------------------
+	[109, 110)    4    4.0%    4.0%  
+	[110, 111)   17   17.0%   21.0%  ##
+	[111, 112)   31   31.0%   52.0%  ###
+	[112, 113)   16   16.0%   68.0%  ##
+	[113, 115)   21   21.0%   89.0%  ##
+	[115, 117)    4    4.0%   93.0%  
+	[117, 120)    5    5.0%   98.0%  #
+	[120, 123)    1    1.0%   99.0%  
+	[123, 127)    0    0.0%   99.0%  
+	[127, 132)    1    1.0%  100.0%  
+	[132, 139)    0    0.0%  100.0%  
+	[139, 147)    0    0.0%  100.0%  
+	[147, 157)    0    0.0%  100.0%  
+	[157, 169)    0    0.0%  100.0%  
+	[169, 184)    0    0.0%  100.0%  
+	[184, 202)    0    0.0%  100.0%  
+	[202, inf)    0    0.0%  100.0%  
+Benchmark___1K_chunk____10B	      30	 210652536 ns/op	   0.09 MB/s
+--- Histogram (unit: ms)
+	Count: 30  Min: 205  Max: 216  Avg: 210.23
+	------------------------------------------------------------
+	[205, 206)   1    3.3%    3.3%  
+	[206, 207)   3   10.0%   13.3%  #
+	[207, 208)   4   13.3%   26.7%  #
+	[208, 209)   3   10.0%   36.7%  #
+	[209, 210)   0    0.0%   36.7%  
+	[210, 212)   6   20.0%   56.7%  ##
+	[212, 214)  10   33.3%   90.0%  ###
+	[214, 217)   3   10.0%  100.0%  #
+	[217, 220)   0    0.0%  100.0%  
+	[220, 224)   0    0.0%  100.0%  
+	[224, 228)   0    0.0%  100.0%  
+	[228, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk____10B-2	     100	 121674848 ns/op	   0.16 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 113  Max: 132  Avg: 121.15
+	------------------------------------------------------------
+	[113, 114)    4    4.0%    4.0%  
+	[114, 115)    9    9.0%   13.0%  #
+	[115, 116)    5    5.0%   18.0%  #
+	[116, 117)    3    3.0%   21.0%  
+	[117, 119)    7    7.0%   28.0%  #
+	[119, 121)   14   14.0%   42.0%  #
+	[121, 124)   24   24.0%   66.0%  ##
+	[124, 127)   25   25.0%   91.0%  ###
+	[127, 131)    8    8.0%   99.0%  #
+	[131, 136)    1    1.0%  100.0%  
+	[136, 143)    0    0.0%  100.0%  
+	[143, 151)    0    0.0%  100.0%  
+	[151, 161)    0    0.0%  100.0%  
+	[161, 173)    0    0.0%  100.0%  
+	[173, 188)    0    0.0%  100.0%  
+	[188, 206)    0    0.0%  100.0%  
+	[206, inf)    0    0.0%  100.0%  
+Benchmark___1K_chunk___100B	      30	 238543410 ns/op	   0.84 MB/s
+--- Histogram (unit: ms)
+	Count: 30  Min: 230  Max: 250  Avg: 238.03
+	------------------------------------------------------------
+	[230, 231)   3   10.0%   10.0%  #
+	[231, 232)   0    0.0%   10.0%  
+	[232, 233)   1    3.3%   13.3%  
+	[233, 234)   2    6.7%   20.0%  #
+	[234, 236)   5   16.7%   36.7%  ##
+	[236, 238)   4   13.3%   50.0%  #
+	[238, 241)   5   16.7%   66.7%  ##
+	[241, 245)   7   23.3%   90.0%  ##
+	[245, 249)   2    6.7%   96.7%  #
+	[249, 255)   1    3.3%  100.0%  
+	[255, 262)   0    0.0%  100.0%  
+	[262, 270)   0    0.0%  100.0%  
+	[270, 280)   0    0.0%  100.0%  
+	[280, 293)   0    0.0%  100.0%  
+	[293, 309)   0    0.0%  100.0%  
+	[309, 328)   0    0.0%  100.0%  
+	[328, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk___100B-2	      50	 138412318 ns/op	   1.44 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 126  Max: 149  Avg: 137.94
+	------------------------------------------------------------
+	[126, 127)   1    2.0%    2.0%  
+	[127, 128)   0    0.0%    2.0%  
+	[128, 129)   0    0.0%    2.0%  
+	[129, 130)   0    0.0%    2.0%  
+	[130, 132)   3    6.0%    8.0%  #
+	[132, 134)   6   12.0%   20.0%  #
+	[134, 137)  11   22.0%   42.0%  ##
+	[137, 141)  12   24.0%   66.0%  ##
+	[141, 146)  14   28.0%   94.0%  ###
+	[146, 152)   3    6.0%  100.0%  #
+	[152, 160)   0    0.0%  100.0%  
+	[160, 169)   0    0.0%  100.0%  
+	[169, 181)   0    0.0%  100.0%  
+	[181, 196)   0    0.0%  100.0%  
+	[196, 214)   0    0.0%  100.0%  
+	[214, 236)   0    0.0%  100.0%  
+	[236, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk____1KB	      30	 276508870 ns/op	   7.23 MB/s
+--- Histogram (unit: ms)
+	Count: 30  Min: 264  Max: 299  Avg: 275.97
+	------------------------------------------------------------
+	[264, 265)   1    3.3%    3.3%  
+	[265, 266)   0    0.0%    3.3%  
+	[266, 267)   1    3.3%    6.7%  
+	[267, 269)   3   10.0%   16.7%  #
+	[269, 271)   5   16.7%   33.3%  ##
+	[271, 274)   7   23.3%   56.7%  ##
+	[274, 278)   2    6.7%   63.3%  #
+	[278, 283)   7   23.3%   86.7%  ##
+	[283, 289)   1    3.3%   90.0%  
+	[289, 297)   1    3.3%   93.3%  
+	[297, 307)   2    6.7%  100.0%  #
+	[307, 320)   0    0.0%  100.0%  
+	[320, 337)   0    0.0%  100.0%  
+	[337, 358)   0    0.0%  100.0%  
+	[358, 385)   0    0.0%  100.0%  
+	[385, 419)   0    0.0%  100.0%  
+	[419, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk____1KB-2	      50	 156292302 ns/op	  12.80 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 144  Max: 169  Avg: 155.82
+	------------------------------------------------------------
+	[144, 145)   1    2.0%    2.0%  
+	[145, 146)   0    0.0%    2.0%  
+	[146, 147)   1    2.0%    4.0%  
+	[147, 148)   0    0.0%    4.0%  
+	[148, 150)   3    6.0%   10.0%  #
+	[150, 152)   5   10.0%   20.0%  #
+	[152, 155)  14   28.0%   48.0%  ###
+	[155, 159)  12   24.0%   72.0%  ##
+	[159, 164)   8   16.0%   88.0%  ##
+	[164, 170)   6   12.0%  100.0%  #
+	[170, 178)   0    0.0%  100.0%  
+	[178, 188)   0    0.0%  100.0%  
+	[188, 201)   0    0.0%  100.0%  
+	[201, 217)   0    0.0%  100.0%  
+	[217, 237)   0    0.0%  100.0%  
+	[237, 261)   0    0.0%  100.0%  
+	[261, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk___10KB	      20	 468904636 ns/op	  42.65 MB/s
+--- Histogram (unit: ms)
+	Count: 20  Min: 458  Max: 491  Avg: 468.40
+	------------------------------------------------------------
+	[458, 459)   2   10.0%   10.0%  #
+	[459, 460)   2   10.0%   20.0%  #
+	[460, 461)   2   10.0%   30.0%  #
+	[461, 463)   1    5.0%   35.0%  #
+	[463, 465)   1    5.0%   40.0%  #
+	[465, 468)   2   10.0%   50.0%  #
+	[468, 472)   2   10.0%   60.0%  #
+	[472, 477)   6   30.0%   90.0%  ###
+	[477, 483)   0    0.0%   90.0%  
+	[483, 491)   1    5.0%   95.0%  #
+	[491, 501)   1    5.0%  100.0%  #
+	[501, 513)   0    0.0%  100.0%  
+	[513, 529)   0    0.0%  100.0%  
+	[529, 549)   0    0.0%  100.0%  
+	[549, 575)   0    0.0%  100.0%  
+	[575, 608)   0    0.0%  100.0%  
+	[608, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk___10KB-2	      30	 263653358 ns/op	  75.86 MB/s
+--- Histogram (unit: ms)
+	Count: 30  Min: 242  Max: 275  Avg: 263.13
+	------------------------------------------------------------
+	[242, 243)   2    6.7%    6.7%  #
+	[243, 244)   0    0.0%    6.7%  
+	[244, 245)   0    0.0%    6.7%  
+	[245, 247)   0    0.0%    6.7%  
+	[247, 249)   0    0.0%    6.7%  
+	[249, 252)   0    0.0%    6.7%  
+	[252, 256)   3   10.0%   16.7%  #
+	[256, 261)   5   16.7%   33.3%  ##
+	[261, 267)   8   26.7%   60.0%  ###
+	[267, 275)  11   36.7%   96.7%  ####
+	[275, 285)   1    3.3%  100.0%  
+	[285, 297)   0    0.0%  100.0%  
+	[297, 313)   0    0.0%  100.0%  
+	[313, 333)   0    0.0%  100.0%  
+	[333, 359)   0    0.0%  100.0%  
+	[359, 392)   0    0.0%  100.0%  
+	[392, inf)   0    0.0%  100.0%  
+Benchmark___1K_chunk__100KB	       3	2573103606 ns/op	  77.73 MB/s
+--- Histogram (unit: s)
+	Count: 3  Min: 2  Max: 2  Avg: 2.00
+	------------------------------------------------------------
+	[  2, inf)  3  100.0%  100.0%  ##########
+Benchmark___1K_chunk__100KB-2	       5	1337696624 ns/op	 149.51 MB/s
+--- Histogram (unit: s)
+	Count: 5  Min: 1  Max: 1  Avg: 1.00
+	------------------------------------------------------------
+	[  1, inf)  5  100.0%  100.0%  ##########
+
+Benchmark__per_chunk____1B	   50000	    192129 ns/op	   0.01 MB/s
+Benchmark__per_chunk____1B-2	   50000	    131601 ns/op	   0.02 MB/s
+Benchmark__per_chunk___10B	   20000	    372009 ns/op	   0.05 MB/s
+Benchmark__per_chunk___10B-2	   30000	    222774 ns/op	   0.09 MB/s
+Benchmark__per_chunk__100B	   20000	    434465 ns/op	   0.46 MB/s
+Benchmark__per_chunk__100B-2	   30000	    238245 ns/op	   0.84 MB/s
+Benchmark__per_chunk___1KB	   20000	    464091 ns/op	   4.31 MB/s
+Benchmark__per_chunk___1KB-2	   30000	    253694 ns/op	   7.88 MB/s
+Benchmark__per_chunk__10KB	   10000	    650380 ns/op	  30.75 MB/s
+Benchmark__per_chunk__10KB-2	   20000	    357218 ns/op	  55.99 MB/s
+Benchmark__per_chunk_100KB	    3000	   2728670 ns/op	  73.30 MB/s
+Benchmark__per_chunk_100KB-2	    5000	   1380520 ns/op	 144.87 MB/s
+
+Benchmark___10B_mux__100_chunks___10B	     300	  26348223 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 9  Max: 30  Avg: 25.79
+	------------------------------------------------------------
+	[  9,  10)   19    6.3%    6.3%  #
+	[ 10,  11)    5    1.7%    8.0%  
+	[ 11,  12)    0    0.0%    8.0%  
+	[ 12,  13)    0    0.0%    8.0%  
+	[ 13,  15)    0    0.0%    8.0%  
+	[ 15,  17)    0    0.0%    8.0%  
+	[ 17,  20)    1    0.3%    8.3%  
+	[ 20,  24)   10    3.3%   11.7%  
+	[ 24,  29)  233   77.7%   89.3%  ########
+	[ 29,  35)   32   10.7%  100.0%  #
+	[ 35,  42)    0    0.0%  100.0%  
+	[ 42,  51)    0    0.0%  100.0%  
+	[ 51,  62)    0    0.0%  100.0%  
+	[ 62,  75)    0    0.0%  100.0%  
+	[ 75,  92)    0    0.0%  100.0%  
+	[ 92, 112)    0    0.0%  100.0%  
+	[112, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks___10B-2	    1000	   9053248 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 4  Max: 17  Avg: 8.54
+	------------------------------------------------------------
+	[  4,   5)     3    0.3%    0.3%  
+	[  5,   6)    48    4.8%    5.1%  
+	[  6,   7)   166   16.6%   21.7%  ##
+	[  7,   8)   206   20.6%   42.3%  ##
+	[  8,   9)   179   17.9%   60.2%  ##
+	[  9,  11)   186   18.6%   78.8%  ##
+	[ 11,  13)   111   11.1%   89.9%  #
+	[ 13,  16)    96    9.6%   99.5%  #
+	[ 16,  19)     5    0.5%  100.0%  
+	[ 19,  23)     0    0.0%  100.0%  
+	[ 23,  28)     0    0.0%  100.0%  
+	[ 28,  34)     0    0.0%  100.0%  
+	[ 34,  41)     0    0.0%  100.0%  
+	[ 41, inf)     0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks__100B	     300	  29202434 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 9  Max: 34  Avg: 28.80
+	------------------------------------------------------------
+	[  9,  10)    4    1.3%    1.3%  
+	[ 10,  11)   10    3.3%    4.7%  
+	[ 11,  12)    6    2.0%    6.7%  
+	[ 12,  13)    0    0.0%    6.7%  
+	[ 13,  15)    0    0.0%    6.7%  
+	[ 15,  17)    0    0.0%    6.7%  
+	[ 17,  20)    0    0.0%    6.7%  
+	[ 20,  24)    0    0.0%    6.7%  
+	[ 24,  29)   20    6.7%   13.3%  #
+	[ 29,  35)  260   86.7%  100.0%  #########
+	[ 35,  43)    0    0.0%  100.0%  
+	[ 43,  53)    0    0.0%  100.0%  
+	[ 53,  66)    0    0.0%  100.0%  
+	[ 66,  82)    0    0.0%  100.0%  
+	[ 82, 102)    0    0.0%  100.0%  
+	[102, 126)    0    0.0%  100.0%  
+	[126, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks__100B-2	    1000	  10238260 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 5  Max: 21  Avg: 9.74
+	------------------------------------------------------------
+	[  5,   6)    39    3.9%    3.9%  
+	[  6,   7)   118   11.8%   15.7%  #
+	[  7,   8)   123   12.3%   28.0%  #
+	[  8,   9)   141   14.1%   42.1%  #
+	[  9,  11)   217   21.7%   63.8%  ##
+	[ 11,  13)   152   15.2%   79.0%  ##
+	[ 13,  16)   157   15.7%   94.7%  ##
+	[ 16,  19)    50    5.0%   99.7%  #
+	[ 19,  23)     3    0.3%  100.0%  
+	[ 23,  28)     0    0.0%  100.0%  
+	[ 28,  34)     0    0.0%  100.0%  
+	[ 34,  41)     0    0.0%  100.0%  
+	[ 41,  50)     0    0.0%  100.0%  
+	[ 50,  61)     0    0.0%  100.0%  
+	[ 61,  74)     0    0.0%  100.0%  
+	[ 74,  90)     0    0.0%  100.0%  
+	[ 90, inf)     0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks___1KB	     300	  30121503 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 9  Max: 38  Avg: 29.57
+	------------------------------------------------------------
+	[  9,  10)    7    2.3%    2.3%  
+	[ 10,  11)   13    4.3%    6.7%  
+	[ 11,  12)    5    1.7%    8.3%  
+	[ 12,  13)    3    1.0%    9.3%  
+	[ 13,  15)    3    1.0%   10.3%  
+	[ 15,  18)    0    0.0%   10.3%  
+	[ 18,  21)    0    0.0%   10.3%  
+	[ 21,  25)    0    0.0%   10.3%  
+	[ 25,  31)   33   11.0%   21.3%  #
+	[ 31,  38)  235   78.3%   99.7%  ########
+	[ 38,  47)    1    0.3%  100.0%  
+	[ 47,  58)    0    0.0%  100.0%  
+	[ 58,  72)    0    0.0%  100.0%  
+	[ 72,  90)    0    0.0%  100.0%  
+	[ 90, 113)    0    0.0%  100.0%  
+	[113, 141)    0    0.0%  100.0%  
+	[141, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks___1KB-2	    1000	  11123358 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 4  Max: 22  Avg: 10.61
+	------------------------------------------------------------
+	[  4,   5)    21    2.1%    2.1%  
+	[  5,   6)    66    6.6%    8.7%  #
+	[  6,   7)   110   11.0%   19.7%  #
+	[  7,   8)    88    8.8%   28.5%  #
+	[  8,  10)   175   17.5%   46.0%  ##
+	[ 10,  12)   152   15.2%   61.2%  ##
+	[ 12,  15)   168   16.8%   78.0%  ##
+	[ 15,  18)   150   15.0%   93.0%  ##
+	[ 18,  22)    69    6.9%   99.9%  #
+	[ 22,  27)     1    0.1%  100.0%  
+	[ 27,  33)     0    0.0%  100.0%  
+	[ 33,  41)     0    0.0%  100.0%  
+	[ 41,  51)     0    0.0%  100.0%  
+	[ 51,  63)     0    0.0%  100.0%  
+	[ 63,  77)     0    0.0%  100.0%  
+	[ 77,  94)     0    0.0%  100.0%  
+	[ 94, inf)     0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks__10KB	     200	  44810613 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 9  Max: 57  Avg: 44.30
+	------------------------------------------------------------
+	[  9,  10)    1    0.5%    0.5%  
+	[ 10,  11)    9    4.5%    5.0%  
+	[ 11,  12)    1    0.5%    5.5%  
+	[ 12,  14)   11    5.5%   11.0%  #
+	[ 14,  16)    7    3.5%   14.5%  
+	[ 16,  19)    2    1.0%   15.5%  
+	[ 19,  23)    0    0.0%   15.5%  
+	[ 23,  29)    0    0.0%   15.5%  
+	[ 29,  36)    0    0.0%   15.5%  
+	[ 36,  46)   21   10.5%   26.0%  #
+	[ 46,  59)  148   74.0%  100.0%  #######
+	[ 59,  76)    0    0.0%  100.0%  
+	[ 76,  98)    0    0.0%  100.0%  
+	[ 98, 126)    0    0.0%  100.0%  
+	[126, 163)    0    0.0%  100.0%  
+	[163, 210)    0    0.0%  100.0%  
+	[210, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux__100_chunks__10KB-2	     300	  23793028 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 4  Max: 41  Avg: 23.28
+	------------------------------------------------------------
+	[  4,   5)    1    0.3%    0.3%  
+	[  5,   6)    3    1.0%    1.3%  
+	[  6,   7)    2    0.7%    2.0%  
+	[  7,   9)    9    3.0%    5.0%  
+	[  9,  11)    9    3.0%    8.0%  
+	[ 11,  14)   21    7.0%   15.0%  #
+	[ 14,  18)   19    6.3%   21.3%  #
+	[ 18,  23)   51   17.0%   38.3%  ##
+	[ 23,  29)  108   36.0%   74.3%  ####
+	[ 29,  37)   70   23.3%   97.7%  ##
+	[ 37,  48)    7    2.3%  100.0%  
+	[ 48,  62)    0    0.0%  100.0%  
+	[ 62,  79)    0    0.0%  100.0%  
+	[ 79, 101)    0    0.0%  100.0%  
+	[101, 130)    0    0.0%  100.0%  
+	[130, 166)    0    0.0%  100.0%  
+	[166, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks___10B	     100	 131543346 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 12  Max: 215  Avg: 131.05
+	------------------------------------------------------------
+	[ 12,  13)    1    1.0%    1.0%  
+	[ 13,  14)    0    0.0%    1.0%  
+	[ 14,  16)    0    0.0%    1.0%  
+	[ 16,  18)    0    0.0%    1.0%  
+	[ 18,  22)    2    2.0%    3.0%  
+	[ 22,  27)    0    0.0%    3.0%  
+	[ 27,  35)    2    2.0%    5.0%  
+	[ 35,  46)    0    0.0%    5.0%  
+	[ 46,  63)    3    3.0%    8.0%  
+	[ 63,  87)   18   18.0%   26.0%  ##
+	[ 87, 121)   21   21.0%   47.0%  ##
+	[121, 170)   16   16.0%   63.0%  ##
+	[170, 240)   37   37.0%  100.0%  ####
+	[240, 339)    0    0.0%  100.0%  
+	[339, 481)    0    0.0%  100.0%  
+	[481, 684)    0    0.0%  100.0%  
+	[684, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks___10B-2	     300	  26865810 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 5  Max: 108  Avg: 26.37
+	------------------------------------------------------------
+	[  5,   6)   18    6.0%    6.0%  #
+	[  6,   7)   10    3.3%    9.3%  
+	[  7,   8)   22    7.3%   16.7%  #
+	[  8,  10)   50   16.7%   33.3%  ##
+	[ 10,  13)   62   20.7%   54.0%  ##
+	[ 13,  17)   43   14.3%   68.3%  #
+	[ 17,  23)   21    7.0%   75.3%  #
+	[ 23,  31)    5    1.7%   77.0%  
+	[ 31,  42)    5    1.7%   78.7%  
+	[ 42,  58)    4    1.3%   80.0%  
+	[ 58,  79)   19    6.3%   86.3%  #
+	[ 79, 108)   40   13.3%   99.7%  #
+	[108, 148)    1    0.3%  100.0%  
+	[148, 203)    0    0.0%  100.0%  
+	[203, 278)    0    0.0%  100.0%  
+	[278, 380)    0    0.0%  100.0%  
+	[380, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks__100B	      50	 160157465 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 73  Max: 233  Avg: 159.76
+	------------------------------------------------------------
+	[ 73,  74)   1    2.0%    2.0%  
+	[ 74,  75)   0    0.0%    2.0%  
+	[ 75,  76)   0    0.0%    2.0%  
+	[ 76,  78)   0    0.0%    2.0%  
+	[ 78,  81)   2    4.0%    6.0%  
+	[ 81,  86)   3    6.0%   12.0%  #
+	[ 86,  93)   2    4.0%   16.0%  
+	[ 93, 103)   4    8.0%   24.0%  #
+	[103, 117)   4    8.0%   32.0%  #
+	[117, 138)   5   10.0%   42.0%  #
+	[138, 167)   8   16.0%   58.0%  ##
+	[167, 208)   2    4.0%   62.0%  
+	[208, 265)  19   38.0%  100.0%  ####
+	[265, 346)   0    0.0%  100.0%  
+	[346, 460)   0    0.0%  100.0%  
+	[460, 619)   0    0.0%  100.0%  
+	[619, inf)   0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks__100B-2	     200	  38107608 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 4  Max: 124  Avg: 37.60
+	------------------------------------------------------------
+	[  4,   5)    1    0.5%    0.5%  
+	[  5,   6)    9    4.5%    5.0%  
+	[  6,   7)    2    1.0%    6.0%  
+	[  7,   9)    9    4.5%   10.5%  
+	[  9,  12)   28   14.0%   24.5%  #
+	[ 12,  16)   36   18.0%   42.5%  ##
+	[ 16,  22)   40   20.0%   62.5%  ##
+	[ 22,  31)   13    6.5%   69.0%  #
+	[ 31,  43)    6    3.0%   72.0%  
+	[ 43,  60)    3    1.5%   73.5%  
+	[ 60,  84)    5    2.5%   76.0%  
+	[ 84, 117)   44   22.0%   98.0%  ##
+	[117, 163)    4    2.0%  100.0%  
+	[163, 226)    0    0.0%  100.0%  
+	[226, 313)    0    0.0%  100.0%  
+	[313, 432)    0    0.0%  100.0%  
+	[432, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks___1KB	     100	 163950952 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 9  Max: 265  Avg: 163.45
+	------------------------------------------------------------
+	[  9,  10)    2    2.0%    2.0%  
+	[ 10,  11)    0    0.0%    2.0%  
+	[ 11,  13)    0    0.0%    2.0%  
+	[ 13,  16)    1    1.0%    3.0%  
+	[ 16,  20)    1    1.0%    4.0%  
+	[ 20,  26)    0    0.0%    4.0%  
+	[ 26,  35)    1    1.0%    5.0%  
+	[ 35,  48)    3    3.0%    8.0%  
+	[ 48,  67)    0    0.0%    8.0%  
+	[ 67,  94)    9    9.0%   17.0%  #
+	[ 94, 134)   21   21.0%   38.0%  ##
+	[134, 192)   28   28.0%   66.0%  ###
+	[192, 276)   34   34.0%  100.0%  ###
+	[276, 398)    0    0.0%  100.0%  
+	[398, 574)    0    0.0%  100.0%  
+	[574, 829)    0    0.0%  100.0%  
+	[829, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks___1KB-2	     200	  43634458 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 4  Max: 137  Avg: 43.13
+	------------------------------------------------------------
+	[  4,   5)    7    3.5%    3.5%  
+	[  5,   6)   15    7.5%   11.0%  #
+	[  6,   7)    2    1.0%   12.0%  
+	[  7,   9)    9    4.5%   16.5%  
+	[  9,  12)   20   10.0%   26.5%  #
+	[ 12,  17)   22   11.0%   37.5%  #
+	[ 17,  24)   27   13.5%   51.0%  #
+	[ 24,  33)   17    8.5%   59.5%  #
+	[ 33,  46)   14    7.0%   66.5%  #
+	[ 46,  64)    9    4.5%   71.0%  
+	[ 64,  90)   13    6.5%   77.5%  #
+	[ 90, 126)   35   17.5%   95.0%  ##
+	[126, 176)   10    5.0%  100.0%  #
+	[176, 245)    0    0.0%  100.0%  
+	[245, 340)    0    0.0%  100.0%  
+	[340, 473)    0    0.0%  100.0%  
+	[473, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks__10KB	     100	  93479160 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 8  Max: 138  Avg: 92.97
+	------------------------------------------------------------
+	[  8,   9)    1    1.0%    1.0%  
+	[  9,  10)    0    0.0%    1.0%  
+	[ 10,  11)    0    0.0%    1.0%  
+	[ 11,  13)    0    0.0%    1.0%  
+	[ 13,  16)    0    0.0%    1.0%  
+	[ 16,  21)    3    3.0%    4.0%  
+	[ 21,  28)    3    3.0%    7.0%  
+	[ 28,  37)    2    2.0%    9.0%  
+	[ 37,  50)    3    3.0%   12.0%  
+	[ 50,  68)   12   12.0%   24.0%  #
+	[ 68,  93)   12   12.0%   36.0%  #
+	[ 93, 128)   55   55.0%   91.0%  ######
+	[128, 177)    9    9.0%  100.0%  #
+	[177, 244)    0    0.0%  100.0%  
+	[244, 337)    0    0.0%  100.0%  
+	[337, 466)    0    0.0%  100.0%  
+	[466, inf)    0    0.0%  100.0%  
+Benchmark___10B_mux___1K_chunks__10KB-2	     100	  54432420 ns/op	   0.00 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 5  Max: 89  Avg: 53.92
+	------------------------------------------------------------
+	[  5,   6)    1    1.0%    1.0%  
+	[  6,   7)    2    2.0%    3.0%  
+	[  7,   8)    1    1.0%    4.0%  
+	[  8,  10)    2    2.0%    6.0%  
+	[ 10,  13)    3    3.0%    9.0%  
+	[ 13,  17)    1    1.0%   10.0%  
+	[ 17,  22)    6    6.0%   16.0%  #
+	[ 22,  29)    2    2.0%   18.0%  
+	[ 29,  39)    8    8.0%   26.0%  #
+	[ 39,  53)   12   12.0%   38.0%  #
+	[ 53,  72)   38   38.0%   76.0%  ####
+	[ 72,  97)   24   24.0%  100.0%  ##
+	[ 97, 131)    0    0.0%  100.0%  
+	[131, 177)    0    0.0%  100.0%  
+	[177, 239)    0    0.0%  100.0%  
+	[239, 322)    0    0.0%  100.0%  
+	[322, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks___10B	     300	  26012216 ns/op	   0.08 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 8  Max: 32  Avg: 25.48
+	------------------------------------------------------------
+	[  8,   9)    2    0.7%    0.7%  
+	[  9,  10)    0    0.0%    0.7%  
+	[ 10,  11)    0    0.0%    0.7%  
+	[ 11,  12)   10    3.3%    4.0%  
+	[ 12,  14)    0    0.0%    4.0%  
+	[ 14,  16)    1    0.3%    4.3%  
+	[ 16,  19)    0    0.0%    4.3%  
+	[ 19,  23)    9    3.0%    7.3%  
+	[ 23,  28)  202   67.3%   74.7%  #######
+	[ 28,  34)   76   25.3%  100.0%  ###
+	[ 34,  42)    0    0.0%  100.0%  
+	[ 42,  52)    0    0.0%  100.0%  
+	[ 52,  64)    0    0.0%  100.0%  
+	[ 64,  79)    0    0.0%  100.0%  
+	[ 79,  98)    0    0.0%  100.0%  
+	[ 98, 122)    0    0.0%  100.0%  
+	[122, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks___10B-2	    1000	   7943170 ns/op	   0.25 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 4  Max: 22  Avg: 7.46
+	------------------------------------------------------------
+	[  4,   5)    10    1.0%    1.0%  
+	[  5,   6)   233   23.3%   24.3%  ##
+	[  6,   7)   284   28.4%   52.7%  ###
+	[  7,   8)   126   12.6%   65.3%  #
+	[  8,  10)   155   15.5%   80.8%  ##
+	[ 10,  12)    87    8.7%   89.5%  #
+	[ 12,  15)    82    8.2%   97.7%  #
+	[ 15,  18)    19    1.9%   99.6%  
+	[ 18,  22)     3    0.3%   99.9%  
+	[ 22,  27)     1    0.1%  100.0%  
+	[ 27,  33)     0    0.0%  100.0%  
+	[ 33,  41)     0    0.0%  100.0%  
+	[ 41,  51)     0    0.0%  100.0%  
+	[ 51,  63)     0    0.0%  100.0%  
+	[ 63,  77)     0    0.0%  100.0%  
+	[ 77,  94)     0    0.0%  100.0%  
+	[ 94, inf)     0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks__100B	     300	  26131776 ns/op	   0.08 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 8  Max: 35  Avg: 25.63
+	------------------------------------------------------------
+	[  8,   9)    1    0.3%    0.3%  
+	[  9,  10)    0    0.0%    0.3%  
+	[ 10,  11)    0    0.0%    0.3%  
+	[ 11,  12)    0    0.0%    0.3%  
+	[ 12,  14)    0    0.0%    0.3%  
+	[ 14,  17)    0    0.0%    0.3%  
+	[ 17,  20)    1    0.3%    0.7%  
+	[ 20,  24)  126   42.0%   42.7%  ####
+	[ 24,  29)   86   28.7%   71.3%  ###
+	[ 29,  36)   86   28.7%  100.0%  ###
+	[ 36,  45)    0    0.0%  100.0%  
+	[ 45,  56)    0    0.0%  100.0%  
+	[ 56,  69)    0    0.0%  100.0%  
+	[ 69,  86)    0    0.0%  100.0%  
+	[ 86, 107)    0    0.0%  100.0%  
+	[107, 134)    0    0.0%  100.0%  
+	[134, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks__100B-2	    1000	   8434636 ns/op	   0.24 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 4  Max: 23  Avg: 7.96
+	------------------------------------------------------------
+	[  4,   5)     6    0.6%    0.6%  
+	[  5,   6)   165   16.5%   17.1%  ##
+	[  6,   7)   286   28.6%   45.7%  ###
+	[  7,   8)   152   15.2%   60.9%  ##
+	[  8,  10)   151   15.1%   76.0%  ##
+	[ 10,  12)    97    9.7%   85.7%  #
+	[ 12,  15)    91    9.1%   94.8%  #
+	[ 15,  18)    43    4.3%   99.1%  
+	[ 18,  22)     7    0.7%   99.8%  
+	[ 22,  27)     2    0.2%  100.0%  
+	[ 27,  34)     0    0.0%  100.0%  
+	[ 34,  42)     0    0.0%  100.0%  
+	[ 42,  52)     0    0.0%  100.0%  
+	[ 52,  64)     0    0.0%  100.0%  
+	[ 64,  79)     0    0.0%  100.0%  
+	[ 79,  97)     0    0.0%  100.0%  
+	[ 97, inf)     0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks___1KB	     200	  31946178 ns/op	   0.06 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 9  Max: 44  Avg: 31.49
+	------------------------------------------------------------
+	[  9,  10)   12    6.0%    6.0%  #
+	[ 10,  11)    1    0.5%    6.5%  
+	[ 11,  12)    0    0.0%    6.5%  
+	[ 12,  14)    4    2.0%    8.5%  
+	[ 14,  16)    0    0.0%    8.5%  
+	[ 16,  19)    2    1.0%    9.5%  
+	[ 19,  23)    0    0.0%    9.5%  
+	[ 23,  28)   13    6.5%   16.0%  #
+	[ 28,  34)   93   46.5%   62.5%  #####
+	[ 34,  42)   71   35.5%   98.0%  ####
+	[ 42,  52)    4    2.0%  100.0%  
+	[ 52,  65)    0    0.0%  100.0%  
+	[ 65,  82)    0    0.0%  100.0%  
+	[ 82, 103)    0    0.0%  100.0%  
+	[103, 130)    0    0.0%  100.0%  
+	[130, 164)    0    0.0%  100.0%  
+	[164, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks___1KB-2	    1000	  11688416 ns/op	   0.17 MB/s
+--- Histogram (unit: ms)
+	Count: 1000  Min: 4  Max: 28  Avg: 11.20
+	------------------------------------------------------------
+	[  4,   5)     5    0.5%    0.5%  
+	[  5,   6)    69    6.9%    7.4%  #
+	[  6,   7)    75    7.5%   14.9%  #
+	[  7,   8)   121   12.1%   27.0%  #
+	[  8,  10)   171   17.1%   44.1%  ##
+	[ 10,  12)   134   13.4%   57.5%  #
+	[ 12,  15)   172   17.2%   74.7%  ##
+	[ 15,  19)   170   17.0%   91.7%  ##
+	[ 19,  24)    79    7.9%   99.6%  #
+	[ 24,  30)     4    0.4%  100.0%  
+	[ 30,  38)     0    0.0%  100.0%  
+	[ 38,  48)     0    0.0%  100.0%  
+	[ 48,  60)     0    0.0%  100.0%  
+	[ 60,  75)     0    0.0%  100.0%  
+	[ 75,  94)     0    0.0%  100.0%  
+	[ 94, 118)     0    0.0%  100.0%  
+	[118, inf)     0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks__10KB	     200	  48210454 ns/op	   0.04 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 9  Max: 61  Avg: 47.74
+	------------------------------------------------------------
+	[  9,  10)    1    0.5%    0.5%  
+	[ 10,  11)    0    0.0%    0.5%  
+	[ 11,  12)    0    0.0%    0.5%  
+	[ 12,  14)   14    7.0%    7.5%  #
+	[ 14,  16)    9    4.5%   12.0%  
+	[ 16,  19)    5    2.5%   14.5%  
+	[ 19,  23)    2    1.0%   15.5%  
+	[ 23,  29)    0    0.0%   15.5%  
+	[ 29,  37)    0    0.0%   15.5%  
+	[ 37,  47)    7    3.5%   19.0%  
+	[ 47,  60)  159   79.5%   98.5%  ########
+	[ 60,  78)    3    1.5%  100.0%  
+	[ 78, 101)    0    0.0%  100.0%  
+	[101, 131)    0    0.0%  100.0%  
+	[131, 170)    0    0.0%  100.0%  
+	[170, 222)    0    0.0%  100.0%  
+	[222, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux__100_chunks__10KB-2	     300	  24547213 ns/op	   0.08 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 4  Max: 42  Avg: 24.07
+	------------------------------------------------------------
+	[  4,   5)    1    0.3%    0.3%  
+	[  5,   6)    8    2.7%    3.0%  
+	[  6,   7)    1    0.3%    3.3%  
+	[  7,   9)    6    2.0%    5.3%  
+	[  9,  11)   14    4.7%   10.0%  
+	[ 11,  14)   24    8.0%   18.0%  #
+	[ 14,  18)   13    4.3%   22.3%  
+	[ 18,  23)   37   12.3%   34.7%  #
+	[ 23,  29)   67   22.3%   57.0%  ##
+	[ 29,  37)  120   40.0%   97.0%  ####
+	[ 37,  48)    9    3.0%  100.0%  
+	[ 48,  62)    0    0.0%  100.0%  
+	[ 62,  80)    0    0.0%  100.0%  
+	[ 80, 103)    0    0.0%  100.0%  
+	[103, 132)    0    0.0%  100.0%  
+	[132, 169)    0    0.0%  100.0%  
+	[169, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks___10B	     100	 131862174 ns/op	   0.02 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 10  Max: 209  Avg: 131.34
+	------------------------------------------------------------
+	[ 10,  11)    1    1.0%    1.0%  
+	[ 11,  12)    1    1.0%    2.0%  
+	[ 12,  14)    0    0.0%    2.0%  
+	[ 14,  16)    0    0.0%    2.0%  
+	[ 16,  20)    1    1.0%    3.0%  
+	[ 20,  25)    0    0.0%    3.0%  
+	[ 25,  33)    0    0.0%    3.0%  
+	[ 33,  44)    0    0.0%    3.0%  
+	[ 44,  60)    4    4.0%    7.0%  
+	[ 60,  83)   16   16.0%   23.0%  ##
+	[ 83, 117)   18   18.0%   41.0%  ##
+	[117, 165)   24   24.0%   65.0%  ##
+	[165, 234)   35   35.0%  100.0%  ####
+	[234, 332)    0    0.0%  100.0%  
+	[332, 471)    0    0.0%  100.0%  
+	[471, 669)    0    0.0%  100.0%  
+	[669, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks___10B-2	     300	  23370846 ns/op	   0.09 MB/s
+--- Histogram (unit: ms)
+	Count: 300  Min: 4  Max: 101  Avg: 22.88
+	------------------------------------------------------------
+	[  4,   5)    1    0.3%    0.3%  
+	[  5,   6)   24    8.0%    8.3%  #
+	[  6,   7)   49   16.3%   24.7%  ##
+	[  7,   9)   48   16.0%   40.7%  ##
+	[  9,  12)   26    8.7%   49.3%  #
+	[ 12,  16)   53   17.7%   67.0%  ##
+	[ 16,  22)   36   12.0%   79.0%  #
+	[ 22,  30)    5    1.7%   80.7%  
+	[ 30,  41)    4    1.3%   82.0%  
+	[ 41,  56)    3    1.0%   83.0%  
+	[ 56,  77)   21    7.0%   90.0%  #
+	[ 77, 105)   30   10.0%  100.0%  #
+	[105, 143)    0    0.0%  100.0%  
+	[143, 195)    0    0.0%  100.0%  
+	[195, 266)    0    0.0%  100.0%  
+	[266, 362)    0    0.0%  100.0%  
+	[362, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks__100B	      50	 138026822 ns/op	   0.01 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 22  Max: 222  Avg: 137.50
+	------------------------------------------------------------
+	[ 22,  23)   1    2.0%    2.0%  
+	[ 23,  24)   1    2.0%    4.0%  
+	[ 24,  26)   0    0.0%    4.0%  
+	[ 26,  28)   0    0.0%    4.0%  
+	[ 28,  32)   0    0.0%    4.0%  
+	[ 32,  37)   0    0.0%    4.0%  
+	[ 37,  45)   0    0.0%    4.0%  
+	[ 45,  56)   2    4.0%    8.0%  
+	[ 56,  72)   2    4.0%   12.0%  
+	[ 72,  96)   7   14.0%   26.0%  #
+	[ 96, 130)  11   22.0%   48.0%  ##
+	[130, 178)  10   20.0%   68.0%  ##
+	[178, 247)  16   32.0%  100.0%  ###
+	[247, 345)   0    0.0%  100.0%  
+	[345, 485)   0    0.0%  100.0%  
+	[485, 684)   0    0.0%  100.0%  
+	[684, inf)   0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks__100B-2	     200	  29916622 ns/op	   0.07 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 5  Max: 117  Avg: 29.41
+	------------------------------------------------------------
+	[  5,   6)    8    4.0%    4.0%  
+	[  6,   7)   19    9.5%   13.5%  #
+	[  7,   8)   15    7.5%   21.0%  #
+	[  8,  10)   31   15.5%   36.5%  ##
+	[ 10,  13)   25   12.5%   49.0%  #
+	[ 13,  17)   37   18.5%   67.5%  ##
+	[ 17,  23)   15    7.5%   75.0%  #
+	[ 23,  32)    4    2.0%   77.0%  
+	[ 32,  44)    2    1.0%   78.0%  
+	[ 44,  60)    0    0.0%   78.0%  
+	[ 60,  83)    4    2.0%   80.0%  
+	[ 83, 114)   38   19.0%   99.0%  ##
+	[114, 157)    2    1.0%  100.0%  
+	[157, 216)    0    0.0%  100.0%  
+	[216, 297)    0    0.0%  100.0%  
+	[297, 408)    0    0.0%  100.0%  
+	[408, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks___1KB	      50	 165938483 ns/op	   0.01 MB/s
+--- Histogram (unit: ms)
+	Count: 50  Min: 19  Max: 292  Avg: 165.50
+	------------------------------------------------------------
+	[ 19,  20)   1    2.0%    2.0%  
+	[ 20,  21)   0    0.0%    2.0%  
+	[ 21,  23)   0    0.0%    2.0%  
+	[ 23,  26)   0    0.0%    2.0%  
+	[ 26,  30)   0    0.0%    2.0%  
+	[ 30,  36)   0    0.0%    2.0%  
+	[ 36,  45)   0    0.0%    2.0%  
+	[ 45,  58)   1    2.0%    4.0%  
+	[ 58,  77)   0    0.0%    4.0%  
+	[ 77, 105)  10   20.0%   24.0%  ##
+	[105, 147)  11   22.0%   46.0%  ##
+	[147, 208)  14   28.0%   74.0%  ###
+	[208, 296)  13   26.0%  100.0%  ###
+	[296, 425)   0    0.0%  100.0%  
+	[425, 612)   0    0.0%  100.0%  
+	[612, 884)   0    0.0%  100.0%  
+	[884, inf)   0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks___1KB-2	     200	  44332653 ns/op	   0.05 MB/s
+--- Histogram (unit: ms)
+	Count: 200  Min: 5  Max: 136  Avg: 43.85
+	------------------------------------------------------------
+	[  5,   6)   10    5.0%    5.0%  #
+	[  6,   7)    1    0.5%    5.5%  
+	[  7,   8)    2    1.0%    6.5%  
+	[  8,  10)   14    7.0%   13.5%  #
+	[ 10,  13)   22   11.0%   24.5%  #
+	[ 13,  18)   23   11.5%   36.0%  #
+	[ 18,  25)   24   12.0%   48.0%  #
+	[ 25,  34)   21   10.5%   58.5%  #
+	[ 34,  47)   19    9.5%   68.0%  #
+	[ 47,  65)    9    4.5%   72.5%  
+	[ 65,  90)   10    5.0%   77.5%  #
+	[ 90, 125)   38   19.0%   96.5%  ##
+	[125, 174)    7    3.5%  100.0%  
+	[174, 242)    0    0.0%  100.0%  
+	[242, 336)    0    0.0%  100.0%  
+	[336, 466)    0    0.0%  100.0%  
+	[466, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks__10KB	     100	  97935953 ns/op	   0.02 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 10  Max: 161  Avg: 97.40
+	------------------------------------------------------------
+	[ 10,  11)    1    1.0%    1.0%  
+	[ 11,  12)    0    0.0%    1.0%  
+	[ 12,  13)    0    0.0%    1.0%  
+	[ 13,  15)    1    1.0%    2.0%  
+	[ 15,  18)    0    0.0%    2.0%  
+	[ 18,  23)    0    0.0%    2.0%  
+	[ 23,  30)    1    1.0%    3.0%  
+	[ 30,  40)    4    4.0%    7.0%  
+	[ 40,  54)    4    4.0%   11.0%  
+	[ 54,  74)   17   17.0%   28.0%  ##
+	[ 74, 102)   20   20.0%   48.0%  ##
+	[102, 141)   45   45.0%   93.0%  #####
+	[141, 196)    7    7.0%  100.0%  #
+	[196, 273)    0    0.0%  100.0%  
+	[273, 381)    0    0.0%  100.0%  
+	[381, 531)    0    0.0%  100.0%  
+	[531, inf)    0    0.0%  100.0%  
+Benchmark___1KB_mux___1K_chunks__10KB-2	     100	  59656535 ns/op	   0.03 MB/s
+--- Histogram (unit: ms)
+	Count: 100  Min: 5  Max: 111  Avg: 59.16
+	------------------------------------------------------------
+	[  5,   6)    2    2.0%    2.0%  
+	[  6,   7)    0    0.0%    2.0%  
+	[  7,   8)    0    0.0%    2.0%  
+	[  8,  10)    0    0.0%    2.0%  
+	[ 10,  13)    2    2.0%    4.0%  
+	[ 13,  17)    3    3.0%    7.0%  
+	[ 17,  23)    2    2.0%    9.0%  
+	[ 23,  31)    9    9.0%   18.0%  #
+	[ 31,  43)    5    5.0%   23.0%  #
+	[ 43,  59)   17   17.0%   40.0%  ##
+	[ 59,  81)   47   47.0%   87.0%  #####
+	[ 81, 111)   12   12.0%   99.0%  #
+	[111, 152)    1    1.0%  100.0%  
+	[152, 208)    0    0.0%  100.0%  
+	[208, 285)    0    0.0%  100.0%  
+	[285, 390)    0    0.0%  100.0%  
+	[390, inf)    0    0.0%  100.0%  
diff --git a/runtimes/google/ipc/benchmark/benchmark_test.go b/runtimes/google/ipc/benchmark/benchmark_test.go
new file mode 100644
index 0000000..cb459f3
--- /dev/null
+++ b/runtimes/google/ipc/benchmark/benchmark_test.go
@@ -0,0 +1,121 @@
+package benchmark
+
+import (
+	"os"
+	"testing"
+
+	"v.io/core/veyron/lib/testutil/benchmark"
+	"v.io/core/veyron/profiles"
+
+	"v.io/core/veyron2"
+	"v.io/core/veyron2/rt"
+)
+
+var (
+	vrt        veyron2.Runtime
+	serverAddr string
+)
+
+// Benchmarks for non-streaming RPC.
+func runEcho(b *testing.B, payloadSize int) {
+	CallEcho(b, vrt.NewContext(), serverAddr, b.N, payloadSize, benchmark.AddStats(b, 16))
+}
+
+func Benchmark____1B(b *testing.B) { runEcho(b, 1) }
+func Benchmark___10B(b *testing.B) { runEcho(b, 10) }
+func Benchmark__100B(b *testing.B) { runEcho(b, 100) }
+func Benchmark___1KB(b *testing.B) { runEcho(b, 1000) }
+func Benchmark__10KB(b *testing.B) { runEcho(b, 10000) }
+func Benchmark_100KB(b *testing.B) { runEcho(b, 100000) }
+
+// Benchmarks for streaming RPC.
+func runEchoStream(b *testing.B, chunkCnt, payloadSize int) {
+	CallEchoStream(b, vrt.NewContext(), serverAddr, b.N, chunkCnt, payloadSize, benchmark.AddStats(b, 16))
+}
+
+func Benchmark____1_chunk_____1B(b *testing.B) { runEchoStream(b, 1, 1) }
+func Benchmark____1_chunk____10B(b *testing.B) { runEchoStream(b, 1, 10) }
+func Benchmark____1_chunk___100B(b *testing.B) { runEchoStream(b, 1, 100) }
+func Benchmark____1_chunk____1KB(b *testing.B) { runEchoStream(b, 1, 1000) }
+func Benchmark____1_chunk___10KB(b *testing.B) { runEchoStream(b, 1, 10000) }
+func Benchmark____1_chunk__100KB(b *testing.B) { runEchoStream(b, 1, 100000) }
+func Benchmark___10_chunk_____1B(b *testing.B) { runEchoStream(b, 10, 1) }
+func Benchmark___10_chunk____10B(b *testing.B) { runEchoStream(b, 10, 10) }
+func Benchmark___10_chunk___100B(b *testing.B) { runEchoStream(b, 10, 100) }
+func Benchmark___10_chunk____1KB(b *testing.B) { runEchoStream(b, 10, 1000) }
+func Benchmark___10_chunk___10KB(b *testing.B) { runEchoStream(b, 10, 10000) }
+func Benchmark___10_chunk__100KB(b *testing.B) { runEchoStream(b, 10, 100000) }
+func Benchmark__100_chunk_____1B(b *testing.B) { runEchoStream(b, 100, 1) }
+func Benchmark__100_chunk____10B(b *testing.B) { runEchoStream(b, 100, 10) }
+func Benchmark__100_chunk___100B(b *testing.B) { runEchoStream(b, 100, 100) }
+func Benchmark__100_chunk____1KB(b *testing.B) { runEchoStream(b, 100, 1000) }
+func Benchmark__100_chunk___10KB(b *testing.B) { runEchoStream(b, 100, 10000) }
+func Benchmark__100_chunk__100KB(b *testing.B) { runEchoStream(b, 100, 100000) }
+func Benchmark___1K_chunk_____1B(b *testing.B) { runEchoStream(b, 1000, 1) }
+func Benchmark___1K_chunk____10B(b *testing.B) { runEchoStream(b, 1000, 10) }
+func Benchmark___1K_chunk___100B(b *testing.B) { runEchoStream(b, 1000, 100) }
+func Benchmark___1K_chunk____1KB(b *testing.B) { runEchoStream(b, 1000, 1000) }
+func Benchmark___1K_chunk___10KB(b *testing.B) { runEchoStream(b, 1000, 10000) }
+func Benchmark___1K_chunk__100KB(b *testing.B) { runEchoStream(b, 1000, 100000) }
+
+// Benchmarks for per-chunk throughput in streaming RPC.
+func runPerChunk(b *testing.B, payloadSize int) {
+	CallEchoStream(b, vrt.NewContext(), serverAddr, 1, b.N, payloadSize, benchmark.NewStats(1))
+}
+
+func Benchmark__per_chunk____1B(b *testing.B) { runPerChunk(b, 1) }
+func Benchmark__per_chunk___10B(b *testing.B) { runPerChunk(b, 10) }
+func Benchmark__per_chunk__100B(b *testing.B) { runPerChunk(b, 100) }
+func Benchmark__per_chunk___1KB(b *testing.B) { runPerChunk(b, 1000) }
+func Benchmark__per_chunk__10KB(b *testing.B) { runPerChunk(b, 10000) }
+func Benchmark__per_chunk_100KB(b *testing.B) { runPerChunk(b, 100000) }
+
+// Benchmarks for non-streaming RPC while running streaming RPC in background.
+func runMux(b *testing.B, payloadSize, chunkCntB, payloadSizeB int) {
+	_, stop := StartEchoStream(&testing.B{}, vrt.NewContext(), serverAddr, 0, chunkCntB, payloadSizeB, benchmark.NewStats(1))
+	CallEcho(b, vrt.NewContext(), serverAddr, b.N, payloadSize, benchmark.AddStats(b, 16))
+	stop()
+}
+
+func Benchmark___10B_mux__100_chunks___10B(b *testing.B) { runMux(b, 10, 100, 10) }
+func Benchmark___10B_mux__100_chunks__100B(b *testing.B) { runMux(b, 10, 100, 100) }
+func Benchmark___10B_mux__100_chunks___1KB(b *testing.B) { runMux(b, 10, 100, 1000) }
+func Benchmark___10B_mux__100_chunks__10KB(b *testing.B) { runMux(b, 10, 100, 10000) }
+func Benchmark___10B_mux___1K_chunks___10B(b *testing.B) { runMux(b, 10, 1000, 10) }
+func Benchmark___10B_mux___1K_chunks__100B(b *testing.B) { runMux(b, 10, 1000, 100) }
+func Benchmark___10B_mux___1K_chunks___1KB(b *testing.B) { runMux(b, 10, 1000, 1000) }
+func Benchmark___10B_mux___1K_chunks__10KB(b *testing.B) { runMux(b, 10, 1000, 10000) }
+func Benchmark___1KB_mux__100_chunks___10B(b *testing.B) { runMux(b, 1000, 100, 10) }
+func Benchmark___1KB_mux__100_chunks__100B(b *testing.B) { runMux(b, 1000, 100, 100) }
+func Benchmark___1KB_mux__100_chunks___1KB(b *testing.B) { runMux(b, 1000, 100, 1000) }
+func Benchmark___1KB_mux__100_chunks__10KB(b *testing.B) { runMux(b, 1000, 100, 10000) }
+func Benchmark___1KB_mux___1K_chunks___10B(b *testing.B) { runMux(b, 1000, 1000, 10) }
+func Benchmark___1KB_mux___1K_chunks__100B(b *testing.B) { runMux(b, 1000, 1000, 100) }
+func Benchmark___1KB_mux___1K_chunks___1KB(b *testing.B) { runMux(b, 1000, 1000, 1000) }
+func Benchmark___1KB_mux___1K_chunks__10KB(b *testing.B) { runMux(b, 1000, 1000, 10000) }
+
+// A single empty test to avoid:
+// testing: warning: no tests to run
+// from showing up when running benchmarks in this package via "go test"
+func TestNoOp(t *testing.T) {}
+
+func TestMain(m *testing.M) {
+	var err error
+	vrt, err = rt.New()
+	if err != nil {
+		panic(err)
+	}
+
+	var serverStop func()
+	serverAddr, serverStop = StartServer(vrt, profiles.LocalListenSpec)
+
+	// Create a VC to exclude the VC setup time from the benchmark.
+	CallEcho(&testing.B{}, vrt.NewContext(), serverAddr, 1, 0, benchmark.NewStats(1))
+
+	r := benchmark.RunTestMain(m)
+
+	serverStop()
+	vrt.Cleanup()
+
+	os.Exit(r)
+}
diff --git a/runtimes/google/ipc/benchmarks/bmclient/main.go b/runtimes/google/ipc/benchmark/bmclient/main.go
similarity index 77%
rename from runtimes/google/ipc/benchmarks/bmclient/main.go
rename to runtimes/google/ipc/benchmark/bmclient/main.go
index 091421b..e6fc5d3 100644
--- a/runtimes/google/ipc/benchmarks/bmclient/main.go
+++ b/runtimes/google/ipc/benchmark/bmclient/main.go
@@ -8,12 +8,12 @@
 	"testing"
 	"time"
 
+	tbm "v.io/core/veyron/lib/testutil/benchmark"
+	_ "v.io/core/veyron/profiles"
+	"v.io/core/veyron/runtimes/google/ipc/benchmark"
+
 	"v.io/core/veyron2/rt"
 	"v.io/core/veyron2/vlog"
-
-	"v.io/core/veyron/lib/testutil"
-	_ "v.io/core/veyron/profiles"
-	"v.io/core/veyron/runtimes/google/ipc/benchmarks"
 )
 
 var (
@@ -36,20 +36,20 @@
 
 	if *chunkCntMux > 0 && *payloadSizeMux > 0 {
 		dummyB := testing.B{}
-		_, stop := benchmarks.StartEchoStream(&dummyB, vrt.NewContext(), *server, 0, *chunkCntMux, *payloadSizeMux, nil)
+		_, stop := benchmark.StartEchoStream(&dummyB, vrt.NewContext(), *server, 0, *chunkCntMux, *payloadSizeMux, nil)
 		defer stop()
 		vlog.Infof("Started background streaming (chunk_size=%d, payload_size=%d)", *chunkCntMux, *payloadSizeMux)
 	}
 
 	dummyB := testing.B{}
-	stats := testutil.NewBenchStats(16)
+	stats := tbm.NewStats(16)
 
 	now := time.Now()
 	ctx := vrt.NewContext()
 	if *chunkCnt == 0 {
-		benchmarks.CallEcho(&dummyB, ctx, *server, *iterations, *payloadSize, stats)
+		benchmark.CallEcho(&dummyB, ctx, *server, *iterations, *payloadSize, stats)
 	} else {
-		benchmarks.CallEchoStream(&dummyB, ctx, *server, *iterations, *chunkCnt, *payloadSize, stats)
+		benchmark.CallEchoStream(&dummyB, ctx, *server, *iterations, *chunkCnt, *payloadSize, stats)
 	}
 	elapsed := time.Since(now)
 
diff --git a/runtimes/google/ipc/benchmarks/bmserver/main.go b/runtimes/google/ipc/benchmark/bmserver/main.go
similarity index 78%
rename from runtimes/google/ipc/benchmarks/bmserver/main.go
rename to runtimes/google/ipc/benchmark/bmserver/main.go
index f621c7b..6b68072 100644
--- a/runtimes/google/ipc/benchmarks/bmserver/main.go
+++ b/runtimes/google/ipc/benchmark/bmserver/main.go
@@ -2,12 +2,12 @@
 package main
 
 import (
-	"v.io/core/veyron2/rt"
-	"v.io/core/veyron2/vlog"
-
 	"v.io/core/veyron/lib/signals"
 	"v.io/core/veyron/profiles/roaming"
-	"v.io/core/veyron/runtimes/google/ipc/benchmarks"
+	"v.io/core/veyron/runtimes/google/ipc/benchmark"
+
+	"v.io/core/veyron2/rt"
+	"v.io/core/veyron2/vlog"
 )
 
 func main() {
@@ -17,7 +17,7 @@
 	}
 	defer vrt.Cleanup()
 
-	addr, stop := benchmarks.StartServer(vrt, roaming.ListenSpec)
+	addr, stop := benchmark.StartServer(vrt, roaming.ListenSpec)
 	vlog.Infof("Listening on %s", addr)
 	defer stop()
 	<-signals.ShutdownOnSignals(vrt)
diff --git a/runtimes/google/ipc/benchmarks/client.go b/runtimes/google/ipc/benchmark/client.go
similarity index 72%
rename from runtimes/google/ipc/benchmarks/client.go
rename to runtimes/google/ipc/benchmark/client.go
index c920458..2ecdae8 100644
--- a/runtimes/google/ipc/benchmarks/client.go
+++ b/runtimes/google/ipc/benchmark/client.go
@@ -1,4 +1,4 @@
-package benchmarks
+package benchmark
 
 import (
 	"bytes"
@@ -6,25 +6,20 @@
 	"testing"
 	"time"
 
-	"v.io/core/veyron/lib/testutil"
+	"v.io/core/veyron/lib/testutil/benchmark"
 
 	"v.io/core/veyron2/context"
 	"v.io/core/veyron2/vlog"
 )
 
-// CallEcho calls 'Echo' method 'iterations' times with the given payload
-// size, and optionally updates the stats.
-func CallEcho(b *testing.B, ctx *context.T, address string, iterations, payloadSize int, stats *testutil.BenchStats) {
+// CallEcho calls 'Echo' method 'iterations' times with the given payload size.
+func CallEcho(b *testing.B, ctx *context.T, address string, iterations, payloadSize int, stats *benchmark.Stats) {
 	stub := BenchmarkClient(address)
 	payload := make([]byte, payloadSize)
 	for i := range payload {
 		payload[i] = byte(i & 0xff)
 	}
 
-	if stats != nil {
-		stats.Clear()
-	}
-
 	b.SetBytes(int64(payloadSize) * 2) // 2 for round trip of each payload.
 	b.ResetTimer()                     // Exclude setup time from measurement.
 
@@ -44,38 +39,31 @@
 			vlog.Fatalf("Echo returned %v, but expected %v", r, payload)
 		}
 
-		if stats != nil {
-			stats.Add(elapsed)
-		}
+		stats.Add(elapsed)
 	}
 }
 
-// CallEchoStream calls 'EchoStream' method 'iterations' times. Each iteration
-// sends 'chunkCnt' chunks on the stream and receives the same number of chunks
-// back. Each chunk has the given payload size. Optionally updates the stats.
-func CallEchoStream(b *testing.B, ctx *context.T, address string, iterations, chunkCnt, payloadSize int, stats *testutil.BenchStats) {
+// CallEchoStream calls 'EchoStream' method 'iterations' times. Each iteration sends
+// 'chunkCnt' chunks on the stream and receives the same number of chunks back. Each
+// chunk has the given payload size.
+func CallEchoStream(b *testing.B, ctx *context.T, address string, iterations, chunkCnt, payloadSize int, stats *benchmark.Stats) {
 	done, _ := StartEchoStream(b, ctx, address, iterations, chunkCnt, payloadSize, stats)
 	<-done
 }
 
-// StartEchoStream starts to call 'EchoStream' method 'iterations' times.
-// This does not block, and returns a channel that will receive the number
-// of iterations when it's done. It also returns a callback function to stop
-// the streaming. Each iteration requests 'chunkCnt' chunks on the stream and
-// receives that number of chunks back. Each chunk has the given payload size.
-// Optionally updates the stats. Zero 'iterations' means unlimited.
-func StartEchoStream(b *testing.B, ctx *context.T, address string, iterations, chunkCnt, payloadSize int, stats *testutil.BenchStats) (<-chan int, func()) {
+// StartEchoStream starts to call 'EchoStream' method 'iterations' times. This does
+// not block, and returns a channel that will receive the number of iterations when
+// it's done. It also returns a callback function to stop the streaming. Each iteration
+// requests 'chunkCnt' chunks on the stream and receives that number of chunks back.
+// Each chunk has the given payload size. Zero 'iterations' means unlimited.
+func StartEchoStream(b *testing.B, ctx *context.T, address string, iterations, chunkCnt, payloadSize int, stats *benchmark.Stats) (<-chan int, func()) {
 	stub := BenchmarkClient(address)
 	payload := make([]byte, payloadSize)
 	for i := range payload {
 		payload[i] = byte(i & 0xff)
 	}
 
-	if stats != nil {
-		stats.Clear()
-	}
-
-	done, stop := make(chan int, 1), make(chan struct{})
+	stop := make(chan struct{})
 	stopped := func() bool {
 		select {
 		case <-stop:
@@ -84,6 +72,7 @@
 			return false
 		}
 	}
+	done := make(chan int, 1)
 
 	if b.N > 0 {
 		// 2 for round trip of each payload.
@@ -145,9 +134,7 @@
 			elapsed := time.Since(start)
 			b.StopTimer()
 
-			if stats != nil {
-				stats.Add(elapsed)
-			}
+			stats.Add(elapsed)
 		}
 
 		done <- n
diff --git a/runtimes/google/ipc/benchmarks/glob/README.txt b/runtimes/google/ipc/benchmark/glob/README.txt
similarity index 100%
rename from runtimes/google/ipc/benchmarks/glob/README.txt
rename to runtimes/google/ipc/benchmark/glob/README.txt
diff --git a/runtimes/google/ipc/benchmarks/glob/doc.go b/runtimes/google/ipc/benchmark/glob/doc.go
similarity index 100%
rename from runtimes/google/ipc/benchmarks/glob/doc.go
rename to runtimes/google/ipc/benchmark/glob/doc.go
diff --git a/runtimes/google/ipc/benchmarks/glob/glob_test.go b/runtimes/google/ipc/benchmark/glob/glob_test.go
similarity index 100%
rename from runtimes/google/ipc/benchmarks/glob/glob_test.go
rename to runtimes/google/ipc/benchmark/glob/glob_test.go
diff --git a/runtimes/google/ipc/benchmarks/server.go b/runtimes/google/ipc/benchmark/server.go
similarity index 88%
rename from runtimes/google/ipc/benchmarks/server.go
rename to runtimes/google/ipc/benchmark/server.go
index 5e4ebdb..3a55f31 100644
--- a/runtimes/google/ipc/benchmarks/server.go
+++ b/runtimes/google/ipc/benchmark/server.go
@@ -1,7 +1,7 @@
-package benchmarks
+package benchmark
 
 import (
-	sflag "v.io/core/veyron/security/flag"
+	"v.io/core/veyron/security/flag"
 
 	"v.io/core/veyron2"
 	"v.io/core/veyron2/ipc"
@@ -41,7 +41,7 @@
 		vlog.Fatalf("Listen failed: %v", err)
 	}
 
-	if err := server.Serve("", BenchmarkServer(&impl{}), sflag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve("", BenchmarkServer(&impl{}), flag.NewAuthorizerOrDie()); err != nil {
 		vlog.Fatalf("Serve failed: %v", err)
 	}
 	return naming.JoinAddressName(eps[0].String(), ""), func() {
diff --git a/runtimes/google/ipc/benchmarks/service.vdl b/runtimes/google/ipc/benchmark/service.vdl
similarity index 95%
rename from runtimes/google/ipc/benchmarks/service.vdl
rename to runtimes/google/ipc/benchmark/service.vdl
index d6ac0e8..3f42b77 100644
--- a/runtimes/google/ipc/benchmarks/service.vdl
+++ b/runtimes/google/ipc/benchmark/service.vdl
@@ -1,6 +1,6 @@
 // package benchmark provides simple tools to measure the performance of the
 // IPC system.
-package benchmarks
+package benchmark
 
 import (
 	"v.io/core/veyron2/services/security/access"
diff --git a/runtimes/google/ipc/benchmarks/service.vdl.go b/runtimes/google/ipc/benchmark/service.vdl.go
similarity index 99%
rename from runtimes/google/ipc/benchmarks/service.vdl.go
rename to runtimes/google/ipc/benchmark/service.vdl.go
index 6613195..a2485f8 100644
--- a/runtimes/google/ipc/benchmarks/service.vdl.go
+++ b/runtimes/google/ipc/benchmark/service.vdl.go
@@ -3,7 +3,7 @@
 
 // package benchmark provides simple tools to measure the performance of the
 // IPC system.
-package benchmarks
+package benchmark
 
 import (
 	"v.io/core/veyron2/services/security/access"
@@ -268,7 +268,7 @@
 // descBenchmark hides the desc to keep godoc clean.
 var descBenchmark = __ipc.InterfaceDesc{
 	Name:    "Benchmark",
-	PkgPath: "v.io/core/veyron/runtimes/google/ipc/benchmarks",
+	PkgPath: "v.io/core/veyron/runtimes/google/ipc/benchmark",
 	Methods: []__ipc.MethodDesc{
 		{
 			Name: "Echo",
diff --git a/runtimes/google/ipc/benchmarks/README.txt b/runtimes/google/ipc/benchmarks/README.txt
deleted file mode 100644
index e2edd4f..0000000
--- a/runtimes/google/ipc/benchmarks/README.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-This directory contains code uses to measure the performance of the Veyron IPC
-stack.
-
-================================================================================
-
-The ipc_test.go file uses GO's testing package to run benchmarks. Each
-benchmark involves one server and one client. The server has two very simple
-methods that echo the data received from the client back to the client.
-
-client ---- Echo(payload) ----> server
-client <--- return payload ---- server
-
-There are two versions of the Echo method:
- - Echo(payload []byte) ([]byte], error)
- - EchoStream() <[]byte,[]byte> error
-
-The first benchmarks use the non-streaming version of Echo with a varying
-payload size. The second benchmarks use the streaming version with varying
-number of chunks and payload sizes. The third one is for measuring the
-performance with multiple clients hosted in the same process.
-
-All these benchmarks create a VC before measurements begin. So, the VC creation
-overhead is excluded.
-
-$ veyron go test -test.bench=. -timeout=1h -test.cpu=1 -test.benchtime=5s \
-  veyron/runtimes/google/ipc/benchmarks
-
-Benchmark____1B     2000           5144219 ns/op           0.00 MB/s
-Benchmark___10B     2000           5526448 ns/op           0.00 MB/s
-Benchmark___1KB     2000           4528221 ns/op           0.44 MB/s
-Benchmark_100KB     1000           7569096 ns/op          26.42 MB/s
-Benchmark____1_chunk_____1B         1000           8945290 ns/op           0.00 MB/s
-Benchmark____1_chunk____10B         1000           9711084 ns/op           0.00 MB/s
-Benchmark____1_chunk____1KB         1000           8541689 ns/op           0.23 MB/s
-Benchmark____1_chunk___10KB         1000           8972995 ns/op           2.23 MB/s
-Benchmark___10_chunks____1B         1000          13114807 ns/op           0.00 MB/s
-Benchmark___10_chunks___10B         1000          13219493 ns/op           0.02 MB/s
-Benchmark___10_chunks___1KB         1000          13292236 ns/op           1.50 MB/s
-Benchmark___10_chunks__10KB          500          15733197 ns/op          12.71 MB/s
-Benchmark__100_chunks____1B          500          45078939 ns/op           0.00 MB/s
-Benchmark__100_chunks___10B          200          49113585 ns/op           0.04 MB/s
-Benchmark__100_chunks___1KB          100          57982457 ns/op           3.45 MB/s
-Benchmark__100_chunks__10KB          100          81632487 ns/op          24.50 MB/s
-Benchmark__per_chunk____1B         50000            357880 ns/op           0.01 MB/s
-Benchmark__per_chunk___10B         20000            476941 ns/op           0.04 MB/s
-Benchmark__per_chunk___1KB         10000            806491 ns/op           2.48 MB/s
-Benchmark__per_chunk__10KB         10000           1185081 ns/op          16.88 MB/s
-Benchmark____1B_mux___10_chunks___10B       1000          20235386 ns/op           0.00 MB/s
-Benchmark____1B_mux___10_chunks___1KB        500          21346428 ns/op           0.00 MB/s
-Benchmark____1B_mux__100_chunks___10B        100          72942436 ns/op           0.00 MB/s
-Benchmark____1B_mux__100_chunks___1KB        100          81538481 ns/op           0.00 MB/s
-
-'Benchmark___1KB' shows that it takes an average of 4.528 ms to
-execute a simple Echo RPC with a 1 KB payload.
-
-'Benchmark___10_chunks___1KB' shows that a streaming RPC with the
-same payload (i.e. 10 chunks of 1 KB) takes about 13.292 ms on average.
-
-'Benchmark__per_chunk___1KB' shows that sending a stream of 1 KB chunks
-takes an average of 0.806 ms per chunk.
-
-'Benchmark____1B_mux___10_chunks___1KB' shows that it takes an average
-of 21.346 ms to execute a simple Echo RPC with a 1 B payload while streaming
-10 chunks of 1 KB payloads continuously in the same process.
-
-bm/main.go does the same benchmarks as ipc_test.go but with more varying
-configurations and optional histogram outputs.
-
-$ veyron go run veyron/runtimes/google/ipc/benchmarks/bm/main.go \
-  -test.cpu=1,2 -test.benchtime=5s -histogram
-
-RESULTS.txt has the latest benchmark results with main.go
-
-================================================================================
-
-bmserver/main.go and bmclient/main.go are simple command-line tools to run the
-benchmark server and client as separate processes. Unlike the benchmarks above,
-this test includes the startup cost of name resolution, creating the VC, etc. in
-the first RPC.
-
-$ veyron go run veyron/runtimes/google/ipc/benchmarks/bmserver/main.go \
-  -veyron.tcp.address=localhost:8888 -acl='{"In":{"...":"R"}}'
-
-(In a different shell)
-$ veyron go run veyron/runtimes/google/ipc/benchmarks/bmclient/main.go \
-  -server=/localhost:8888 -iterations=100 -chunk_count=0 -payload_size=10
-iterations: 100  chunk_count: 0  payload_size: 10
-elapsed time: 619.75741ms
-Histogram (unit: ms)
-Count: 100  Min: 4  Max: 54  Avg: 5.65
-------------------------------------------------------------
-[  4,   5)   42   42.0%   42.0%  ####
-[  5,   6)   32   32.0%   74.0%  ###
-[  6,   7)    8    8.0%   82.0%  #
-[  7,   9)   13   13.0%   95.0%  #
-[  9,  11)    3    3.0%   98.0%  
-[ 11,  14)    1    1.0%   99.0%  
-[ 14,  18)    0    0.0%   99.0%  
-[ 18,  24)    0    0.0%   99.0%  
-[ 24,  32)    0    0.0%   99.0%  
-[ 32,  42)    0    0.0%   99.0%  
-[ 42,  55)    1    1.0%  100.0%  
-[ 55,  72)    0    0.0%  100.0%  
-[ 72,  94)    0    0.0%  100.0%  
-[ 94, 123)    0    0.0%  100.0%  
-[123, 161)    0    0.0%  100.0%  
-[161, 211)    0    0.0%  100.0%  
-[211, inf)    0    0.0%  100.0%  
-
-
-On a Raspberry Pi, everything is much slower. The same tests show the following
-results:
-
-$ ./benchmarks.test -test.bench=. -test.cpu=1 -test.benchtime=5s 2>/dev/null
-PASS
-Benchmark____1B             500          21316148 ns/op
-Benchmark___10B             500          23304638 ns/op
-Benchmark__100B             500          21860446 ns/op
-Benchmark___1KB             500          24000346 ns/op
-Benchmark__10KB             200          37530575 ns/op
-Benchmark_100KB             100         136243310 ns/op
-Benchmark_N_RPCs____1_chunk_____1B           500          19957506 ns/op
-Benchmark_N_RPCs____1_chunk____10B           500          22868392 ns/op
-Benchmark_N_RPCs____1_chunk___100B           500          19635412 ns/op
-Benchmark_N_RPCs____1_chunk____1KB           500          22572190 ns/op
-Benchmark_N_RPCs____1_chunk___10KB           500          37570948 ns/op
-Benchmark_N_RPCs___10_chunks___1KB           100          51670740 ns/op
-Benchmark_N_RPCs__100_chunks___1KB            50         364938740 ns/op
-Benchmark_N_RPCs_1000_chunks___1KB             2        3586374500 ns/op
-Benchmark_1_RPC_N_chunks_____1B    10000           1034042 ns/op
-Benchmark_1_RPC_N_chunks____10B     5000           1894875 ns/op
-Benchmark_1_RPC_N_chunks___100B     5000           2857289 ns/op
-Benchmark_1_RPC_N_chunks____1KB     5000           6465839 ns/op
-Benchmark_1_RPC_N_chunks___10KB      100          80019430 ns/op
-Benchmark_1_RPC_N_chunks__100KB Killed
-
-The simple 1 KB RPCs take an average of 24 ms. The streaming equivalent takes
-about 22 ms, and streaming many 1 KB chunks takes about 6.5 ms per chunk.
-
-
-$ ./bmserver --address=localhost:8888 --acl='{"...":"A"}'
-
-$ ./bmclient --server=/localhost:8888 --count=10 --payload_size=1000
-CallEcho 0 2573406000
-CallEcho 1 44669000
-CallEcho 2 54442000
-CallEcho 3 33934000
-CallEcho 4 47985000
-CallEcho 5 61324000
-CallEcho 6 51654000
-CallEcho 7 47043000
-CallEcho 8 44995000
-CallEcho 9 53166000
-
-On the pi, the first RPC takes ~2.5 sec to execute.
diff --git a/runtimes/google/ipc/benchmarks/RESULTS.txt b/runtimes/google/ipc/benchmarks/RESULTS.txt
deleted file mode 100644
index 979b2ac..0000000
--- a/runtimes/google/ipc/benchmarks/RESULTS.txt
+++ /dev/null
@@ -1,2140 +0,0 @@
-Date: 12/14/2014
-Platform: Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz,  66114888KB Memory
-
-$ veyron go run veyron/runtimes/google/ipc/benchmarks/bm/main.go \
-  -test.cpu=1,2 -test.benchtime=5s -histogram
-
-Benchmark____1B     3000           2260153 ns/op           0.00 MB/s
-Benchmark____1B-2           3000           2362339 ns/op           0.00 MB/s
-Benchmark___10B     3000           2595581 ns/op           0.01 MB/s
-Benchmark___10B-2           3000           2372671 ns/op           0.01 MB/s
-Benchmark__100B     3000           2690733 ns/op           0.07 MB/s
-Benchmark__100B-2           3000           2419120 ns/op           0.08 MB/s
-Benchmark___1KB     3000           2498211 ns/op           0.80 MB/s
-Benchmark___1KB-2           3000           2244818 ns/op           0.89 MB/s
-Benchmark__10KB     3000           2740536 ns/op           7.30 MB/s
-Benchmark__10KB-2           3000           2394824 ns/op           8.35 MB/s
-Benchmark_100KB     2000           5581491 ns/op          35.83 MB/s
-Benchmark_100KB-2           2000           4127286 ns/op          48.46 MB/s
-
-Benchmark____1_chunk_____1B         3000           2744128 ns/op           0.00 MB/s
-Benchmark____1_chunk_____1B-2       3000           2347418 ns/op           0.00 MB/s
-Benchmark____1_chunk____10B         3000           2857309 ns/op           0.01 MB/s
-Benchmark____1_chunk____10B-2       3000           2363346 ns/op           0.01 MB/s
-Benchmark____1_chunk___100B         3000           2922993 ns/op           0.07 MB/s
-Benchmark____1_chunk___100B-2       3000           2558699 ns/op           0.08 MB/s
-Benchmark____1_chunk____1KB         3000           2646432 ns/op           0.76 MB/s
-Benchmark____1_chunk____1KB-2       3000           2400649 ns/op           0.83 MB/s
-Benchmark____1_chunk___10KB         3000           2954627 ns/op           6.77 MB/s
-Benchmark____1_chunk___10KB-2       3000           2546084 ns/op           7.86 MB/s
-Benchmark____1_chunk__100KB         2000           5517042 ns/op          36.25 MB/s
-Benchmark____1_chunk__100KB-2       2000           4157872 ns/op          48.10 MB/s
-Benchmark___10_chunks____1B         2000           4177247 ns/op           0.00 MB/s
-Benchmark___10_chunks____1B-2       2000           3432532 ns/op           0.01 MB/s
-Benchmark___10_chunks___10B         2000           4664935 ns/op           0.04 MB/s
-Benchmark___10_chunks___10B-2       2000           3548029 ns/op           0.06 MB/s
-Benchmark___10_chunks__100B         2000           4845710 ns/op           0.41 MB/s
-Benchmark___10_chunks__100B-2       2000           3658666 ns/op           0.55 MB/s
-Benchmark___10_chunks___1KB         2000           4971196 ns/op           4.02 MB/s
-Benchmark___10_chunks___1KB-2       2000           3662827 ns/op           5.46 MB/s
-Benchmark___10_chunks__10KB         1000           7533684 ns/op          26.55 MB/s
-Benchmark___10_chunks__10KB-2       2000           4922363 ns/op          40.63 MB/s
-Benchmark___10_chunks_100KB          200          31539312 ns/op          63.41 MB/s
-Benchmark___10_chunks_100KB-2        500          18574440 ns/op         107.67 MB/s
-Benchmark__100_chunks____1B          500          18036549 ns/op           0.01 MB/s
-Benchmark__100_chunks____1B-2       1000          12395699 ns/op           0.02 MB/s
-Benchmark__100_chunks___10B          300          20669375 ns/op           0.10 MB/s
-Benchmark__100_chunks___10B-2        500          12634978 ns/op           0.16 MB/s
-Benchmark__100_chunks__100B          300          23164692 ns/op           0.86 MB/s
-Benchmark__100_chunks__100B-2        500          13821225 ns/op           1.45 MB/s
-Benchmark__100_chunks___1KB          300          26071439 ns/op           7.67 MB/s
-Benchmark__100_chunks___1KB-2        500          15738134 ns/op          12.71 MB/s
-Benchmark__100_chunks__10KB          100          50248311 ns/op          39.80 MB/s
-Benchmark__100_chunks__10KB-2        300          28614761 ns/op          69.89 MB/s
-Benchmark__100_chunks_100KB           30         272889576 ns/op          73.29 MB/s
-Benchmark__100_chunks_100KB-2         50         149680912 ns/op         133.62 MB/s
-Benchmark___1K_chunks____1B          100         111621410 ns/op           0.02 MB/s
-Benchmark___1K_chunks____1B-2        100         103311101 ns/op           0.02 MB/s
-Benchmark___1K_chunks___10B           50         189580683 ns/op           0.11 MB/s
-Benchmark___1K_chunks___10B-2        100         107068429 ns/op           0.19 MB/s
-Benchmark___1K_chunks__100B           30         223128293 ns/op           0.90 MB/s
-Benchmark___1K_chunks__100B-2         50         125690815 ns/op           1.59 MB/s
-Benchmark___1K_chunks___1KB           30         251956982 ns/op           7.94 MB/s
-Benchmark___1K_chunks___1KB-2         50         144214400 ns/op          13.87 MB/s
-Benchmark___1K_chunks__10KB           20         474946063 ns/op          42.11 MB/s
-Benchmark___1K_chunks__10KB-2         30         267531367 ns/op          74.76 MB/s
-Benchmark___1K_chunks_100KB            2        2675372295 ns/op          74.76 MB/s
-Benchmark___1K_chunks_100KB-2          5        1421481350 ns/op         140.70 MB/s
-
-Benchmark__per_chunk____1B         50000            163939 ns/op           0.01 MB/s
-Benchmark__per_chunk____1B-2       50000            118409 ns/op           0.02 MB/s
-Benchmark__per_chunk___10B         20000            321908 ns/op           0.06 MB/s
-Benchmark__per_chunk___10B-2       50000            176818 ns/op           0.11 MB/s
-Benchmark__per_chunk__100B         20000            411514 ns/op           0.49 MB/s
-Benchmark__per_chunk__100B-2       30000            231565 ns/op           0.86 MB/s
-Benchmark__per_chunk___1KB         20000            423999 ns/op           4.72 MB/s
-Benchmark__per_chunk___1KB-2       30000            248721 ns/op           8.04 MB/s
-Benchmark__per_chunk__10KB         10000            631536 ns/op          31.67 MB/s
-Benchmark__per_chunk__10KB-2       20000            346868 ns/op          57.66 MB/s
-Benchmark__per_chunk_100KB          3000           2613430 ns/op          76.53 MB/s
-Benchmark__per_chunk_100KB-2        5000           1369809 ns/op         146.01 MB/s
-
-Benchmark___10B_mux__100_chunks___10B        500          18817141 ns/op           0.00 MB/s
-Benchmark___10B_mux__100_chunks___10B-2     1000           7104449 ns/op           0.00 MB/s
-Benchmark___10B_mux__100_chunks__100B        300          21167617 ns/op           0.00 MB/s
-Benchmark___10B_mux__100_chunks__100B-2     1000           8372251 ns/op           0.00 MB/s
-Benchmark___10B_mux__100_chunks___1KB        300          22817830 ns/op           0.00 MB/s
-Benchmark___10B_mux__100_chunks___1KB-2     1000           8831943 ns/op           0.00 MB/s
-Benchmark___10B_mux___1K_chunks___10B        100         123136622 ns/op           0.00 MB/s
-Benchmark___10B_mux___1K_chunks___10B-2      300          22274569 ns/op           0.00 MB/s
-Benchmark___10B_mux___1K_chunks__100B        100         143814971 ns/op           0.00 MB/s
-Benchmark___10B_mux___1K_chunks__100B-2      200          34125016 ns/op           0.00 MB/s
-Benchmark___10B_mux___1K_chunks___1KB        100         136987808 ns/op           0.00 MB/s
-Benchmark___10B_mux___1K_chunks___1KB-2      200          35831221 ns/op           0.00 MB/s
-Benchmark__100B_mux__100_chunks___10B        500          20748811 ns/op           0.01 MB/s
-Benchmark__100B_mux__100_chunks___10B-2     1000           7604070 ns/op           0.03 MB/s
-Benchmark__100B_mux__100_chunks__100B        300          21922577 ns/op           0.01 MB/s
-Benchmark__100B_mux__100_chunks__100B-2     1000           9164254 ns/op           0.02 MB/s
-Benchmark__100B_mux__100_chunks___1KB        300          23892634 ns/op           0.01 MB/s
-Benchmark__100B_mux__100_chunks___1KB-2     1000           9288578 ns/op           0.02 MB/s
-Benchmark__100B_mux___1K_chunks___10B        100         120357166 ns/op           0.00 MB/s
-Benchmark__100B_mux___1K_chunks___10B-2      300          23110788 ns/op           0.01 MB/s
-Benchmark__100B_mux___1K_chunks__100B        100         146211502 ns/op           0.00 MB/s
-Benchmark__100B_mux___1K_chunks__100B-2      200          36485527 ns/op           0.01 MB/s
-Benchmark__100B_mux___1K_chunks___1KB        100         145242261 ns/op           0.00 MB/s
-Benchmark__100B_mux___1K_chunks___1KB-2      200          37420006 ns/op           0.01 MB/s
-
-
-% The followings are the full output with histograms.
-
-================================================================================
-Echo RPC
-================================================================================
-Benchmark____1B	    3000	   2260153 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 3  Avg: 1.54
-------------------------------------------------------------
-[  1,   2)  1754   58.5%   58.5%  ######
-[  2,   3)   864   28.8%   87.3%  ###
-[  3,   4)   382   12.7%  100.0%  #
-[  4,   5)     0    0.0%  100.0%  
-[  5,   6)     0    0.0%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  10)     0    0.0%  100.0%  
-[ 10,  11)     0    0.0%  100.0%  
-[ 11,  12)     0    0.0%  100.0%  
-[ 12,  13)     0    0.0%  100.0%  
-[ 13,  14)     0    0.0%  100.0%  
-[ 14,  15)     0    0.0%  100.0%  
-[ 15,  16)     0    0.0%  100.0%  
-[ 16,  17)     0    0.0%  100.0%  
-[ 17, inf)     0    0.0%  100.0%  
-Benchmark____1B-2	    3000	   2362339 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 4  Avg: 1.98
-------------------------------------------------------------
-[  1,   2)   608   20.3%   20.3%  ##
-[  2,   3)  1864   62.1%   82.4%  ######
-[  3,   4)   520   17.3%   99.7%  ##
-[  4,   5)     8    0.3%  100.0%  
-[  5,   6)     0    0.0%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  10)     0    0.0%  100.0%  
-[ 10,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  17)     0    0.0%  100.0%  
-[ 17,  19)     0    0.0%  100.0%  
-[ 19,  21)     0    0.0%  100.0%  
-[ 21,  23)     0    0.0%  100.0%  
-[ 23, inf)     0    0.0%  100.0%  
-Benchmark___10B	    3000	   2595581 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 5  Avg: 2.37
-------------------------------------------------------------
-[  2,   3)  2459   82.0%   82.0%  ########
-[  3,   4)    45    1.5%   83.5%  
-[  4,   5)   437   14.6%   98.0%  #
-[  5,   6)    59    2.0%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  10)     0    0.0%  100.0%  
-[ 10,  11)     0    0.0%  100.0%  
-[ 11,  12)     0    0.0%  100.0%  
-[ 12,  14)     0    0.0%  100.0%  
-[ 14,  16)     0    0.0%  100.0%  
-[ 16,  18)     0    0.0%  100.0%  
-[ 18,  20)     0    0.0%  100.0%  
-[ 20,  22)     0    0.0%  100.0%  
-[ 22,  24)     0    0.0%  100.0%  
-[ 24, inf)     0    0.0%  100.0%  
-Benchmark___10B-2	    3000	   2372671 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 5  Avg: 1.93
-------------------------------------------------------------
-[  1,   2)   866   28.9%   28.9%  ###
-[  2,   3)  1691   56.4%   85.2%  ######
-[  3,   4)   233    7.8%   93.0%  #
-[  4,   5)   201    6.7%   99.7%  #
-[  5,   6)     9    0.3%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  17)     0    0.0%  100.0%  
-[ 17,  20)     0    0.0%  100.0%  
-[ 20,  23)     0    0.0%  100.0%  
-[ 23,  26)     0    0.0%  100.0%  
-[ 26,  29)     0    0.0%  100.0%  
-[ 29, inf)     0    0.0%  100.0%  
-Benchmark__100B	    3000	   2690733 ns/op	   0.07 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 7  Avg: 2.48
-------------------------------------------------------------
-[  2,   3)  2544   84.8%   84.8%  ########
-[  3,   4)    82    2.7%   87.5%  
-[  4,   5)     0    0.0%   87.5%  
-[  5,   6)   146    4.9%   92.4%  
-[  6,   7)   226    7.5%   99.9%  #
-[  7,   8)     2    0.1%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  17)     0    0.0%  100.0%  
-[ 17,  20)     0    0.0%  100.0%  
-[ 20,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  31)     0    0.0%  100.0%  
-[ 31,  35)     0    0.0%  100.0%  
-[ 35, inf)     0    0.0%  100.0%  
-Benchmark__100B-2	    3000	   2419120 ns/op	   0.08 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 6  Avg: 2.05
-------------------------------------------------------------
-[  1,   2)   647   21.6%   21.6%  ##
-[  2,   3)  2027   67.6%   89.1%  #######
-[  3,   4)     1    0.0%   89.2%  
-[  4,   5)   184    6.1%   95.3%  #
-[  5,   6)   128    4.3%   99.6%  
-[  6,   7)    13    0.4%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,  10)     0    0.0%  100.0%  
-[ 10,  12)     0    0.0%  100.0%  
-[ 12,  14)     0    0.0%  100.0%  
-[ 14,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  22)     0    0.0%  100.0%  
-[ 22,  26)     0    0.0%  100.0%  
-[ 26,  30)     0    0.0%  100.0%  
-[ 30,  34)     0    0.0%  100.0%  
-[ 34, inf)     0    0.0%  100.0%  
-Benchmark___1KB	    3000	   2498211 ns/op	   0.80 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 10  Avg: 1.76
-------------------------------------------------------------
-[  1,   2)  2191   73.0%   73.0%  #######
-[  2,   3)   449   15.0%   88.0%  #
-[  3,   4)    75    2.5%   90.5%  
-[  4,   5)     3    0.1%   90.6%  
-[  5,   6)     6    0.2%   90.8%  
-[  6,   8)   240    8.0%   98.8%  #
-[  8,  10)    35    1.2%  100.0%  
-[ 10,  12)     1    0.0%  100.0%  
-[ 12,  15)     0    0.0%  100.0%  
-[ 15,  18)     0    0.0%  100.0%  
-[ 18,  22)     0    0.0%  100.0%  
-[ 22,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  45)     0    0.0%  100.0%  
-[ 45,  54)     0    0.0%  100.0%  
-[ 54, inf)     0    0.0%  100.0%  
-Benchmark___1KB-2	    3000	   2244818 ns/op	   0.89 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 7  Avg: 1.62
-------------------------------------------------------------
-[  1,   2)  1949   65.0%   65.0%  ######
-[  2,   3)   795   26.5%   91.5%  ###
-[  3,   4)     0    0.0%   91.5%  
-[  4,   5)    63    2.1%   93.6%  
-[  5,   6)   112    3.7%   97.3%  
-[  6,   7)    72    2.4%   99.7%  
-[  7,   9)     9    0.3%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  18)     0    0.0%  100.0%  
-[ 18,  21)     0    0.0%  100.0%  
-[ 21,  25)     0    0.0%  100.0%  
-[ 25,  29)     0    0.0%  100.0%  
-[ 29,  34)     0    0.0%  100.0%  
-[ 34,  40)     0    0.0%  100.0%  
-[ 40, inf)     0    0.0%  100.0%  
-Benchmark__10KB	    3000	   2740536 ns/op	   7.30 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 10  Avg: 2.62
-------------------------------------------------------------
-[  2,   3)  2652   88.4%   88.4%  #########
-[  3,   4)    72    2.4%   90.8%  
-[  4,   5)     0    0.0%   90.8%  
-[  5,   6)     0    0.0%   90.8%  
-[  6,   7)     0    0.0%   90.8%  
-[  7,   9)    93    3.1%   93.9%  
-[  9,  11)   183    6.1%  100.0%  #
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  44)     0    0.0%  100.0%  
-[ 44,  52)     0    0.0%  100.0%  
-[ 52, inf)     0    0.0%  100.0%  
-Benchmark__10KB-2	    3000	   2394824 ns/op	   8.35 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 8  Avg: 1.84
-------------------------------------------------------------
-[  1,   2)  1531   51.0%   51.0%  #####
-[  2,   3)  1214   40.5%   91.5%  ####
-[  3,   4)     0    0.0%   91.5%  
-[  4,   5)     0    0.0%   91.5%  
-[  5,   6)    83    2.8%   94.3%  
-[  6,   7)    69    2.3%   96.6%  
-[  7,   9)   103    3.4%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  44)     0    0.0%  100.0%  
-[ 44, inf)     0    0.0%  100.0%  
-Benchmark_100KB	    2000	   5581491 ns/op	  35.83 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 3  Max: 15  Avg: 4.93
-------------------------------------------------------------
-[  3,   4)  1253   62.7%   62.7%  ######
-[  4,   5)   259   13.0%   75.6%  #
-[  5,   6)   124    6.2%   81.8%  #
-[  6,   7)     1    0.1%   81.9%  
-[  7,   8)     0    0.0%   81.9%  
-[  8,  10)     0    0.0%   81.9%  
-[ 10,  12)    84    4.2%   86.1%  
-[ 12,  15)   274   13.7%   99.8%  #
-[ 15,  18)     5    0.2%  100.0%  
-[ 18,  22)     0    0.0%  100.0%  
-[ 22,  27)     0    0.0%  100.0%  
-[ 27,  33)     0    0.0%  100.0%  
-[ 33,  40)     0    0.0%  100.0%  
-[ 40,  48)     0    0.0%  100.0%  
-[ 48,  58)     0    0.0%  100.0%  
-[ 58,  69)     0    0.0%  100.0%  
-[ 69, inf)     0    0.0%  100.0%  
-Benchmark_100KB-2	    2000	   4127286 ns/op	  48.46 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 10  Avg: 3.78
-------------------------------------------------------------
-[  2,   3)   373   18.7%   18.7%  ##
-[  3,   4)  1286   64.3%   83.0%  ######
-[  4,   5)     0    0.0%   83.0%  
-[  5,   6)     0    0.0%   83.0%  
-[  6,   7)     0    0.0%   83.0%  
-[  7,   9)   116    5.8%   88.8%  #
-[  9,  11)   225   11.2%  100.0%  #
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  44)     0    0.0%  100.0%  
-[ 44,  52)     0    0.0%  100.0%  
-[ 52, inf)     0    0.0%  100.0%  
-
-================================================================================
-Echo streaming RPC
-================================================================================
-Benchmark____1_chunk_____1B	    3000	   2744128 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 4  Avg: 2.31
-------------------------------------------------------------
-[  2,   3)  2072   69.1%   69.1%  #######
-[  3,   4)   921   30.7%   99.8%  ###
-[  4,   5)     7    0.2%  100.0%  
-[  5,   6)     0    0.0%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  10)     0    0.0%  100.0%  
-[ 10,  11)     0    0.0%  100.0%  
-[ 11,  12)     0    0.0%  100.0%  
-[ 12,  13)     0    0.0%  100.0%  
-[ 13,  14)     0    0.0%  100.0%  
-[ 14,  15)     0    0.0%  100.0%  
-[ 15,  16)     0    0.0%  100.0%  
-[ 16,  17)     0    0.0%  100.0%  
-[ 17,  18)     0    0.0%  100.0%  
-[ 18, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk_____1B-2	    3000	   2347418 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 4  Avg: 2.18
-------------------------------------------------------------
-[  1,   2)    46    1.5%    1.5%  
-[  2,   3)  2381   79.4%   80.9%  ########
-[  3,   4)   567   18.9%   99.8%  ##
-[  4,   5)     6    0.2%  100.0%  
-[  5,   6)     0    0.0%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  10)     0    0.0%  100.0%  
-[ 10,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  17)     0    0.0%  100.0%  
-[ 17,  19)     0    0.0%  100.0%  
-[ 19,  21)     0    0.0%  100.0%  
-[ 21,  23)     0    0.0%  100.0%  
-[ 23, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk____10B	    3000	   2857309 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 5  Avg: 2.45
-------------------------------------------------------------
-[  2,   3)  2387   79.6%   79.6%  ########
-[  3,   4)    88    2.9%   82.5%  
-[  4,   5)   303   10.1%   92.6%  #
-[  5,   6)   222    7.4%  100.0%  #
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  10)     0    0.0%  100.0%  
-[ 10,  11)     0    0.0%  100.0%  
-[ 11,  12)     0    0.0%  100.0%  
-[ 12,  14)     0    0.0%  100.0%  
-[ 14,  16)     0    0.0%  100.0%  
-[ 16,  18)     0    0.0%  100.0%  
-[ 18,  20)     0    0.0%  100.0%  
-[ 20,  22)     0    0.0%  100.0%  
-[ 22,  24)     0    0.0%  100.0%  
-[ 24, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk____10B-2	    3000	   2363346 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 5  Avg: 2.18
-------------------------------------------------------------
-[  1,   2)    32    1.1%    1.1%  
-[  2,   3)  2535   84.5%   85.6%  ########
-[  3,   4)   293    9.8%   95.3%  #
-[  4,   5)   139    4.6%  100.0%  
-[  5,   6)     1    0.0%  100.0%  
-[  6,   7)     0    0.0%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  17)     0    0.0%  100.0%  
-[ 17,  20)     0    0.0%  100.0%  
-[ 20,  23)     0    0.0%  100.0%  
-[ 23,  26)     0    0.0%  100.0%  
-[ 26,  29)     0    0.0%  100.0%  
-[ 29, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk___100B	    3000	   2922993 ns/op	   0.07 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 7  Avg: 2.50
-------------------------------------------------------------
-[  2,   3)  2527   84.2%   84.2%  ########
-[  3,   4)   106    3.5%   87.8%  
-[  4,   5)     0    0.0%   87.8%  
-[  5,   6)    99    3.3%   91.1%  
-[  6,   7)   255    8.5%   99.6%  #
-[  7,   8)    13    0.4%  100.0%  
-[  8,   9)     0    0.0%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  17)     0    0.0%  100.0%  
-[ 17,  20)     0    0.0%  100.0%  
-[ 20,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  31)     0    0.0%  100.0%  
-[ 31,  35)     0    0.0%  100.0%  
-[ 35, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk___100B-2	    3000	   2558699 ns/op	   0.08 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 6  Avg: 2.28
-------------------------------------------------------------
-[  1,   2)     5    0.2%    0.2%  
-[  2,   3)  2673   89.1%   89.3%  #########
-[  3,   4)     2    0.1%   89.3%  
-[  4,   5)   177    5.9%   95.2%  #
-[  5,   6)    96    3.2%   98.4%  
-[  6,   7)    47    1.6%  100.0%  
-[  7,   8)     0    0.0%  100.0%  
-[  8,  10)     0    0.0%  100.0%  
-[ 10,  12)     0    0.0%  100.0%  
-[ 12,  14)     0    0.0%  100.0%  
-[ 14,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  22)     0    0.0%  100.0%  
-[ 22,  26)     0    0.0%  100.0%  
-[ 26,  30)     0    0.0%  100.0%  
-[ 30,  34)     0    0.0%  100.0%  
-[ 34, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk____1KB	    3000	   2646432 ns/op	   0.76 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 10  Avg: 2.49
-------------------------------------------------------------
-[  2,   3)  2647   88.2%   88.2%  #########
-[  3,   4)    71    2.4%   90.6%  
-[  4,   5)     4    0.1%   90.7%  
-[  5,   6)     0    0.0%   90.7%  
-[  6,   7)    67    2.2%   93.0%  
-[  7,   9)   209    7.0%   99.9%  #
-[  9,  11)     2    0.1%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  44)     0    0.0%  100.0%  
-[ 44,  52)     0    0.0%  100.0%  
-[ 52, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk____1KB-2	    3000	   2400649 ns/op	   0.83 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 7  Avg: 2.01
-------------------------------------------------------------
-[  1,   2)   864   28.8%   28.8%  ###
-[  2,   3)  1881   62.7%   91.5%  ######
-[  3,   4)     2    0.1%   91.6%  
-[  4,   5)    10    0.3%   91.9%  
-[  5,   6)   127    4.2%   96.1%  
-[  6,   7)    94    3.1%   99.3%  
-[  7,   9)    22    0.7%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  15)     0    0.0%  100.0%  
-[ 15,  18)     0    0.0%  100.0%  
-[ 18,  21)     0    0.0%  100.0%  
-[ 21,  25)     0    0.0%  100.0%  
-[ 25,  29)     0    0.0%  100.0%  
-[ 29,  34)     0    0.0%  100.0%  
-[ 34,  40)     0    0.0%  100.0%  
-[ 40, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk___10KB	    3000	   2954627 ns/op	   6.77 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 2  Max: 10  Avg: 2.65
-------------------------------------------------------------
-[  2,   3)  2621   87.4%   87.4%  #########
-[  3,   4)    93    3.1%   90.5%  
-[  4,   5)    13    0.4%   90.9%  
-[  5,   6)     0    0.0%   90.9%  
-[  6,   7)     0    0.0%   90.9%  
-[  7,   9)    99    3.3%   94.2%  
-[  9,  11)   174    5.8%  100.0%  #
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  44)     0    0.0%  100.0%  
-[ 44,  52)     0    0.0%  100.0%  
-[ 52, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk___10KB-2	    3000	   2546084 ns/op	   7.86 MB/s
-Histogram (unit: ms)
-Count: 3000  Min: 1  Max: 8  Avg: 2.25
-------------------------------------------------------------
-[  1,   2)   414   13.8%   13.8%  #
-[  2,   3)  2335   77.8%   91.6%  ########
-[  3,   4)     0    0.0%   91.6%  
-[  4,   5)     0    0.0%   91.6%  
-[  5,   6)    37    1.2%   92.9%  
-[  6,   7)    88    2.9%   95.8%  
-[  7,   9)   126    4.2%  100.0%  
-[  9,  11)     0    0.0%  100.0%  
-[ 11,  13)     0    0.0%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  27)     0    0.0%  100.0%  
-[ 27,  32)     0    0.0%  100.0%  
-[ 32,  38)     0    0.0%  100.0%  
-[ 38,  44)     0    0.0%  100.0%  
-[ 44, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk__100KB	    2000	   5517042 ns/op	  36.25 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 3  Max: 15  Avg: 4.82
-------------------------------------------------------------
-[  3,   4)  1247   62.4%   62.4%  ######
-[  4,   5)   256   12.8%   75.2%  #
-[  5,   6)   146    7.3%   82.5%  #
-[  6,   7)     0    0.0%   82.5%  
-[  7,   8)     0    0.0%   82.5%  
-[  8,  10)     0    0.0%   82.5%  
-[ 10,  12)   132    6.6%   89.1%  #
-[ 12,  15)   217   10.9%   99.9%  #
-[ 15,  18)     2    0.1%  100.0%  
-[ 18,  22)     0    0.0%  100.0%  
-[ 22,  27)     0    0.0%  100.0%  
-[ 27,  33)     0    0.0%  100.0%  
-[ 33,  40)     0    0.0%  100.0%  
-[ 40,  48)     0    0.0%  100.0%  
-[ 48,  58)     0    0.0%  100.0%  
-[ 58,  69)     0    0.0%  100.0%  
-[ 69, inf)     0    0.0%  100.0%  
-Benchmark____1_chunk__100KB-2	    2000	   4157872 ns/op	  48.10 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 11  Avg: 3.83
-------------------------------------------------------------
-[  2,   3)   159    8.0%    8.0%  #
-[  3,   4)  1495   74.8%   82.7%  #######
-[  4,   5)    11    0.6%   83.2%  
-[  5,   6)     0    0.0%   83.2%  
-[  6,   7)     0    0.0%   83.2%  
-[  7,   9)   167    8.3%   91.6%  #
-[  9,  11)   166    8.3%   99.9%  #
-[ 11,  13)     2    0.1%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  28)     0    0.0%  100.0%  
-[ 28,  33)     0    0.0%  100.0%  
-[ 33,  39)     0    0.0%  100.0%  
-[ 39,  46)     0    0.0%  100.0%  
-[ 46,  55)     0    0.0%  100.0%  
-[ 55, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks____1B	    2000	   4177247 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 17  Avg: 3.75
-------------------------------------------------------------
-[  2,   3)    49    2.5%    2.5%  
-[  3,   4)  1771   88.6%   91.0%  #########
-[  4,   5)     0    0.0%   91.0%  
-[  5,   6)     2    0.1%   91.1%  
-[  6,   8)    42    2.1%   93.2%  
-[  8,  10)     0    0.0%   93.2%  
-[ 10,  12)    33    1.7%   94.9%  
-[ 12,  15)    73    3.7%   98.5%  
-[ 15,  19)    30    1.5%  100.0%  
-[ 19,  24)     0    0.0%  100.0%  
-[ 24,  30)     0    0.0%  100.0%  
-[ 30,  37)     0    0.0%  100.0%  
-[ 37,  45)     0    0.0%  100.0%  
-[ 45,  55)     0    0.0%  100.0%  
-[ 55,  67)     0    0.0%  100.0%  
-[ 67,  81)     0    0.0%  100.0%  
-[ 81, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks____1B-2	    2000	   3432532 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 12  Avg: 2.82
-------------------------------------------------------------
-[  2,   3)  1276   63.8%   63.8%  ######
-[  3,   4)   541   27.1%   90.9%  ###
-[  4,   5)    45    2.2%   93.1%  
-[  5,   6)     0    0.0%   93.1%  
-[  6,   7)     0    0.0%   93.1%  
-[  7,   9)    41    2.1%   95.2%  
-[  9,  11)    68    3.4%   98.6%  
-[ 11,  13)    29    1.5%  100.0%  
-[ 13,  16)     0    0.0%  100.0%  
-[ 16,  19)     0    0.0%  100.0%  
-[ 19,  23)     0    0.0%  100.0%  
-[ 23,  28)     0    0.0%  100.0%  
-[ 28,  34)     0    0.0%  100.0%  
-[ 34,  41)     0    0.0%  100.0%  
-[ 41,  49)     0    0.0%  100.0%  
-[ 49,  58)     0    0.0%  100.0%  
-[ 58, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks___10B	    2000	   4664935 ns/op	   0.04 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 3  Max: 19  Avg: 3.94
-------------------------------------------------------------
-[  3,   4)  1739   87.0%   87.0%  #########
-[  4,   5)    94    4.7%   91.7%  
-[  5,   6)     0    0.0%   91.7%  
-[  6,   7)     9    0.5%   92.1%  
-[  7,   9)    26    1.3%   93.4%  
-[  9,  11)     0    0.0%   93.4%  
-[ 11,  14)    33    1.7%   95.1%  
-[ 14,  17)    63    3.2%   98.2%  
-[ 17,  21)    36    1.8%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  48)     0    0.0%  100.0%  
-[ 48,  59)     0    0.0%  100.0%  
-[ 59,  72)     0    0.0%  100.0%  
-[ 72,  88)     0    0.0%  100.0%  
-[ 88, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks___10B-2	    2000	   3548029 ns/op	   0.06 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 14  Avg: 3.02
-------------------------------------------------------------
-[  2,   3)   971   48.6%   48.6%  #####
-[  3,   4)   835   41.8%   90.3%  ####
-[  4,   5)    67    3.4%   93.7%  
-[  5,   6)     0    0.0%   93.7%  
-[  6,   7)     0    0.0%   93.7%  
-[  7,   9)    16    0.8%   94.5%  
-[  9,  11)    40    2.0%   96.5%  
-[ 11,  14)    70    3.5%  100.0%  
-[ 14,  17)     1    0.1%  100.0%  
-[ 17,  21)     0    0.0%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  47)     0    0.0%  100.0%  
-[ 47,  57)     0    0.0%  100.0%  
-[ 57,  68)     0    0.0%  100.0%  
-[ 68, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks__100B	    2000	   4845710 ns/op	   0.41 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 3  Max: 20  Avg: 4.09
-------------------------------------------------------------
-[  3,   4)  1559   78.0%   78.0%  ########
-[  4,   5)   272   13.6%   91.6%  #
-[  5,   6)     1    0.1%   91.6%  
-[  6,   7)     0    0.0%   91.6%  
-[  7,   9)    43    2.1%   93.8%  
-[  9,  11)     1    0.1%   93.8%  
-[ 11,  14)     0    0.0%   93.8%  
-[ 14,  17)    44    2.2%   96.0%  
-[ 17,  21)    80    4.0%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  48)     0    0.0%  100.0%  
-[ 48,  59)     0    0.0%  100.0%  
-[ 59,  73)     0    0.0%  100.0%  
-[ 73,  90)     0    0.0%  100.0%  
-[ 90, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks__100B-2	    2000	   3658666 ns/op	   0.55 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 14  Avg: 3.26
-------------------------------------------------------------
-[  2,   3)   567   28.4%   28.4%  ###
-[  3,   4)  1240   62.0%   90.4%  ######
-[  4,   5)    68    3.4%   93.8%  
-[  5,   6)     5    0.2%   94.0%  
-[  6,   7)     0    0.0%   94.0%  
-[  7,   9)     0    0.0%   94.0%  
-[  9,  11)    50    2.5%   96.5%  
-[ 11,  14)    62    3.1%   99.6%  
-[ 14,  17)     8    0.4%  100.0%  
-[ 17,  21)     0    0.0%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  47)     0    0.0%  100.0%  
-[ 47,  57)     0    0.0%  100.0%  
-[ 57,  68)     0    0.0%  100.0%  
-[ 68, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks___1KB	    2000	   4971196 ns/op	   4.02 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 3  Max: 23  Avg: 4.37
-------------------------------------------------------------
-[  3,   4)  1222   61.1%   61.1%  ######
-[  4,   5)   620   31.0%   92.1%  ###
-[  5,   6)     0    0.0%   92.1%  
-[  6,   7)     0    0.0%   92.1%  
-[  7,   9)    31    1.6%   93.7%  
-[  9,  11)     1    0.1%   93.7%  
-[ 11,  14)     0    0.0%   93.7%  
-[ 14,  18)    32    1.6%   95.3%  
-[ 18,  22)    90    4.5%   99.8%  
-[ 22,  28)     4    0.2%  100.0%  
-[ 28,  35)     0    0.0%  100.0%  
-[ 35,  43)     0    0.0%  100.0%  
-[ 43,  53)     0    0.0%  100.0%  
-[ 53,  66)     0    0.0%  100.0%  
-[ 66,  82)     0    0.0%  100.0%  
-[ 82, 101)     0    0.0%  100.0%  
-[101, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks___1KB-2	    2000	   3662827 ns/op	   5.46 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 2  Max: 15  Avg: 3.11
-------------------------------------------------------------
-[  2,   3)  1012   50.6%   50.6%  #####
-[  3,   4)   794   39.7%   90.3%  ####
-[  4,   5)    67    3.4%   93.7%  
-[  5,   6)     4    0.2%   93.9%  
-[  6,   7)     0    0.0%   93.9%  
-[  7,   9)     0    0.0%   93.9%  
-[  9,  11)    25    1.2%   95.1%  
-[ 11,  14)    53    2.7%   97.8%  
-[ 14,  17)    45    2.2%  100.0%  
-[ 17,  21)     0    0.0%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  48)     0    0.0%  100.0%  
-[ 48,  58)     0    0.0%  100.0%  
-[ 58,  70)     0    0.0%  100.0%  
-[ 70, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks__10KB	    1000	   7533684 ns/op	  26.55 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 5  Max: 26  Avg: 7.03
-------------------------------------------------------------
-[  5,   6)   831   83.1%   83.1%  ########
-[  6,   7)     4    0.4%   83.5%  
-[  7,   8)     0    0.0%   83.5%  
-[  8,   9)    29    2.9%   86.4%  
-[  9,  11)    18    1.8%   88.2%  
-[ 11,  13)     0    0.0%   88.2%  
-[ 13,  16)     0    0.0%   88.2%  
-[ 16,  20)    39    3.9%   92.1%  
-[ 20,  25)    78    7.8%   99.9%  #
-[ 25,  31)     1    0.1%  100.0%  
-[ 31,  38)     0    0.0%  100.0%  
-[ 38,  47)     0    0.0%  100.0%  
-[ 47,  58)     0    0.0%  100.0%  
-[ 58,  71)     0    0.0%  100.0%  
-[ 71,  88)     0    0.0%  100.0%  
-[ 88, 108)     0    0.0%  100.0%  
-[108, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks__10KB-2	    2000	   4922363 ns/op	  40.63 MB/s
-Histogram (unit: ms)
-Count: 2000  Min: 3  Max: 18  Avg: 4.32
-------------------------------------------------------------
-[  3,   4)  1573   78.7%   78.7%  ########
-[  4,   5)   146    7.3%   86.0%  #
-[  5,   6)    53    2.7%   88.6%  
-[  6,   7)     0    0.0%   88.6%  
-[  7,   9)     0    0.0%   88.6%  
-[  9,  11)     3    0.2%   88.8%  
-[ 11,  13)    79    4.0%   92.7%  
-[ 13,  16)   107    5.4%   98.1%  #
-[ 16,  20)    39    2.0%  100.0%  
-[ 20,  25)     0    0.0%  100.0%  
-[ 25,  31)     0    0.0%  100.0%  
-[ 31,  38)     0    0.0%  100.0%  
-[ 38,  46)     0    0.0%  100.0%  
-[ 46,  56)     0    0.0%  100.0%  
-[ 56,  68)     0    0.0%  100.0%  
-[ 68,  82)     0    0.0%  100.0%  
-[ 82, inf)     0    0.0%  100.0%  
-Benchmark___10_chunks_100KB	     200	  31539312 ns/op	  63.41 MB/s
-Histogram (unit: ms)
-Count: 200  Min: 22  Max: 40  Avg: 30.91
-------------------------------------------------------------
-[ 22,  23)    1    0.5%    0.5%  
-[ 23,  24)    1    0.5%    1.0%  
-[ 24,  25)   69   34.5%   35.5%  ###
-[ 25,  26)   22   11.0%   46.5%  #
-[ 26,  28)    7    3.5%   50.0%  
-[ 28,  30)    0    0.0%   50.0%  
-[ 30,  33)    0    0.0%   50.0%  
-[ 33,  36)    0    0.0%   50.0%  
-[ 36,  40)   95   47.5%   97.5%  #####
-[ 40,  45)    5    2.5%  100.0%  
-[ 45,  51)    0    0.0%  100.0%  
-[ 51,  59)    0    0.0%  100.0%  
-[ 59,  69)    0    0.0%  100.0%  
-[ 69,  81)    0    0.0%  100.0%  
-[ 81,  95)    0    0.0%  100.0%  
-[ 95, 112)    0    0.0%  100.0%  
-[112, inf)    0    0.0%  100.0%  
-Benchmark___10_chunks_100KB-2	     500	  18574440 ns/op	 107.67 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 12  Max: 27  Avg: 18.10
-------------------------------------------------------------
-[ 12,  13)   79   15.8%   15.8%  ##
-[ 13,  14)  168   33.6%   49.4%  ###
-[ 14,  15)   12    2.4%   51.8%  
-[ 15,  16)    1    0.2%   52.0%  
-[ 16,  18)    0    0.0%   52.0%  
-[ 18,  20)    0    0.0%   52.0%  
-[ 20,  22)   30    6.0%   58.0%  #
-[ 22,  25)   94   18.8%   76.8%  ##
-[ 25,  29)  116   23.2%  100.0%  ##
-[ 29,  34)    0    0.0%  100.0%  
-[ 34,  40)    0    0.0%  100.0%  
-[ 40,  47)    0    0.0%  100.0%  
-[ 47,  55)    0    0.0%  100.0%  
-[ 55,  65)    0    0.0%  100.0%  
-[ 65,  77)    0    0.0%  100.0%  
-[ 77,  91)    0    0.0%  100.0%  
-[ 91, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks____1B	     500	  18036549 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 14  Max: 41  Avg: 17.44
-------------------------------------------------------------
-[ 14,  15)  280   56.0%   56.0%  ######
-[ 15,  16)  106   21.2%   77.2%  ##
-[ 16,  17)   10    2.0%   79.2%  
-[ 17,  18)    1    0.2%   79.4%  
-[ 18,  20)    6    1.2%   80.6%  
-[ 20,  23)   22    4.4%   85.0%  
-[ 23,  26)    0    0.0%   85.0%  
-[ 26,  30)   16    3.2%   88.2%  
-[ 30,  35)   27    5.4%   93.6%  #
-[ 35,  42)   32    6.4%  100.0%  #
-[ 42,  51)    0    0.0%  100.0%  
-[ 51,  62)    0    0.0%  100.0%  
-[ 62,  75)    0    0.0%  100.0%  
-[ 75,  92)    0    0.0%  100.0%  
-[ 92, 113)    0    0.0%  100.0%  
-[113, 140)    0    0.0%  100.0%  
-[140, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks____1B-2	    1000	  12395699 ns/op	   0.02 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 7  Max: 31  Avg: 11.90
-------------------------------------------------------------
-[  7,   8)    26    2.6%    2.6%  
-[  8,   9)    14    1.4%    4.0%  
-[  9,  10)   171   17.1%   21.1%  ##
-[ 10,  11)   528   52.8%   73.9%  #####
-[ 11,  13)    71    7.1%   81.0%  #
-[ 13,  15)    23    2.3%   83.3%  
-[ 15,  18)     8    0.8%   84.1%  
-[ 18,  22)    68    6.8%   90.9%  #
-[ 22,  27)    89    8.9%   99.8%  #
-[ 27,  33)     2    0.2%  100.0%  
-[ 33,  41)     0    0.0%  100.0%  
-[ 41,  51)     0    0.0%  100.0%  
-[ 51,  63)     0    0.0%  100.0%  
-[ 63,  78)     0    0.0%  100.0%  
-[ 78,  97)     0    0.0%  100.0%  
-[ 97, 121)     0    0.0%  100.0%  
-[121, inf)     0    0.0%  100.0%  
-Benchmark__100_chunks___10B	     300	  20669375 ns/op	   0.10 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 17  Max: 39  Avg: 20.31
-------------------------------------------------------------
-[ 17,  18)  228   76.0%   76.0%  ########
-[ 18,  19)    8    2.7%   78.7%  
-[ 19,  20)    2    0.7%   79.3%  
-[ 20,  21)    0    0.0%   79.3%  
-[ 21,  23)    3    1.0%   80.3%  
-[ 23,  25)   12    4.0%   84.3%  
-[ 25,  28)    0    0.0%   84.3%  
-[ 28,  32)    0    0.0%   84.3%  
-[ 32,  37)   15    5.0%   89.3%  #
-[ 37,  43)   32   10.7%  100.0%  #
-[ 43,  50)    0    0.0%  100.0%  
-[ 50,  59)    0    0.0%  100.0%  
-[ 59,  70)    0    0.0%  100.0%  
-[ 70,  84)    0    0.0%  100.0%  
-[ 84, 101)    0    0.0%  100.0%  
-[101, 122)    0    0.0%  100.0%  
-[122, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks___10B-2	     500	  12634978 ns/op	   0.16 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 9  Max: 27  Avg: 12.11
-------------------------------------------------------------
-[  9,  10)   69   13.8%   13.8%  #
-[ 10,  11)  287   57.4%   71.2%  ######
-[ 11,  12)   47    9.4%   80.6%  #
-[ 12,  13)   10    2.0%   82.6%  
-[ 13,  15)    8    1.6%   84.2%  
-[ 15,  17)    0    0.0%   84.2%  
-[ 17,  20)    5    1.0%   85.2%  
-[ 20,  23)   28    5.6%   90.8%  #
-[ 23,  27)   43    8.6%   99.4%  #
-[ 27,  32)    3    0.6%  100.0%  
-[ 32,  38)    0    0.0%  100.0%  
-[ 38,  46)    0    0.0%  100.0%  
-[ 46,  56)    0    0.0%  100.0%  
-[ 56,  68)    0    0.0%  100.0%  
-[ 68,  82)    0    0.0%  100.0%  
-[ 82,  99)    0    0.0%  100.0%  
-[ 99, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks__100B	     300	  23164692 ns/op	   0.86 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 19  Max: 42  Avg: 22.72
-------------------------------------------------------------
-[ 19,  20)  209   69.7%   69.7%  #######
-[ 20,  21)   17    5.7%   75.3%  #
-[ 21,  22)    6    2.0%   77.3%  
-[ 22,  23)    1    0.3%   77.7%  
-[ 23,  25)    1    0.3%   78.0%  
-[ 25,  27)   17    5.7%   83.7%  #
-[ 27,  30)    0    0.0%   83.7%  
-[ 30,  34)    0    0.0%   83.7%  
-[ 34,  39)   19    6.3%   90.0%  #
-[ 39,  45)   30   10.0%  100.0%  #
-[ 45,  53)    0    0.0%  100.0%  
-[ 53,  62)    0    0.0%  100.0%  
-[ 62,  74)    0    0.0%  100.0%  
-[ 74,  89)    0    0.0%  100.0%  
-[ 89, 107)    0    0.0%  100.0%  
-[107, 129)    0    0.0%  100.0%  
-[129, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks__100B-2	     500	  13821225 ns/op	   1.45 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 10  Max: 29  Avg: 13.29
-------------------------------------------------------------
-[ 10,  11)   47    9.4%    9.4%  #
-[ 11,  12)  307   61.4%   70.8%  ######
-[ 12,  13)   46    9.2%   80.0%  #
-[ 13,  14)    9    1.8%   81.8%  
-[ 14,  16)    9    1.8%   83.6%  
-[ 16,  18)    0    0.0%   83.6%  
-[ 18,  21)    5    1.0%   84.6%  
-[ 21,  24)   25    5.0%   89.6%  #
-[ 24,  28)   49    9.8%   99.4%  #
-[ 28,  33)    3    0.6%  100.0%  
-[ 33,  40)    0    0.0%  100.0%  
-[ 40,  48)    0    0.0%  100.0%  
-[ 48,  58)    0    0.0%  100.0%  
-[ 58,  70)    0    0.0%  100.0%  
-[ 70,  85)    0    0.0%  100.0%  
-[ 85, 103)    0    0.0%  100.0%  
-[103, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks___1KB	     300	  26071439 ns/op	   7.67 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 20  Max: 48  Avg: 25.72
-------------------------------------------------------------
-[ 20,  21)    1    0.3%    0.3%  
-[ 21,  22)  195   65.0%   65.3%  #######
-[ 22,  23)   13    4.3%   69.7%  
-[ 23,  24)    5    1.7%   71.3%  
-[ 24,  26)    0    0.0%   71.3%  
-[ 26,  29)   23    7.7%   79.0%  #
-[ 29,  32)    0    0.0%   79.0%  
-[ 32,  36)    0    0.0%   79.0%  
-[ 36,  41)   23    7.7%   86.7%  #
-[ 41,  48)   39   13.0%   99.7%  #
-[ 48,  57)    1    0.3%  100.0%  
-[ 57,  68)    0    0.0%  100.0%  
-[ 68,  82)    0    0.0%  100.0%  
-[ 82,  99)    0    0.0%  100.0%  
-[ 99, 121)    0    0.0%  100.0%  
-[121, 148)    0    0.0%  100.0%  
-[148, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks___1KB-2	     500	  15738134 ns/op	  12.71 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 11  Max: 30  Avg: 15.24
-------------------------------------------------------------
-[ 11,  12)   19    3.8%    3.8%  
-[ 12,  13)  253   50.6%   54.4%  #####
-[ 13,  14)   97   19.4%   73.8%  ##
-[ 14,  15)   11    2.2%   76.0%  
-[ 15,  17)   15    3.0%   79.0%  
-[ 17,  19)    0    0.0%   79.0%  
-[ 19,  22)    3    0.6%   79.6%  
-[ 22,  25)   28    5.6%   85.2%  #
-[ 25,  29)   61   12.2%   97.4%  #
-[ 29,  34)   13    2.6%  100.0%  
-[ 34,  41)    0    0.0%  100.0%  
-[ 41,  49)    0    0.0%  100.0%  
-[ 49,  59)    0    0.0%  100.0%  
-[ 59,  71)    0    0.0%  100.0%  
-[ 71,  86)    0    0.0%  100.0%  
-[ 86, 104)    0    0.0%  100.0%  
-[104, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks__10KB	     100	  50248311 ns/op	  39.80 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 37  Max: 60  Avg: 49.72
-------------------------------------------------------------
-[ 37,  38)    4    4.0%    4.0%  
-[ 38,  39)    7    7.0%   11.0%  #
-[ 39,  40)    6    6.0%   17.0%  #
-[ 40,  41)    5    5.0%   22.0%  #
-[ 41,  43)   18   18.0%   40.0%  ##
-[ 43,  45)    0    0.0%   40.0%  
-[ 45,  48)    0    0.0%   40.0%  
-[ 48,  52)    0    0.0%   40.0%  
-[ 52,  57)   24   24.0%   64.0%  ##
-[ 57,  63)   36   36.0%  100.0%  ####
-[ 63,  71)    0    0.0%  100.0%  
-[ 71,  80)    0    0.0%  100.0%  
-[ 80,  92)    0    0.0%  100.0%  
-[ 92, 107)    0    0.0%  100.0%  
-[107, 125)    0    0.0%  100.0%  
-[125, 147)    0    0.0%  100.0%  
-[147, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks__10KB-2	     300	  28614761 ns/op	  69.89 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 19  Max: 38  Avg: 28.11
-------------------------------------------------------------
-[ 19,  20)    7    2.3%    2.3%  
-[ 20,  21)   55   18.3%   20.7%  ##
-[ 21,  22)   43   14.3%   35.0%  #
-[ 22,  23)    9    3.0%   38.0%  
-[ 23,  25)    3    1.0%   39.0%  
-[ 25,  27)    0    0.0%   39.0%  
-[ 27,  30)    3    1.0%   40.0%  
-[ 30,  33)   84   28.0%   68.0%  ###
-[ 33,  37)   94   31.3%   99.3%  ###
-[ 37,  42)    2    0.7%  100.0%  
-[ 42,  49)    0    0.0%  100.0%  
-[ 49,  57)    0    0.0%  100.0%  
-[ 57,  67)    0    0.0%  100.0%  
-[ 67,  79)    0    0.0%  100.0%  
-[ 79,  94)    0    0.0%  100.0%  
-[ 94, 112)    0    0.0%  100.0%  
-[112, inf)    0    0.0%  100.0%  
-Benchmark__100_chunks_100KB	      30	 272889576 ns/op	  73.29 MB/s
-Histogram (unit: ms)
-Count: 30  Min: 267  Max: 292  Avg: 272.40
-------------------------------------------------------------
-[267, 268)   3   10.0%   10.0%  #
-[268, 269)   8   26.7%   36.7%  ###
-[269, 270)   4   13.3%   50.0%  #
-[270, 271)   4   13.3%   63.3%  #
-[271, 273)   4   13.3%   76.7%  #
-[273, 275)   1    3.3%   80.0%  
-[275, 278)   1    3.3%   83.3%  
-[278, 282)   0    0.0%   83.3%  
-[282, 287)   1    3.3%   86.7%  
-[287, 293)   4   13.3%  100.0%  #
-[293, 301)   0    0.0%  100.0%  
-[301, 311)   0    0.0%  100.0%  
-[311, 324)   0    0.0%  100.0%  
-[324, 340)   0    0.0%  100.0%  
-[340, 360)   0    0.0%  100.0%  
-[360, 384)   0    0.0%  100.0%  
-[384, inf)   0    0.0%  100.0%  
-Benchmark__100_chunks_100KB-2	      50	 149680912 ns/op	 133.62 MB/s
-Histogram (unit: ms)
-Count: 50  Min: 138  Max: 158  Avg: 149.14
-------------------------------------------------------------
-[138, 139)   2    4.0%    4.0%  
-[139, 140)   0    0.0%    4.0%  
-[140, 141)   0    0.0%    4.0%  
-[141, 142)   2    4.0%    8.0%  
-[142, 144)   4    8.0%   16.0%  #
-[144, 146)   4    8.0%   24.0%  #
-[146, 149)   6   12.0%   36.0%  #
-[149, 153)  20   40.0%   76.0%  ####
-[153, 157)  11   22.0%   98.0%  ##
-[157, 163)   1    2.0%  100.0%  
-[163, 170)   0    0.0%  100.0%  
-[170, 178)   0    0.0%  100.0%  
-[178, 188)   0    0.0%  100.0%  
-[188, 201)   0    0.0%  100.0%  
-[201, 217)   0    0.0%  100.0%  
-[217, 236)   0    0.0%  100.0%  
-[236, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks____1B	     100	 111621410 ns/op	   0.02 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 93  Max: 120  Avg: 111.11
-------------------------------------------------------------
-[ 93,  94)    1    1.0%    1.0%  
-[ 94,  95)    0    0.0%    1.0%  
-[ 95,  96)    0    0.0%    1.0%  
-[ 96,  97)    0    0.0%    1.0%  
-[ 97,  99)    0    0.0%    1.0%  
-[ 99, 102)   17   17.0%   18.0%  ##
-[102, 105)   12   12.0%   30.0%  #
-[105, 109)    1    1.0%   31.0%  
-[109, 114)    6    6.0%   37.0%  #
-[114, 121)   63   63.0%  100.0%  ######
-[121, 130)    0    0.0%  100.0%  
-[130, 141)    0    0.0%  100.0%  
-[141, 154)    0    0.0%  100.0%  
-[154, 171)    0    0.0%  100.0%  
-[171, 192)    0    0.0%  100.0%  
-[192, 219)    0    0.0%  100.0%  
-[219, inf)    0    0.0%  100.0%  
-Benchmark___1K_chunks____1B-2	     100	 103311101 ns/op	   0.02 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 62  Max: 168  Avg: 102.82
-------------------------------------------------------------
-[ 62,  63)    1    1.0%    1.0%  
-[ 63,  64)    0    0.0%    1.0%  
-[ 64,  65)    0    0.0%    1.0%  
-[ 65,  67)    0    0.0%    1.0%  
-[ 67,  70)    0    0.0%    1.0%  
-[ 70,  74)    1    1.0%    2.0%  
-[ 74,  80)    2    2.0%    4.0%  
-[ 80,  88)    2    2.0%    6.0%  
-[ 88, 100)   23   23.0%   29.0%  ##
-[100, 116)   61   61.0%   90.0%  ######
-[116, 138)    9    9.0%   99.0%  #
-[138, 168)    0    0.0%   99.0%  
-[168, 209)    1    1.0%  100.0%  
-[209, 265)    0    0.0%  100.0%  
-[265, 342)    0    0.0%  100.0%  
-[342, 447)    0    0.0%  100.0%  
-[447, inf)    0    0.0%  100.0%  
-Benchmark___1K_chunks___10B	      50	 189580683 ns/op	   0.11 MB/s
-Histogram (unit: ms)
-Count: 50  Min: 181  Max: 210  Avg: 189.10
-------------------------------------------------------------
-[181, 182)   2    4.0%    4.0%  
-[182, 183)   0    0.0%    4.0%  
-[183, 184)   1    2.0%    6.0%  
-[184, 185)   1    2.0%    8.0%  
-[185, 187)  16   32.0%   40.0%  ###
-[187, 190)  20   40.0%   80.0%  ####
-[190, 193)   2    4.0%   84.0%  
-[193, 197)   1    2.0%   86.0%  
-[197, 203)   3    6.0%   92.0%  #
-[203, 210)   3    6.0%   98.0%  #
-[210, 219)   1    2.0%  100.0%  
-[219, 230)   0    0.0%  100.0%  
-[230, 244)   0    0.0%  100.0%  
-[244, 262)   0    0.0%  100.0%  
-[262, 285)   0    0.0%  100.0%  
-[285, 313)   0    0.0%  100.0%  
-[313, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks___10B-2	     100	 107068429 ns/op	   0.19 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 98  Max: 124  Avg: 106.53
-------------------------------------------------------------
-[ 98,  99)    1    1.0%    1.0%  
-[ 99, 100)    0    0.0%    1.0%  
-[100, 101)    5    5.0%    6.0%  #
-[101, 102)   12   12.0%   18.0%  #
-[102, 104)   20   20.0%   38.0%  ##
-[104, 106)   18   18.0%   56.0%  ##
-[106, 109)   23   23.0%   79.0%  ##
-[109, 113)    4    4.0%   83.0%  
-[113, 118)    7    7.0%   90.0%  #
-[118, 125)   10   10.0%  100.0%  #
-[125, 133)    0    0.0%  100.0%  
-[133, 143)    0    0.0%  100.0%  
-[143, 156)    0    0.0%  100.0%  
-[156, 172)    0    0.0%  100.0%  
-[172, 192)    0    0.0%  100.0%  
-[192, 217)    0    0.0%  100.0%  
-[217, inf)    0    0.0%  100.0%  
-Benchmark___1K_chunks__100B	      30	 223128293 ns/op	   0.90 MB/s
-Histogram (unit: ms)
-Count: 30  Min: 210  Max: 241  Avg: 222.53
-------------------------------------------------------------
-[210, 211)   1    3.3%    3.3%  
-[211, 212)   0    0.0%    3.3%  
-[212, 213)   0    0.0%    3.3%  
-[213, 214)   0    0.0%    3.3%  
-[214, 216)   2    6.7%   10.0%  #
-[216, 219)   8   26.7%   36.7%  ###
-[219, 222)   8   26.7%   63.3%  ###
-[222, 226)   5   16.7%   80.0%  ##
-[226, 232)   0    0.0%   80.0%  
-[232, 239)   5   16.7%   96.7%  ##
-[239, 248)   1    3.3%  100.0%  
-[248, 260)   0    0.0%  100.0%  
-[260, 275)   0    0.0%  100.0%  
-[275, 294)   0    0.0%  100.0%  
-[294, 318)   0    0.0%  100.0%  
-[318, 348)   0    0.0%  100.0%  
-[348, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks__100B-2	      50	 125690815 ns/op	   1.59 MB/s
-Histogram (unit: ms)
-Count: 50  Min: 117  Max: 142  Avg: 125.22
-------------------------------------------------------------
-[117, 118)   4    8.0%    8.0%  #
-[118, 119)   1    2.0%   10.0%  
-[119, 120)   1    2.0%   12.0%  
-[120, 121)   8   16.0%   28.0%  ##
-[121, 123)   9   18.0%   46.0%  ##
-[123, 125)   9   18.0%   64.0%  ##
-[125, 128)   6   12.0%   76.0%  #
-[128, 132)   2    4.0%   80.0%  
-[132, 137)   5   10.0%   90.0%  #
-[137, 143)   5   10.0%  100.0%  #
-[143, 151)   0    0.0%  100.0%  
-[151, 161)   0    0.0%  100.0%  
-[161, 174)   0    0.0%  100.0%  
-[174, 190)   0    0.0%  100.0%  
-[190, 210)   0    0.0%  100.0%  
-[210, 234)   0    0.0%  100.0%  
-[234, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks___1KB	      30	 251956982 ns/op	   7.94 MB/s
-Histogram (unit: ms)
-Count: 30  Min: 238  Max: 266  Avg: 251.50
-------------------------------------------------------------
-[238, 239)   1    3.3%    3.3%  
-[239, 240)   0    0.0%    3.3%  
-[240, 241)   1    3.3%    6.7%  
-[241, 242)   0    0.0%    6.7%  
-[242, 244)   3   10.0%   16.7%  #
-[244, 247)   7   23.3%   40.0%  ##
-[247, 250)   3   10.0%   50.0%  #
-[250, 254)   3   10.0%   60.0%  #
-[254, 259)   1    3.3%   63.3%  
-[259, 266)  10   33.3%   96.7%  ###
-[266, 275)   1    3.3%  100.0%  
-[275, 286)   0    0.0%  100.0%  
-[286, 300)   0    0.0%  100.0%  
-[300, 317)   0    0.0%  100.0%  
-[317, 339)   0    0.0%  100.0%  
-[339, 366)   0    0.0%  100.0%  
-[366, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks___1KB-2	      50	 144214400 ns/op	  13.87 MB/s
-Histogram (unit: ms)
-Count: 50  Min: 130  Max: 158  Avg: 143.70
-------------------------------------------------------------
-[130, 131)   1    2.0%    2.0%  
-[131, 132)   0    0.0%    2.0%  
-[132, 133)   1    2.0%    4.0%  
-[133, 134)   6   12.0%   16.0%  #
-[134, 136)   6   12.0%   28.0%  #
-[136, 139)   4    8.0%   36.0%  #
-[139, 142)   6   12.0%   48.0%  #
-[142, 146)   1    2.0%   50.0%  
-[146, 151)  13   26.0%   76.0%  ###
-[151, 158)   9   18.0%   94.0%  ##
-[158, 167)   3    6.0%  100.0%  #
-[167, 178)   0    0.0%  100.0%  
-[178, 192)   0    0.0%  100.0%  
-[192, 209)   0    0.0%  100.0%  
-[209, 231)   0    0.0%  100.0%  
-[231, 258)   0    0.0%  100.0%  
-[258, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks__10KB	      20	 474946063 ns/op	  42.11 MB/s
-Histogram (unit: ms)
-Count: 20  Min: 458  Max: 492  Avg: 474.60
-------------------------------------------------------------
-[458, 459)   1    5.0%    5.0%  #
-[459, 460)   0    0.0%    5.0%  
-[460, 461)   1    5.0%   10.0%  #
-[461, 463)   3   15.0%   25.0%  ##
-[463, 465)   1    5.0%   30.0%  #
-[465, 468)   4   20.0%   50.0%  ##
-[468, 472)   0    0.0%   50.0%  
-[472, 477)   0    0.0%   50.0%  
-[477, 483)   1    5.0%   55.0%  #
-[483, 491)   8   40.0%   95.0%  ####
-[491, 501)   1    5.0%  100.0%  #
-[501, 514)   0    0.0%  100.0%  
-[514, 530)   0    0.0%  100.0%  
-[530, 551)   0    0.0%  100.0%  
-[551, 577)   0    0.0%  100.0%  
-[577, 610)   0    0.0%  100.0%  
-[610, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks__10KB-2	      30	 267531367 ns/op	  74.76 MB/s
-Histogram (unit: ms)
-Count: 30  Min: 250  Max: 294  Avg: 267.07
-------------------------------------------------------------
-[250, 251)   1    3.3%    3.3%  
-[251, 252)   1    3.3%    6.7%  
-[252, 253)   0    0.0%    6.7%  
-[253, 255)   0    0.0%    6.7%  
-[255, 257)   2    6.7%   13.3%  #
-[257, 260)   2    6.7%   20.0%  #
-[260, 264)   7   23.3%   43.3%  ##
-[264, 269)   3   10.0%   53.3%  #
-[269, 276)   8   26.7%   80.0%  ###
-[276, 285)   5   16.7%   96.7%  ##
-[285, 297)   1    3.3%  100.0%  
-[297, 313)   0    0.0%  100.0%  
-[313, 333)   0    0.0%  100.0%  
-[333, 359)   0    0.0%  100.0%  
-[359, 393)   0    0.0%  100.0%  
-[393, 437)   0    0.0%  100.0%  
-[437, inf)   0    0.0%  100.0%  
-Benchmark___1K_chunks_100KB	       2	2675372295 ns/op	  74.76 MB/s
-Histogram (unit: s)
-Count: 2  Min: 2  Max: 2  Avg: 2.00
-------------------------------------------------------------
-[  2,   3)  2  100.0%  100.0%  ##########
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3,   3)  0    0.0%  100.0%  
-[  3, inf)  0    0.0%  100.0%  
-Benchmark___1K_chunks_100KB-2	       5	1421481350 ns/op	 140.70 MB/s
-Histogram (unit: s)
-Count: 5  Min: 1  Max: 1  Avg: 1.00
-------------------------------------------------------------
-[  1,   2)  5  100.0%  100.0%  ##########
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2,   2)  0    0.0%  100.0%  
-[  2, inf)  0    0.0%  100.0%  
-
-================================================================================
-Echo streaming RPC (Per chunk)
-================================================================================
-Benchmark__per_chunk____1B	   50000	    163939 ns/op	   0.01 MB/s
-Histogram (unit: s)
-Count: 1  Min: 8  Max: 8  Avg: 8.00
-------------------------------------------------------------
-[  8,   9)  1  100.0%  100.0%  ##########
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk____1B-2	   50000	    118409 ns/op	   0.02 MB/s
-Histogram (unit: s)
-Count: 1  Min: 5  Max: 5  Avg: 5.00
-------------------------------------------------------------
-[  5,   6)  1  100.0%  100.0%  ##########
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6,   6)  0    0.0%  100.0%  
-[  6, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk___10B	   20000	    321908 ns/op	   0.06 MB/s
-Histogram (unit: s)
-Count: 1  Min: 6  Max: 6  Avg: 6.00
-------------------------------------------------------------
-[  6,   7)  1  100.0%  100.0%  ##########
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk___10B-2	   50000	    176818 ns/op	   0.11 MB/s
-Histogram (unit: s)
-Count: 1  Min: 8  Max: 8  Avg: 8.00
-------------------------------------------------------------
-[  8,   9)  1  100.0%  100.0%  ##########
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk__100B	   20000	    411514 ns/op	   0.49 MB/s
-Histogram (unit: s)
-Count: 1  Min: 8  Max: 8  Avg: 8.00
-------------------------------------------------------------
-[  8,   9)  1  100.0%  100.0%  ##########
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk__100B-2	   30000	    231565 ns/op	   0.86 MB/s
-Histogram (unit: s)
-Count: 1  Min: 6  Max: 6  Avg: 6.00
-------------------------------------------------------------
-[  6,   7)  1  100.0%  100.0%  ##########
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk___1KB	   20000	    423999 ns/op	   4.72 MB/s
-Histogram (unit: s)
-Count: 1  Min: 8  Max: 8  Avg: 8.00
-------------------------------------------------------------
-[  8,   9)  1  100.0%  100.0%  ##########
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9,   9)  0    0.0%  100.0%  
-[  9, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk___1KB-2	   30000	    248721 ns/op	   8.04 MB/s
-Histogram (unit: s)
-Count: 1  Min: 7  Max: 7  Avg: 7.00
-------------------------------------------------------------
-[  7,   8)  1  100.0%  100.0%  ##########
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk__10KB	   10000	    631536 ns/op	  31.67 MB/s
-Histogram (unit: s)
-Count: 1  Min: 6  Max: 6  Avg: 6.00
-------------------------------------------------------------
-[  6,   7)  1  100.0%  100.0%  ##########
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk__10KB-2	   20000	    346868 ns/op	  57.66 MB/s
-Histogram (unit: s)
-Count: 1  Min: 6  Max: 6  Avg: 6.00
-------------------------------------------------------------
-[  6,   7)  1  100.0%  100.0%  ##########
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk_100KB	    3000	   2613430 ns/op	  76.53 MB/s
-Histogram (unit: s)
-Count: 1  Min: 7  Max: 7  Avg: 7.00
-------------------------------------------------------------
-[  7,   8)  1  100.0%  100.0%  ##########
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8,   8)  0    0.0%  100.0%  
-[  8, inf)  0    0.0%  100.0%  
-Benchmark__per_chunk_100KB-2	    5000	   1369809 ns/op	 146.01 MB/s
-Histogram (unit: s)
-Count: 1  Min: 6  Max: 6  Avg: 6.00
-------------------------------------------------------------
-[  6,   7)  1  100.0%  100.0%  ##########
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7,   7)  0    0.0%  100.0%  
-[  7, inf)  0    0.0%  100.0%  
-
-================================================================================
-Echo RPC when multiplexing with Echo streaming RPC
-================================================================================
-Benchmark___10B_mux__100_chunks___10B	     500	  18817141 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 7  Max: 26  Avg: 18.28
-------------------------------------------------------------
-[  7,   8)   41    8.2%    8.2%  #
-[  8,   9)    5    1.0%    9.2%  
-[  9,  10)    1    0.2%    9.4%  
-[ 10,  11)    0    0.0%    9.4%  
-[ 11,  13)    5    1.0%   10.4%  
-[ 13,  15)    0    0.0%   10.4%  
-[ 15,  18)   52   10.4%   20.8%  #
-[ 18,  21)  329   65.8%   86.6%  #######
-[ 21,  25)   66   13.2%   99.8%  #
-[ 25,  30)    1    0.2%  100.0%  
-[ 30,  37)    0    0.0%  100.0%  
-[ 37,  45)    0    0.0%  100.0%  
-[ 45,  55)    0    0.0%  100.0%  
-[ 55,  67)    0    0.0%  100.0%  
-[ 67,  82)    0    0.0%  100.0%  
-[ 82, 100)    0    0.0%  100.0%  
-[100, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux__100_chunks___10B-2	    1000	   7104449 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 2  Max: 13  Avg: 6.62
-------------------------------------------------------------
-[  2,   3)    89    8.9%    8.9%  #
-[  3,   4)   110   11.0%   19.9%  #
-[  4,   5)   108   10.8%   30.7%  #
-[  5,   6)   112   11.2%   41.9%  #
-[  6,   7)    77    7.7%   49.6%  #
-[  7,   9)   165   16.5%   66.1%  ##
-[  9,  11)   230   23.0%   89.1%  ##
-[ 11,  14)   109   10.9%  100.0%  #
-[ 14,  17)     0    0.0%  100.0%  
-[ 17,  21)     0    0.0%  100.0%  
-[ 21,  25)     0    0.0%  100.0%  
-[ 25,  30)     0    0.0%  100.0%  
-[ 30,  36)     0    0.0%  100.0%  
-[ 36,  43)     0    0.0%  100.0%  
-[ 43,  52)     0    0.0%  100.0%  
-[ 52,  63)     0    0.0%  100.0%  
-[ 63, inf)     0    0.0%  100.0%  
-Benchmark___10B_mux__100_chunks__100B	     300	  21167617 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 6  Max: 26  Avg: 20.68
-------------------------------------------------------------
-[  6,   7)   13    4.3%    4.3%  
-[  7,   8)    7    2.3%    6.7%  
-[  8,   9)    9    3.0%    9.7%  
-[  9,  10)    0    0.0%    9.7%  
-[ 10,  12)    0    0.0%    9.7%  
-[ 12,  14)    0    0.0%    9.7%  
-[ 14,  17)    0    0.0%    9.7%  
-[ 17,  21)   29    9.7%   19.3%  #
-[ 21,  25)  237   79.0%   98.3%  ########
-[ 25,  31)    5    1.7%  100.0%  
-[ 31,  38)    0    0.0%  100.0%  
-[ 38,  46)    0    0.0%  100.0%  
-[ 46,  56)    0    0.0%  100.0%  
-[ 56,  69)    0    0.0%  100.0%  
-[ 69,  85)    0    0.0%  100.0%  
-[ 85, 104)    0    0.0%  100.0%  
-[104, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux__100_chunks__100B-2	    1000	   8372251 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 2  Max: 15  Avg: 7.88
-------------------------------------------------------------
-[  2,   3)    67    6.7%    6.7%  #
-[  3,   4)    62    6.2%   12.9%  #
-[  4,   5)    83    8.3%   21.2%  #
-[  5,   6)    85    8.5%   29.7%  #
-[  6,   7)    92    9.2%   38.9%  #
-[  7,   9)   150   15.0%   53.9%  ##
-[  9,  11)   144   14.4%   68.3%  #
-[ 11,  14)   307   30.7%   99.0%  ###
-[ 14,  17)    10    1.0%  100.0%  
-[ 17,  21)     0    0.0%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  48)     0    0.0%  100.0%  
-[ 48,  58)     0    0.0%  100.0%  
-[ 58,  70)     0    0.0%  100.0%  
-[ 70, inf)     0    0.0%  100.0%  
-Benchmark___10B_mux__100_chunks___1KB	     300	  22817830 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 6  Max: 28  Avg: 22.30
-------------------------------------------------------------
-[  6,   7)   15    5.0%    5.0%  #
-[  7,   8)    4    1.3%    6.3%  
-[  8,   9)    9    3.0%    9.3%  
-[  9,  10)    0    0.0%    9.3%  
-[ 10,  12)    0    0.0%    9.3%  
-[ 12,  14)    0    0.0%    9.3%  
-[ 14,  17)    2    0.7%   10.0%  
-[ 17,  21)   24    8.0%   18.0%  #
-[ 21,  26)  207   69.0%   87.0%  #######
-[ 26,  32)   39   13.0%  100.0%  #
-[ 32,  39)    0    0.0%  100.0%  
-[ 39,  48)    0    0.0%  100.0%  
-[ 48,  59)    0    0.0%  100.0%  
-[ 59,  73)    0    0.0%  100.0%  
-[ 73,  90)    0    0.0%  100.0%  
-[ 90, 111)    0    0.0%  100.0%  
-[111, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux__100_chunks___1KB-2	    1000	   8831943 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 1  Max: 17  Avg: 8.35
-------------------------------------------------------------
-[  1,   2)    12    1.2%    1.2%  
-[  2,   3)   155   15.5%   16.7%  ##
-[  3,   4)    59    5.9%   22.6%  #
-[  4,   5)    48    4.8%   27.4%  
-[  5,   7)   134   13.4%   40.8%  #
-[  7,   9)    91    9.1%   49.9%  #
-[  9,  12)   132   13.2%   63.1%  #
-[ 12,  15)   328   32.8%   95.9%  ###
-[ 15,  19)    41    4.1%  100.0%  
-[ 19,  24)     0    0.0%  100.0%  
-[ 24,  30)     0    0.0%  100.0%  
-[ 30,  37)     0    0.0%  100.0%  
-[ 37,  46)     0    0.0%  100.0%  
-[ 46,  57)     0    0.0%  100.0%  
-[ 57,  70)     0    0.0%  100.0%  
-[ 70,  86)     0    0.0%  100.0%  
-[ 86, inf)     0    0.0%  100.0%  
-Benchmark___10B_mux___1K_chunks___10B	     100	 123136622 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 5  Max: 173  Avg: 122.60
-------------------------------------------------------------
-[  5,   6)    1    1.0%    1.0%  
-[  6,   7)    0    0.0%    1.0%  
-[  7,   8)    0    0.0%    1.0%  
-[  8,  10)    1    1.0%    2.0%  
-[ 10,  13)    0    0.0%    2.0%  
-[ 13,  18)    1    1.0%    3.0%  
-[ 18,  25)    0    0.0%    3.0%  
-[ 25,  35)    1    1.0%    4.0%  
-[ 35,  50)    2    2.0%    6.0%  
-[ 50,  71)   11   11.0%   17.0%  #
-[ 71, 101)   22   22.0%   39.0%  ##
-[101, 143)   14   14.0%   53.0%  #
-[143, 203)   47   47.0%  100.0%  #####
-[203, 287)    0    0.0%  100.0%  
-[287, 406)    0    0.0%  100.0%  
-[406, 574)    0    0.0%  100.0%  
-[574, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux___1K_chunks___10B-2	     300	  22274569 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 2  Max: 96  Avg: 21.75
-------------------------------------------------------------
-[  2,   3)    8    2.7%    2.7%  
-[  3,   4)   23    7.7%   10.3%  #
-[  4,   5)   31   10.3%   20.7%  #
-[  5,   7)   47   15.7%   36.3%  ##
-[  7,  10)   74   24.7%   61.0%  ##
-[ 10,  14)   33   11.0%   72.0%  #
-[ 14,  20)   12    4.0%   76.0%  
-[ 20,  28)    7    2.3%   78.3%  
-[ 28,  39)    1    0.3%   78.7%  
-[ 39,  54)    4    1.3%   80.0%  
-[ 54,  74)   20    6.7%   86.7%  #
-[ 74, 101)   40   13.3%  100.0%  #
-[101, 138)    0    0.0%  100.0%  
-[138, 189)    0    0.0%  100.0%  
-[189, 258)    0    0.0%  100.0%  
-[258, 352)    0    0.0%  100.0%  
-[352, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux___1K_chunks__100B	     100	 143814971 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 14  Max: 204  Avg: 143.32
-------------------------------------------------------------
-[ 14,  15)    1    1.0%    1.0%  
-[ 15,  16)    0    0.0%    1.0%  
-[ 16,  18)    0    0.0%    1.0%  
-[ 18,  20)    0    0.0%    1.0%  
-[ 20,  24)    0    0.0%    1.0%  
-[ 24,  29)    0    0.0%    1.0%  
-[ 29,  37)    0    0.0%    1.0%  
-[ 37,  48)    0    0.0%    1.0%  
-[ 48,  64)   11   11.0%   12.0%  #
-[ 64,  87)   15   15.0%   27.0%  ##
-[ 87, 120)    2    2.0%   29.0%  
-[120, 166)   26   26.0%   55.0%  ###
-[166, 232)   45   45.0%  100.0%  #####
-[232, 326)    0    0.0%  100.0%  
-[326, 459)    0    0.0%  100.0%  
-[459, 649)    0    0.0%  100.0%  
-[649, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux___1K_chunks__100B-2	     200	  34125016 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 200  Min: 2  Max: 114  Avg: 33.62
-------------------------------------------------------------
-[  2,   3)   10    5.0%    5.0%  #
-[  3,   4)    6    3.0%    8.0%  
-[  4,   5)   10    5.0%   13.0%  #
-[  5,   7)   21   10.5%   23.5%  #
-[  7,  10)   26   13.0%   36.5%  #
-[ 10,  14)   34   17.0%   53.5%  ##
-[ 14,  20)   27   13.5%   67.0%  #
-[ 20,  29)    7    3.5%   70.5%  
-[ 29,  41)    1    0.5%   71.0%  
-[ 41,  57)    2    1.0%   72.0%  
-[ 57,  80)    7    3.5%   75.5%  
-[ 80, 111)   45   22.5%   98.0%  ##
-[111, 154)    4    2.0%  100.0%  
-[154, 213)    0    0.0%  100.0%  
-[213, 294)    0    0.0%  100.0%  
-[294, 405)    0    0.0%  100.0%  
-[405, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux___1K_chunks___1KB	     100	 136987808 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 5  Max: 233  Avg: 136.46
-------------------------------------------------------------
-[  5,   6)    1    1.0%    1.0%  
-[  6,   7)    0    0.0%    1.0%  
-[  7,   9)    1    1.0%    2.0%  
-[  9,  11)    1    1.0%    3.0%  
-[ 11,  15)    1    1.0%    4.0%  
-[ 15,  21)    3    3.0%    7.0%  
-[ 21,  29)    0    0.0%    7.0%  
-[ 29,  41)    0    0.0%    7.0%  
-[ 41,  59)    3    3.0%   10.0%  
-[ 59,  84)   11   11.0%   21.0%  #
-[ 84, 121)   24   24.0%   45.0%  ##
-[121, 174)   25   25.0%   70.0%  ###
-[174, 250)   30   30.0%  100.0%  ###
-[250, 360)    0    0.0%  100.0%  
-[360, 518)    0    0.0%  100.0%  
-[518, 746)    0    0.0%  100.0%  
-[746, inf)    0    0.0%  100.0%  
-Benchmark___10B_mux___1K_chunks___1KB-2	     200	  35831221 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 200  Min: 2  Max: 123  Avg: 35.40
-------------------------------------------------------------
-[  2,   3)   21   10.5%   10.5%  #
-[  3,   4)   12    6.0%   16.5%  #
-[  4,   5)    4    2.0%   18.5%  
-[  5,   7)    8    4.0%   22.5%  
-[  7,  10)   18    9.0%   31.5%  #
-[ 10,  14)   21   10.5%   42.0%  #
-[ 14,  20)   21   10.5%   52.5%  #
-[ 20,  29)    7    3.5%   56.0%  
-[ 29,  41)   11    5.5%   61.5%  #
-[ 41,  58)   23   11.5%   73.0%  #
-[ 58,  82)   28   14.0%   87.0%  #
-[ 82, 115)   25   12.5%   99.5%  #
-[115, 161)    1    0.5%  100.0%  
-[161, 224)    0    0.0%  100.0%  
-[224, 311)    0    0.0%  100.0%  
-[311, 432)    0    0.0%  100.0%  
-[432, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux__100_chunks___10B	     500	  20748811 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 500  Min: 6  Max: 27  Avg: 20.33
-------------------------------------------------------------
-[  6,   7)    1    0.2%    0.2%  
-[  7,   8)   16    3.2%    3.4%  
-[  8,   9)    3    0.6%    4.0%  
-[  9,  10)    6    1.2%    5.2%  
-[ 10,  12)    4    0.8%    6.0%  
-[ 12,  14)    0    0.0%    6.0%  
-[ 14,  17)    7    1.4%    7.4%  
-[ 17,  21)  181   36.2%   43.6%  ####
-[ 21,  26)  278   55.6%   99.2%  ######
-[ 26,  32)    4    0.8%  100.0%  
-[ 32,  39)    0    0.0%  100.0%  
-[ 39,  48)    0    0.0%  100.0%  
-[ 48,  59)    0    0.0%  100.0%  
-[ 59,  72)    0    0.0%  100.0%  
-[ 72,  89)    0    0.0%  100.0%  
-[ 89, 109)    0    0.0%  100.0%  
-[109, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux__100_chunks___10B-2	    1000	   7604070 ns/op	   0.03 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 2  Max: 15  Avg: 7.10
-------------------------------------------------------------
-[  2,   3)    49    4.9%    4.9%  
-[  3,   4)    90    9.0%   13.9%  #
-[  4,   5)   124   12.4%   26.3%  #
-[  5,   6)   117   11.7%   38.0%  #
-[  6,   7)   100   10.0%   48.0%  #
-[  7,   9)   185   18.5%   66.5%  ##
-[  9,  11)   169   16.9%   83.4%  ##
-[ 11,  14)   141   14.1%   97.5%  #
-[ 14,  17)    25    2.5%  100.0%  
-[ 17,  21)     0    0.0%  100.0%  
-[ 21,  26)     0    0.0%  100.0%  
-[ 26,  32)     0    0.0%  100.0%  
-[ 32,  39)     0    0.0%  100.0%  
-[ 39,  48)     0    0.0%  100.0%  
-[ 48,  58)     0    0.0%  100.0%  
-[ 58,  70)     0    0.0%  100.0%  
-[ 70, inf)     0    0.0%  100.0%  
-Benchmark__100B_mux__100_chunks__100B	     300	  21922577 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 6  Max: 30  Avg: 21.45
-------------------------------------------------------------
-[  6,   7)   17    5.7%    5.7%  #
-[  7,   8)    2    0.7%    6.3%  
-[  8,   9)    4    1.3%    7.7%  
-[  9,  10)    0    0.0%    7.7%  
-[ 10,  12)    9    3.0%   10.7%  
-[ 12,  14)    2    0.7%   11.3%  
-[ 14,  17)    1    0.3%   11.7%  
-[ 17,  21)   26    8.7%   20.3%  #
-[ 21,  26)  144   48.0%   68.3%  #####
-[ 26,  32)   95   31.7%  100.0%  ###
-[ 32,  40)    0    0.0%  100.0%  
-[ 40,  50)    0    0.0%  100.0%  
-[ 50,  62)    0    0.0%  100.0%  
-[ 62,  77)    0    0.0%  100.0%  
-[ 77,  96)    0    0.0%  100.0%  
-[ 96, 120)    0    0.0%  100.0%  
-[120, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux__100_chunks__100B-2	    1000	   9164254 ns/op	   0.02 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 2  Max: 18  Avg: 8.66
-------------------------------------------------------------
-[  2,   3)    35    3.5%    3.5%  
-[  3,   4)    44    4.4%    7.9%  
-[  4,   5)    78    7.8%   15.7%  #
-[  5,   6)   102   10.2%   25.9%  #
-[  6,   8)   168   16.8%   42.7%  ##
-[  8,  10)   155   15.5%   58.2%  ##
-[ 10,  13)   236   23.6%   81.8%  ##
-[ 13,  16)   137   13.7%   95.5%  #
-[ 16,  20)    45    4.5%  100.0%  
-[ 20,  25)     0    0.0%  100.0%  
-[ 25,  31)     0    0.0%  100.0%  
-[ 31,  38)     0    0.0%  100.0%  
-[ 38,  47)     0    0.0%  100.0%  
-[ 47,  58)     0    0.0%  100.0%  
-[ 58,  71)     0    0.0%  100.0%  
-[ 71,  87)     0    0.0%  100.0%  
-[ 87, inf)     0    0.0%  100.0%  
-Benchmark__100B_mux__100_chunks___1KB	     300	  23892634 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 6  Max: 31  Avg: 23.41
-------------------------------------------------------------
-[  6,   7)   12    4.0%    4.0%  
-[  7,   8)    9    3.0%    7.0%  
-[  8,   9)    5    1.7%    8.7%  
-[  9,  10)    1    0.3%    9.0%  
-[ 10,  12)    1    0.3%    9.3%  
-[ 12,  14)    2    0.7%   10.0%  
-[ 14,  17)    1    0.3%   10.3%  
-[ 17,  21)   10    3.3%   13.7%  
-[ 21,  26)  122   40.7%   54.3%  ####
-[ 26,  32)  137   45.7%  100.0%  #####
-[ 32,  40)    0    0.0%  100.0%  
-[ 40,  50)    0    0.0%  100.0%  
-[ 50,  63)    0    0.0%  100.0%  
-[ 63,  79)    0    0.0%  100.0%  
-[ 79,  99)    0    0.0%  100.0%  
-[ 99, 123)    0    0.0%  100.0%  
-[123, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux__100_chunks___1KB-2	    1000	   9288578 ns/op	   0.02 MB/s
-Histogram (unit: ms)
-Count: 1000  Min: 1  Max: 19  Avg: 8.80
-------------------------------------------------------------
-[  1,   2)     6    0.6%    0.6%  
-[  2,   3)   158   15.8%   16.4%  ##
-[  3,   4)    70    7.0%   23.4%  #
-[  4,   5)    54    5.4%   28.8%  #
-[  5,   7)   110   11.0%   39.8%  #
-[  7,   9)    83    8.3%   48.1%  #
-[  9,  12)   183   18.3%   66.4%  ##
-[ 12,  15)   142   14.2%   80.6%  #
-[ 15,  19)   193   19.3%   99.9%  ##
-[ 19,  24)     1    0.1%  100.0%  
-[ 24,  30)     0    0.0%  100.0%  
-[ 30,  38)     0    0.0%  100.0%  
-[ 38,  48)     0    0.0%  100.0%  
-[ 48,  60)     0    0.0%  100.0%  
-[ 60,  74)     0    0.0%  100.0%  
-[ 74,  91)     0    0.0%  100.0%  
-[ 91, inf)     0    0.0%  100.0%  
-Benchmark__100B_mux___1K_chunks___10B	     100	 120357166 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 4  Max: 186  Avg: 119.88
-------------------------------------------------------------
-[  4,   5)    1    1.0%    1.0%  
-[  5,   6)    0    0.0%    1.0%  
-[  6,   8)    0    0.0%    1.0%  
-[  8,  10)    0    0.0%    1.0%  
-[ 10,  14)    0    0.0%    1.0%  
-[ 14,  19)    1    1.0%    2.0%  
-[ 19,  27)    0    0.0%    2.0%  
-[ 27,  38)    0    0.0%    2.0%  
-[ 38,  54)    3    3.0%    5.0%  
-[ 54,  76)   22   22.0%   27.0%  ##
-[ 76, 108)   16   16.0%   43.0%  ##
-[108, 153)   18   18.0%   61.0%  ##
-[153, 217)   39   39.0%  100.0%  ####
-[217, 307)    0    0.0%  100.0%  
-[307, 435)    0    0.0%  100.0%  
-[435, 616)    0    0.0%  100.0%  
-[616, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux___1K_chunks___10B-2	     300	  23110788 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 300  Min: 2  Max: 97  Avg: 22.60
-------------------------------------------------------------
-[  2,   3)    7    2.3%    2.3%  
-[  3,   4)   26    8.7%   11.0%  #
-[  4,   5)   33   11.0%   22.0%  #
-[  5,   7)   45   15.0%   37.0%  ##
-[  7,  10)   46   15.3%   52.3%  ##
-[ 10,  14)   48   16.0%   68.3%  ##
-[ 14,  20)   19    6.3%   74.7%  #
-[ 20,  28)    8    2.7%   77.3%  
-[ 28,  39)    3    1.0%   78.3%  
-[ 39,  54)    2    0.7%   79.0%  
-[ 54,  74)   32   10.7%   89.7%  #
-[ 74, 102)   31   10.3%  100.0%  #
-[102, 140)    0    0.0%  100.0%  
-[140, 191)    0    0.0%  100.0%  
-[191, 261)    0    0.0%  100.0%  
-[261, 355)    0    0.0%  100.0%  
-[355, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux___1K_chunks__100B	     100	 146211502 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 11  Max: 220  Avg: 145.68
-------------------------------------------------------------
-[ 11,  12)    1    1.0%    1.0%  
-[ 12,  13)    1    1.0%    2.0%  
-[ 13,  15)    0    0.0%    2.0%  
-[ 15,  17)    0    0.0%    2.0%  
-[ 17,  21)    0    0.0%    2.0%  
-[ 21,  26)    0    0.0%    2.0%  
-[ 26,  34)    1    1.0%    3.0%  
-[ 34,  46)    1    1.0%    4.0%  
-[ 46,  63)   10   10.0%   14.0%  #
-[ 63,  87)   12   12.0%   26.0%  #
-[ 87, 122)    9    9.0%   35.0%  #
-[122, 172)   19   19.0%   54.0%  ##
-[172, 243)   46   46.0%  100.0%  #####
-[243, 345)    0    0.0%  100.0%  
-[345, 491)    0    0.0%  100.0%  
-[491, 700)    0    0.0%  100.0%  
-[700, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux___1K_chunks__100B-2	     200	  36485527 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 200  Min: 2  Max: 114  Avg: 36.01
-------------------------------------------------------------
-[  2,   3)   12    6.0%    6.0%  #
-[  3,   4)    7    3.5%    9.5%  
-[  4,   5)    3    1.5%   11.0%  
-[  5,   7)   17    8.5%   19.5%  #
-[  7,  10)   28   14.0%   33.5%  #
-[ 10,  14)   29   14.5%   48.0%  #
-[ 14,  20)   25   12.5%   60.5%  #
-[ 20,  29)   13    6.5%   67.0%  #
-[ 29,  41)    5    2.5%   69.5%  
-[ 41,  57)    0    0.0%   69.5%  
-[ 57,  80)    6    3.0%   72.5%  
-[ 80, 111)   53   26.5%   99.0%  ###
-[111, 154)    2    1.0%  100.0%  
-[154, 213)    0    0.0%  100.0%  
-[213, 294)    0    0.0%  100.0%  
-[294, 405)    0    0.0%  100.0%  
-[405, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux___1K_chunks___1KB	     100	 145242261 ns/op	   0.00 MB/s
-Histogram (unit: ms)
-Count: 100  Min: 7  Max: 235  Avg: 144.71
-------------------------------------------------------------
-[  7,   8)    1    1.0%    1.0%  
-[  8,   9)    2    2.0%    3.0%  
-[  9,  11)    1    1.0%    4.0%  
-[ 11,  13)    1    1.0%    5.0%  
-[ 13,  17)    0    0.0%    5.0%  
-[ 17,  23)    2    2.0%    7.0%  
-[ 23,  31)    1    1.0%    8.0%  
-[ 31,  43)    0    0.0%    8.0%  
-[ 43,  61)    1    1.0%    9.0%  
-[ 61,  86)   10   10.0%   19.0%  #
-[ 86, 123)   24   24.0%   43.0%  ##
-[123, 176)   24   24.0%   67.0%  ##
-[176, 252)   33   33.0%  100.0%  ###
-[252, 362)    0    0.0%  100.0%  
-[362, 520)    0    0.0%  100.0%  
-[520, 748)    0    0.0%  100.0%  
-[748, inf)    0    0.0%  100.0%  
-Benchmark__100B_mux___1K_chunks___1KB-2	     200	  37420006 ns/op	   0.01 MB/s
-Histogram (unit: ms)
-Count: 200  Min: 2  Max: 125  Avg: 36.95
-------------------------------------------------------------
-[  2,   3)   37   18.5%   18.5%  ##
-[  3,   4)    6    3.0%   21.5%  
-[  4,   5)    2    1.0%   22.5%  
-[  5,   7)   16    8.0%   30.5%  #
-[  7,  10)    8    4.0%   34.5%  
-[ 10,  14)   16    8.0%   42.5%  #
-[ 14,  20)   14    7.0%   49.5%  #
-[ 20,  29)   12    6.0%   55.5%  #
-[ 29,  42)   13    6.5%   62.0%  #
-[ 42,  59)   20   10.0%   72.0%  #
-[ 59,  83)   22   11.0%   83.0%  #
-[ 83, 117)   30   15.0%   98.0%  ##
-[117, 163)    4    2.0%  100.0%  
-[163, 227)    0    0.0%  100.0%  
-[227, 316)    0    0.0%  100.0%  
-[316, 438)    0    0.0%  100.0%  
-[438, inf)    0    0.0%  100.0%  
diff --git a/runtimes/google/ipc/benchmarks/bm/main.go b/runtimes/google/ipc/benchmarks/bm/main.go
deleted file mode 100644
index 4a12cc0..0000000
--- a/runtimes/google/ipc/benchmarks/bm/main.go
+++ /dev/null
@@ -1,187 +0,0 @@
-// A simple command-line tool to run IPC benchmarks.
-package main
-
-import (
-	"flag"
-	"fmt"
-	"os"
-	"runtime"
-	"strconv"
-	"strings"
-	"testing"
-
-	"v.io/core/veyron/lib/testutil"
-	"v.io/core/veyron/profiles"
-	"v.io/core/veyron/runtimes/google/ipc/benchmarks"
-
-	"v.io/core/veyron2"
-	"v.io/core/veyron2/rt"
-)
-
-var (
-	vrt     veyron2.Runtime
-	address string
-
-	cpuList []int
-
-	histogram = flag.Bool("histogram", false, "If ture, output histogram of the benchmark results.")
-)
-
-func runBenchmarkEcho() {
-	payloadSizes := []int{1, 10, 100, 1000, 10000, 100000}
-
-	for _, size := range payloadSizes {
-		name := fmt.Sprintf("%sB", formatNum(size))
-		runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
-			benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, size, stats)
-		})
-	}
-}
-
-func runBenchmarkEchoStream() {
-	chunkCnts := []int{1, 10, 100, 1000}
-	payloadSizes := []int{1, 10, 100, 1000, 10000, 100000}
-
-	for _, cnt := range chunkCnts {
-		for _, size := range payloadSizes {
-			name := formatNum(cnt)
-			if cnt == 1 {
-				name += "_chunk_"
-			} else {
-				name += "_chunks"
-			}
-			name += fmt.Sprintf("%sB", formatNum(size))
-			runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
-				benchmarks.CallEchoStream(b, vrt.NewContext(), address, b.N, cnt, size, stats)
-			})
-		}
-	}
-}
-
-func runBenchmarkEchoStreamPerChunk() {
-	payloadSizes := []int{1, 10, 100, 1000, 10000, 100000}
-
-	for _, size := range payloadSizes {
-		name := fmt.Sprintf("__per_chunk%sB", formatNum(size))
-		runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
-			benchmarks.CallEchoStream(b, vrt.NewContext(), address, 1, b.N, size, stats)
-		})
-	}
-}
-
-func runBenchmarkMux() {
-	payloadSizes := []int{10, 100}
-
-	chunkCntsB := []int{100, 1000}
-	payloadSizesB := []int{10, 100, 1000}
-
-	for _, size := range payloadSizes {
-		for _, cntB := range chunkCntsB {
-			for _, sizeB := range payloadSizesB {
-				name := fmt.Sprintf("%sB_mux%s", formatNum(size), formatNum(cntB))
-				if cntB == 1 {
-					name += "_chunk_"
-				} else {
-					name += "_chunks"
-				}
-				name += fmt.Sprintf("%sB", formatNum(sizeB))
-				runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
-					dummyB := testing.B{}
-					_, stop := benchmarks.StartEchoStream(&dummyB, vrt.NewContext(), address, 0, cntB, sizeB, nil)
-
-					b.ResetTimer()
-					benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, size, stats)
-					b.StopTimer()
-
-					stop()
-				})
-			}
-		}
-	}
-}
-
-// runBenchmark runs a single bencmark function 'f'.
-func runBenchmark(name string, f func(*testing.B, *testutil.BenchStats)) {
-	for _, cpu := range cpuList {
-		runtime.GOMAXPROCS(cpu)
-
-		benchName := "Benchmark" + name
-		if cpu != 1 {
-			benchName += fmt.Sprintf("-%d", cpu)
-		}
-
-		var stats *testutil.BenchStats
-		if *histogram {
-			stats = testutil.NewBenchStats(16)
-		}
-
-		r := testing.Benchmark(func(b *testing.B) {
-			f(b, stats)
-		})
-
-		fmt.Printf("%s\t%s\n", benchName, r)
-		if stats != nil {
-			stats.Print(os.Stdout)
-		}
-	}
-}
-
-// formatNum formats the given number n with an optional metric prefix
-// and padding with underscores if necessary.
-func formatNum(n int) string {
-	value := float32(n)
-	var prefix string
-	for _, p := range []string{"", "K", "M", "G", "T"} {
-		if value < 1000 {
-			prefix = p
-			break
-		}
-		value /= 1000
-	}
-
-	return strings.Replace(fmt.Sprintf("%*.0f%s", 5-len(prefix), value, prefix), " ", "_", -1)
-}
-
-// parseCpuList looks up the existing '-test.cpu' flag value and parses it into
-// the list of cpus.
-func parseCpuList() {
-	for _, v := range strings.Split(flag.Lookup("test.cpu").Value.String(), ",") {
-		v = strings.TrimSpace(v)
-		if v == "" {
-			continue
-		}
-		cpu, err := strconv.Atoi(v)
-		if err != nil || cpu <= 0 {
-			fmt.Fprintf(os.Stderr, "invalid -test.cpu %q\n", v)
-			os.Exit(1)
-		}
-		cpuList = append(cpuList, cpu)
-	}
-	if cpuList == nil {
-		cpuList = append(cpuList, runtime.GOMAXPROCS(-1))
-	}
-}
-
-func main() {
-	flag.Parse()
-	parseCpuList()
-
-	var err error
-	vrt, err = rt.New()
-	if err != nil {
-		panic(err)
-	}
-	defer vrt.Cleanup()
-
-	var stop func()
-	address, stop = benchmarks.StartServer(vrt, profiles.LocalListenSpec)
-
-	benchmarks.CallEcho(&testing.B{}, vrt.NewContext(), address, 1, 0, nil) // Create VC.
-
-	runBenchmarkEcho()
-	runBenchmarkEchoStream()
-	runBenchmarkEchoStreamPerChunk()
-	runBenchmarkMux()
-
-	stop()
-}
diff --git a/runtimes/google/ipc/benchmarks/ipc_test.go b/runtimes/google/ipc/benchmarks/ipc_test.go
deleted file mode 100644
index b4455b3..0000000
--- a/runtimes/google/ipc/benchmarks/ipc_test.go
+++ /dev/null
@@ -1,141 +0,0 @@
-package benchmarks_test
-
-import (
-	"testing"
-
-	"v.io/core/veyron/profiles"
-	"v.io/core/veyron/runtimes/google/ipc/benchmarks"
-
-	"v.io/core/veyron2"
-	"v.io/core/veyron2/rt"
-)
-
-var vrt veyron2.Runtime
-var address string
-
-func init() {
-	var err error
-	vrt, err = rt.New()
-	if err != nil {
-		panic(err)
-	}
-
-	address, _ = benchmarks.StartServer(vrt, profiles.LocalListenSpec)
-}
-
-func runBenchmarkEcho(b *testing.B, payloadSize int) {
-	benchmarks.CallEcho(&testing.B{}, vrt.NewContext(), address, 1, 0, nil) // Create VC.
-	benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, payloadSize, nil)
-}
-
-func runBenchmarkEchoStream(b *testing.B, iterations, chunkCnt, payloadSize int) {
-	benchmarks.CallEcho(&testing.B{}, vrt.NewContext(), address, 1, 0, nil) // Create VC.
-	benchmarks.CallEchoStream(b, vrt.NewContext(), address, iterations, chunkCnt, payloadSize, nil)
-}
-
-func runBenchmarkMux(b *testing.B, payloadSize, chunkCntB, payloadSizeB int) {
-	benchmarks.CallEcho(&testing.B{}, vrt.NewContext(), address, 1, 0, nil) // Create VC.
-	_, stop := benchmarks.StartEchoStream(&testing.B{}, vrt.NewContext(), address, 0, chunkCntB, payloadSizeB, nil)
-	benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, payloadSize, nil)
-	stop()
-}
-
-// Benchmarks for non-streaming RPC.
-func Benchmark____1B(b *testing.B) {
-	runBenchmarkEcho(b, 1)
-}
-
-func Benchmark___10B(b *testing.B) {
-	runBenchmarkEcho(b, 10)
-}
-
-func Benchmark___1KB(b *testing.B) {
-	runBenchmarkEcho(b, 1000)
-}
-
-func Benchmark_100KB(b *testing.B) {
-	runBenchmarkEcho(b, 100000)
-}
-
-// Benchmarks for streaming RPC.
-func Benchmark____1_chunk_____1B(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 1, 1)
-}
-
-func Benchmark____1_chunk____10B(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 1, 10)
-}
-
-func Benchmark____1_chunk____1KB(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 1, 1000)
-}
-
-func Benchmark____1_chunk___10KB(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 1, 10000)
-}
-
-func Benchmark___10_chunks____1B(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 10, 1)
-}
-
-func Benchmark___10_chunks___10B(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 10, 10)
-}
-
-func Benchmark___10_chunks___1KB(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 10, 1000)
-}
-
-func Benchmark___10_chunks__10KB(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 10, 10000)
-}
-
-func Benchmark__100_chunks____1B(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 100, 1)
-}
-
-func Benchmark__100_chunks___10B(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 100, 10)
-}
-
-func Benchmark__100_chunks___1KB(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 100, 1000)
-}
-
-func Benchmark__100_chunks__10KB(b *testing.B) {
-	runBenchmarkEchoStream(b, b.N, 100, 10000)
-}
-
-// Benchmarks for per-chunk throughput in streaming RPC.
-func Benchmark__per_chunk____1B(b *testing.B) {
-	runBenchmarkEchoStream(b, 1, b.N, 1)
-}
-
-func Benchmark__per_chunk___10B(b *testing.B) {
-	runBenchmarkEchoStream(b, 1, b.N, 10)
-}
-
-func Benchmark__per_chunk___1KB(b *testing.B) {
-	runBenchmarkEchoStream(b, 1, b.N, 1000)
-}
-
-func Benchmark__per_chunk__10KB(b *testing.B) {
-	runBenchmarkEchoStream(b, 1, b.N, 10000)
-}
-
-// Benchmarks for non-streaming RPC while running streaming RPC in background.
-func Benchmark____1B_mux___10_chunks___10B(b *testing.B) {
-	runBenchmarkMux(b, 1, 10, 10)
-}
-
-func Benchmark____1B_mux___10_chunks___1KB(b *testing.B) {
-	runBenchmarkMux(b, 1, 10, 1000)
-}
-
-func Benchmark____1B_mux__100_chunks___10B(b *testing.B) {
-	runBenchmarkMux(b, 1, 100, 10)
-}
-
-func Benchmark____1B_mux__100_chunks___1KB(b *testing.B) {
-	runBenchmarkMux(b, 1, 100, 1000)
-}
diff --git a/runtimes/google/ipc/stream/benchmark/RESULTS.txt b/runtimes/google/ipc/stream/benchmark/RESULTS.txt
index 826e4de..b60e4ed 100644
--- a/runtimes/google/ipc/stream/benchmark/RESULTS.txt
+++ b/runtimes/google/ipc/stream/benchmark/RESULTS.txt
@@ -1,96 +1,72 @@
-Date: 12/14/2014
+Date: 01/06/2015
 Platform: Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz,  66114888KB Memory
 
-$ veyron go test -test.bench=. -test.cpu=1 -test.benchtime=5s \
+$ v23 go test -bench=. -cpu=1 -benchtime=5s \
   v.io/core/veyron/runtimes/google/ipc/stream/benchmark
 
-Benchmark_throughput_TCP_1Conn   1000000              9874 ns/op        5184.85 MB/s
-Benchmark_throughput_TCP_2Conns  1000000              9815 ns/op        5216.01 MB/s
-Benchmark_throughput_TCP_4Conns  1000000             10088 ns/op        5074.94 MB/s
-Benchmark_throughput_TCP_8Conns   500000             12228 ns/op        4186.82 MB/s
-Benchmark_throughput_Pipe_1Conn   500000             24337 ns/op        2103.72 MB/s
-Benchmark_throughput_Pipe_2Conns          500000             28723 ns/op        1782.52 MB/s
-Benchmark_throughput_Pipe_4Conns          500000             28823 ns/op        1776.32 MB/s
-Benchmark_throughput_Pipe_8Conns          500000             27081 ns/op        1890.57 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_1Flow          200000             31567 ns/op        1621.93 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_2Flow          200000             31626 ns/op        1618.90 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_8Flow          200000             36366 ns/op        1407.88 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_2Flow          200000             32417 ns/op        1579.41 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_8Flow          200000             35595 ns/op        1438.37 MB/s
-Benchmark_throughput_Flow_2VIF_4VC_8Flow          200000             38216 ns/op        1339.73 MB/s
-Benchmark_throughput_TLS_1Conn     20000            426727 ns/op         119.98 MB/s
-Benchmark_throughput_TLS_2Conns    20000            419540 ns/op         122.04 MB/s
-Benchmark_throughput_TLS_4Conns    20000            428137 ns/op         119.59 MB/s
-Benchmark_throughput_TLS_8Conns    20000            426041 ns/op         120.18 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_1FlowTLS        20000            470284 ns/op         108.87 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_2FlowTLS        20000            473181 ns/op         108.20 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_8FlowTLS        20000            482533 ns/op         106.11 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_2FlowTLS        20000            472181 ns/op         108.43 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_8FlowTLS        20000            480154 ns/op         106.63 MB/s
-Benchmark_throughput_Flow_2VIF_4VC_8FlowTLS        20000            481803 ns/op         106.27 MB/s
-
-Benchmark_dial_VIF      500000             15965 ns/op
-Histogram (unit: µs)
-Count: 500000  Min: 4  Max: 19523  Avg: 15.31
-------------------------------------------------------------
-[    4,     5)    9404    1.9%    1.9%  
-[    5,     6)  320133   64.0%   65.9%  ######
-[    6,     9)  157038   31.4%   97.3%  ###
-[    9,    16)    8766    1.8%   99.1%  
-[   16,    29)    3348    0.7%   99.7%  
-[   29,    55)     134    0.0%   99.8%  
-[   55,   107)      50    0.0%   99.8%  
-[  107,   207)       7    0.0%   99.8%  
-[  207,   401)       0    0.0%   99.8%  
-[  401,   776)       1    0.0%   99.8%  
-[  776,  1500)     120    0.0%   99.8%  
-[ 1500,  2900)     138    0.0%   99.8%  
-[ 2900,  5606)     681    0.1%  100.0%  
-[ 5606, 10834)     167    0.0%  100.0%  
-[10834, 20936)      13    0.0%  100.0%  
-[20936, 40454)       0    0.0%  100.0%  
-[40454,   inf)       0    0.0%  100.0%  
-
-Benchmark_dial_VIF_TLS  500          12015788 ns/op
-Histogram (unit: ms)
-Count: 500  Min: 11  Max: 13  Avg: 11.34
-------------------------------------------------------------
-[ 11,  12)  350   70.0%   70.0%  #######
-[ 12,  13)  132   26.4%   96.4%  ###
-[ 13,  14)   18    3.6%  100.0%  
-[ 14,  15)    0    0.0%  100.0%  
-[ 15,  16)    0    0.0%  100.0%  
-[ 16,  17)    0    0.0%  100.0%  
-[ 17,  18)    0    0.0%  100.0%  
-[ 18,  19)    0    0.0%  100.0%  
-[ 19,  20)    0    0.0%  100.0%  
-[ 20,  21)    0    0.0%  100.0%  
-[ 21,  22)    0    0.0%  100.0%  
-[ 22,  23)    0    0.0%  100.0%  
-[ 23,  24)    0    0.0%  100.0%  
-[ 24,  25)    0    0.0%  100.0%  
-[ 25,  26)    0    0.0%  100.0%  
-[ 26,  27)    0    0.0%  100.0%  
-[ 27, inf)    0    0.0%  100.0%  
-
-Benchmark_dial_VC_TLS   500          15909783 ns/op
-Histogram (unit: ms)
-Count: 500  Min: 15  Max: 20  Avg: 15.41
-------------------------------------------------------------
-[ 15,  16)  356   71.2%   71.2%  #######
-[ 16,  17)   92   18.4%   89.6%  ##
-[ 17,  18)   47    9.4%   99.0%  #
-[ 18,  19)    4    0.8%   99.8%  
-[ 19,  20)    0    0.0%   99.8%  
-[ 20,  21)    1    0.2%  100.0%  
-[ 21,  22)    0    0.0%  100.0%  
-[ 22,  24)    0    0.0%  100.0%  
-[ 24,  26)    0    0.0%  100.0%  
-[ 26,  28)    0    0.0%  100.0%  
-[ 28,  30)    0    0.0%  100.0%  
-[ 30,  33)    0    0.0%  100.0%  
-[ 33,  36)    0    0.0%  100.0%  
-[ 36,  40)    0    0.0%  100.0%  
-[ 40,  44)    0    0.0%  100.0%  
-[ 44,  48)    0    0.0%  100.0%  
-[ 48, inf)    0    0.0%  100.0%  
+Benchmark_dial_VIF	  500000	     15356 ns/op
+--- Histogram (unit: s)
+	Count: 500000  Min: 4  Max: 15644  Avg: 14.66
+	------------------------------------------------------------
+	[    4,     5)   47181    9.4%    9.4%  #
+	[    5,     6)  314973   63.0%   72.4%  ######
+	[    6,     9)  123582   24.7%   97.1%  ##
+	[    9,    15)   10991    2.2%   99.3%  
+	[   15,    28)    2038    0.4%   99.8%  
+	[   28,    53)     129    0.0%   99.8%  
+	[   53,   100)      53    0.0%   99.8%  
+	[  100,   190)      12    0.0%   99.8%  
+	[  190,   362)       0    0.0%   99.8%  
+	[  362,   690)       1    0.0%   99.8%  
+	[  690,  1315)      38    0.0%   99.8%  
+	[ 1315,  2505)     165    0.0%   99.8%  
+	[ 2505,  4771)     487    0.1%   99.9%  
+	[ 4771,  9086)     326    0.1%  100.0%  
+	[ 9086, 17301)      24    0.0%  100.0%  
+	[17301, 32941)       0    0.0%  100.0%  
+	[32941,   inf)       0    0.0%  100.0%  
+Benchmark_dial_VIF_TLS	     500	  12681088 ns/op
+--- Histogram (unit: ms)
+	Count: 500  Min: 12  Max: 16  Avg: 12.31
+	------------------------------------------------------------
+	[ 12,  13)  357   71.4%   71.4%  #######
+	[ 13,  14)  133   26.6%   98.0%  ###
+	[ 14,  15)    7    1.4%   99.4%  
+	[ 15,  16)    2    0.4%   99.8%  
+	[ 16, inf)    1    0.2%  100.0%  
+Benchmark_dial_VC_TLS	     500	  16224331 ns/op
+--- Histogram (unit: ms)
+	Count: 500  Min: 15  Max: 22  Avg: 15.60
+	------------------------------------------------------------
+	[ 15,  16)  279   55.8%   55.8%  ######
+	[ 16,  17)  152   30.4%   86.2%  ###
+	[ 17,  18)   62   12.4%   98.6%  #
+	[ 18,  19)    6    1.2%   99.8%  
+	[ 19,  20)    0    0.0%   99.8%  
+	[ 20,  21)    0    0.0%   99.8%  
+	[ 21,  23)    1    0.2%  100.0%  
+	[ 23, inf)    0    0.0%  100.0%  
+Benchmark_throughput_TCP_1Conn	 1000000	     10963 ns/op	4669.96 MB/s
+Benchmark_throughput_TCP_2Conns	 1000000	      9739 ns/op	5257.14 MB/s
+Benchmark_throughput_TCP_4Conns	  500000	     11896 ns/op	4303.82 MB/s
+Benchmark_throughput_TCP_8Conns	  500000	     12867 ns/op	3979.12 MB/s
+Benchmark_throughput_Pipe_1Conn	  300000	     28233 ns/op	1813.43 MB/s
+Benchmark_throughput_Pipe_2Conns	  500000	     25339 ns/op	2020.60 MB/s
+Benchmark_throughput_Pipe_4Conns	  300000	     26626 ns/op	1922.90 MB/s
+Benchmark_throughput_Pipe_8Conns	  500000	     27340 ns/op	1872.67 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_1Flow	  200000	     32590 ns/op	1571.02 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_2Flow	  200000	     32731 ns/op	1564.24 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_8Flow	  200000	     41289 ns/op	1240.03 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_2Flow	  200000	     33878 ns/op	1511.30 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_8Flow	  200000	     40923 ns/op	1251.10 MB/s
+Benchmark_throughput_Flow_2VIF_4VC_8Flow	  200000	     42293 ns/op	1210.60 MB/s
+Benchmark_throughput_TLS_1Conn	   20000	    426157 ns/op	 120.14 MB/s
+Benchmark_throughput_TLS_2Conns	   20000	    421319 ns/op	 121.52 MB/s
+Benchmark_throughput_TLS_4Conns	   20000	    425284 ns/op	 120.39 MB/s
+Benchmark_throughput_TLS_8Conns	   20000	    426533 ns/op	 120.04 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_1FlowTLS	   20000	    474126 ns/op	 107.99 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_2FlowTLS	   20000	    472005 ns/op	 108.47 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_8FlowTLS	   20000	    484625 ns/op	 105.65 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_2FlowTLS	   20000	    483762 ns/op	 105.84 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_8FlowTLS	   20000	    485164 ns/op	 105.53 MB/s
+Benchmark_throughput_Flow_2VIF_4VC_8FlowTLS	   20000	    493864 ns/op	 103.67 MB/s
diff --git a/runtimes/google/ipc/stream/benchmark/benchmark_test.go b/runtimes/google/ipc/stream/benchmark/benchmark_test.go
new file mode 100644
index 0000000..7122cf7
--- /dev/null
+++ b/runtimes/google/ipc/stream/benchmark/benchmark_test.go
@@ -0,0 +1,17 @@
+package benchmark
+
+import (
+	"os"
+	"testing"
+
+	"v.io/core/veyron/lib/testutil/benchmark"
+)
+
+// A single empty test to avoid:
+// testing: warning: no tests to run
+// from showing up when running benchmarks in this package via "go test"
+func TestNoOp(t *testing.T) {}
+
+func TestMain(m *testing.M) {
+	os.Exit(benchmark.RunTestMain(m))
+}
diff --git a/runtimes/google/ipc/stream/benchmark/dial_test.go b/runtimes/google/ipc/stream/benchmark/dial_test.go
index 7b835ad..a591009 100644
--- a/runtimes/google/ipc/stream/benchmark/dial_test.go
+++ b/runtimes/google/ipc/stream/benchmark/dial_test.go
@@ -2,9 +2,9 @@
 
 import "testing"
 
-func Benchmark_dial_VIF(b *testing.B)     { benchmarkVIFDial(b, securityNone) }
-func Benchmark_dial_VIF_TLS(b *testing.B) { benchmarkVIFDial(b, securityTLS) }
+func Benchmark_dial_VIF(b *testing.B)     { benchmarkDialVIF(b, securityNone) }
+func Benchmark_dial_VIF_TLS(b *testing.B) { benchmarkDialVIF(b, securityTLS) }
 
 // Note: We don't benchmark Non-TLC VC Dial for now since it doesn't wait ack
 // from the server after sending "OpenVC".
-func Benchmark_dial_VC_TLS(b *testing.B) { benchmarkVCDial(b, securityTLS) }
+func Benchmark_dial_VC_TLS(b *testing.B) { benchmarkDialVC(b, securityTLS) }
diff --git a/runtimes/google/ipc/stream/benchmark/dial_vc.go b/runtimes/google/ipc/stream/benchmark/dial_vc.go
index 3bdcb32..387e392 100644
--- a/runtimes/google/ipc/stream/benchmark/dial_vc.go
+++ b/runtimes/google/ipc/stream/benchmark/dial_vc.go
@@ -1,11 +1,10 @@
 package benchmark
 
 import (
-	"fmt"
 	"testing"
 	"time"
 
-	"v.io/core/veyron/lib/testutil"
+	"v.io/core/veyron/lib/testutil/benchmark"
 	_ "v.io/core/veyron/profiles/static"
 	"v.io/core/veyron/runtimes/google/ipc/stream/manager"
 
@@ -13,9 +12,9 @@
 	"v.io/core/veyron2/options"
 )
 
-// benchmarkVCDial measures VC creation time over the underlying VIF.
-func benchmarkVCDial(b *testing.B, mode options.VCSecurityLevel) {
-	stats := testutil.NewBenchStats(16)
+// benchmarkDialVC measures VC creation time over the underlying VIF.
+func benchmarkDialVC(b *testing.B, mode options.VCSecurityLevel) {
+	stats := benchmark.AddStats(b, 16)
 
 	server := manager.InternalNew(naming.FixedRoutingID(0x5))
 	client := manager.InternalNew(naming.FixedRoutingID(0xc))
@@ -31,8 +30,7 @@
 		b.Fatal(err)
 	}
 
-	// Reset the timer to exclude any underlying setup time from measurement.
-	b.ResetTimer()
+	b.ResetTimer() // Exclude setup time from measurement.
 
 	for i := 0; i < b.N; i++ {
 		b.StartTimer()
@@ -53,7 +51,4 @@
 
 	client.Shutdown()
 	server.Shutdown()
-
-	fmt.Println()
-	fmt.Println(stats)
 }
diff --git a/runtimes/google/ipc/stream/benchmark/dial_vif.go b/runtimes/google/ipc/stream/benchmark/dial_vif.go
index 4fce465..6413925 100644
--- a/runtimes/google/ipc/stream/benchmark/dial_vif.go
+++ b/runtimes/google/ipc/stream/benchmark/dial_vif.go
@@ -1,24 +1,22 @@
 package benchmark
 
 import (
-	"fmt"
 	"net"
 	"testing"
 	"time"
 
-	"v.io/core/veyron/lib/testutil"
+	"v.io/core/veyron/lib/testutil/benchmark"
 	"v.io/core/veyron/runtimes/google/ipc/stream/vif"
 
 	"v.io/core/veyron2/naming"
 	"v.io/core/veyron2/options"
 )
 
-// benchmarkVIFDial measures VIF creation time over the underlying net connection.
-func benchmarkVIFDial(b *testing.B, mode options.VCSecurityLevel) {
-	stats := testutil.NewBenchStats(16)
+// benchmarkDialVIF measures VIF creation time over the underlying net connection.
+func benchmarkDialVIF(b *testing.B, mode options.VCSecurityLevel) {
+	stats := benchmark.AddStats(b, 16)
 
-	// Reset the timer to exclude any underlying setup time from measurement.
-	b.ResetTimer()
+	b.ResetTimer() // Exclude setup time from measurement.
 
 	for i := 0; i < b.N; i++ {
 		b.StopTimer()
@@ -45,7 +43,4 @@
 		client.Close()
 		server.Close()
 	}
-
-	fmt.Println()
-	fmt.Println(stats)
 }
diff --git a/runtimes/google/ipc/stream/benchmark/throughput_test.go b/runtimes/google/ipc/stream/benchmark/throughput_test.go
index 9487f0a..76ad57d 100644
--- a/runtimes/google/ipc/stream/benchmark/throughput_test.go
+++ b/runtimes/google/ipc/stream/benchmark/throughput_test.go
@@ -34,8 +34,3 @@
 func Benchmark_throughput_Flow_1VIF_2VC_8FlowTLS(b *testing.B) { benchmarkFlow(b, securityTLS, 1, 2, 4) }
 
 func Benchmark_throughput_Flow_2VIF_4VC_8FlowTLS(b *testing.B) { benchmarkFlow(b, securityTLS, 2, 2, 2) }
-
-// A single empty test to avoid:
-// testing: warning: no tests to run
-// from showing up when running benchmarks in this package via "go test"
-func TestNoOp(t *testing.T) {}
diff --git a/services/identity/identityd/main.go b/services/identity/identityd/main.go
index 10af65a..ba35304 100644
--- a/services/identity/identityd/main.go
+++ b/services/identity/identityd/main.go
@@ -14,6 +14,7 @@
 
 	"v.io/core/veyron2/vlog"
 
+	"v.io/core/veyron/profiles/static"
 	"v.io/core/veyron/services/identity/auditor"
 	"v.io/core/veyron/services/identity/blesser"
 	"v.io/core/veyron/services/identity/caveats"
@@ -31,6 +32,11 @@
 	googleConfigChrome  = flag.String("google_config_chrome", "", "Path to the JSON-encoded OAuth client configuration for Chrome browser applications that obtain blessings from this server (via the OAuthBlesser.BlessUsingAccessToken RPC) from this server.")
 	googleConfigAndroid = flag.String("google_config_android", "", "Path to the JSON-encoded OAuth client configuration for Android applications that obtain blessings from this server (via the OAuthBlesser.BlessUsingAccessToken RPC) from this server.")
 	googleDomain        = flag.String("google_domain", "", "An optional domain name. When set, only email addresses from this domain are allowed to authenticate via Google OAuth")
+
+	// Flags controlling the HTTP server
+	host      = flag.String("host", defaultHost(), "Hostname the HTTP server listens on. This can be the name of the host running the webserver, but if running behind a NAT or load balancer, this should be the host name that clients will connect to. For example, if set to 'x.com', Veyron identities will have the IssuerName set to 'x.com' and clients can expect to find the root name and public key of the signer at 'x.com/blessing-root'.")
+	httpaddr  = flag.String("httpaddr", "localhost:8125", "Address on which the HTTP server listens on.")
+	tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files. This must be provided.")
 )
 
 func main() {
@@ -65,20 +71,21 @@
 		vlog.Fatalf("Failed to start RevocationManager: %v", err)
 	}
 
-	server.NewIdentityServer(
+	s := server.NewIdentityServer(
 		googleoauth,
 		auditor,
 		reader,
 		revocationManager,
 		oauthBlesserGoogleParams(revocationManager),
-		caveats.NewBrowserCaveatSelector()).Serve()
+		caveats.NewBrowserCaveatSelector())
+	s.Serve(&static.ListenSpec, *host, *httpaddr, *tlsconfig)
 }
 
 func usage() {
 	fmt.Fprintf(os.Stderr, `%s starts an HTTP server that brokers blessings after authenticating through OAuth.
 
 To generate TLS certificates so the HTTP server can use SSL:
-go run $GOROOT/src/crypto/tls/generate_cert.go --host <IP address>
+go run $(go list -f {{.Dir}} "crypto/tls")/generate_cert.go --host <IP address>
 
 To use Google as an OAuth provider the --google_config_* flags must be set to point to
 the a JSON file obtained after registering the application with the Google Developer Console
@@ -134,3 +141,11 @@
 	}
 	return clientID, nil
 }
+
+func defaultHost() string {
+	host, err := os.Hostname()
+	if err != nil {
+		vlog.Fatalf("os.Hostname() failed: %v", err)
+	}
+	return host
+}
diff --git a/services/identity/identityd_test/main.go b/services/identity/identityd_test/main.go
index 4531b63..e2f8058 100644
--- a/services/identity/identityd_test/main.go
+++ b/services/identity/identityd_test/main.go
@@ -5,45 +5,63 @@
 	"flag"
 	"fmt"
 	"os"
-	"os/exec"
 	"time"
 
 	"v.io/core/veyron2/vlog"
 
+	"v.io/core/veyron/profiles/static"
 	"v.io/core/veyron/services/identity/auditor"
 	"v.io/core/veyron/services/identity/blesser"
 	"v.io/core/veyron/services/identity/caveats"
 	"v.io/core/veyron/services/identity/oauth"
 	"v.io/core/veyron/services/identity/revocation"
 	"v.io/core/veyron/services/identity/server"
+	"v.io/core/veyron/services/identity/util"
 )
 
 var (
 	googleDomain = flag.String("google_domain", "", "An optional domain name. When set, only email addresses from this domain are allowed to authenticate via Google OAuth")
+
+	// Flags controlling the HTTP server
+	host      = flag.String("host", "localhost", "Hostname the HTTP server listens on. This can be the name of the host running the webserver, but if running behind a NAT or load balancer, this should be the host name that clients will connect to. For example, if set to 'x.com', Veyron identities will have the IssuerName set to 'x.com' and clients can expect to find the root name and public key of the signer at 'x.com/blessing-root'.")
+	httpaddr  = flag.String("httpaddr", "localhost:8125", "Address on which the HTTP server listens on.")
+	tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files. This must be provided.")
 )
 
 func main() {
 	flag.Usage = usage
 	flag.Parse()
 
-	auditor, reader := auditor.NewMockBlessingAuditor()
-	revocationManager := revocation.NewMockRevocationManager()
+	// Duration to use for tls cert and blessing duration.
+	duration := 365 * 24 * time.Hour
 
 	// If no tlsconfig has been provided, write and use our own.
 	if flag.Lookup("tlsconfig").Value.String() == "" {
-		writeCertAndKey()
+		if err := util.WriteCertAndKey(*host, duration); err != nil {
+			vlog.Fatal(err)
+		}
 		if err := flag.Set("tlsconfig", "./cert.pem,./key.pem"); err != nil {
 			vlog.Fatal(err)
 		}
 	}
 
-	server.NewIdentityServer(
+	auditor, reader := auditor.NewMockBlessingAuditor()
+	revocationManager := revocation.NewMockRevocationManager()
+
+	googleParams := blesser.GoogleParams{
+		BlessingDuration:  duration,
+		DomainRestriction: *googleDomain,
+		RevocationManager: revocationManager,
+	}
+
+	s := server.NewIdentityServer(
 		oauth.NewMockOAuth(),
 		auditor,
 		reader,
 		revocationManager,
-		oauthBlesserGoogleParams(revocationManager),
-		caveats.NewMockCaveatSelector()).Serve()
+		googleParams,
+		caveats.NewMockCaveatSelector())
+	s.Serve(&static.ListenSpec, *host, *httpaddr, *tlsconfig)
 }
 
 func usage() {
@@ -51,32 +69,9 @@
 mocks out oauth, auditing, and revocation.
 
 To generate TLS certificates so the HTTP server can use SSL:
-go run $GOROOT/src/crypto/tls/generate_cert.go --host <IP address>
+go run $(go list -f {{.Dir}} "crypto/tls")/generate_cert.go --host <IP address>
 
 Flags:
 `, os.Args[0])
 	flag.PrintDefaults()
 }
-
-func writeCertAndKey() {
-	goroot := os.Getenv("GOROOT")
-	if goroot == "" {
-		vlog.Fatal("GOROOT not set")
-	}
-	generateCertFile := goroot + "/src/crypto/tls/generate_cert.go"
-	host := flag.Lookup("host").Value.String()
-	duration := 1 * time.Hour
-	if err := exec.Command("go", "run", generateCertFile, "--host", host, "--duration", duration.String()).Run(); err != nil {
-		vlog.Fatalf("Could not generate key and cert: %v", err)
-	}
-}
-
-func oauthBlesserGoogleParams(revocationManager revocation.RevocationManager) blesser.GoogleParams {
-	googleParams := blesser.GoogleParams{
-		BlessingDuration:  365 * 24 * time.Hour,
-		DomainRestriction: *googleDomain,
-		RevocationManager: revocationManager,
-	}
-	// TODO(suharshs): Figure out the test for this.
-	return googleParams
-}
diff --git a/services/identity/server/identityd.go b/services/identity/server/identityd.go
index c388d60..2ad5dcb 100644
--- a/services/identity/server/identityd.go
+++ b/services/identity/server/identityd.go
@@ -3,12 +3,10 @@
 
 import (
 	"crypto/rand"
-	"flag"
 	"fmt"
 	"html/template"
 	"net"
 	"net/http"
-	"os"
 	"reflect"
 	"strings"
 
@@ -31,15 +29,6 @@
 	"v.io/core/veyron/services/identity/revocation"
 	services "v.io/core/veyron/services/security"
 	"v.io/core/veyron/services/security/discharger"
-
-	"v.io/core/veyron/profiles/static"
-)
-
-var (
-	// Flags controlling the HTTP server
-	httpaddr  = flag.String("httpaddr", "localhost:8125", "Address on which the HTTP server listens on.")
-	tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files. This must be provided.")
-	host      = flag.String("host", defaultHost(), "Hostname the HTTP server listens on. This can be the name of the host running the webserver, but if running behind a NAT or load balancer, this should be the host name that clients will connect to. For example, if set to 'x.com', Veyron identities will have the IssuerName set to 'x.com' and clients can expect to find the root name and public key of the signer at 'x.com/blessing-root'.")
 )
 
 const (
@@ -73,9 +62,7 @@
 	}
 }
 
-func (s *identityd) Serve() {
-	flag.Parse()
-
+func (s *identityd) Serve(listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) {
 	p, r := providerPrincipal(s.auditor)
 	defer r.Cleanup()
 
@@ -85,6 +72,13 @@
 	}
 	defer runtime.Cleanup()
 
+	ipcServer, _, _ := s.Listen(runtime, listenSpec, host, httpaddr, tlsconfig)
+	defer ipcServer.Stop()
+
+	<-signals.ShutdownOnSignals(runtime)
+}
+
+func (s *identityd) Listen(runtime veyron2.Runtime, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) (ipc.Server, []string, string) {
 	// Setup handlers
 	http.Handle("/blessing-root", handlers.BlessingRoot{runtime.Principal()}) // json-encoded public key and blessing names of this server
 
@@ -93,17 +87,18 @@
 		vlog.Fatalf("macaroonKey generation failed: %v", err)
 	}
 
-	ipcServer, published, err := s.setupServices(runtime, macaroonKey)
+	ipcServer, published, err := s.setupServices(runtime, listenSpec, macaroonKey)
 	if err != nil {
 		vlog.Fatalf("Failed to setup veyron services for blessing: %v", err)
 	}
-	defer ipcServer.Stop()
+
+	externalHttpaddr := httpaddress(host, httpaddr)
 
 	n := "/google/"
 	h, err := oauth.NewHandler(oauth.HandlerArgs{
 		R:                       runtime,
 		MacaroonKey:             macaroonKey,
-		Addr:                    fmt.Sprintf("%s%s", httpaddress(), n),
+		Addr:                    fmt.Sprintf("%s%s", externalHttpaddr, n),
 		BlessingLogReader:       s.blessingLogReader,
 		RevocationManager:       s.revocationManager,
 		DischargerLocation:      naming.JoinAddressName(published[0], dischargerService),
@@ -138,9 +133,9 @@
 			vlog.Info("Failed to render template:", err)
 		}
 	})
-	vlog.Infof("Running HTTP server at: %v", httpaddress())
-	go runHTTPSServer(*httpaddr)
-	<-signals.ShutdownOnSignals(runtime)
+	vlog.Infof("Running HTTP server at: %v", externalHttpaddr)
+	go runHTTPSServer(httpaddr, tlsconfig)
+	return ipcServer, published, externalHttpaddr
 }
 
 func appendSuffixTo(objectname []string, suffix string) []string {
@@ -152,19 +147,19 @@
 }
 
 // Starts the blessing services and the discharging service on the same port.
-func (s *identityd) setupServices(r veyron2.Runtime, macaroonKey []byte) (ipc.Server, []string, error) {
-	server, err := r.NewServer()
+func (s *identityd) setupServices(runtime veyron2.Runtime, listenSpec *ipc.ListenSpec, macaroonKey []byte) (ipc.Server, []string, error) {
+	server, err := runtime.NewServer()
 	if err != nil {
 		return nil, nil, fmt.Errorf("failed to create new ipc.Server: %v", err)
 	}
-	eps, err := server.Listen(static.ListenSpec)
+	eps, err := server.Listen(*listenSpec)
 	if err != nil {
-		return nil, nil, fmt.Errorf("server.Listen(%v) failed: %v", static.ListenSpec, err)
+		return nil, nil, fmt.Errorf("server.Listen(%v) failed: %v", *listenSpec, err)
 	}
 	ep := eps[0]
 
 	dispatcher := newDispatcher(macaroonKey, oauthBlesserParams(s.oauthBlesserParams, s.revocationManager, ep))
-	objectname := naming.Join("identity", fmt.Sprintf("%v", r.Principal().BlessingStore().Default()))
+	objectname := naming.Join("identity", fmt.Sprintf("%v", runtime.Principal().BlessingStore().Default()))
 	if err := server.ServeDispatcher(objectname, dispatcher); err != nil {
 		return nil, nil, fmt.Errorf("failed to start Veyron services: %v", err)
 	}
@@ -206,11 +201,11 @@
 	return inputParams
 }
 
-func runHTTPSServer(addr string) {
-	if len(*tlsconfig) == 0 {
+func runHTTPSServer(addr, tlsconfig string) {
+	if len(tlsconfig) == 0 {
 		vlog.Fatal("Please set the --tlsconfig flag")
 	}
-	paths := strings.Split(*tlsconfig, ",")
+	paths := strings.Split(tlsconfig, ",")
 	if len(paths) != 2 {
 		vlog.Fatalf("Could not parse --tlsconfig. Must have exactly two components, separated by a comma")
 	}
@@ -220,14 +215,6 @@
 	}
 }
 
-func defaultHost() string {
-	host, err := os.Hostname()
-	if err != nil {
-		vlog.Fatalf("Failed to get hostname: %v", err)
-	}
-	return host
-}
-
 // providerPrincipal returns the Principal to use for the identity provider (i.e., this program).
 //
 // TODO(ataly, suharhs, mattr): HACK!!! This method also returns the runtime that it creates
@@ -246,12 +233,12 @@
 	return audit.NewPrincipal(r.Principal(), auditor), r
 }
 
-func httpaddress() string {
-	_, port, err := net.SplitHostPort(*httpaddr)
+func httpaddress(host, httpaddr string) string {
+	_, port, err := net.SplitHostPort(httpaddr)
 	if err != nil {
-		vlog.Fatalf("Failed to parse %q: %v", *httpaddr, err)
+		vlog.Fatalf("Failed to parse %q: %v", httpaddr, err)
 	}
-	return fmt.Sprintf("https://%s:%v", *host, port)
+	return fmt.Sprintf("https://%s:%v", host, port)
 }
 
 var tmpl = template.Must(template.New("main").Parse(`<!doctype html>
diff --git a/services/identity/util/certs.go b/services/identity/util/certs.go
new file mode 100644
index 0000000..697e9e2
--- /dev/null
+++ b/services/identity/util/certs.go
@@ -0,0 +1,24 @@
+package util
+
+import (
+	"fmt"
+	"os/exec"
+	"path/filepath"
+	"strings"
+	"time"
+)
+
+// WriteCertAndKey creates a certificate and private key for a given host and
+// duration and writes them to cert.pem and key.pem.
+func WriteCertAndKey(host string, duration time.Duration) error {
+	listCmd := exec.Command("go", "list", "-f", "{{.Dir}}", "crypto/tls")
+	output, err := listCmd.Output()
+	if err != nil {
+		return fmt.Errorf("%s failed: %v", strings.Join(listCmd.Args, " "), err)
+	}
+	generateCertFile := filepath.Join(strings.TrimSpace(string(output)), "generate_cert.go")
+	if err := exec.Command("go", "run", generateCertFile, "--host", host, "--duration", duration.String()).Run(); err != nil {
+		return fmt.Errorf("Could not generate key and cert: %v", err)
+	}
+	return nil
+}