...

Source file src/github.com/peterbourgon/diskv/v3/speed_test.go

Documentation: github.com/peterbourgon/diskv/v3

     1  package diskv
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"testing"
     7  )
     8  
     9  func shuffle(keys []string) {
    10  	ints := rand.Perm(len(keys))
    11  	for i := range keys {
    12  		keys[i], keys[ints[i]] = keys[ints[i]], keys[i]
    13  	}
    14  }
    15  
    16  func genValue(size int) []byte {
    17  	v := make([]byte, size)
    18  	for i := 0; i < size; i++ {
    19  		v[i] = uint8((rand.Int() % 26) + 97) // a-z
    20  	}
    21  	return v
    22  }
    23  
    24  const (
    25  	keyCount = 1000
    26  )
    27  
    28  func genKeys() []string {
    29  	keys := make([]string, keyCount)
    30  	for i := 0; i < keyCount; i++ {
    31  		keys[i] = fmt.Sprintf("%d", i)
    32  	}
    33  	return keys
    34  }
    35  
    36  func (d *Diskv) load(keys []string, val []byte) {
    37  	for _, key := range keys {
    38  		d.Write(key, val)
    39  	}
    40  }
    41  
    42  func benchRead(b *testing.B, size, cachesz int) {
    43  	b.StopTimer()
    44  	d := New(Options{
    45  		BasePath:     "speed-test",
    46  		CacheSizeMax: uint64(cachesz),
    47  	})
    48  	defer d.EraseAll()
    49  
    50  	keys := genKeys()
    51  	value := genValue(size)
    52  	d.load(keys, value)
    53  	shuffle(keys)
    54  	b.SetBytes(int64(size))
    55  
    56  	b.StartTimer()
    57  	for i := 0; i < b.N; i++ {
    58  		_, _ = d.Read(keys[i%len(keys)])
    59  	}
    60  	b.StopTimer()
    61  }
    62  
    63  func benchWrite(b *testing.B, size int, withIndex bool) {
    64  	b.StopTimer()
    65  
    66  	options := Options{
    67  		BasePath:     "speed-test",
    68  		CacheSizeMax: 0,
    69  	}
    70  	if withIndex {
    71  		options.Index = &BTreeIndex{}
    72  		options.IndexLess = strLess
    73  	}
    74  
    75  	d := New(options)
    76  	defer d.EraseAll()
    77  	keys := genKeys()
    78  	value := genValue(size)
    79  	shuffle(keys)
    80  	b.SetBytes(int64(size))
    81  
    82  	b.StartTimer()
    83  	for i := 0; i < b.N; i++ {
    84  		d.Write(keys[i%len(keys)], value)
    85  	}
    86  	b.StopTimer()
    87  }
    88  
    89  func BenchmarkWrite__32B_NoIndex(b *testing.B) {
    90  	benchWrite(b, 32, false)
    91  }
    92  
    93  func BenchmarkWrite__1KB_NoIndex(b *testing.B) {
    94  	benchWrite(b, 1024, false)
    95  }
    96  
    97  func BenchmarkWrite__4KB_NoIndex(b *testing.B) {
    98  	benchWrite(b, 4096, false)
    99  }
   100  
   101  func BenchmarkWrite_10KB_NoIndex(b *testing.B) {
   102  	benchWrite(b, 10240, false)
   103  }
   104  
   105  func BenchmarkWrite__32B_WithIndex(b *testing.B) {
   106  	benchWrite(b, 32, true)
   107  }
   108  
   109  func BenchmarkWrite__1KB_WithIndex(b *testing.B) {
   110  	benchWrite(b, 1024, true)
   111  }
   112  
   113  func BenchmarkWrite__4KB_WithIndex(b *testing.B) {
   114  	benchWrite(b, 4096, true)
   115  }
   116  
   117  func BenchmarkWrite_10KB_WithIndex(b *testing.B) {
   118  	benchWrite(b, 10240, true)
   119  }
   120  
   121  func BenchmarkRead__32B_NoCache(b *testing.B) {
   122  	benchRead(b, 32, 0)
   123  }
   124  
   125  func BenchmarkRead__1KB_NoCache(b *testing.B) {
   126  	benchRead(b, 1024, 0)
   127  }
   128  
   129  func BenchmarkRead__4KB_NoCache(b *testing.B) {
   130  	benchRead(b, 4096, 0)
   131  }
   132  
   133  func BenchmarkRead_10KB_NoCache(b *testing.B) {
   134  	benchRead(b, 10240, 0)
   135  }
   136  
   137  func BenchmarkRead__32B_WithCache(b *testing.B) {
   138  	benchRead(b, 32, keyCount*32*2)
   139  }
   140  
   141  func BenchmarkRead__1KB_WithCache(b *testing.B) {
   142  	benchRead(b, 1024, keyCount*1024*2)
   143  }
   144  
   145  func BenchmarkRead__4KB_WithCache(b *testing.B) {
   146  	benchRead(b, 4096, keyCount*4096*2)
   147  }
   148  
   149  func BenchmarkRead_10KB_WithCache(b *testing.B) {
   150  	benchRead(b, 10240, keyCount*4096*2)
   151  }
   152  

View as plain text