From ba09138af529e164874d062ebed4f18b1fe49311 Mon Sep 17 00:00:00 2001 From: Rado M Date: Thu, 4 Jan 2024 10:43:26 +0200 Subject: [PATCH 1/8] feat(benchmarks): runtime utility function and host imports --- Makefile | 9 +- env/utils.go | 48 ++++ env/utils_benchmarks.go | 30 +++ frame/system/module.go | 1 + gossamer | 2 +- primitives/benchmark/utils.go | 39 +++ primitives/benchmark/utils_benchmarks.go | 45 ++++ runtime/balances_force_free_benchmark_test.go | 238 ++++++++++++++++++ runtime/runtime.go | 115 ++++++++- 9 files changed, 520 insertions(+), 7 deletions(-) create mode 100644 env/utils.go create mode 100644 env/utils_benchmarks.go create mode 100644 primitives/benchmark/utils.go create mode 100644 primitives/benchmark/utils_benchmarks.go create mode 100644 runtime/balances_force_free_benchmark_test.go diff --git a/Makefile b/Makefile index 83aae3f3..aea1a346 100644 --- a/Makefile +++ b/Makefile @@ -77,6 +77,10 @@ build-dev: build-tinygo @echo "Building \"runtime.wasm\""; \ WASMOPT="$(CURRENT_DIR)/$(WASMOPT_PATH)" $(TINYGO_BUILD_COMMAND) -o=$(BUILD_PATH) runtime/runtime.go +build-benchmarks: build-tinygo + @echo "Building \"runtime.wasm\" (no-debug)"; \ + WASMOPT="$(CURRENT_DIR)/$(WASMOPT_PATH)" $(TINYGO_BUILD_COMMAND_NODEBUG) -tags benchmarks -o=$(BUILD_PATH) runtime/runtime.go + start-network: cp build/runtime.wasm polkadot-sdk/substrate/bin/node-template/runtime.wasm; \ cd polkadot-sdk/substrate/bin/node-template/node; \ @@ -94,4 +98,7 @@ test-integration: test-coverage: @set -e; \ - ./scripts/coverage.sh \ No newline at end of file + ./scripts/coverage.sh + +benchmark: + @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=1x ./runtime/... \ No newline at end of file diff --git a/env/utils.go b/env/utils.go new file mode 100644 index 00000000..fccba546 --- /dev/null +++ b/env/utils.go @@ -0,0 +1,48 @@ +//go:build !benchmarks + +package env + +//go:wasmimport env ext_benchmarks_time_now_version_1 +func ExtBenchmarksTimeNowVersion1() int64 { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_whitelist_key_version_1 +func ExtBenchmarksDbWhitelistKeyVersion1(key int64) { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_reset_tracker_version_1 +func ExtBenchmarksDbResetTrackerVersion1() { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_start_tracker_version_1 +func ExtBenchmarksDbStartTrackerVersion1() { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_stop_tracker_version_1 +func ExtBenchmarksDbStopTrackerVersion1() { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_wipe_version_1 +func ExtBenchmarksDbWipeVersion1() { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_commit_version_1 +func ExtBenchmarksDbCommitVersion1() { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_read_count_version_1 +func ExtBenchmarksDbReadCountVersion1() int32 { + panic("not implemented") +} + +//go:wasmimport env ext_benchmarks_db_write_count_version_1 +func ExtBenchmarksDbWriteCountVersion1() int32 { + panic("not implemented") +} diff --git a/env/utils_benchmarks.go b/env/utils_benchmarks.go new file mode 100644 index 00000000..8ba914b8 --- /dev/null +++ b/env/utils_benchmarks.go @@ -0,0 +1,30 @@ +//go:build benchmarks + +package env + +//go:wasmimport env ext_benchmarks_time_now_version_1 +func ExtBenchmarksTimeNowVersion1() int64 + +//go:wasmimport env ext_benchmarks_db_whitelist_key_version_1 +func ExtBenchmarksDbWhitelistKeyVersion1(key int64) + +//go:wasmimport env ext_benchmarks_db_reset_tracker_version_1 +func ExtBenchmarksDbResetTrackerVersion1() + +//go:wasmimport env ext_benchmarks_db_start_tracker_version_1 +func ExtBenchmarksDbStartTrackerVersion1() + +//go:wasmimport env ext_benchmarks_db_stop_tracker_version_1 +func ExtBenchmarksDbStopTrackerVersion1() + +//go:wasmimport env ext_benchmarks_db_wipe_version_1 +func ExtBenchmarksDbWipeVersion1() + +//go:wasmimport env ext_benchmarks_db_commit_version_1 +func ExtBenchmarksDbCommitVersion1() + +//go:wasmimport env ext_benchmarks_db_read_count_version_1 +func ExtBenchmarksDbReadCountVersion1() int32 + +//go:wasmimport env ext_benchmarks_db_write_count_version_1 +func ExtBenchmarksDbWriteCountVersion1() int32 diff --git a/frame/system/module.go b/frame/system/module.go index 00db4ea6..ec64fa53 100644 --- a/frame/system/module.go +++ b/frame/system/module.go @@ -56,6 +56,7 @@ type Module interface { StorageBlockHashExists(key sc.U64) bool StorageBlockNumber() (sc.U64, error) + StorageBlockNumberSet(sc.U64) StorageLastRuntimeUpgrade() (types.LastRuntimeUpgradeInfo, error) StorageLastRuntimeUpgradeSet(lrui types.LastRuntimeUpgradeInfo) diff --git a/gossamer b/gossamer index a6403dd2..e56d753c 160000 --- a/gossamer +++ b/gossamer @@ -1 +1 @@ -Subproject commit a6403dd22c54ed3c35cdc78a0c2381fd93447b9a +Subproject commit e56d753cadcc903163aa3fe02cf2dcec1d441d03 diff --git a/primitives/benchmark/utils.go b/primitives/benchmark/utils.go new file mode 100644 index 00000000..f6ac445b --- /dev/null +++ b/primitives/benchmark/utils.go @@ -0,0 +1,39 @@ +//go:build !benchmarks + +package benchmark + +func TimeNow() int64 { + panic("not implemented") +} + +func DbWhitelistKey(key []byte) { + panic("not implemented") +} + +func DbResetTracker() { + panic("not implemented") +} + +func DbStartTracker() { + panic("not implemented") +} + +func DbStopTracker() { + panic("not implemented") +} + +func DbWipe() { + panic("not implemented") +} + +func DbCommit() { + panic("not implemented") +} + +func DbReadCount() int32 { + panic("not implemented") +} + +func DbWriteCount() int32 { + panic("not implemented") +} diff --git a/primitives/benchmark/utils_benchmarks.go b/primitives/benchmark/utils_benchmarks.go new file mode 100644 index 00000000..f2b0ed39 --- /dev/null +++ b/primitives/benchmark/utils_benchmarks.go @@ -0,0 +1,45 @@ +//go:build benchmarks + +package benchmark + +import ( + "github.com/LimeChain/gosemble/env" + "github.com/LimeChain/gosemble/utils" +) + +func TimeNow() int64 { + return env.ExtBenchmarksTimeNowVersion1() +} + +func DbWhitelistKey(key []byte) { + keyOffsetSize := utils.NewMemoryTranslator().BytesToOffsetAndSize(key) + env.ExtBenchmarksDbWhitelistKeyVersion1(keyOffsetSize) +} + +func DbResetTracker() { + env.ExtBenchmarksDbResetTrackerVersion1() +} + +func DbStartTracker() { + env.ExtBenchmarksDbStartTrackerVersion1() +} + +func DbStopTracker() { + env.ExtBenchmarksDbStopTrackerVersion1() +} + +func DbWipe() { + env.ExtBenchmarksDbWipeVersion1() +} + +func DbCommit() { + env.ExtBenchmarksDbCommitVersion1() +} + +func DbReadCount() int32 { + return env.ExtBenchmarksDbReadCountVersion1() +} + +func DbWriteCount() int32 { + return env.ExtBenchmarksDbWriteCountVersion1() +} diff --git a/runtime/balances_force_free_benchmark_test.go b/runtime/balances_force_free_benchmark_test.go new file mode 100644 index 00000000..d5d8ad26 --- /dev/null +++ b/runtime/balances_force_free_benchmark_test.go @@ -0,0 +1,238 @@ +package main + +import ( + "bytes" + "encoding/hex" + "math/big" + "testing" + + gossamertypes "github.com/ChainSafe/gossamer/dot/types" + "github.com/ChainSafe/gossamer/lib/common" + "github.com/ChainSafe/gossamer/lib/runtime" + wazero_runtime "github.com/ChainSafe/gossamer/lib/runtime/wazero" + "github.com/ChainSafe/gossamer/lib/trie" + "github.com/ChainSafe/gossamer/pkg/scale" + sc "github.com/LimeChain/goscale" + cscale "github.com/centrifuge/go-substrate-rpc-client/v4/scale" + "github.com/centrifuge/go-substrate-rpc-client/v4/signature" + ctypes "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" + "github.com/stretchr/testify/assert" +) + +func Benchmark_Balances_ForceFree_Step1(b *testing.B) { + benchmarkCallBalancesForceFree(b, 0) +} + +func Benchmark_Balances_ForceFree_Step2(b *testing.B) { + benchmarkCallBalancesForceFree(b, 3000) +} + +func Benchmark_Balances_ForceFree_Step3(b *testing.B) { + benchmarkCallBalancesForceFree(b, 10000000000) +} + +func Benchmark_Balances_ForceFree_Step4(b *testing.B) { + benchmarkCallBalancesForceFree(b, 19462877928727) +} + +func Benchmark_Balances_ForceFree_Step5(b *testing.B) { + benchmarkCallBalancesForceFree(b, 999999999999999999) +} + +func benchmarkCallBalancesForceFree(b *testing.B, n int64) { + rt, storage := newBenchRuntime(b) + + metadata := newBenchRuntimeMetadata(b, rt) + + // BEFORE: + // set up inputs, storage, etc., based on the + // case benchmark case (should be the worst-case) + balance, ok := big.NewInt(0).SetString("500000000000000", 10) + if !ok { + b.Fatal("could not set balance") + } + setStorageAccountInfoForBench(b, storage, signature.TestKeyringPairAlice.PublicKey, balance, 0) + + alice, err := ctypes.NewMultiAddressFromAccountID(signature.TestKeyringPairAlice.PublicKey) + assert.NoError(b, err) + + call, err := ctypes.NewCall(metadata, "Balances.force_unreserve", alice, ctypes.NewU128(*big.NewInt(n))) + assert.NoError(b, err) + + callEnc, err := codec.Encode(call) + assert.NoError(b, err) + + repeatsEnc, err := codec.Encode(uint8(20)) + assert.NoError(b, err) + + callEnc = append(repeatsEnc, callEnc...) + + // EXECUTE: + // the actual benchmark + var res []byte + res, err = rt.Exec("Benchmark_run", callEnc) + + // AFTER: + // validate the result and abort if errors + assert.NoError(b, err) + + buf := bytes.NewBuffer(res) + repeats, _ := sc.DecodeU8(buf) + module, _ := sc.DecodeU8(buf) + function, _ := sc.DecodeU8(buf) + time, _ := sc.DecodeU64(buf) + dbReads, _ := sc.DecodeU32(buf) + dbWrites, _ := sc.DecodeU32(buf) + b.ReportMetric(float64(repeats), "repeats") + b.ReportMetric(float64(module), "module") + b.ReportMetric(float64(function), "function") + b.ReportMetric(float64(time), "time") + b.ReportMetric(float64(dbReads), "reads") + b.ReportMetric(float64(dbWrites), "writes") + + b.Cleanup(func() { + rt.Stop() + }) +} + +func newBenchRuntime(b *testing.B) (*wazero_runtime.Instance, *runtime.Storage) { + runtime := wazero_runtime.NewBenchInstanceWithTrie(b, WASM_RUNTIME, trie.NewEmptyTrie()) + return runtime, &runtime.Context.Storage +} + +func newBenchRuntimeMetadata(b *testing.B, instance *wazero_runtime.Instance) *ctypes.Metadata { + bMetadata, err := instance.Metadata() + assert.NoError(b, err) + + var decoded []byte + err = scale.Unmarshal(bMetadata, &decoded) + assert.NoError(b, err) + + metadata := &ctypes.Metadata{} + err = codec.Decode(decoded, metadata) + assert.NoError(b, err) + + return metadata +} + +func setStorageAccountInfoForBench(b *testing.B, storage *runtime.Storage, account []byte, freeBalance *big.Int, nonce uint32) (storageKey []byte, info gossamertypes.AccountInfo) { + accountInfo := gossamertypes.AccountInfo{ + Nonce: nonce, + Consumers: 0, + Producers: 0, + Sufficients: 0, + Data: gossamertypes.AccountData{ + Free: scale.MustNewUint128(freeBalance), + Reserved: scale.MustNewUint128(big.NewInt(0)), + MiscFrozen: scale.MustNewUint128(big.NewInt(0)), + FreeFrozen: scale.MustNewUint128(big.NewInt(0)), + }, + } + + aliceHash, _ := common.Blake2b128(account) + keyStorageAccount := append(keySystemHash, keyAccountHash...) + keyStorageAccount = append(keyStorageAccount, aliceHash...) + keyStorageAccount = append(keyStorageAccount, account...) + + bytesStorage, err := scale.Marshal(accountInfo) + assert.NoError(b, err) + + err = (*storage).Put(keyStorageAccount, bytesStorage) + assert.NoError(b, err) + + return keyStorageAccount, accountInfo +} + +func setup(b *testing.B, rt *wazero_runtime.Instance, storage *runtime.Storage, metadata *ctypes.Metadata, rtVersion runtime.Version, n int64) []byte { + header := gossamertypes.NewHeader(parentHash, stateRoot, extrinsicsRoot, uint(blockNumber), gossamertypes.NewDigest()) + encodedHeader, err := scale.Marshal(*header) + assert.NoError(b, err) + + _, err = rt.Exec("Core_initialize_block", encodedHeader) + assert.NoError(b, err) + + alice, err := ctypes.NewMultiAddressFromAccountID(signature.TestKeyringPairAlice.PublicKey) + assert.NoError(b, err) + + call, err := ctypes.NewCall(metadata, "Balances.force_unreserve", alice, ctypes.NewU128(*big.NewInt(n))) + assert.NoError(b, err) + + // Create the extrinsic + ext := ctypes.NewExtrinsic(call) + o := ctypes.SignatureOptions{ + BlockHash: ctypes.Hash(parentHash), + Era: ctypes.ExtrinsicEra{IsImmortalEra: true}, + GenesisHash: ctypes.Hash(parentHash), + Nonce: ctypes.NewUCompactFromUInt(0), + SpecVersion: ctypes.U32(rtVersion.SpecVersion), + Tip: ctypes.NewUCompactFromUInt(0), + TransactionVersion: ctypes.U32(rtVersion.TransactionVersion), + } + + // Sign the transaction using Alice's default account + err = ext.Sign(signature.TestKeyringPairAlice, o) + assert.NoError(b, err) + + extEnc := bytes.Buffer{} + encoder := cscale.NewEncoder(&extEnc) + err = ext.Encode(*encoder) + assert.NoError(b, err) + + return extEnc.Bytes() +} + +func benchmarkExtrinsicBalancesForceFreeBadOrigin(b *testing.B, n int64) { + rt, storage := newBenchRuntime(b) + + runtimeVersion, err := rt.Version() + assert.NoError(b, err) + + metadata := newBenchRuntimeMetadata(b, rt) + + // Set up the inputs, params, storage, etc., based on + // the case we want to benchmark, including the worst-case. + encodedExtrinsicBytes := setup(b, rt, storage, metadata, runtimeVersion, n) + + var res []byte + + // Exclude the setup from the benchmark + b.ResetTimer() + for i := 0; i < b.N; i++ { + b.StopTimer() + // Each iteration should benchmark the same state + balance, ok := big.NewInt(0).SetString("500000000000000", 10) + if !ok { + b.Fatal("could not set balance") + } + setStorageAccountInfoForBench(b, storage, signature.TestKeyringPairAlice.PublicKey, balance, 0) + + b.StartTimer() + + (*storage).DbResetTracker() + // Whitelist the account that will be used to sign the extrinsic + accountKey, _ := hex.DecodeString("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d") + (*storage).DbWhitelistKey(string(accountKey)) + + // Measure the DB r/w for single benchmark case + (*storage).DbStartTracker() + // The actual benchmarking of an extrinsic + res, err = rt.Exec("BlockBuilder_apply_extrinsic", encodedExtrinsicBytes) + (*storage).DbStopTracker() + } + // Exclude the teardown from the benchmark + b.StopTimer() + + // Report - add the DB r/w metrics to the benchmark report + b.ReportMetric(float64((*storage).DbReadCount()), "reads") + b.ReportMetric(float64((*storage).DbWriteCount()), "writes") + + // Validate - assert results and abort and report any errors. + assert.NoError(b, err) + assert.Equal(b, applyExtrinsicResultBadOriginErr.Bytes(), res) + + // Cleanup - stop the runtime + b.Cleanup(func() { + rt.Stop() + }) +} diff --git a/runtime/runtime.go b/runtime/runtime.go index c01cacb5..a360bd13 100644 --- a/runtime/runtime.go +++ b/runtime/runtime.go @@ -4,6 +4,9 @@ Targets WebAssembly MVP package main import ( + "bytes" + "encoding/hex" + sc "github.com/LimeChain/goscale" "github.com/LimeChain/gosemble/api/account_nonce" apiAura "github.com/LimeChain/gosemble/api/aura" @@ -24,6 +27,7 @@ import ( "github.com/LimeChain/gosemble/frame/balances" "github.com/LimeChain/gosemble/frame/executive" "github.com/LimeChain/gosemble/frame/grandpa" + "github.com/LimeChain/gosemble/frame/support" "github.com/LimeChain/gosemble/frame/system" sysExtensions "github.com/LimeChain/gosemble/frame/system/extensions" tm "github.com/LimeChain/gosemble/frame/testable" @@ -31,8 +35,10 @@ import ( "github.com/LimeChain/gosemble/frame/transaction_payment" txExtensions "github.com/LimeChain/gosemble/frame/transaction_payment/extensions" "github.com/LimeChain/gosemble/hooks" + "github.com/LimeChain/gosemble/primitives/benchmark" "github.com/LimeChain/gosemble/primitives/log" primitives "github.com/LimeChain/gosemble/primitives/types" + "github.com/LimeChain/gosemble/utils" ) const ( @@ -84,10 +90,12 @@ const ( ) var ( - logger = log.NewLogger() - // Modules contains all the modules used by the runtime. + logger = log.NewLogger() mdGenerator = primitives.NewMetadataTypeGenerator() - modules = initializeModules() + // Modules contains all the modules used by the runtime. + modules = initializeModules() + extra = newSignedExtra() + decoder = types.NewRuntimeDecoder(modules, extra, logger) ) func initializeModules() []primitives.Module { @@ -175,8 +183,6 @@ func newSignedExtra() primitives.SignedExtra { } func runtimeApi() types.RuntimeApi { - extra := newSignedExtra() - decoder := types.NewRuntimeDecoder(modules, extra, logger) runtimeExtrinsic := extrinsic.New(modules, extra, mdGenerator, logger) systemModule := primitives.MustGetModule(SystemIndex, modules).(system.Module) auraModule := primitives.MustGetModule(AuraIndex, modules).(aura.Module) @@ -421,3 +427,102 @@ func GenesisBuilderBuildConfig(dataPtr int32, dataLen int32) int64 { Module(genesisbuilder.ApiModuleName).(genesisbuilder.Module). BuildConfig(dataPtr, dataLen) } + +//go:export Benchmark_run +func BenchmarkRun(dataPtr int32, dataLen int32) int64 { + memUtils := utils.NewMemoryTranslator() + data := memUtils.GetWasmMemorySlice(dataPtr, dataLen) + buffer := bytes.NewBuffer(data) + + // TODO: + // Pass the input params (components, values per component are set by default to 6) + // and execute on a range of components + + repeatCount, err := sc.DecodeU8(buffer) + if err != nil { + logger.Critical(err.Error()) + } + + function, err := decoder.DecodeCall(buffer) + if err != nil { + logger.Critical(err.Error()) + } + + transactional := support.NewTransactional[primitives.PostDispatchInfo, primitives.DispatchError](logger) + systemModule := primitives.MustGetModule(SystemIndex, modules).(system.Module) + + dispatchInfo, err := primitives.PostDispatchInfo{}, primitives.DispatchError{} + measuredDurations := []int64{} + + // Always do at least one internal repeat... + if repeatCount < 1 { + repeatCount = 1 + } + for i := 0; i < int(repeatCount); i++ { + // Reset the state after each execution + dispatchInfo, err = transactional.WithStorageLayer(func() (primitives.PostDispatchInfo, primitives.DispatchError) { + // Always reset the state after the benchmark + benchmark.DbWipe() + + // TODO: + // Set up the externalities environment for the setup we want to + // benchmark. + + // Sets the block number to 1 to allow emitting events + systemModule.StorageBlockNumberSet(1) + + benchmark.DbCommit() + // Commit the externalities to the database, flushing the DB cache. + // This will enable worst case scenario for reading from the database. (commit_db) + + benchmark.DbResetTracker() + // Whitelist specific storage keys + accountKey, _ := hex.DecodeString("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d") + benchmark.DbWhitelistKey([]byte(accountKey)) + benchmark.DbWhitelistKey([]byte(":transaction_level:")) + benchmark.DbWhitelistKey([]byte(":extrinsic_index")) + benchmark.DbWhitelistKey([]byte(":intrablock_entropy")) + + // Reset the read/write counter so we don't count operations in the setup process. + benchmark.DbStartTracker() + + // Calculate the diff caused by the benchmark. + start := benchmark.TimeNow() + + // TODO: primitives.RawOriginFrom(maybeWho) + resWithInfo := function.Dispatch(primitives.NewRawOriginRoot(), function.Args()) + + end := benchmark.TimeNow() + + // Calculate the diff caused by the benchmark. + measuredDurations = append(measuredDurations, end-start) + benchmark.DbStopTracker() + + // Commit the changes to get proper write count + benchmark.DbCommit() + + if resWithInfo.HasError { + return resWithInfo.Err.PostInfo, resWithInfo.Err.Error + } + return resWithInfo.Ok, nil + }) + } + + // Calculate the average time + var averageTime int64 + for _, t := range measuredDurations { + averageTime += t + } + averageTime /= int64(len(measuredDurations)) + + // Return a benchmark result (module, function, time, db reads/writes) + var res []byte + res = append(res, repeatCount.Bytes()...) + res = append(res, function.ModuleIndex().Bytes()...) + res = append(res, function.FunctionIndex().Bytes()...) + res = append(res, sc.U64(averageTime).Bytes()...) + res = append(res, sc.U32(benchmark.DbReadCount()).Bytes()...) + res = append(res, sc.U32(benchmark.DbWriteCount()).Bytes()...) + res = append(res, dispatchInfo.Bytes()...) + return memUtils.BytesToOffsetAndSize(res) +} From f21dff81f643ad454884f2c5b185084a438804ef Mon Sep 17 00:00:00 2001 From: Rado M Date: Mon, 8 Jan 2024 11:43:30 +0200 Subject: [PATCH 2/8] fixes --- Makefile | 2 +- env/utils.go | 9 --------- ...ark_test.go => benchmark_balances_force_free_test.go} | 2 +- 3 files changed, 2 insertions(+), 11 deletions(-) rename runtime/{balances_force_free_benchmark_test.go => benchmark_balances_force_free_test.go} (99%) diff --git a/Makefile b/Makefile index aea1a346..537a9ef9 100644 --- a/Makefile +++ b/Makefile @@ -101,4 +101,4 @@ test-coverage: ./scripts/coverage.sh benchmark: - @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=1x ./runtime/... \ No newline at end of file + @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=20x ./runtime/... \ No newline at end of file diff --git a/env/utils.go b/env/utils.go index fccba546..1bda9b36 100644 --- a/env/utils.go +++ b/env/utils.go @@ -2,47 +2,38 @@ package env -//go:wasmimport env ext_benchmarks_time_now_version_1 func ExtBenchmarksTimeNowVersion1() int64 { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_whitelist_key_version_1 func ExtBenchmarksDbWhitelistKeyVersion1(key int64) { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_reset_tracker_version_1 func ExtBenchmarksDbResetTrackerVersion1() { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_start_tracker_version_1 func ExtBenchmarksDbStartTrackerVersion1() { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_stop_tracker_version_1 func ExtBenchmarksDbStopTrackerVersion1() { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_wipe_version_1 func ExtBenchmarksDbWipeVersion1() { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_commit_version_1 func ExtBenchmarksDbCommitVersion1() { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_read_count_version_1 func ExtBenchmarksDbReadCountVersion1() int32 { panic("not implemented") } -//go:wasmimport env ext_benchmarks_db_write_count_version_1 func ExtBenchmarksDbWriteCountVersion1() int32 { panic("not implemented") } diff --git a/runtime/balances_force_free_benchmark_test.go b/runtime/benchmark_balances_force_free_test.go similarity index 99% rename from runtime/balances_force_free_benchmark_test.go rename to runtime/benchmark_balances_force_free_test.go index d5d8ad26..981a5c3b 100644 --- a/runtime/balances_force_free_benchmark_test.go +++ b/runtime/benchmark_balances_force_free_test.go @@ -63,7 +63,7 @@ func benchmarkCallBalancesForceFree(b *testing.B, n int64) { callEnc, err := codec.Encode(call) assert.NoError(b, err) - repeatsEnc, err := codec.Encode(uint8(20)) + repeatsEnc, err := codec.Encode(uint8(b.N)) assert.NoError(b, err) callEnc = append(repeatsEnc, callEnc...) From 2f2a13fc360872b96699e4006c43fc786db189b7 Mon Sep 17 00:00:00 2001 From: Rado M Date: Mon, 8 Jan 2024 12:53:56 +0200 Subject: [PATCH 3/8] fixes --- .../{utils_benchmarks.go => benchmarks.go} | 2 - primitives/benchmark/utils.go | 39 ------------------- runtime/runtime.go | 9 +++-- 3 files changed, 6 insertions(+), 44 deletions(-) rename primitives/benchmark/{utils_benchmarks.go => benchmarks.go} (97%) delete mode 100644 primitives/benchmark/utils.go diff --git a/primitives/benchmark/utils_benchmarks.go b/primitives/benchmark/benchmarks.go similarity index 97% rename from primitives/benchmark/utils_benchmarks.go rename to primitives/benchmark/benchmarks.go index f2b0ed39..6260d4f0 100644 --- a/primitives/benchmark/utils_benchmarks.go +++ b/primitives/benchmark/benchmarks.go @@ -1,5 +1,3 @@ -//go:build benchmarks - package benchmark import ( diff --git a/primitives/benchmark/utils.go b/primitives/benchmark/utils.go deleted file mode 100644 index f6ac445b..00000000 --- a/primitives/benchmark/utils.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build !benchmarks - -package benchmark - -func TimeNow() int64 { - panic("not implemented") -} - -func DbWhitelistKey(key []byte) { - panic("not implemented") -} - -func DbResetTracker() { - panic("not implemented") -} - -func DbStartTracker() { - panic("not implemented") -} - -func DbStopTracker() { - panic("not implemented") -} - -func DbWipe() { - panic("not implemented") -} - -func DbCommit() { - panic("not implemented") -} - -func DbReadCount() int32 { - panic("not implemented") -} - -func DbWriteCount() int32 { - panic("not implemented") -} diff --git a/runtime/runtime.go b/runtime/runtime.go index a360bd13..cf797423 100644 --- a/runtime/runtime.go +++ b/runtime/runtime.go @@ -428,6 +428,10 @@ func GenesisBuilderBuildConfig(dataPtr int32, dataLen int32) int64 { BuildConfig(dataPtr, dataLen) } +// The state implementation in Gossamer does not implement +// caching and nested transactions (DbCommit, DbWipe) +// https://github.com/ChainSafe/gossamer/discussions/3646 +// //go:export Benchmark_run func BenchmarkRun(dataPtr int32, dataLen int32) int64 { memUtils := utils.NewMemoryTranslator() @@ -477,11 +481,10 @@ func BenchmarkRun(dataPtr int32, dataLen int32) int64 { benchmark.DbResetTracker() // Whitelist specific storage keys - accountKey, _ := hex.DecodeString("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d") - benchmark.DbWhitelistKey([]byte(accountKey)) benchmark.DbWhitelistKey([]byte(":transaction_level:")) benchmark.DbWhitelistKey([]byte(":extrinsic_index")) - benchmark.DbWhitelistKey([]byte(":intrablock_entropy")) + accountKey, _ := hex.DecodeString("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d") + benchmark.DbWhitelistKey([]byte(accountKey)) // Reset the read/write counter so we don't count operations in the setup process. benchmark.DbStartTracker() From 055cf159fa7a0b00ed9f0aee718ea8ceaa89af98 Mon Sep 17 00:00:00 2001 From: Rado M Date: Wed, 10 Jan 2024 15:37:34 +0200 Subject: [PATCH 4/8] refactor + fixes --- Makefile | 2 +- api/benchmarking/module.go | 197 +++++++++++++++ env/utils.go | 18 +- env/utils_benchmarks.go | 36 +-- gossamer | 2 +- primitives/benchmark/benchmarks.go | 43 ---- primitives/benchmarking/benchmarking.go | 155 ++++++++++++ primitives/types/raw_origin.go | 18 ++ runtime/benchmark_balances_force_free_test.go | 238 ------------------ runtime/benchmark_runtime_test.go | 33 +++ runtime/benchmark_timestamp_set_test.go | 76 ++++++ runtime/runtime.go | 108 +------- 12 files changed, 514 insertions(+), 412 deletions(-) create mode 100644 api/benchmarking/module.go delete mode 100644 primitives/benchmark/benchmarks.go create mode 100644 primitives/benchmarking/benchmarking.go delete mode 100644 runtime/benchmark_balances_force_free_test.go create mode 100644 runtime/benchmark_runtime_test.go create mode 100644 runtime/benchmark_timestamp_set_test.go diff --git a/Makefile b/Makefile index 537a9ef9..e0346a33 100644 --- a/Makefile +++ b/Makefile @@ -101,4 +101,4 @@ test-coverage: ./scripts/coverage.sh benchmark: - @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=20x ./runtime/... \ No newline at end of file + @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=100x ./runtime/... \ No newline at end of file diff --git a/api/benchmarking/module.go b/api/benchmarking/module.go new file mode 100644 index 00000000..d4eba8db --- /dev/null +++ b/api/benchmarking/module.go @@ -0,0 +1,197 @@ +package benchmarking + +import ( + "bytes" + + sc "github.com/LimeChain/goscale" + "github.com/LimeChain/gosemble/execution/types" + "github.com/LimeChain/gosemble/frame/support" + "github.com/LimeChain/gosemble/frame/system" + "github.com/LimeChain/gosemble/primitives/benchmarking" + "github.com/LimeChain/gosemble/primitives/io" + "github.com/LimeChain/gosemble/primitives/log" + primitives "github.com/LimeChain/gosemble/primitives/types" + "github.com/LimeChain/gosemble/utils" +) + +var resetStateErr = primitives.NewDispatchErrorOther(sc.Str("reset state error")) + +type Module struct { + systemModule system.Module + transactional support.Transactional[primitives.PostDispatchInfo] + decoder types.RuntimeDecoder + memUtils utils.WasmMemoryTranslator + hashing io.Hashing + logger log.Logger +} + +func New(systemModule system.Module, decoder types.RuntimeDecoder, logger log.Logger) Module { + return Module{ + systemModule: systemModule, + decoder: decoder, + transactional: support.NewTransactional[primitives.PostDispatchInfo](logger), + memUtils: utils.NewMemoryTranslator(), + hashing: io.NewHashing(), + logger: logger, + } +} + +// TODO: +// Implement DbCommit, DbWipe once the state implementation +// in Gossamer supports caching and nested transactions. +// https://github.com/ChainSafe/gossamer/discussions/3646 + +func (m Module) Run(dataPtr int32, dataLen int32) int64 { + data := m.memUtils.GetWasmMemorySlice(dataPtr, dataLen) + buffer := bytes.NewBuffer(data) + + benchmarkConfig, err := benchmarking.DecodeBenchmarkConfig(buffer) + if err != nil { + m.logger.Critical(err.Error()) + } + + opaqueExtrinsic := sc.SequenceU8ToBytes(benchmarkConfig.Extrinsic) + extrinsic, err := m.decoder.DecodeUncheckedExtrinsic(bytes.NewBuffer(opaqueExtrinsic)) + if err != nil { + m.logger.Critical(err.Error()) + } + + function := extrinsic.Function() + args := function.Args() + accountId := m.accountIdFrom(extrinsic.Signature()) + origin := m.originFrom(benchmarkConfig, accountId) + + measuredDurations := []int64{} + + // Always do at least one internal repeat. + repeats := int(benchmarkConfig.InternalRepeats) + if repeats < 1 { + repeats = 1 + } + for i := 1; i <= repeats; i++ { + // The dispatch call is executed in a transactional context, + // allowing to rollback and reset the state after each iteration. + // as an alternative of providing before hook. + + // Does nothing, for now + benchmarking.WipeDb() + + // Set up the externalities environment for the setup we want to + // benchmark. + + // Sets the block number to 1 to allow emitting events + m.systemModule.StorageBlockNumberSet(1) + + // Commit the externalities to the database, flushing the DB cache. + // This will enable worst case scenario for reading from the database. + // Does nothing, for now + benchmarking.CommitDb() + + // Whitelist known storage keys. + benchmarking.SetWhitelist([]byte(":transaction_level:")) + benchmarking.SetWhitelist([]byte(":extrinsic_index")) + + // Whitelist the signer account key. + keyStorageAccount := m.accountStorageKeyFrom(accountId.Value) + benchmarking.SetWhitelist(keyStorageAccount) + + // Reset the read/write counter so we don't count + // operations in the setup process. + benchmarking.ResetReadWriteCount() + + benchmarking.StartDbTracker() + + // Calculate the diff caused by the benchmark. + var start, end int64 + + _, _ = m.transactional.WithStorageLayer( + func() (primitives.PostDispatchInfo, error) { + start = benchmarking.CurrentTime() + + postInfo, err := function.Dispatch(origin, args) + if err != nil { + m.logger.Critical(err.Error()) + } + + end = benchmarking.CurrentTime() + + // Return an error to rollback to the initial state + // so each iteration starts from the same state. + if i == repeats { + // Do not revert the state on the last iteration, so + // the state is available for the validation. + return postInfo, nil + } + return postInfo, resetStateErr + }, + ) + + // Calculate the diff caused by the benchmark. + measuredDurations = append(measuredDurations, end-start) + + benchmarking.StopDbTracker() + + // Commit the changes to get proper write count. + // Does nothing, for now + benchmarking.CommitDb() + } + + // Calculate the average time. + extrinsicTime := calculateAverageTime(measuredDurations) + + benchmarkResult := benchmarking.BenchmarkResult{ + ExtrinsicTime: sc.NewU128(extrinsicTime), + Reads: sc.U32(benchmarking.DbReadCount()), + Writes: sc.U32(benchmarking.DbWriteCount()), + }.Bytes() + + return m.memUtils.BytesToOffsetAndSize(benchmarkResult) +} + +func calculateAverageTime(durations []int64) int64 { + var sum int64 + for _, duration := range durations { + sum += duration + } + return sum / int64(len(durations)) +} + +func (m Module) accountIdFrom(signature sc.Option[primitives.ExtrinsicSignature]) sc.Option[primitives.AccountId] { + var accountId = sc.NewOption[primitives.AccountId](nil) + if signature.HasValue { + id, err := signature.Value.Signer.AsAccountId() + if err != nil { + m.logger.Critical(err.Error()) + } + accountId.Value = id + } + + return accountId +} + +func (m Module) originFrom(benchmarkConfig benchmarking.BenchmarkConfig, accountId sc.Option[primitives.AccountId]) primitives.RawOrigin { + if benchmarkConfig.Origin.HasValue { + return benchmarkConfig.Origin.Value + } else { + return primitives.RawOriginFrom(accountId) + } +} + +func (m Module) accountStorageKeyFrom(address primitives.AccountId) []byte { + // TODO: + // reuse already implemented storage keys generation ? + // + // support.NewHashStorageValue[primitives.AccountId]( + // []byte("System"), + // []byte("Account"), + // primitives.DecodeAccountId, + // ) + addressBytes := address.FixedSequence.Bytes() + keySystemHash := m.hashing.Twox128([]byte("System")) + keyAccountHash := m.hashing.Twox128([]byte("Account")) + addressHash := m.hashing.Blake128(addressBytes) + keyStorageAccount := append(keySystemHash, keyAccountHash...) + keyStorageAccount = append(keyStorageAccount, addressHash...) + keyStorageAccount = append(keyStorageAccount, addressBytes...) + return keyStorageAccount +} diff --git a/env/utils.go b/env/utils.go index 1bda9b36..aefbcc86 100644 --- a/env/utils.go +++ b/env/utils.go @@ -2,38 +2,38 @@ package env -func ExtBenchmarksTimeNowVersion1() int64 { +func ExtBenchmarkingCurrentTimeVersion1() int64 { panic("not implemented") } -func ExtBenchmarksDbWhitelistKeyVersion1(key int64) { +func ExtBenchmarkingSetWhitelistVersion1(key int64) { panic("not implemented") } -func ExtBenchmarksDbResetTrackerVersion1() { +func ExtBenchmarkingResetReadWriteCountVersion1() { panic("not implemented") } -func ExtBenchmarksDbStartTrackerVersion1() { +func ExtBenchmarkingStartDbTrackerVersion1() { panic("not implemented") } -func ExtBenchmarksDbStopTrackerVersion1() { +func ExtBenchmarkingStopDbTrackerVersion1() { panic("not implemented") } -func ExtBenchmarksDbWipeVersion1() { +func ExtBenchmarkingWipeDbVersion1() { panic("not implemented") } -func ExtBenchmarksDbCommitVersion1() { +func ExtBenchmarkingCommitDbVersion1() { panic("not implemented") } -func ExtBenchmarksDbReadCountVersion1() int32 { +func ExtBenchmarkingDbReadCountVersion1() int32 { panic("not implemented") } -func ExtBenchmarksDbWriteCountVersion1() int32 { +func ExtBenchmarkingDbWriteCountVersion1() int32 { panic("not implemented") } diff --git a/env/utils_benchmarks.go b/env/utils_benchmarks.go index 8ba914b8..4005dc1b 100644 --- a/env/utils_benchmarks.go +++ b/env/utils_benchmarks.go @@ -2,29 +2,29 @@ package env -//go:wasmimport env ext_benchmarks_time_now_version_1 -func ExtBenchmarksTimeNowVersion1() int64 +//go:wasmimport env ext_benchmarking_current_time_version_1 +func ExtBenchmarkingCurrentTimeVersion1() int64 -//go:wasmimport env ext_benchmarks_db_whitelist_key_version_1 -func ExtBenchmarksDbWhitelistKeyVersion1(key int64) +//go:wasmimport env ext_benchmarking_set_whitelist_version_1 +func ExtBenchmarkingSetWhitelistVersion1(key int64) -//go:wasmimport env ext_benchmarks_db_reset_tracker_version_1 -func ExtBenchmarksDbResetTrackerVersion1() +//go:wasmimport env ext_benchmarking_reset_read_write_count_version_1 +func ExtBenchmarkingResetReadWriteCountVersion1() -//go:wasmimport env ext_benchmarks_db_start_tracker_version_1 -func ExtBenchmarksDbStartTrackerVersion1() +//go:wasmimport env ext_benchmarking_start_db_tracker_version_1 +func ExtBenchmarkingStartDbTrackerVersion1() -//go:wasmimport env ext_benchmarks_db_stop_tracker_version_1 -func ExtBenchmarksDbStopTrackerVersion1() +//go:wasmimport env ext_benchmarking_stop_db_tracker_version_1 +func ExtBenchmarkingStopDbTrackerVersion1() -//go:wasmimport env ext_benchmarks_db_wipe_version_1 -func ExtBenchmarksDbWipeVersion1() +//go:wasmimport env ext_benchmarking_wipe_db_version_1 +func ExtBenchmarkingWipeDbVersion1() -//go:wasmimport env ext_benchmarks_db_commit_version_1 -func ExtBenchmarksDbCommitVersion1() +//go:wasmimport env ext_benchmarking_commit_db_version_1 +func ExtBenchmarkingCommitDbVersion1() -//go:wasmimport env ext_benchmarks_db_read_count_version_1 -func ExtBenchmarksDbReadCountVersion1() int32 +//go:wasmimport env ext_benchmarking_db_read_count_version_1 +func ExtBenchmarkingDbReadCountVersion1() int32 -//go:wasmimport env ext_benchmarks_db_write_count_version_1 -func ExtBenchmarksDbWriteCountVersion1() int32 +//go:wasmimport env ext_benchmarking_db_write_count_version_1 +func ExtBenchmarkingDbWriteCountVersion1() int32 diff --git a/gossamer b/gossamer index e56d753c..d16027aa 160000 --- a/gossamer +++ b/gossamer @@ -1 +1 @@ -Subproject commit e56d753cadcc903163aa3fe02cf2dcec1d441d03 +Subproject commit d16027aa68b3ae468a38996af5ad400fdebde4d9 diff --git a/primitives/benchmark/benchmarks.go b/primitives/benchmark/benchmarks.go deleted file mode 100644 index 6260d4f0..00000000 --- a/primitives/benchmark/benchmarks.go +++ /dev/null @@ -1,43 +0,0 @@ -package benchmark - -import ( - "github.com/LimeChain/gosemble/env" - "github.com/LimeChain/gosemble/utils" -) - -func TimeNow() int64 { - return env.ExtBenchmarksTimeNowVersion1() -} - -func DbWhitelistKey(key []byte) { - keyOffsetSize := utils.NewMemoryTranslator().BytesToOffsetAndSize(key) - env.ExtBenchmarksDbWhitelistKeyVersion1(keyOffsetSize) -} - -func DbResetTracker() { - env.ExtBenchmarksDbResetTrackerVersion1() -} - -func DbStartTracker() { - env.ExtBenchmarksDbStartTrackerVersion1() -} - -func DbStopTracker() { - env.ExtBenchmarksDbStopTrackerVersion1() -} - -func DbWipe() { - env.ExtBenchmarksDbWipeVersion1() -} - -func DbCommit() { - env.ExtBenchmarksDbCommitVersion1() -} - -func DbReadCount() int32 { - return env.ExtBenchmarksDbReadCountVersion1() -} - -func DbWriteCount() int32 { - return env.ExtBenchmarksDbWriteCountVersion1() -} diff --git a/primitives/benchmarking/benchmarking.go b/primitives/benchmarking/benchmarking.go new file mode 100644 index 00000000..611497f3 --- /dev/null +++ b/primitives/benchmarking/benchmarking.go @@ -0,0 +1,155 @@ +package benchmarking + +import ( + "bytes" + + "github.com/LimeChain/gosemble/env" + "github.com/LimeChain/gosemble/primitives/types" + "github.com/LimeChain/gosemble/utils" + + sc "github.com/LimeChain/goscale" +) + +// TODO: +// Execute on a range of components (values per component are set by default to 6) + +// Configuration used to setup and run runtime benchmarks. +type BenchmarkConfig struct { + // The encoded name of the pallet to benchmark. + // Module sc.Sequence[sc.U8] + + // The encoded name of the benchmark/extrinsic to run. + Extrinsic sc.Sequence[sc.U8] + + Origin sc.Option[types.RawOrigin] + + // The selected component values to use when running the benchmark. + // SelectedComponents Vec<(BenchmarkParameter, u32)> + + // Enable an extra benchmark iteration which runs the verification logic for a benchmark. + // Verify bool + + // Number of times to repeat benchmark within the Wasm environment. (versus in the client) + InternalRepeats sc.U32 +} + +func (bc BenchmarkConfig) Encode(buffer *bytes.Buffer) { + bc.InternalRepeats.Encode(buffer) + bc.Origin.Encode(buffer) + bc.Extrinsic.Encode(buffer) +} + +func (bc BenchmarkConfig) Bytes() []byte { + buffer := bytes.Buffer{} + bc.Encode(&buffer) + return buffer.Bytes() +} + +func DecodeBenchmarkConfig(buffer *bytes.Buffer) (BenchmarkConfig, error) { + internalRepeats, err := sc.DecodeU32(buffer) + if err != nil { + return BenchmarkConfig{}, err + } + + origin, err := sc.DecodeOptionWith(buffer, func(buffer *bytes.Buffer) (types.RawOrigin, error) { + return types.DecodeRawOrigin(buffer) + }) + if err != nil { + return BenchmarkConfig{}, err + } + + extrinsic, err := sc.DecodeSequence[sc.U8](buffer) + if err != nil { + return BenchmarkConfig{}, err + } + + return BenchmarkConfig{ + InternalRepeats: internalRepeats, + Extrinsic: extrinsic, + Origin: origin, + }, nil +} + +// Result from running benchmarks on a FRAME pallet. +// Contains duration of the function call in nanoseconds along with the benchmark parameters +// used for that benchmark result. +type BenchmarkResult struct { + // Components Vec<(BenchmarkParameter, sc.U32)> + ExtrinsicTime sc.U128 + // StorageRootTime sc.U128 + Reads sc.U32 + // RepeatReads sc.U32 + Writes sc.U32 + // RepeatWrites sc.U32 + // ProofSize sc.U32 + // Keys Vec<(Vec, u32, u32, bool)> // Skip +} + +func (br BenchmarkResult) Encode(buffer *bytes.Buffer) { + br.ExtrinsicTime.Encode(buffer) + br.Reads.Encode(buffer) + br.Writes.Encode(buffer) +} + +func (br BenchmarkResult) Bytes() []byte { + buffer := bytes.Buffer{} + br.Encode(&buffer) + return buffer.Bytes() +} + +func DecodeBenchmarkResult(buffer *bytes.Buffer) (BenchmarkResult, error) { + extrinsicTime, err := sc.DecodeU128(buffer) + if err != nil { + return BenchmarkResult{}, err + } + reads, err := sc.DecodeU32(buffer) + if err != nil { + return BenchmarkResult{}, err + } + writes, err := sc.DecodeU32(buffer) + if err != nil { + return BenchmarkResult{}, err + } + return BenchmarkResult{ + ExtrinsicTime: extrinsicTime, + Reads: reads, + Writes: writes, + }, nil +} + +func CurrentTime() int64 { + return env.ExtBenchmarkingCurrentTimeVersion1() +} + +func SetWhitelist(key []byte) { + keyOffsetSize := utils.NewMemoryTranslator().BytesToOffsetAndSize(key) + env.ExtBenchmarkingSetWhitelistVersion1(keyOffsetSize) +} + +func ResetReadWriteCount() { + env.ExtBenchmarkingResetReadWriteCountVersion1() +} + +func StartDbTracker() { + env.ExtBenchmarkingStartDbTrackerVersion1() +} + +func StopDbTracker() { + env.ExtBenchmarkingStopDbTrackerVersion1() +} + +func WipeDb() { + env.ExtBenchmarkingWipeDbVersion1() +} + +func CommitDb() { + env.ExtBenchmarkingCommitDbVersion1() +} + +func DbReadCount() int32 { + return env.ExtBenchmarkingDbReadCountVersion1() +} + +func DbWriteCount() int32 { + return env.ExtBenchmarkingDbWriteCountVersion1() +} diff --git a/primitives/types/raw_origin.go b/primitives/types/raw_origin.go index 84a0affc..8c558965 100644 --- a/primitives/types/raw_origin.go +++ b/primitives/types/raw_origin.go @@ -1,6 +1,8 @@ package types import ( + "bytes" + sc "github.com/LimeChain/goscale" ) @@ -53,3 +55,19 @@ func (o RawOrigin) AsSigned() (AccountId, error) { return o.VaryingData[1].(AccountId), nil } + +func DecodeRawOrigin(buffer *bytes.Buffer) (RawOrigin, error) { + b, err := sc.DecodeU8(buffer) + if err != nil { + return RawOrigin{}, err + } + + switch b { + case RawOriginRoot: + return NewRawOriginRoot(), nil + case RawOriginNone: + return NewRawOriginNone(), nil + default: + return RawOrigin{}, newTypeError("RawOrigin") + } +} diff --git a/runtime/benchmark_balances_force_free_test.go b/runtime/benchmark_balances_force_free_test.go deleted file mode 100644 index 981a5c3b..00000000 --- a/runtime/benchmark_balances_force_free_test.go +++ /dev/null @@ -1,238 +0,0 @@ -package main - -import ( - "bytes" - "encoding/hex" - "math/big" - "testing" - - gossamertypes "github.com/ChainSafe/gossamer/dot/types" - "github.com/ChainSafe/gossamer/lib/common" - "github.com/ChainSafe/gossamer/lib/runtime" - wazero_runtime "github.com/ChainSafe/gossamer/lib/runtime/wazero" - "github.com/ChainSafe/gossamer/lib/trie" - "github.com/ChainSafe/gossamer/pkg/scale" - sc "github.com/LimeChain/goscale" - cscale "github.com/centrifuge/go-substrate-rpc-client/v4/scale" - "github.com/centrifuge/go-substrate-rpc-client/v4/signature" - ctypes "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" - "github.com/stretchr/testify/assert" -) - -func Benchmark_Balances_ForceFree_Step1(b *testing.B) { - benchmarkCallBalancesForceFree(b, 0) -} - -func Benchmark_Balances_ForceFree_Step2(b *testing.B) { - benchmarkCallBalancesForceFree(b, 3000) -} - -func Benchmark_Balances_ForceFree_Step3(b *testing.B) { - benchmarkCallBalancesForceFree(b, 10000000000) -} - -func Benchmark_Balances_ForceFree_Step4(b *testing.B) { - benchmarkCallBalancesForceFree(b, 19462877928727) -} - -func Benchmark_Balances_ForceFree_Step5(b *testing.B) { - benchmarkCallBalancesForceFree(b, 999999999999999999) -} - -func benchmarkCallBalancesForceFree(b *testing.B, n int64) { - rt, storage := newBenchRuntime(b) - - metadata := newBenchRuntimeMetadata(b, rt) - - // BEFORE: - // set up inputs, storage, etc., based on the - // case benchmark case (should be the worst-case) - balance, ok := big.NewInt(0).SetString("500000000000000", 10) - if !ok { - b.Fatal("could not set balance") - } - setStorageAccountInfoForBench(b, storage, signature.TestKeyringPairAlice.PublicKey, balance, 0) - - alice, err := ctypes.NewMultiAddressFromAccountID(signature.TestKeyringPairAlice.PublicKey) - assert.NoError(b, err) - - call, err := ctypes.NewCall(metadata, "Balances.force_unreserve", alice, ctypes.NewU128(*big.NewInt(n))) - assert.NoError(b, err) - - callEnc, err := codec.Encode(call) - assert.NoError(b, err) - - repeatsEnc, err := codec.Encode(uint8(b.N)) - assert.NoError(b, err) - - callEnc = append(repeatsEnc, callEnc...) - - // EXECUTE: - // the actual benchmark - var res []byte - res, err = rt.Exec("Benchmark_run", callEnc) - - // AFTER: - // validate the result and abort if errors - assert.NoError(b, err) - - buf := bytes.NewBuffer(res) - repeats, _ := sc.DecodeU8(buf) - module, _ := sc.DecodeU8(buf) - function, _ := sc.DecodeU8(buf) - time, _ := sc.DecodeU64(buf) - dbReads, _ := sc.DecodeU32(buf) - dbWrites, _ := sc.DecodeU32(buf) - b.ReportMetric(float64(repeats), "repeats") - b.ReportMetric(float64(module), "module") - b.ReportMetric(float64(function), "function") - b.ReportMetric(float64(time), "time") - b.ReportMetric(float64(dbReads), "reads") - b.ReportMetric(float64(dbWrites), "writes") - - b.Cleanup(func() { - rt.Stop() - }) -} - -func newBenchRuntime(b *testing.B) (*wazero_runtime.Instance, *runtime.Storage) { - runtime := wazero_runtime.NewBenchInstanceWithTrie(b, WASM_RUNTIME, trie.NewEmptyTrie()) - return runtime, &runtime.Context.Storage -} - -func newBenchRuntimeMetadata(b *testing.B, instance *wazero_runtime.Instance) *ctypes.Metadata { - bMetadata, err := instance.Metadata() - assert.NoError(b, err) - - var decoded []byte - err = scale.Unmarshal(bMetadata, &decoded) - assert.NoError(b, err) - - metadata := &ctypes.Metadata{} - err = codec.Decode(decoded, metadata) - assert.NoError(b, err) - - return metadata -} - -func setStorageAccountInfoForBench(b *testing.B, storage *runtime.Storage, account []byte, freeBalance *big.Int, nonce uint32) (storageKey []byte, info gossamertypes.AccountInfo) { - accountInfo := gossamertypes.AccountInfo{ - Nonce: nonce, - Consumers: 0, - Producers: 0, - Sufficients: 0, - Data: gossamertypes.AccountData{ - Free: scale.MustNewUint128(freeBalance), - Reserved: scale.MustNewUint128(big.NewInt(0)), - MiscFrozen: scale.MustNewUint128(big.NewInt(0)), - FreeFrozen: scale.MustNewUint128(big.NewInt(0)), - }, - } - - aliceHash, _ := common.Blake2b128(account) - keyStorageAccount := append(keySystemHash, keyAccountHash...) - keyStorageAccount = append(keyStorageAccount, aliceHash...) - keyStorageAccount = append(keyStorageAccount, account...) - - bytesStorage, err := scale.Marshal(accountInfo) - assert.NoError(b, err) - - err = (*storage).Put(keyStorageAccount, bytesStorage) - assert.NoError(b, err) - - return keyStorageAccount, accountInfo -} - -func setup(b *testing.B, rt *wazero_runtime.Instance, storage *runtime.Storage, metadata *ctypes.Metadata, rtVersion runtime.Version, n int64) []byte { - header := gossamertypes.NewHeader(parentHash, stateRoot, extrinsicsRoot, uint(blockNumber), gossamertypes.NewDigest()) - encodedHeader, err := scale.Marshal(*header) - assert.NoError(b, err) - - _, err = rt.Exec("Core_initialize_block", encodedHeader) - assert.NoError(b, err) - - alice, err := ctypes.NewMultiAddressFromAccountID(signature.TestKeyringPairAlice.PublicKey) - assert.NoError(b, err) - - call, err := ctypes.NewCall(metadata, "Balances.force_unreserve", alice, ctypes.NewU128(*big.NewInt(n))) - assert.NoError(b, err) - - // Create the extrinsic - ext := ctypes.NewExtrinsic(call) - o := ctypes.SignatureOptions{ - BlockHash: ctypes.Hash(parentHash), - Era: ctypes.ExtrinsicEra{IsImmortalEra: true}, - GenesisHash: ctypes.Hash(parentHash), - Nonce: ctypes.NewUCompactFromUInt(0), - SpecVersion: ctypes.U32(rtVersion.SpecVersion), - Tip: ctypes.NewUCompactFromUInt(0), - TransactionVersion: ctypes.U32(rtVersion.TransactionVersion), - } - - // Sign the transaction using Alice's default account - err = ext.Sign(signature.TestKeyringPairAlice, o) - assert.NoError(b, err) - - extEnc := bytes.Buffer{} - encoder := cscale.NewEncoder(&extEnc) - err = ext.Encode(*encoder) - assert.NoError(b, err) - - return extEnc.Bytes() -} - -func benchmarkExtrinsicBalancesForceFreeBadOrigin(b *testing.B, n int64) { - rt, storage := newBenchRuntime(b) - - runtimeVersion, err := rt.Version() - assert.NoError(b, err) - - metadata := newBenchRuntimeMetadata(b, rt) - - // Set up the inputs, params, storage, etc., based on - // the case we want to benchmark, including the worst-case. - encodedExtrinsicBytes := setup(b, rt, storage, metadata, runtimeVersion, n) - - var res []byte - - // Exclude the setup from the benchmark - b.ResetTimer() - for i := 0; i < b.N; i++ { - b.StopTimer() - // Each iteration should benchmark the same state - balance, ok := big.NewInt(0).SetString("500000000000000", 10) - if !ok { - b.Fatal("could not set balance") - } - setStorageAccountInfoForBench(b, storage, signature.TestKeyringPairAlice.PublicKey, balance, 0) - - b.StartTimer() - - (*storage).DbResetTracker() - // Whitelist the account that will be used to sign the extrinsic - accountKey, _ := hex.DecodeString("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d") - (*storage).DbWhitelistKey(string(accountKey)) - - // Measure the DB r/w for single benchmark case - (*storage).DbStartTracker() - // The actual benchmarking of an extrinsic - res, err = rt.Exec("BlockBuilder_apply_extrinsic", encodedExtrinsicBytes) - (*storage).DbStopTracker() - } - // Exclude the teardown from the benchmark - b.StopTimer() - - // Report - add the DB r/w metrics to the benchmark report - b.ReportMetric(float64((*storage).DbReadCount()), "reads") - b.ReportMetric(float64((*storage).DbWriteCount()), "writes") - - // Validate - assert results and abort and report any errors. - assert.NoError(b, err) - assert.Equal(b, applyExtrinsicResultBadOriginErr.Bytes(), res) - - // Cleanup - stop the runtime - b.Cleanup(func() { - rt.Stop() - }) -} diff --git a/runtime/benchmark_runtime_test.go b/runtime/benchmark_runtime_test.go new file mode 100644 index 00000000..2a2c7473 --- /dev/null +++ b/runtime/benchmark_runtime_test.go @@ -0,0 +1,33 @@ +package main + +import ( + "testing" + + "github.com/ChainSafe/gossamer/lib/runtime" + wazero_runtime "github.com/ChainSafe/gossamer/lib/runtime/wazero" + "github.com/ChainSafe/gossamer/lib/trie" + "github.com/ChainSafe/gossamer/pkg/scale" + ctypes "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" + "github.com/stretchr/testify/assert" +) + +func newBenchmarkingRuntime(b *testing.B) (*wazero_runtime.Instance, *runtime.Storage) { + runtime := wazero_runtime.NewBenchInstanceWithTrie(b, WASM_RUNTIME, trie.NewEmptyTrie()) + return runtime, &runtime.Context.Storage +} + +func newBenchmarkingRuntimeMetadata(b *testing.B, instance *wazero_runtime.Instance) *ctypes.Metadata { + bMetadata, err := instance.Metadata() + assert.NoError(b, err) + + var decoded []byte + err = scale.Unmarshal(bMetadata, &decoded) + assert.NoError(b, err) + + metadata := &ctypes.Metadata{} + err = codec.Decode(decoded, metadata) + assert.NoError(b, err) + + return metadata +} diff --git a/runtime/benchmark_timestamp_set_test.go b/runtime/benchmark_timestamp_set_test.go new file mode 100644 index 00000000..f7a491f3 --- /dev/null +++ b/runtime/benchmark_timestamp_set_test.go @@ -0,0 +1,76 @@ +package main + +import ( + "bytes" + "testing" + "time" + + sc "github.com/LimeChain/goscale" + "github.com/LimeChain/gosemble/primitives/benchmarking" + "github.com/LimeChain/gosemble/primitives/types" + cscale "github.com/centrifuge/go-substrate-rpc-client/v4/scale" + ctypes "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/stretchr/testify/assert" +) + +// TODO: add more steps or implement components +func BenchmarkTimestampSetStep1(b *testing.B) { + benchmarkTimestampSet(b) +} + +func benchmarkTimestampSet(b *testing.B) { + rt, storage := newBenchmarkingRuntime(b) + + metadata := newBenchmarkingRuntimeMetadata(b, rt) + + // TODO: switch to Gosemble types + + // Setup the input params + now := uint64(time.Now().UnixMilli()) + call, err := ctypes.NewCall(metadata, "Timestamp.set", ctypes.NewUCompactFromUInt(now)) + assert.NoError(b, err) + extrinsic := ctypes.NewExtrinsic(call) + encodedExtrinsic := bytes.Buffer{} + encoder := cscale.NewEncoder(&encodedExtrinsic) + err = extrinsic.Encode(*encoder) + assert.NoError(b, err) + + benchmarkConfig := benchmarking.BenchmarkConfig{ + InternalRepeats: sc.U32(b.N), + Extrinsic: sc.BytesToSequenceU8(encodedExtrinsic.Bytes()), + Origin: sc.NewOption[types.RawOrigin](types.NewRawOriginNone()), + } + + // Setup the state + (*storage).Put(append(keyTimestampHash, keyTimestampNowHash...), sc.U64(0).Bytes()) + assert.NoError(b, err) + + (*storage).DbWhitelistKey(string(append(keyTimestampHash, keyTimestampDidUpdate...))) + + res, err := rt.Exec("Benchmark_run", benchmarkConfig.Bytes()) + + assert.NoError(b, err) + + // Validate the result/state + nowStorageValue, err := sc.DecodeU64(bytes.NewBuffer((*storage).Get(append(keyTimestampHash, keyTimestampNowHash...)))) + assert.NoError(b, err) + assert.Equal(b, sc.U64(now), nowStorageValue) + + didUpdateStorageValue, err := sc.DecodeBool(bytes.NewBuffer((*storage).Get(append(keyTimestampHash, keyTimestampDidUpdate...)))) + assert.NoError(b, err) + assert.Equal(b, sc.Bool(true), didUpdateStorageValue) + + benchmarkResult, err := benchmarking.DecodeBenchmarkResult(bytes.NewBuffer(res)) + assert.NoError(b, err) + + b.ReportMetric(float64(call.CallIndex.SectionIndex), "module") + b.ReportMetric(float64(call.CallIndex.MethodIndex), "function") + b.ReportMetric(float64(b.N), "repeats") + b.ReportMetric(float64(benchmarkResult.ExtrinsicTime.ToBigInt().Int64()), "time") + b.ReportMetric(float64(benchmarkResult.Reads), "reads") + b.ReportMetric(float64(benchmarkResult.Writes), "writes") + + b.Cleanup(func() { + rt.Stop() + }) +} diff --git a/runtime/runtime.go b/runtime/runtime.go index cf797423..b58404b3 100644 --- a/runtime/runtime.go +++ b/runtime/runtime.go @@ -4,12 +4,10 @@ Targets WebAssembly MVP package main import ( - "bytes" - "encoding/hex" - sc "github.com/LimeChain/goscale" "github.com/LimeChain/gosemble/api/account_nonce" apiAura "github.com/LimeChain/gosemble/api/aura" + "github.com/LimeChain/gosemble/api/benchmarking" blockbuilder "github.com/LimeChain/gosemble/api/block_builder" "github.com/LimeChain/gosemble/api/core" genesisbuilder "github.com/LimeChain/gosemble/api/genesis_builder" @@ -27,7 +25,6 @@ import ( "github.com/LimeChain/gosemble/frame/balances" "github.com/LimeChain/gosemble/frame/executive" "github.com/LimeChain/gosemble/frame/grandpa" - "github.com/LimeChain/gosemble/frame/support" "github.com/LimeChain/gosemble/frame/system" sysExtensions "github.com/LimeChain/gosemble/frame/system/extensions" tm "github.com/LimeChain/gosemble/frame/testable" @@ -35,10 +32,8 @@ import ( "github.com/LimeChain/gosemble/frame/transaction_payment" txExtensions "github.com/LimeChain/gosemble/frame/transaction_payment/extensions" "github.com/LimeChain/gosemble/hooks" - "github.com/LimeChain/gosemble/primitives/benchmark" "github.com/LimeChain/gosemble/primitives/log" primitives "github.com/LimeChain/gosemble/primitives/types" - "github.com/LimeChain/gosemble/utils" ) const ( @@ -428,104 +423,13 @@ func GenesisBuilderBuildConfig(dataPtr int32, dataLen int32) int64 { BuildConfig(dataPtr, dataLen) } -// The state implementation in Gossamer does not implement -// caching and nested transactions (DbCommit, DbWipe) -// https://github.com/ChainSafe/gossamer/discussions/3646 -// //go:export Benchmark_run func BenchmarkRun(dataPtr int32, dataLen int32) int64 { - memUtils := utils.NewMemoryTranslator() - data := memUtils.GetWasmMemorySlice(dataPtr, dataLen) - buffer := bytes.NewBuffer(data) - - // TODO: - // Pass the input params (components, values per component are set by default to 6) - // and execute on a range of components - - repeatCount, err := sc.DecodeU8(buffer) - if err != nil { - logger.Critical(err.Error()) - } - - function, err := decoder.DecodeCall(buffer) - if err != nil { - logger.Critical(err.Error()) - } - - transactional := support.NewTransactional[primitives.PostDispatchInfo, primitives.DispatchError](logger) systemModule := primitives.MustGetModule(SystemIndex, modules).(system.Module) - dispatchInfo, err := primitives.PostDispatchInfo{}, primitives.DispatchError{} - measuredDurations := []int64{} - - // Always do at least one internal repeat... - if repeatCount < 1 { - repeatCount = 1 - } - for i := 0; i < int(repeatCount); i++ { - // Reset the state after each execution - dispatchInfo, err = transactional.WithStorageLayer(func() (primitives.PostDispatchInfo, primitives.DispatchError) { - // Always reset the state after the benchmark - benchmark.DbWipe() - - // TODO: - // Set up the externalities environment for the setup we want to - // benchmark. - - // Sets the block number to 1 to allow emitting events - systemModule.StorageBlockNumberSet(1) - - benchmark.DbCommit() - // Commit the externalities to the database, flushing the DB cache. - // This will enable worst case scenario for reading from the database. (commit_db) - - benchmark.DbResetTracker() - // Whitelist specific storage keys - benchmark.DbWhitelistKey([]byte(":transaction_level:")) - benchmark.DbWhitelistKey([]byte(":extrinsic_index")) - accountKey, _ := hex.DecodeString("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d") - benchmark.DbWhitelistKey([]byte(accountKey)) - - // Reset the read/write counter so we don't count operations in the setup process. - benchmark.DbStartTracker() - - // Calculate the diff caused by the benchmark. - start := benchmark.TimeNow() - - // TODO: primitives.RawOriginFrom(maybeWho) - resWithInfo := function.Dispatch(primitives.NewRawOriginRoot(), function.Args()) - - end := benchmark.TimeNow() - - // Calculate the diff caused by the benchmark. - measuredDurations = append(measuredDurations, end-start) - benchmark.DbStopTracker() - - // Commit the changes to get proper write count - benchmark.DbCommit() - - if resWithInfo.HasError { - return resWithInfo.Err.PostInfo, resWithInfo.Err.Error - } - return resWithInfo.Ok, nil - }) - } - - // Calculate the average time - var averageTime int64 - for _, t := range measuredDurations { - averageTime += t - } - averageTime /= int64(len(measuredDurations)) - - // Return a benchmark result (module, function, time, db reads/writes) - var res []byte - res = append(res, repeatCount.Bytes()...) - res = append(res, function.ModuleIndex().Bytes()...) - res = append(res, function.FunctionIndex().Bytes()...) - res = append(res, sc.U64(averageTime).Bytes()...) - res = append(res, sc.U32(benchmark.DbReadCount()).Bytes()...) - res = append(res, sc.U32(benchmark.DbWriteCount()).Bytes()...) - res = append(res, dispatchInfo.Bytes()...) - return memUtils.BytesToOffsetAndSize(res) + return benchmarking.New( + systemModule, + decoder, + logger, + ).Run(dataPtr, dataLen) } From c2fb2c2b528afcc6721a33105ec357fe881a6a1f Mon Sep 17 00:00:00 2001 From: Rado M Date: Fri, 12 Jan 2024 10:17:08 +0200 Subject: [PATCH 5/8] fix + more test coverage --- primitives/types/raw_origin.go | 6 +++ primitives/types/raw_origin_test.go | 76 ++++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/primitives/types/raw_origin.go b/primitives/types/raw_origin.go index 8c558965..ef4fc9f1 100644 --- a/primitives/types/raw_origin.go +++ b/primitives/types/raw_origin.go @@ -65,6 +65,12 @@ func DecodeRawOrigin(buffer *bytes.Buffer) (RawOrigin, error) { switch b { case RawOriginRoot: return NewRawOriginRoot(), nil + case RawOriginSigned: + address, err := DecodeAccountId(buffer) + if err != nil { + return RawOrigin{}, err + } + return NewRawOriginSigned(address), nil case RawOriginNone: return NewRawOriginNone(), nil default: diff --git a/primitives/types/raw_origin_test.go b/primitives/types/raw_origin_test.go index 65efb62d..57c65335 100644 --- a/primitives/types/raw_origin_test.go +++ b/primitives/types/raw_origin_test.go @@ -1,7 +1,9 @@ package types import ( + "bytes" "encoding/hex" + "io" "testing" sc "github.com/LimeChain/goscale" @@ -12,13 +14,16 @@ var ( bytesAddress, _ = hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000") address, _ = NewAccountId(sc.BytesToSequenceU8(bytesAddress)...) - signedOrigin = NewRawOriginSigned(address) + rootOrigin = NewRawOriginRoot() + signedOrigin = NewRawOriginSigned(address) + signedOriginInvalidAddress = NewRawOriginSigned(AccountId{}) + noneOrigin = NewRawOriginNone() ) func Test_NewRawOriginRoot(t *testing.T) { expect := RawOrigin{sc.NewVaryingData(RawOriginRoot)} - assert.Equal(t, expect, NewRawOriginRoot()) + assert.Equal(t, expect, rootOrigin) } func Test_NewRawOriginSigned(t *testing.T) { @@ -30,7 +35,7 @@ func Test_NewRawOriginSigned(t *testing.T) { func Test_NewRawOriginNone(t *testing.T) { expect := RawOrigin{sc.NewVaryingData(RawOriginNone)} - assert.Equal(t, expect, NewRawOriginNone()) + assert.Equal(t, expect, noneOrigin) } func Test_RawOriginFrom(t *testing.T) { @@ -46,25 +51,25 @@ func Test_RawOriginFrom_Empty(t *testing.T) { result := RawOriginFrom(option) - assert.Equal(t, NewRawOriginNone(), result) + assert.Equal(t, noneOrigin, result) } func Test_RawOrigin_IsRootOrigin(t *testing.T) { - assert.Equal(t, true, NewRawOriginRoot().IsRootOrigin()) + assert.Equal(t, true, rootOrigin.IsRootOrigin()) assert.Equal(t, false, signedOrigin.IsRootOrigin()) - assert.Equal(t, false, NewRawOriginNone().IsRootOrigin()) + assert.Equal(t, false, noneOrigin.IsRootOrigin()) } func Test_RawOrigin_IsSignedOrigin(t *testing.T) { - assert.Equal(t, false, NewRawOriginRoot().IsSignedOrigin()) + assert.Equal(t, false, rootOrigin.IsSignedOrigin()) assert.Equal(t, true, signedOrigin.IsSignedOrigin()) - assert.Equal(t, false, NewRawOriginNone().IsSignedOrigin()) + assert.Equal(t, false, noneOrigin.IsSignedOrigin()) } func Test_RawOrigin_IsNoneOrigin(t *testing.T) { - assert.Equal(t, false, NewRawOriginRoot().IsNoneOrigin()) + assert.Equal(t, false, rootOrigin.IsNoneOrigin()) assert.Equal(t, false, signedOrigin.IsNoneOrigin()) - assert.Equal(t, true, NewRawOriginNone().IsNoneOrigin()) + assert.Equal(t, true, noneOrigin.IsNoneOrigin()) } func Test_RawOrigin_AsSigned(t *testing.T) { @@ -75,7 +80,7 @@ func Test_RawOrigin_AsSigned(t *testing.T) { } func Test_RawOriginRoot_AsSigned_TypeError(t *testing.T) { - address, err := NewRawOriginRoot().AsSigned() + address, err := rootOrigin.AsSigned() assert.Error(t, err) assert.Equal(t, "not a valid 'RawOrigin' type", err.Error()) @@ -83,9 +88,56 @@ func Test_RawOriginRoot_AsSigned_TypeError(t *testing.T) { } func Test_RawOriginNone_AsSigned_TypeError(t *testing.T) { - address, err := NewRawOriginNone().AsSigned() + address, err := noneOrigin.AsSigned() assert.Error(t, err) assert.Equal(t, "not a valid 'RawOrigin' type", err.Error()) assert.Equal(t, AccountId{}, address) } + +func Test_DecodeRawOrigin_Root(t *testing.T) { + buffer := bytes.NewBuffer(rootOrigin.Bytes()) + + result, err := DecodeRawOrigin(buffer) + + assert.NoError(t, err) + assert.Equal(t, rootOrigin, result) +} + +func Test_DecodeRawOrigin_Signed(t *testing.T) { + buffer := bytes.NewBuffer(signedOrigin.Bytes()) + + result, err := DecodeRawOrigin(buffer) + + assert.NoError(t, err) + assert.Equal(t, signedOrigin, result) +} + +func Test_DecodeRawOrigin_Signed_InvalidAddress(t *testing.T) { + buffer := bytes.NewBuffer(signedOriginInvalidAddress.Bytes()) + + result, err := DecodeRawOrigin(buffer) + + assert.Error(t, err) + assert.Equal(t, io.EOF, err) + assert.Equal(t, RawOrigin{}, result) +} + +func Test_DecodeRawOrigin_None(t *testing.T) { + buffer := bytes.NewBuffer(noneOrigin.Bytes()) + + result, err := DecodeRawOrigin(buffer) + + assert.NoError(t, err) + assert.Equal(t, noneOrigin, result) +} + +func Test_DecodeRawOrigin_InvalidType(t *testing.T) { + buffer := bytes.NewBuffer([]byte{0x03}) + + result, err := DecodeRawOrigin(buffer) + + assert.Error(t, err) + assert.Equal(t, "not a valid 'RawOrigin' type", err.Error()) + assert.Equal(t, RawOrigin{}, result) +} From 6b6ec71c3e7e40f1896e19b7176cec983a35565a Mon Sep 17 00:00:00 2001 From: Rado M Date: Mon, 15 Jan 2024 10:00:49 +0200 Subject: [PATCH 6/8] refactor the time measure --- api/benchmarking/module.go | 30 +++++++++---------------- env/utils.go | 8 +++++++ env/utils_benchmarks.go | 6 +++++ primitives/benchmarking/benchmarking.go | 16 +++++++++---- runtime/benchmark_timestamp_set_test.go | 2 -- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/api/benchmarking/module.go b/api/benchmarking/module.go index d4eba8db..0555956c 100644 --- a/api/benchmarking/module.go +++ b/api/benchmarking/module.go @@ -63,6 +63,8 @@ func (m Module) Run(dataPtr int32, dataLen int32) int64 { measuredDurations := []int64{} + benchmarking.StoreSnapshotDb() + // Always do at least one internal repeat. repeats := int(benchmarkConfig.InternalRepeats) if repeats < 1 { @@ -73,6 +75,8 @@ func (m Module) Run(dataPtr int32, dataLen int32) int64 { // allowing to rollback and reset the state after each iteration. // as an alternative of providing before hook. + benchmarking.RestoreSnapshotDb() + // Does nothing, for now benchmarking.WipeDb() @@ -101,30 +105,18 @@ func (m Module) Run(dataPtr int32, dataLen int32) int64 { benchmarking.StartDbTracker() - // Calculate the diff caused by the benchmark. var start, end int64 - _, _ = m.transactional.WithStorageLayer( + start = benchmarking.CurrentTime() + _, err := m.transactional.WithStorageLayer( func() (primitives.PostDispatchInfo, error) { - start = benchmarking.CurrentTime() - - postInfo, err := function.Dispatch(origin, args) - if err != nil { - m.logger.Critical(err.Error()) - } - - end = benchmarking.CurrentTime() - - // Return an error to rollback to the initial state - // so each iteration starts from the same state. - if i == repeats { - // Do not revert the state on the last iteration, so - // the state is available for the validation. - return postInfo, nil - } - return postInfo, resetStateErr + return function.Dispatch(origin, args) }, ) + end = benchmarking.CurrentTime() + if err != nil { + m.logger.Critical(err.Error()) + } // Calculate the diff caused by the benchmark. measuredDurations = append(measuredDurations, end-start) diff --git a/env/utils.go b/env/utils.go index aefbcc86..509fde3d 100644 --- a/env/utils.go +++ b/env/utils.go @@ -37,3 +37,11 @@ func ExtBenchmarkingDbReadCountVersion1() int32 { func ExtBenchmarkingDbWriteCountVersion1() int32 { panic("not implemented") } + +func ExtBenchmarkingStoreSnapshotDbVersion1() { + panic("not implemented") +} + +func ExtBenchmarkingRestoreSnapshotDbVersion1() { + panic("not implemented") +} diff --git a/env/utils_benchmarks.go b/env/utils_benchmarks.go index 4005dc1b..754270e8 100644 --- a/env/utils_benchmarks.go +++ b/env/utils_benchmarks.go @@ -28,3 +28,9 @@ func ExtBenchmarkingDbReadCountVersion1() int32 //go:wasmimport env ext_benchmarking_db_write_count_version_1 func ExtBenchmarkingDbWriteCountVersion1() int32 + +//go:wasmimport env ext_benchmarking_store_snapshot_db_version_1 +func ExtBenchmarkingStoreSnapshotDbVersion1() + +//go:wasmimport env ext_benchmarking_restore_snapshot_db_version_1 +func ExtBenchmarkingRestoreSnapshotDbVersion1() diff --git a/primitives/benchmarking/benchmarking.go b/primitives/benchmarking/benchmarking.go index 611497f3..611a9cd1 100644 --- a/primitives/benchmarking/benchmarking.go +++ b/primitives/benchmarking/benchmarking.go @@ -138,6 +138,14 @@ func StopDbTracker() { env.ExtBenchmarkingStopDbTrackerVersion1() } +func DbReadCount() int32 { + return env.ExtBenchmarkingDbReadCountVersion1() +} + +func DbWriteCount() int32 { + return env.ExtBenchmarkingDbWriteCountVersion1() +} + func WipeDb() { env.ExtBenchmarkingWipeDbVersion1() } @@ -146,10 +154,10 @@ func CommitDb() { env.ExtBenchmarkingCommitDbVersion1() } -func DbReadCount() int32 { - return env.ExtBenchmarkingDbReadCountVersion1() +func StoreSnapshotDb() { + env.ExtBenchmarkingStoreSnapshotDbVersion1() } -func DbWriteCount() int32 { - return env.ExtBenchmarkingDbWriteCountVersion1() +func RestoreSnapshotDb() { + env.ExtBenchmarkingRestoreSnapshotDbVersion1() } diff --git a/runtime/benchmark_timestamp_set_test.go b/runtime/benchmark_timestamp_set_test.go index f7a491f3..29ba119a 100644 --- a/runtime/benchmark_timestamp_set_test.go +++ b/runtime/benchmark_timestamp_set_test.go @@ -23,8 +23,6 @@ func benchmarkTimestampSet(b *testing.B) { metadata := newBenchmarkingRuntimeMetadata(b, rt) - // TODO: switch to Gosemble types - // Setup the input params now := uint64(time.Now().UnixMilli()) call, err := ctypes.NewCall(metadata, "Timestamp.set", ctypes.NewUCompactFromUInt(now)) From ccefdb7187a33666a2adb15f7680c3a1d839cd5d Mon Sep 17 00:00:00 2001 From: Rado M Date: Mon, 15 Jan 2024 10:29:27 +0200 Subject: [PATCH 7/8] reuse metadata helper --- build/runtime.wasm | Bin 1065329 -> 1072769 bytes gossamer | 2 +- runtime/benchmark_runtime_test.go | 33 ------------------------ runtime/benchmark_timestamp_set_test.go | 2 +- runtime/runtime_test.go | 7 ++++- tinygo | 2 +- 6 files changed, 9 insertions(+), 37 deletions(-) delete mode 100644 runtime/benchmark_runtime_test.go diff --git a/build/runtime.wasm b/build/runtime.wasm index 834fdcee1d619ca1828d1105b1f692ba65064ba8..e33cde2864656a16b2c86827fbf6e717ef16b6a9 100755 GIT binary patch delta 245178 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

AyE!v!wCXk^-(XGnp??J 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%0Awb9aoPJ=r|S@{!z{)D$~+Dsz84Q~ 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

(aPA6LbX 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 diff --git a/gossamer b/gossamer index d16027aa..9f6e042b 160000 --- a/gossamer +++ b/gossamer @@ -1 +1 @@ -Subproject commit d16027aa68b3ae468a38996af5ad400fdebde4d9 +Subproject commit 9f6e042b7ebfdedf1c4a2dfb33f663a71228f47c diff --git a/runtime/benchmark_runtime_test.go b/runtime/benchmark_runtime_test.go deleted file mode 100644 index 2a2c7473..00000000 --- a/runtime/benchmark_runtime_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "testing" - - "github.com/ChainSafe/gossamer/lib/runtime" - wazero_runtime "github.com/ChainSafe/gossamer/lib/runtime/wazero" - "github.com/ChainSafe/gossamer/lib/trie" - "github.com/ChainSafe/gossamer/pkg/scale" - ctypes "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" - "github.com/stretchr/testify/assert" -) - -func newBenchmarkingRuntime(b *testing.B) (*wazero_runtime.Instance, *runtime.Storage) { - runtime := wazero_runtime.NewBenchInstanceWithTrie(b, WASM_RUNTIME, trie.NewEmptyTrie()) - return runtime, &runtime.Context.Storage -} - -func newBenchmarkingRuntimeMetadata(b *testing.B, instance *wazero_runtime.Instance) *ctypes.Metadata { - bMetadata, err := instance.Metadata() - assert.NoError(b, err) - - var decoded []byte - err = scale.Unmarshal(bMetadata, &decoded) - assert.NoError(b, err) - - metadata := &ctypes.Metadata{} - err = codec.Decode(decoded, metadata) - assert.NoError(b, err) - - return metadata -} diff --git a/runtime/benchmark_timestamp_set_test.go b/runtime/benchmark_timestamp_set_test.go index 29ba119a..7c259380 100644 --- a/runtime/benchmark_timestamp_set_test.go +++ b/runtime/benchmark_timestamp_set_test.go @@ -21,7 +21,7 @@ func BenchmarkTimestampSetStep1(b *testing.B) { func benchmarkTimestampSet(b *testing.B) { rt, storage := newBenchmarkingRuntime(b) - metadata := newBenchmarkingRuntimeMetadata(b, rt) + metadata := runtimeMetadata(b, rt) // Setup the input params now := uint64(time.Now().UnixMilli()) diff --git a/runtime/runtime_test.go b/runtime/runtime_test.go index fcabeb3d..8caf1ba2 100644 --- a/runtime/runtime_test.go +++ b/runtime/runtime_test.go @@ -123,7 +123,12 @@ func newTestRuntime(t *testing.T) (*wazero_runtime.Instance, *runtime.Storage) { return runtime, &runtime.Context.Storage } -func runtimeMetadata(t *testing.T, instance *wazero_runtime.Instance) *ctypes.Metadata { +func newBenchmarkingRuntime(b *testing.B) (*wazero_runtime.Instance, *runtime.Storage) { + runtime := wazero_runtime.NewBenchInstanceWithTrie(b, WASM_RUNTIME, trie.NewEmptyTrie()) + return runtime, &runtime.Context.Storage +} + +func runtimeMetadata(t assert.TestingT, instance *wazero_runtime.Instance) *ctypes.Metadata { bMetadata, err := instance.Metadata() assert.NoError(t, err) diff --git a/tinygo b/tinygo index 68308aae..e9015848 160000 --- a/tinygo +++ b/tinygo @@ -1 +1 @@ -Subproject commit 68308aae5f4d724595487d3bee584d5687ae3c9f +Subproject commit e9015848aeceda2df77f745466e5e76ff342dc16 From ec155ce9d4690ba439a21aa9f3b84a8a79948d40 Mon Sep 17 00:00:00 2001 From: Rado M Date: Tue, 16 Jan 2024 16:01:57 +0200 Subject: [PATCH 8/8] cleanup --- Makefile | 2 +- api/benchmarking/module.go | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index e0346a33..537a9ef9 100644 --- a/Makefile +++ b/Makefile @@ -101,4 +101,4 @@ test-coverage: ./scripts/coverage.sh benchmark: - @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=100x ./runtime/... \ No newline at end of file + @GOMAXPROCS=1 go test --tags=nonwasmenv -run=XXX -bench=. -benchtime=20x ./runtime/... \ No newline at end of file diff --git a/api/benchmarking/module.go b/api/benchmarking/module.go index 0555956c..91ce4d77 100644 --- a/api/benchmarking/module.go +++ b/api/benchmarking/module.go @@ -14,8 +14,6 @@ import ( "github.com/LimeChain/gosemble/utils" ) -var resetStateErr = primitives.NewDispatchErrorOther(sc.Str("reset state error")) - type Module struct { systemModule system.Module transactional support.Transactional[primitives.PostDispatchInfo]