Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use production configuration for fuel-core during benches #1227

Merged
merged 1 commit into from
Jun 23, 2023

Conversation

xgreenx
Copy link
Collaborator

@xgreenx xgreenx commented Jun 22, 2023

Closes #1216

@xgreenx xgreenx requested a review from a team June 22, 2023 23:00
@xgreenx xgreenx self-assigned this Jun 22, 2023
@xgreenx xgreenx merged commit caf5397 into master Jun 23, 2023
@xgreenx xgreenx deleted the feature/use-production-rocksdb-benches branch June 23, 2023 00:18
@bvrooman bvrooman mentioned this pull request Jun 23, 2023
bvrooman pushed a commit that referenced this pull request Jun 29, 2023
Related issues:
- Ref #1134

These benches demonstrate the performance of:

- Inserting 1 key/value pair into the RocksDB table that contains `n`
state entries for a single contracts. `n = [0, 1, 10, 100, 1,000,
10,000, 100,000, 1,000,000]`
- Inserting 1 key/value pair into the RocksDB table that contains 1
state entries with `n` existing contracts. `n = [0, 1, 10, 100, 1,000,
10,000, 100,000, 1,000,000]`

Bench results:
```
state single contract/insert state with 0 preexisting entries
                        time:   [11.991 µs 12.132 µs 12.310 µs]
                        change: [-4.7172% -1.6523% +1.0884%] (p = 0.29 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) high mild
  4 (4.00%) high severe
state single contract/insert state with 1 preexisting entries
                        time:   [25.009 µs 28.694 µs 32.962 µs]
Found 6 outliers among 100 measurements (6.00%)
  5 (5.00%) high mild
  1 (1.00%) high severe
state single contract/insert state with 10 preexisting entries
                        time:   [39.002 µs 41.617 µs 44.324 µs]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe
state single contract/insert state with 100 preexisting entries
                        time:   [60.968 µs 63.985 µs 67.259 µs]
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
state single contract/insert state with 1,000 preexisting entries
                        time:   [87.465 µs 91.207 µs 95.394 µs]
                        change: [+0.4239% +4.5684% +8.9542%] (p = 0.04 < 0.05)
                        Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) high mild
  1 (1.00%) high severe
state single contract/insert state with 10,000 preexisting entries
                        time:   [117.22 µs 121.38 µs 125.93 µs]
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high mild
state single contract/insert state with 100,000 preexisting entries
                        time:   [145.05 µs 148.30 µs 151.60 µs]
                        change: [-3.4471% -0.8145% +1.9661%] (p = 0.56 > 0.05)
                        No change in performance detected.
state single contract/insert state with 1,000,000 preexisting entries
                        time:   [186.36 µs 190.05 µs 193.80 µs]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

state multiple contracts/insert state with 0 preexisting entries
                        time:   [11.957 µs 12.080 µs 12.237 µs]
                        change: [-19.431% -7.6642% +0.8636%] (p = 0.27 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) high mild
  4 (4.00%) high severe
state multiple contracts/insert state with 1 preexisting entries
                        time:   [11.872 µs 12.008 µs 12.199 µs]
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) high mild
  3 (3.00%) high severe
state multiple contracts/insert state with 10 preexisting entries
                        time:   [12.189 µs 12.252 µs 12.320 µs]
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) high mild
  3 (3.00%) high severe
state multiple contracts/insert state with 100 preexisting entries
                        time:   [12.538 µs 12.691 µs 12.867 µs]
Found 8 outliers among 100 measurements (8.00%)
  5 (5.00%) high mild
  3 (3.00%) high severe
state multiple contracts/insert state with 1,000 preexisting entries
                        time:   [13.041 µs 13.278 µs 13.640 µs]
                        change: [-1.9317% +1.1895% +4.0288%] (p = 0.46 > 0.05)
                        No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe
state multiple contracts/insert state with 10,000 preexisting entries
                        time:   [13.350 µs 13.529 µs 13.729 µs]
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
state multiple contracts/insert state with 100,000 preexisting entries
                        time:   [13.973 µs 14.312 µs 14.719 µs]
                        change: [+4.3928% +9.0688% +14.995%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) high mild
  4 (4.00%) high severe
state multiple contracts/insert state with 1,000,000 preexisting entries
                        time:   [13.891 µs 14.096 µs 14.314 µs]
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
```

**Conclusion:**

For inserting `n` state entries for the same contract, the performance
appears to be logarithmic with `n`.

For inserting 1 state entry for a contract, with `n` existing contracts,
the performance appears to be fairly constant, i.e., the number of
existing contracts does not have an impact on the performance of
inserting state for a contract.

Note that these benchmarks were taken after the change to use RocksDB in
benches (#1227).
@xgreenx xgreenx mentioned this pull request Jul 16, 2023
xgreenx added a commit that referenced this pull request Jul 17, 2023
## Release v0.20.0

The release brings a couple of new breaking changes from the [`fuel-vm
0.35.0`](https://github.com/FuelLabs/fuel-vm/releases/tag/v0.35.0) with
bugfixes. Check the description of the VM release for more details.

The `fuel-core` release mostly improved the internal codebase but also
brought some breaking changes:
- Removed `Trigger::Hybrid` PoA block trigger mode. Only
`Trigger::Instante` and `Trigger::Interval` are available for block
production now. The main mode for testnets and mainnet will be
`Interval`.
- Removed support for `OpaqueReceipt` and the `Receipt` type doesn't
have the `raw_payload` field anymore.
- A `Receipt` type got two new variants: `Mint` and `Burn`. The
corresponding opcodes emit these new events.
- The `AssetId` is derived from `ContractId` and additional nonce. So
the `ContractId` and `AssetId` can't be the same anymore.

## What's Changed
* bump rocksdb to enable compiling with GCC 13 by @segfault-magnet in
#1219
* setting peer reputation params by @leviathanbeak in
#1202
* Take into account the actually used gas by the transactions and fetch
more transaction by @xgreenx in
#1223
* Use production configuration for `fuel-core` during benches by
@xgreenx in #1227
* Speedup and stabilize unit and integration tests by @xgreenx in
#1231
* test: State benchmarks by @bvrooman in
#1226
* Remove hybrid PoA block trigger mode by @Dentosal in
#1232
* test: Benchmark contract state insertions with DB vs. DB transactions
by @bvrooman in #1230
* multiplatform docker builds by @Voxelot in
#1233
* Fix typo in architecture.md by @eltociear in
#1241
* Expose gas cost in chain info by @MitchTurner in
#1244
* Reuse calculated tx id in executor by @MitchTurner in
#1248
* Fix multi-platform images by @Voxelot in
#1251
* Add logging of the long GraphQL queries for future debug by
@MitchTurner in #1250
* Reused `CheckedTransaction` from transaction pool in the executor by
@xgreenx in #1249
* Bump `fuel-vm` to `0.35.0` version by @xgreenx in
#1256

## New Contributors
* @segfault-magnet made their first contribution in
#1219
* @eltociear made their first contribution in
#1241
* @MitchTurner made their first contribution in
#1244

**Full Changelog**:
v0.19.1...v0.20.0
crypto523 added a commit to crypto523/fuel-core that referenced this pull request Oct 7, 2024
Related issues:
- Ref FuelLabs/fuel-core#1134

These benches demonstrate the performance of:

- Inserting 1 key/value pair into the RocksDB table that contains `n`
state entries for a single contracts. `n = [0, 1, 10, 100, 1,000,
10,000, 100,000, 1,000,000]`
- Inserting 1 key/value pair into the RocksDB table that contains 1
state entries with `n` existing contracts. `n = [0, 1, 10, 100, 1,000,
10,000, 100,000, 1,000,000]`

Bench results:
```
state single contract/insert state with 0 preexisting entries
                        time:   [11.991 µs 12.132 µs 12.310 µs]
                        change: [-4.7172% -1.6523% +1.0884%] (p = 0.29 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) high mild
  4 (4.00%) high severe
state single contract/insert state with 1 preexisting entries
                        time:   [25.009 µs 28.694 µs 32.962 µs]
Found 6 outliers among 100 measurements (6.00%)
  5 (5.00%) high mild
  1 (1.00%) high severe
state single contract/insert state with 10 preexisting entries
                        time:   [39.002 µs 41.617 µs 44.324 µs]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe
state single contract/insert state with 100 preexisting entries
                        time:   [60.968 µs 63.985 µs 67.259 µs]
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
state single contract/insert state with 1,000 preexisting entries
                        time:   [87.465 µs 91.207 µs 95.394 µs]
                        change: [+0.4239% +4.5684% +8.9542%] (p = 0.04 < 0.05)
                        Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) high mild
  1 (1.00%) high severe
state single contract/insert state with 10,000 preexisting entries
                        time:   [117.22 µs 121.38 µs 125.93 µs]
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high mild
state single contract/insert state with 100,000 preexisting entries
                        time:   [145.05 µs 148.30 µs 151.60 µs]
                        change: [-3.4471% -0.8145% +1.9661%] (p = 0.56 > 0.05)
                        No change in performance detected.
state single contract/insert state with 1,000,000 preexisting entries
                        time:   [186.36 µs 190.05 µs 193.80 µs]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

state multiple contracts/insert state with 0 preexisting entries
                        time:   [11.957 µs 12.080 µs 12.237 µs]
                        change: [-19.431% -7.6642% +0.8636%] (p = 0.27 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) high mild
  4 (4.00%) high severe
state multiple contracts/insert state with 1 preexisting entries
                        time:   [11.872 µs 12.008 µs 12.199 µs]
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) high mild
  3 (3.00%) high severe
state multiple contracts/insert state with 10 preexisting entries
                        time:   [12.189 µs 12.252 µs 12.320 µs]
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) high mild
  3 (3.00%) high severe
state multiple contracts/insert state with 100 preexisting entries
                        time:   [12.538 µs 12.691 µs 12.867 µs]
Found 8 outliers among 100 measurements (8.00%)
  5 (5.00%) high mild
  3 (3.00%) high severe
state multiple contracts/insert state with 1,000 preexisting entries
                        time:   [13.041 µs 13.278 µs 13.640 µs]
                        change: [-1.9317% +1.1895% +4.0288%] (p = 0.46 > 0.05)
                        No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe
state multiple contracts/insert state with 10,000 preexisting entries
                        time:   [13.350 µs 13.529 µs 13.729 µs]
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
state multiple contracts/insert state with 100,000 preexisting entries
                        time:   [13.973 µs 14.312 µs 14.719 µs]
                        change: [+4.3928% +9.0688% +14.995%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) high mild
  4 (4.00%) high severe
state multiple contracts/insert state with 1,000,000 preexisting entries
                        time:   [13.891 µs 14.096 µs 14.314 µs]
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
```

**Conclusion:**

For inserting `n` state entries for the same contract, the performance
appears to be logarithmic with `n`.

For inserting 1 state entry for a contract, with `n` existing contracts,
the performance appears to be fairly constant, i.e., the number of
existing contracts does not have an impact on the performance of
inserting state for a contract.

Note that these benchmarks were taken after the change to use RocksDB in
benches (FuelLabs/fuel-core#1227).
crypto523 added a commit to crypto523/fuel-core that referenced this pull request Oct 7, 2024
## Release v0.20.0

The release brings a couple of new breaking changes from the [`fuel-vm
0.35.0`](https://github.com/FuelLabs/fuel-vm/releases/tag/v0.35.0) with
bugfixes. Check the description of the VM release for more details.

The `fuel-core` release mostly improved the internal codebase but also
brought some breaking changes:
- Removed `Trigger::Hybrid` PoA block trigger mode. Only
`Trigger::Instante` and `Trigger::Interval` are available for block
production now. The main mode for testnets and mainnet will be
`Interval`.
- Removed support for `OpaqueReceipt` and the `Receipt` type doesn't
have the `raw_payload` field anymore.
- A `Receipt` type got two new variants: `Mint` and `Burn`. The
corresponding opcodes emit these new events.
- The `AssetId` is derived from `ContractId` and additional nonce. So
the `ContractId` and `AssetId` can't be the same anymore.

## What's Changed
* bump rocksdb to enable compiling with GCC 13 by @segfault-magnet in
FuelLabs/fuel-core#1219
* setting peer reputation params by @leviathanbeak in
FuelLabs/fuel-core#1202
* Take into account the actually used gas by the transactions and fetch
more transaction by @xgreenx in
FuelLabs/fuel-core#1223
* Use production configuration for `fuel-core` during benches by
@xgreenx in FuelLabs/fuel-core#1227
* Speedup and stabilize unit and integration tests by @xgreenx in
FuelLabs/fuel-core#1231
* test: State benchmarks by @bvrooman in
FuelLabs/fuel-core#1226
* Remove hybrid PoA block trigger mode by @Dentosal in
FuelLabs/fuel-core#1232
* test: Benchmark contract state insertions with DB vs. DB transactions
by @bvrooman in FuelLabs/fuel-core#1230
* multiplatform docker builds by @Voxelot in
FuelLabs/fuel-core#1233
* Fix typo in architecture.md by @eltociear in
FuelLabs/fuel-core#1241
* Expose gas cost in chain info by @MitchTurner in
FuelLabs/fuel-core#1244
* Reuse calculated tx id in executor by @MitchTurner in
FuelLabs/fuel-core#1248
* Fix multi-platform images by @Voxelot in
FuelLabs/fuel-core#1251
* Add logging of the long GraphQL queries for future debug by
@MitchTurner in FuelLabs/fuel-core#1250
* Reused `CheckedTransaction` from transaction pool in the executor by
@xgreenx in FuelLabs/fuel-core#1249
* Bump `fuel-vm` to `0.35.0` version by @xgreenx in
FuelLabs/fuel-core#1256

## New Contributors
* @segfault-magnet made their first contribution in
FuelLabs/fuel-core#1219
* @eltociear made their first contribution in
FuelLabs/fuel-core#1241
* @MitchTurner made their first contribution in
FuelLabs/fuel-core#1244

**Full Changelog**:
FuelLabs/fuel-core@v0.19.1...v0.20.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use rocksdb during opcodes benchmarks
3 participants