Merge pull request #68 from filecoin-project/bench/state-tree

initial benchmarks for state tree operations
This commit is contained in:
Whyrusleeping 2019-07-22 12:13:28 -07:00 committed by GitHub
commit 13e217987b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

109
chain/statetree_test.go Normal file
View File

@ -0,0 +1,109 @@
package chain
import (
"testing"
actors "github.com/filecoin-project/go-lotus/chain/actors"
address "github.com/filecoin-project/go-lotus/chain/address"
"github.com/filecoin-project/go-lotus/chain/types"
hamt "github.com/ipfs/go-hamt-ipld"
)
func BenchmarkStateTreeSet(b *testing.B) {
cst := hamt.NewCborStore()
st, err := NewStateTree(cst)
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
a, err := address.NewIDAddress(uint64(i))
if err != nil {
b.Fatal(err)
}
err = st.SetActor(a, &types.Actor{
Balance: types.NewInt(1258812523),
Code: actors.StorageMinerCodeCid,
Head: actors.AccountActorCodeCid,
Nonce: uint64(i),
})
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkStateTreeSetFlush(b *testing.B) {
cst := hamt.NewCborStore()
st, err := NewStateTree(cst)
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
a, err := address.NewIDAddress(uint64(i))
if err != nil {
b.Fatal(err)
}
err = st.SetActor(a, &types.Actor{
Balance: types.NewInt(1258812523),
Code: actors.StorageMinerCodeCid,
Head: actors.AccountActorCodeCid,
Nonce: uint64(i),
})
if err != nil {
b.Fatal(err)
}
if _, err := st.Flush(); err != nil {
b.Fatal(err)
}
}
}
func BenchmarkStateTree10kGetActor(b *testing.B) {
cst := hamt.NewCborStore()
st, err := NewStateTree(cst)
if err != nil {
b.Fatal(err)
}
for i := 0; i < 10000; i++ {
a, err := address.NewIDAddress(uint64(i))
if err != nil {
b.Fatal(err)
}
err = st.SetActor(a, &types.Actor{
Balance: types.NewInt(1258812523 + uint64(i)),
Code: actors.StorageMinerCodeCid,
Head: actors.AccountActorCodeCid,
Nonce: uint64(i),
})
if err != nil {
b.Fatal(err)
}
}
if _, err := st.Flush(); err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
a, err := address.NewIDAddress(uint64(i % 10000))
if err != nil {
b.Fatal(err)
}
_, err = st.GetActor(a)
if err != nil {
b.Fatal(err)
}
}
}