mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-12 17:30:19 +00:00
154 lines
2.8 KiB
Go
154 lines
2.8 KiB
Go
package diskv
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"testing"
|
|
)
|
|
|
|
func shuffle(keys []string) {
|
|
ints := rand.Perm(len(keys))
|
|
for i := range keys {
|
|
keys[i], keys[ints[i]] = keys[ints[i]], keys[i]
|
|
}
|
|
}
|
|
|
|
func genValue(size int) []byte {
|
|
v := make([]byte, size)
|
|
for i := 0; i < size; i++ {
|
|
v[i] = uint8((rand.Int() % 26) + 97) // a-z
|
|
}
|
|
return v
|
|
}
|
|
|
|
const (
|
|
keyCount = 1000
|
|
)
|
|
|
|
func genKeys() []string {
|
|
keys := make([]string, keyCount)
|
|
for i := 0; i < keyCount; i++ {
|
|
keys[i] = fmt.Sprintf("%d", i)
|
|
}
|
|
return keys
|
|
}
|
|
|
|
func (d *Diskv) load(keys []string, val []byte) {
|
|
for _, key := range keys {
|
|
d.Write(key, val)
|
|
}
|
|
}
|
|
|
|
func benchRead(b *testing.B, size, cachesz int) {
|
|
b.StopTimer()
|
|
d := New(Options{
|
|
BasePath: "speed-test",
|
|
Transform: func(string) []string { return []string{} },
|
|
CacheSizeMax: uint64(cachesz),
|
|
})
|
|
defer d.EraseAll()
|
|
|
|
keys := genKeys()
|
|
value := genValue(size)
|
|
d.load(keys, value)
|
|
shuffle(keys)
|
|
b.SetBytes(int64(size))
|
|
|
|
b.StartTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = d.Read(keys[i%len(keys)])
|
|
}
|
|
b.StopTimer()
|
|
}
|
|
|
|
func benchWrite(b *testing.B, size int, withIndex bool) {
|
|
b.StopTimer()
|
|
|
|
options := Options{
|
|
BasePath: "speed-test",
|
|
Transform: func(string) []string { return []string{} },
|
|
CacheSizeMax: 0,
|
|
}
|
|
if withIndex {
|
|
options.Index = &BTreeIndex{}
|
|
options.IndexLess = strLess
|
|
}
|
|
|
|
d := New(options)
|
|
defer d.EraseAll()
|
|
keys := genKeys()
|
|
value := genValue(size)
|
|
shuffle(keys)
|
|
b.SetBytes(int64(size))
|
|
|
|
b.StartTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
d.Write(keys[i%len(keys)], value)
|
|
}
|
|
b.StopTimer()
|
|
}
|
|
|
|
func BenchmarkWrite__32B_NoIndex(b *testing.B) {
|
|
benchWrite(b, 32, false)
|
|
}
|
|
|
|
func BenchmarkWrite__1KB_NoIndex(b *testing.B) {
|
|
benchWrite(b, 1024, false)
|
|
}
|
|
|
|
func BenchmarkWrite__4KB_NoIndex(b *testing.B) {
|
|
benchWrite(b, 4096, false)
|
|
}
|
|
|
|
func BenchmarkWrite_10KB_NoIndex(b *testing.B) {
|
|
benchWrite(b, 10240, false)
|
|
}
|
|
|
|
func BenchmarkWrite__32B_WithIndex(b *testing.B) {
|
|
benchWrite(b, 32, true)
|
|
}
|
|
|
|
func BenchmarkWrite__1KB_WithIndex(b *testing.B) {
|
|
benchWrite(b, 1024, true)
|
|
}
|
|
|
|
func BenchmarkWrite__4KB_WithIndex(b *testing.B) {
|
|
benchWrite(b, 4096, true)
|
|
}
|
|
|
|
func BenchmarkWrite_10KB_WithIndex(b *testing.B) {
|
|
benchWrite(b, 10240, true)
|
|
}
|
|
|
|
func BenchmarkRead__32B_NoCache(b *testing.B) {
|
|
benchRead(b, 32, 0)
|
|
}
|
|
|
|
func BenchmarkRead__1KB_NoCache(b *testing.B) {
|
|
benchRead(b, 1024, 0)
|
|
}
|
|
|
|
func BenchmarkRead__4KB_NoCache(b *testing.B) {
|
|
benchRead(b, 4096, 0)
|
|
}
|
|
|
|
func BenchmarkRead_10KB_NoCache(b *testing.B) {
|
|
benchRead(b, 10240, 0)
|
|
}
|
|
|
|
func BenchmarkRead__32B_WithCache(b *testing.B) {
|
|
benchRead(b, 32, keyCount*32*2)
|
|
}
|
|
|
|
func BenchmarkRead__1KB_WithCache(b *testing.B) {
|
|
benchRead(b, 1024, keyCount*1024*2)
|
|
}
|
|
|
|
func BenchmarkRead__4KB_WithCache(b *testing.B) {
|
|
benchRead(b, 4096, keyCount*4096*2)
|
|
}
|
|
|
|
func BenchmarkRead_10KB_WithCache(b *testing.B) {
|
|
benchRead(b, 10240, keyCount*4096*2)
|
|
}
|