Afaik, nobody is using it. I've never used it myself. 1) atomic, os.Write, map, codec benchmarks all seem temporary and to be of no use in the future. 2) syncing benchmark may be useful, but we're trying to move away from Bash. Also, the blocks are empty there.pull/4016/head
@ -1,29 +0,0 @@ | |||||
package benchmarks | |||||
import ( | |||||
"sync/atomic" | |||||
"testing" | |||||
"unsafe" | |||||
) | |||||
func BenchmarkAtomicUintPtr(b *testing.B) { | |||||
b.StopTimer() | |||||
pointers := make([]uintptr, 1000) | |||||
b.Log(unsafe.Sizeof(pointers[0])) | |||||
b.StartTimer() | |||||
for j := 0; j < b.N; j++ { | |||||
atomic.StoreUintptr(&pointers[j%1000], uintptr(j)) | |||||
} | |||||
} | |||||
func BenchmarkAtomicPointer(b *testing.B) { | |||||
b.StopTimer() | |||||
pointers := make([]unsafe.Pointer, 1000) | |||||
b.Log(unsafe.Sizeof(pointers[0])) | |||||
b.StartTimer() | |||||
for j := 0; j < b.N; j++ { | |||||
atomic.StorePointer(&pointers[j%1000], unsafe.Pointer(uintptr(j))) | |||||
} | |||||
} |
@ -1,2 +0,0 @@ | |||||
data | |||||
@ -1,80 +0,0 @@ | |||||
#!/bin/bash | |||||
DATA=$GOPATH/src/github.com/tendermint/tendermint/benchmarks/blockchain/data | |||||
if [ ! -d $DATA ]; then | |||||
echo "no data found, generating a chain... (this only has to happen once)" | |||||
tendermint init --home $DATA | |||||
cp $DATA/config.toml $DATA/config2.toml | |||||
echo " | |||||
[consensus] | |||||
timeout_commit = 0 | |||||
" >> $DATA/config.toml | |||||
echo "starting node" | |||||
tendermint node \ | |||||
--home $DATA \ | |||||
--proxy_app kvstore \ | |||||
--p2p.laddr tcp://127.0.0.1:56656 \ | |||||
--rpc.laddr tcp://127.0.0.1:56657 \ | |||||
--log_level error & | |||||
echo "making blocks for 60s" | |||||
sleep 60 | |||||
mv $DATA/config2.toml $DATA/config.toml | |||||
kill %1 | |||||
echo "done generating chain." | |||||
fi | |||||
# validator node | |||||
HOME1=$TMPDIR$RANDOM$RANDOM | |||||
cp -R $DATA $HOME1 | |||||
echo "starting validator node" | |||||
tendermint node \ | |||||
--home $HOME1 \ | |||||
--proxy_app kvstore \ | |||||
--p2p.laddr tcp://127.0.0.1:56656 \ | |||||
--rpc.laddr tcp://127.0.0.1:56657 \ | |||||
--log_level error & | |||||
sleep 1 | |||||
# downloader node | |||||
HOME2=$TMPDIR$RANDOM$RANDOM | |||||
tendermint init --home $HOME2 | |||||
cp $HOME1/genesis.json $HOME2 | |||||
printf "starting downloader node" | |||||
tendermint node \ | |||||
--home $HOME2 \ | |||||
--proxy_app kvstore \ | |||||
--p2p.laddr tcp://127.0.0.1:56666 \ | |||||
--rpc.laddr tcp://127.0.0.1:56667 \ | |||||
--p2p.persistent_peers 127.0.0.1:56656 \ | |||||
--log_level error & | |||||
# wait for node to start up so we only count time where we are actually syncing | |||||
sleep 0.5 | |||||
while curl localhost:56667/status 2> /dev/null | grep "\"latest_block_height\": 0," > /dev/null | |||||
do | |||||
printf '.' | |||||
sleep 0.2 | |||||
done | |||||
echo | |||||
echo "syncing blockchain for 10s" | |||||
for i in {1..10} | |||||
do | |||||
sleep 1 | |||||
HEIGHT="$(curl localhost:56667/status 2> /dev/null \ | |||||
| grep 'latest_block_height' \ | |||||
| grep -o ' [0-9]*' \ | |||||
| xargs)" | |||||
let 'RATE = HEIGHT / i' | |||||
echo "height: $HEIGHT, blocks/sec: $RATE" | |||||
done | |||||
kill %1 | |||||
kill %2 | |||||
rm -rf $HOME1 $HOME2 |
@ -1,19 +0,0 @@ | |||||
package benchmarks | |||||
import ( | |||||
"testing" | |||||
) | |||||
func BenchmarkChanMakeClose(b *testing.B) { | |||||
b.StopTimer() | |||||
b.StartTimer() | |||||
for j := 0; j < b.N; j++ { | |||||
foo := make(chan struct{}) | |||||
close(foo) | |||||
something, ok := <-foo | |||||
if ok { | |||||
b.Error(something, ok) | |||||
} | |||||
} | |||||
} |
@ -1,123 +0,0 @@ | |||||
package benchmarks | |||||
import ( | |||||
"testing" | |||||
"time" | |||||
amino "github.com/tendermint/go-amino" | |||||
proto "github.com/tendermint/tendermint/benchmarks/proto" | |||||
"github.com/tendermint/tendermint/crypto/ed25519" | |||||
"github.com/tendermint/tendermint/p2p" | |||||
ctypes "github.com/tendermint/tendermint/rpc/core/types" | |||||
) | |||||
func testNodeInfo(id p2p.ID) p2p.DefaultNodeInfo { | |||||
return p2p.DefaultNodeInfo{ | |||||
ProtocolVersion: p2p.ProtocolVersion{P2P: 1, Block: 2, App: 3}, | |||||
ID_: id, | |||||
Moniker: "SOMENAME", | |||||
Network: "SOMENAME", | |||||
ListenAddr: "SOMEADDR", | |||||
Version: "SOMEVER", | |||||
Other: p2p.DefaultNodeInfoOther{ | |||||
TxIndex: "on", | |||||
RPCAddress: "0.0.0.0:26657", | |||||
}, | |||||
} | |||||
} | |||||
func BenchmarkEncodeStatusWire(b *testing.B) { | |||||
b.StopTimer() | |||||
cdc := amino.NewCodec() | |||||
ctypes.RegisterAmino(cdc) | |||||
nodeKey := p2p.NodeKey{PrivKey: ed25519.GenPrivKey()} | |||||
status := &ctypes.ResultStatus{ | |||||
NodeInfo: testNodeInfo(nodeKey.ID()), | |||||
SyncInfo: ctypes.SyncInfo{ | |||||
LatestBlockHash: []byte("SOMEBYTES"), | |||||
LatestBlockHeight: 123, | |||||
LatestBlockTime: time.Unix(0, 1234), | |||||
}, | |||||
ValidatorInfo: ctypes.ValidatorInfo{ | |||||
PubKey: nodeKey.PubKey(), | |||||
}, | |||||
} | |||||
b.StartTimer() | |||||
counter := 0 | |||||
for i := 0; i < b.N; i++ { | |||||
jsonBytes, err := cdc.MarshalJSON(status) | |||||
if err != nil { | |||||
panic(err) | |||||
} | |||||
counter += len(jsonBytes) | |||||
} | |||||
} | |||||
func BenchmarkEncodeNodeInfoWire(b *testing.B) { | |||||
b.StopTimer() | |||||
cdc := amino.NewCodec() | |||||
ctypes.RegisterAmino(cdc) | |||||
nodeKey := p2p.NodeKey{PrivKey: ed25519.GenPrivKey()} | |||||
nodeInfo := testNodeInfo(nodeKey.ID()) | |||||
b.StartTimer() | |||||
counter := 0 | |||||
for i := 0; i < b.N; i++ { | |||||
jsonBytes, err := cdc.MarshalJSON(nodeInfo) | |||||
if err != nil { | |||||
panic(err) | |||||
} | |||||
counter += len(jsonBytes) | |||||
} | |||||
} | |||||
func BenchmarkEncodeNodeInfoBinary(b *testing.B) { | |||||
b.StopTimer() | |||||
cdc := amino.NewCodec() | |||||
ctypes.RegisterAmino(cdc) | |||||
nodeKey := p2p.NodeKey{PrivKey: ed25519.GenPrivKey()} | |||||
nodeInfo := testNodeInfo(nodeKey.ID()) | |||||
b.StartTimer() | |||||
counter := 0 | |||||
for i := 0; i < b.N; i++ { | |||||
jsonBytes := cdc.MustMarshalBinaryBare(nodeInfo) | |||||
counter += len(jsonBytes) | |||||
} | |||||
} | |||||
func BenchmarkEncodeNodeInfoProto(b *testing.B) { | |||||
b.StopTimer() | |||||
nodeKey := p2p.NodeKey{PrivKey: ed25519.GenPrivKey()} | |||||
nodeID := string(nodeKey.ID()) | |||||
someName := "SOMENAME" | |||||
someAddr := "SOMEADDR" | |||||
someVer := "SOMEVER" | |||||
someString := "SOMESTRING" | |||||
otherString := "OTHERSTRING" | |||||
nodeInfo := proto.NodeInfo{ | |||||
Id: &proto.ID{Id: &nodeID}, | |||||
Moniker: &someName, | |||||
Network: &someName, | |||||
ListenAddr: &someAddr, | |||||
Version: &someVer, | |||||
Other: []string{someString, otherString}, | |||||
} | |||||
b.StartTimer() | |||||
counter := 0 | |||||
for i := 0; i < b.N; i++ { | |||||
bytes, err := nodeInfo.Marshal() | |||||
if err != nil { | |||||
b.Fatal(err) | |||||
return | |||||
} | |||||
//jsonBytes := wire.JSONBytes(nodeInfo) | |||||
counter += len(bytes) | |||||
} | |||||
} |
@ -1 +0,0 @@ | |||||
package benchmarks |
@ -1,35 +0,0 @@ | |||||
package benchmarks | |||||
import ( | |||||
"testing" | |||||
cmn "github.com/tendermint/tendermint/libs/common" | |||||
) | |||||
func BenchmarkSomething(b *testing.B) { | |||||
b.StopTimer() | |||||
numItems := 100000 | |||||
numChecks := 100000 | |||||
keys := make([]string, numItems) | |||||
for i := 0; i < numItems; i++ { | |||||
keys[i] = cmn.RandStr(100) | |||||
} | |||||
txs := make([]string, numChecks) | |||||
for i := 0; i < numChecks; i++ { | |||||
txs[i] = cmn.RandStr(100) | |||||
} | |||||
b.StartTimer() | |||||
counter := 0 | |||||
for j := 0; j < b.N; j++ { | |||||
foo := make(map[string]string) | |||||
for _, key := range keys { | |||||
foo[key] = key | |||||
} | |||||
for _, tx := range txs { | |||||
if _, ok := foo[tx]; ok { | |||||
counter++ | |||||
} | |||||
} | |||||
} | |||||
} |
@ -1,33 +0,0 @@ | |||||
package benchmarks | |||||
import ( | |||||
"os" | |||||
"testing" | |||||
cmn "github.com/tendermint/tendermint/libs/common" | |||||
) | |||||
func BenchmarkFileWrite(b *testing.B) { | |||||
b.StopTimer() | |||||
file, err := os.OpenFile("benchmark_file_write.out", | |||||
os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) | |||||
if err != nil { | |||||
b.Error(err) | |||||
} | |||||
testString := cmn.RandStr(200) + "\n" | |||||
b.StartTimer() | |||||
for i := 0; i < b.N; i++ { | |||||
_, err := file.Write([]byte(testString)) | |||||
if err != nil { | |||||
b.Error(err) | |||||
} | |||||
} | |||||
if err := file.Close(); err != nil { | |||||
b.Error(err) | |||||
} | |||||
if err := os.Remove("benchmark_file_write.out"); err != nil { | |||||
b.Error(err) | |||||
} | |||||
} |
@ -1,2 +0,0 @@ | |||||
Doing some protobuf tests here. | |||||
Using gogoprotobuf. |
@ -1,29 +0,0 @@ | |||||
message ResultStatus { | |||||
optional NodeInfo nodeInfo = 1; | |||||
required PubKey pubKey = 2; | |||||
required bytes latestBlockHash = 3; | |||||
required int64 latestBlockHeight = 4; | |||||
required int64 latestBlocktime = 5; | |||||
} | |||||
message NodeInfo { | |||||
required ID id = 1; | |||||
required string moniker = 2; | |||||
required string network = 3; | |||||
required string remoteAddr = 4; | |||||
required string listenAddr = 5; | |||||
required string version = 6; | |||||
repeated string other = 7; | |||||
} | |||||
message ID { | |||||
required string id = 1; | |||||
} | |||||
message PubKey { | |||||
optional PubKeyEd25519 ed25519 = 1; | |||||
} | |||||
message PubKeyEd25519 { | |||||
required bytes bytes = 1; | |||||
} |
@ -1,47 +0,0 @@ | |||||
package main | |||||
import ( | |||||
"context" | |||||
"encoding/binary" | |||||
"fmt" | |||||
"time" | |||||
cmn "github.com/tendermint/tendermint/libs/common" | |||||
rpcclient "github.com/tendermint/tendermint/rpc/lib/client" | |||||
) | |||||
func main() { | |||||
wsc := rpcclient.NewWSClient("127.0.0.1:26657", "/websocket") | |||||
err := wsc.Start() | |||||
if err != nil { | |||||
cmn.Exit(err.Error()) | |||||
} | |||||
defer wsc.Stop() | |||||
// Read a bunch of responses | |||||
go func() { | |||||
for { | |||||
_, ok := <-wsc.ResponsesCh | |||||
if !ok { | |||||
break | |||||
} | |||||
//fmt.Println("Received response", string(wire.JSONBytes(res))) | |||||
} | |||||
}() | |||||
// Make a bunch of requests | |||||
buf := make([]byte, 32) | |||||
for i := 0; ; i++ { | |||||
binary.BigEndian.PutUint64(buf, uint64(i)) | |||||
//txBytes := hex.EncodeToString(buf[:n]) | |||||
fmt.Print(".") | |||||
err = wsc.Call(context.TODO(), "broadcast_tx", map[string]interface{}{"tx": buf[:8]}) | |||||
if err != nil { | |||||
cmn.Exit(err.Error()) | |||||
} | |||||
if i%1000 == 0 { | |||||
fmt.Println(i) | |||||
} | |||||
time.Sleep(time.Microsecond * 1000) | |||||
} | |||||
} |