From 8a963f5f6a7039305bc779535b7dbcbb99958204 Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Fri, 8 Aug 2014 21:24:34 +0000 Subject: [PATCH] dynamically resize chunks --- rsload.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/rsload.go b/rsload.go index 28a852f..d693ada 100644 --- a/rsload.go +++ b/rsload.go @@ -10,7 +10,9 @@ import ( "time" ) -var chunk_size = 100 +var chunk_size = 1 +var chunk_target = 250 * time.Millisecond +var chunk_max = 10000 var options struct { host string @@ -34,10 +36,10 @@ type chunk struct { } func (c *chunk) send(w *bufio.Writer, responses chan maybe) { + start := time.Now() for _, v := range c.vals { v.Write(w) } - start := time.Now() size := w.Buffered() w.Flush() errors, replies := 0, 0 @@ -69,10 +71,19 @@ func (c *chunk) send(w *bufio.Writer, responses chan maybe) { elapsed := time.Since(start) sleep := elapsed / 4 time.Sleep(sleep) + avg := time.Duration(int64(elapsed) / int64(len(c.vals))) + next_size := int(int64(chunk_target) / int64(avg)) if true { - avg := time.Duration(int64(elapsed) / int64(len(c.vals))) - fmt.Printf("id: %d errors: %d replies: %d total: %d sent: %d elapsed: %v avg: %v size: %v sleep: %v\n", - c.id, errors, replies, errors+replies, len(c.vals), elapsed, avg, size, sleep) + fmt.Printf("id: %d errors: %d replies: %d total: %d sent: %d elapsed: %v avg: %v size: %v sleep: %v next_size: %v\n", + c.id, errors, replies, errors+replies, len(c.vals), elapsed, avg, size, sleep, next_size) + } + if next_size < chunk_size*2 { + chunk_size = next_size + } else { + chunk_size *= 2 + } + if chunk_size > chunk_max { + chunk_size = chunk_max } }