optimize benchmark

thanks joe
This commit is contained in:
siddontang 2014-10-29 12:32:57 +08:00
parent 522d94e31e
commit 9282c7223e
3 changed files with 51 additions and 57 deletions

View File

@ -4,11 +4,6 @@ import (
"container/list" "container/list"
"strings" "strings"
"sync" "sync"
"time"
)
const (
pingPeriod time.Duration = 3 * time.Second
) )
type Config struct { type Config struct {
@ -98,7 +93,6 @@ func (c *Client) put(conn *Conn) {
c.Unlock() c.Unlock()
conn.finalize() conn.finalize()
} else { } else {
conn.lastActive = time.Now()
c.conns.PushFront(conn) c.conns.PushFront(conn)
c.Unlock() c.Unlock()
} }

View File

@ -8,7 +8,6 @@ import (
"io" "io"
"net" "net"
"strconv" "strconv"
"time"
) )
// Error represents an error returned in a command reply. // Error represents an error returned in a command reply.
@ -28,8 +27,6 @@ type Conn struct {
rSize int rSize int
wSize int wSize int
lastActive time.Time
// Scratch space for formatting argument length. // Scratch space for formatting argument length.
// '*' or '$', length, "\r\n" // '*' or '$', length, "\r\n"
lenScratch [32]byte lenScratch [32]byte

View File

@ -22,29 +22,27 @@ var tests = flag.String("t", "", "only run the comma separated list of tests, se
var wg sync.WaitGroup var wg sync.WaitGroup
var client *ledis.Client var client *ledis.Client
var loop int = 0 var loop int = 0
func waitBench(cmd string, args ...interface{}) { func waitBench(c *ledis.Conn, cmd string, args ...interface{}) {
c := client.Get()
defer c.Close()
_, err := c.Do(strings.ToUpper(cmd), args...) _, err := c.Do(strings.ToUpper(cmd), args...)
if err != nil { if err != nil {
fmt.Printf("do %s error %s\n", cmd, err.Error()) fmt.Printf("do %s error %s\n", cmd, err.Error())
return
} }
} }
func bench(cmd string, f func()) { func bench(cmd string, f func(c *ledis.Conn)) {
wg.Add(*clients) wg.Add(*clients)
t1 := time.Now() t1 := time.Now()
for i := 0; i < *clients; i++ { for i := 0; i < *clients; i++ {
go func() { go func() {
c := client.Get()
for j := 0; j < loop; j++ { for j := 0; j < loop; j++ {
f() f(c)
} }
c.Close()
wg.Done() wg.Done()
}() }()
} }
@ -68,78 +66,78 @@ var kvIncrBase int64 = 0
var kvDelBase int64 = 0 var kvDelBase int64 = 0
func benchSet() { func benchSet() {
f := func() { f := func(c *ledis.Conn) {
value := make([]byte, *valueSize) value := make([]byte, *valueSize)
n := atomic.AddInt64(&kvSetBase, 1) n := atomic.AddInt64(&kvSetBase, 1)
waitBench("set", n, value) waitBench(c, "SET", n, value)
} }
bench("set", f) bench("set", f)
} }
func benchGet() { func benchGet() {
f := func() { f := func(c *ledis.Conn) {
n := atomic.AddInt64(&kvGetBase, 1) n := atomic.AddInt64(&kvGetBase, 1)
waitBench("get", n) waitBench(c, "GET", n)
} }
bench("get", f) bench("get", f)
} }
func benchRandGet() { func benchRandGet() {
f := func() { f := func(c *ledis.Conn) {
n := rand.Int() % *number n := rand.Int() % *number
waitBench("get", n) waitBench(c, "GET", n)
} }
bench("randget", f) bench("randget", f)
} }
func benchDel() { func benchDel() {
f := func() { f := func(c *ledis.Conn) {
n := atomic.AddInt64(&kvDelBase, 1) n := atomic.AddInt64(&kvDelBase, 1)
waitBench("del", n) waitBench(c, "DEL", n)
} }
bench("del", f) bench("del", f)
} }
func benchPushList() { func benchPushList() {
f := func() { f := func(c *ledis.Conn) {
value := make([]byte, 100) value := make([]byte, 100)
waitBench("rpush", "mytestlist", value) waitBench(c, "RPUSH", "mytestlist", value)
} }
bench("rpush", f) bench("rpush", f)
} }
func benchRangeList10() { func benchRangeList10() {
f := func() { f := func(c *ledis.Conn) {
waitBench("lrange", "mytestlist", 0, 10) waitBench(c, "LRANGE", "mytestlist", 0, 10)
} }
bench("lrange10", f) bench("lrange10", f)
} }
func benchRangeList50() { func benchRangeList50() {
f := func() { f := func(c *ledis.Conn) {
waitBench("lrange", "mytestlist", 0, 50) waitBench(c, "LRANGE", "mytestlist", 0, 50)
} }
bench("lrange50", f) bench("lrange50", f)
} }
func benchRangeList100() { func benchRangeList100() {
f := func() { f := func(c *ledis.Conn) {
waitBench("lrange", "mytestlist", 0, 100) waitBench(c, "LRANGE", "mytestlist", 0, 100)
} }
bench("lrange100", f) bench("lrange100", f)
} }
func benchPopList() { func benchPopList() {
f := func() { f := func(c *ledis.Conn) {
waitBench("lpop", "mytestlist") waitBench(c, "LPOP", "mytestlist")
} }
bench("lpop", f) bench("lpop", f)
@ -151,38 +149,38 @@ var hashGetBase int64 = 0
var hashDelBase int64 = 0 var hashDelBase int64 = 0
func benchHset() { func benchHset() {
f := func() { f := func(c *ledis.Conn) {
value := make([]byte, 100) value := make([]byte, 100)
n := atomic.AddInt64(&hashSetBase, 1) n := atomic.AddInt64(&hashSetBase, 1)
waitBench("hset", "myhashkey", n, value) waitBench(c, "HSET", "myhashkey", n, value)
} }
bench("hset", f) bench("hset", f)
} }
func benchHGet() { func benchHGet() {
f := func() { f := func(c *ledis.Conn) {
n := atomic.AddInt64(&hashGetBase, 1) n := atomic.AddInt64(&hashGetBase, 1)
waitBench("hget", "myhashkey", n) waitBench(c, "HGET", "myhashkey", n)
} }
bench("hget", f) bench("hget", f)
} }
func benchHRandGet() { func benchHRandGet() {
f := func() { f := func(c *ledis.Conn) {
n := rand.Int() % *number n := rand.Int() % *number
waitBench("hget", "myhashkey", n) waitBench(c, "HGET", "myhashkey", n)
} }
bench("hrandget", f) bench("hrandget", f)
} }
func benchHDel() { func benchHDel() {
f := func() { f := func(c *ledis.Conn) {
n := atomic.AddInt64(&hashDelBase, 1) n := atomic.AddInt64(&hashDelBase, 1)
waitBench("hdel", "myhashkey", n) waitBench(c, "HDEL", "myhashkey", n)
} }
bench("hdel", f) bench("hdel", f)
@ -193,60 +191,60 @@ var zsetDelBase int64 = 0
var zsetIncrBase int64 = 0 var zsetIncrBase int64 = 0
func benchZAdd() { func benchZAdd() {
f := func() { f := func(c *ledis.Conn) {
member := make([]byte, 16) member := make([]byte, 16)
n := atomic.AddInt64(&zsetAddBase, 1) n := atomic.AddInt64(&zsetAddBase, 1)
waitBench("zadd", "myzsetkey", n, member) waitBench(c, "ZADD", "myzsetkey", n, member)
} }
bench("zadd", f) bench("zadd", f)
} }
func benchZDel() { func benchZDel() {
f := func() { f := func(c *ledis.Conn) {
n := atomic.AddInt64(&zsetDelBase, 1) n := atomic.AddInt64(&zsetDelBase, 1)
waitBench("zrem", "myzsetkey", n) waitBench(c, "ZREM", "myzsetkey", n)
} }
bench("zrem", f) bench("zrem", f)
} }
func benchZIncr() { func benchZIncr() {
f := func() { f := func(c *ledis.Conn) {
n := atomic.AddInt64(&zsetIncrBase, 1) n := atomic.AddInt64(&zsetIncrBase, 1)
waitBench("zincrby", "myzsetkey", 1, n) waitBench(c, "ZINCRBY", "myzsetkey", 1, n)
} }
bench("zincrby", f) bench("zincrby", f)
} }
func benchZRangeByScore() { func benchZRangeByScore() {
f := func() { f := func(c *ledis.Conn) {
waitBench("zrangebyscore", "myzsetkey", 0, rand.Int(), "withscores", "limit", rand.Int()%100, 100) waitBench(c, "ZRANGEBYSCORE", "myzsetkey", 0, rand.Int(), "withscores", "limit", rand.Int()%100, 100)
} }
bench("zrangebyscore", f) bench("zrangebyscore", f)
} }
func benchZRangeByRank() { func benchZRangeByRank() {
f := func() { f := func(c *ledis.Conn) {
waitBench("zrange", "myzsetkey", 0, rand.Int()%100) waitBench(c, "ZRANGE", "myzsetkey", 0, rand.Int()%100)
} }
bench("zrange", f) bench("zrange", f)
} }
func benchZRevRangeByScore() { func benchZRevRangeByScore() {
f := func() { f := func(c *ledis.Conn) {
waitBench("zrevrangebyscore", "myzsetkey", 0, rand.Int(), "withscores", "limit", rand.Int()%100, 100) waitBench(c, "ZREVRANGEBYSCORE", "myzsetkey", 0, rand.Int(), "withscores", "limit", rand.Int()%100, 100)
} }
bench("zrevrangebyscore", f) bench("zrevrangebyscore", f)
} }
func benchZRevRangeByRank() { func benchZRevRangeByRank() {
f := func() { f := func(c *ledis.Conn) {
waitBench("zrevrange", "myzsetkey", 0, rand.Int()%100) waitBench(c, "ZREVRANGE", "myzsetkey", 0, rand.Int()%100)
} }
bench("zrevrange", f) bench("zrevrange", f)
@ -278,6 +276,11 @@ func main() {
cfg.WriteBufferSize = 10240 cfg.WriteBufferSize = 10240
client = ledis.NewClient(cfg) client = ledis.NewClient(cfg)
for i := 0; i < *clients; i++ {
c := client.Get()
c.Close()
}
if *round <= 0 { if *round <= 0 {
*round = 1 *round = 1
} }