aptos-core icon indicating copy to clipboard operation
aptos-core copied to clipboard

[Compiler V2] Control flow graph simplification

Open fEst1ck opened this issue 1 year ago • 15 comments

Description

Implements a stackless bytecode pipeline control_flow_simplifier which simplifies the control flow graph in the following ways:

  1. Eliminates branch or jump to jump: Any empty block

    L1: goto L2 where L1 != L2

    is removed, and any block jumping to L1 will jump to L2 directly

     goto L1
     => (the => here means the instruction above will be replaced by the instruction below)
     goto L2
    
    if ... goto L1 else ...
    =>
    if ... goto L2 else ...
    
    if ... goto ... else L1
    =>
    if ... goto ... else L2
    
  2. Removes edges where the source has only one successor and the target has only one predecessor: If there is block

    BB1: xx
         goto L2
    

    and block

    BB2: L2
         yy
    

    which has only one predecessor BB1. Then we move BB2 to the end of BB1 so that BB1 becomes

    BB1: xx
         yy
    

    and BB2 is removed.

  3. Removes all jumps to the next instruction: Whenever we have

    goto L;
    L;
    

    replace it by simply

    L;
    
  4. Replaces branch to same target by jump: Whenever we have

    if ... goto L else goto L
    

    replace it by simply

    goto L
    

Structure of the code

The module control_flow_graph_simplifier.rs includes a

/// Control flow graph that owns the code for transformation
///
/// To do a control flow graph based transformation:
/// 1. construct a `ControlFlowGraphCodeGenerator` from the code,
/// 2. perform the transformation on the `ControlFlowGraphCodeGenerator`
/// 3. generate the code back from the `ControlFlowGraphCodeGenerator`
struct ControlFlowGraphCodeGenerator

and two such CFG based transformations

/// Transformation state for transformation 1 in the module doc
struct EmptyBlockRemover(ControlFlowGraphCodeGenerator);
/// Transformation state for transformation 2 in the module doc
struct RedundantJumpRemover(pub ControlFlowGraphCodeGenerator);

Transformation 3 is implicitly done when converting code to and from ControlFlowGraphCodeGenerator.

A top-level bytecode pipeline does all the transformation (including transformation 4)

/// Simplifies the control flow graph as described in the module doc
pub struct ControlFlowGraphSimplifier {}

Simple experiment

I printed the length of the code before and after the transformation during transactional tests, showing that before the transformation there were 37507 stackless bytecode processed and 32176 after, i.e., reducing the size of the code by 14.21%. The rate is 13.77% if we only enable empty block remover.

Type of Change

  • [x] New feature
  • [ ] Bug fix
  • [ ] Breaking change
  • [x] Performance improvement
  • [ ] Refactoring
  • [ ] Dependency update
  • [ ] Documentation update
  • [ ] Tests

Which Components or Systems Does This Change Impact?

  • [ ] Validator Node
  • [ ] Full Node (API, Indexer, etc.)
  • [x] Move/Aptos Virtual Machine
  • [ ] Aptos Framework
  • [ ] Aptos CLI/SDK
  • [ ] Developer Infrastructure
  • [ ] Other (specify)

Test Plan

Passed all existing unit & transactional tests.

fEst1ck avatar Jan 22 '24 10:01 fEst1ck

⏱️ 10h 52m total CI duration on this PR
Job Cumulative Duration Recent Runs
rust-unit-tests 2h 37m 🟩🟩🟩🟥 (+1 more)
rust-move-unit-coverage 2h 18m 🟩🟩🟩🟩 (+1 more)
windows-build 2h 8m 🟩🟩🟩🟩🟩 (+1 more)
rust-move-tests 1h 18m 🟥🟩
run-tests-main-branch 45m 🟩🟩🟩🟥🟥 (+6 more)
rust-lints 39m 🟩🟩🟩🟩 (+1 more)
check 29m 🟥🟥🟥🟩🟥 (+3 more)
general-lints 16m 🟩🟩🟩🟩🟩 (+1 more)
check-dynamic-deps 13m 🟩🟩🟩🟩🟩 (+1 more)
semgrep/ci 3m 🟩🟩🟩🟩🟩 (+1 more)
file_change_determinator 2m 🟩🟩🟩🟩🟩 (+6 more)
file_change_determinator 1m 🟩🟩🟩🟩🟩 (+1 more)
permission-check 43s 🟩🟩🟩🟩🟩 (+7 more)
permission-check 42s 🟩🟩🟩🟩🟩 (+7 more)
permission-check 40s 🟩🟩🟩🟩🟩 (+7 more)
permission-check 33s 🟩🟩🟩🟩🟩 (+7 more)

🚨 2 jobs on the last run were significantly faster/slower than expected

Job Duration vs 7d avg Delta
windows-build 31m 19m +67%
rust-lints 10m 8m +21%

settingsfeedbackdocs ⋅ learn more about trunk.io

trunk-io[bot] avatar Jan 22 '24 10:01 trunk-io[bot]

Codecov Report

Attention: Patch coverage is 99.10913% with 4 lines in your changes missing coverage. Please review.

Project coverage is 59.6%. Comparing base (362b812) to head (43092f3). Report is 16 commits behind head on main.

Files Patch % Lines
...r-v2/src/pipeline/control_flow_graph_simplifier.rs 99.4% 2 Missing :warning:
...model/bytecode/src/stackless_control_flow_graph.rs 96.0% 2 Missing :warning:
Additional details and impacted files
@@            Coverage Diff            @@
##             main   #11725     +/-   ##
=========================================
+ Coverage    59.4%    59.6%   +0.2%     
=========================================
  Files         838      839      +1     
  Lines      204392   205492   +1100     
=========================================
+ Hits       121562   122659   +1097     
- Misses      82830    82833      +3     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Jan 23 '24 09:01 codecov[bot]

Can we add a small test case or 2 showing critical edges and what happens with them? Some of the break/continue loop tests probably should show critical edges.

brmataptos avatar Jan 24 '24 22:01 brmataptos

@fEst1ck Your PR description currently says (for "removes edges where the source has only one successor and the target has only one predecessor"):

    BB1: ...
         goto L2
    ...
    BB2: L2 (no other goto L2)
         ...
    =>
    BB1: BB1 content
         BB2 content
         goto L2

This would be an incorrect transformation: the goto L2 at the end of transformed code is not needed. Is the following what you intended to convey, perhaps?

BB1: xx
     goto L2
yy
BB2: L2 (no other goto L2)
     zz

=>

BB1: xx
     zz

edit: even this transformation is not always correct, eg, if yy contains a label L3 and there is a goto L3 somewhere.

vineethk avatar Jan 25 '24 14:01 vineethk

@fEst1ck the PR description currently says, for "removes all jumps to the next instruction": goto L; L removed

Perhaps you meant: goto L; L => L? That is, only goto L is removed, not the label?

vineethk avatar Jan 25 '24 15:01 vineethk

@vineethk The documentation is wrong. It should be

Removes edges where the source has only one successor and the target has only one predecessor

BB1: xx
     goto L2
// BB1 BB2 don't have to be consecutive in the code
BB2: L2 (no other goto L2)
     yy
=>
BB1: xx
     yy

Removes all jumps to the next instruction": goto L; L removed

Perhaps you meant: goto L; L => L? That is, only goto L is removed, not the label?

Yes.

fEst1ck avatar Jan 25 '24 18:01 fEst1ck

Can we add a small test case or 2 showing critical edges and what happens with them? Some of the break/continue loop tests probably should show critical edges.

The bytecode generator seems to be generating extra empty blocks already. For instance, if we have

while (...) {
    if (...) { break; }
}

Consider the false branch of the branch instruction of the loop condition. The incoming block ends with loop condition branch, so has 2 successors; the outgoing block, which is the end of the while loop, also has 2 predecessors, one the false branch of the loop condition, another from the break. So this should be a critical edge.

I checked the generated CFG, the break doesn't goto the end of of the loop, but goto an extra empty block before jumping to the end of the loop.

But just for testing the critical edge processor, I can clear the empty blocks first, which will create lots of critical edges. I've add a todo for this. @brmataptos

fEst1ck avatar Jan 25 '24 18:01 fEst1ck

@vineethk The documentation is wrong. It should be

Removes edges where the source has only one successor and the target has only one predecessor

BB1: xx
     goto L2
// BB1 BB2 don't have to be consecutive in the code
BB2: L2 (no other goto L2)
     yy
=>
BB1: xx
     yy

I think this specification is incomplete and therefore incorrect. For example, there may be code just before BB2: L2 that falls through to L2 in the original code (but there is no explicit goto L2, so it satisfies the conditions for the transformation). But this behavior is not retained in the transformed code.

vineethk avatar Jan 25 '24 19:01 vineethk

I set the PR to draft temporarily since I'm adding more documentation, which facilitates code review.

fEst1ck avatar Jan 25 '24 19:01 fEst1ck

Please mark this PR as non-draft if you consider it ready for general review.

wrwg avatar Jan 26 '24 04:01 wrwg

All comments addressed. PTAL @vineethk @brmataptos

fEst1ck avatar Jan 29 '24 09:01 fEst1ck

@brmataptos @wrwg @vineethk The PR has been refactored and ready for review now.

fEst1ck avatar May 15 '24 16:05 fEst1ck

All comments addressed. PTAL @brmataptos @rahxephon89

fEst1ck avatar May 23 '24 09:05 fEst1ck

This issue is stale because it has been open 45 days with no activity. Remove the stale label, comment or push a commit - otherwise this will be closed in 15 days.

github-actions[bot] avatar Aug 12 '24 01:08 github-actions[bot]

Thanks for the comments. All addressed. PTAL! @vineethk

fEst1ck avatar Aug 23 '24 06:08 fEst1ck

@vineethk All comments addressed. PTAL

fEst1ck avatar Aug 28 '24 07:08 fEst1ck

Forge is running suite realistic_env_max_load on da68844d2fcb3805fcfdbba0cb157dd3c2f97923

github-actions[bot] avatar Aug 29 '24 04:08 github-actions[bot]

Forge is running suite framework_upgrade on d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> da68844d2fcb3805fcfdbba0cb157dd3c2f97923

github-actions[bot] avatar Aug 29 '24 04:08 github-actions[bot]

:x: Forge suite realistic_env_max_load failure on da68844d2fcb3805fcfdbba0cb157dd3c2f97923

two traffics test: inner traffic : committed: 12269.57 txn/s, latency: 3246.68 ms, (p50: 2700 ms, p90: 3300 ms, p99: 9800 ms), latency samples: 4665180
two traffics test : committed: 100.02 txn/s, latency: 4309.14 ms, (p50: 2600 ms, p90: 9200 ms, p99: 10300 ms), latency samples: 1800
Latency breakdown for phase 0: ["QsBatchToPos: max: 0.231, avg: 0.216", "QsPosToProposal: max: 0.236, avg: 0.174", "ConsensusProposalToOrdered: max: 0.320, avg: 0.293", "ConsensusOrderedToCommit: max: 0.430, avg: 0.412", "ConsensusProposalToCommit: max: 0.721, avg: 0.705"]
Test Failed: check for success

Caused by:
    Failed latency check, for ["P90 latency is 9.2s and exceeds limit of 4.5s"]

Stack backtrace:
   0: anyhow::error::<impl anyhow::Error>::msg
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/anyhow-1.0.79/src/error.rs:83:36
   1: aptos_forge::success_criteria::SuccessCriteriaChecker::check_latency
             at ./testsuite/forge/src/success_criteria.rs:560:13
   2: aptos_forge::success_criteria::SuccessCriteriaChecker::check_for_success::{{closure}}
             at ./testsuite/forge/src/success_criteria.rs:304:9
   3: aptos_forge::interface::network::NetworkContext::check_for_success::{{closure}}
             at ./testsuite/forge/src/interface/network.rs:112:10
   4: <dyn aptos_testcases::NetworkLoadTest as aptos_forge::interface::network::NetworkTest>::run::{{closure}}
             at ./testsuite/testcases/src/lib.rs:322:14
   5: <core::pin::Pin<P> as core::future::future::Future>::poll
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/future/future.rs:123:9
   6: <aptos_testcases::two_traffics_test::TwoTrafficsTest as aptos_forge::interface::network::NetworkTest>::run::{{closure}}
             at ./testsuite/testcases/src/two_traffics_test.rs:77:47
   7: <core::pin::Pin<P> as core::future::future::Future>::poll
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/future/future.rs:123:9
   8: <aptos_testcases::CompositeNetworkTest as aptos_forge::interface::network::NetworkTest>::run::{{closure}}
             at ./testsuite/testcases/src/lib.rs:628:37
   9: <core::pin::Pin<P> as core::future::future::Future>::poll
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/future/future.rs:123:9
  10: tokio::runtime::park::CachedParkThread::block_on::{{closure}}
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/park.rs:282:63
  11: tokio::runtime::coop::with_budget
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/coop.rs:107:5
  12: tokio::runtime::coop::budget
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/coop.rs:73:5
  13: tokio::runtime::park::CachedParkThread::block_on
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/park.rs:282:31
  14: tokio::runtime::context::blocking::BlockingRegionGuard::block_on
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/context/blocking.rs:66:9
  15: tokio::runtime::handle::Handle::block_on::{{closure}}
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/handle.rs:310:22
  16: tokio::runtime::context::runtime::enter_runtime
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/context/runtime.rs:65:16
  17: tokio::runtime::handle::Handle::block_on
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/handle.rs:309:9
  18: aptos_forge::runner::Forge<F>::run::{{closure}}
             at ./testsuite/forge/src/runner.rs:628:49
  19: aptos_forge::runner::run_test
             at ./testsuite/forge/src/runner.rs:701:11
  20: aptos_forge::runner::Forge<F>::run
             at ./testsuite/forge/src/runner.rs:628:30
  21: forge::run_forge
             at ./testsuite/forge-cli/src/main.rs:458:11
  22: forge::main
             at ./testsuite/forge-cli/src/main.rs:384:21
  23: core::ops::function::FnOnce::call_once
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  24: std::sys_common::backtrace::__rust_begin_short_backtrace
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:155:18
  25: std::rt::lang_start::{{closure}}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:166:18
  26: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:284:13
  27: std::panicking::try::do_call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  28: std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  29: std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  30: std::rt::lang_start_internal::{{closure}}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:48
  31: std::panicking::try::do_call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  32: std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  33: std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  34: std::rt::lang_start_internal
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:20
  35: main
  36: __libc_start_main
  37: _start
Trailing Log Lines:
  32: std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  33: std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  34: std::rt::lang_start_internal
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:20
  35: main
  36: __libc_start_main
  37: _start


Swarm logs can be found here: See fgi output for more information.
{"level":"INFO","source":{"package":"aptos_forge","file":"testsuite/forge/src/backend/k8s/cluster_helper.rs:292"},"thread_name":"main","hostname":"forge-e2e-pr-11725-1724904963-da68844d2fcb3805fcfdbba0cb157dd3c","timestamp":"2024-08-29T04:27:49.577863Z","message":"Deleting namespace forge-e2e-pr-11725: Some(NamespaceStatus { conditions: None, phase: Some(\"Terminating\") })"}
{"level":"INFO","source":{"package":"aptos_forge","file":"testsuite/forge/src/backend/k8s/cluster_helper.rs:400"},"thread_name":"main","hostname":"forge-e2e-pr-11725-1724904963-da68844d2fcb3805fcfdbba0cb157dd3c","timestamp":"2024-08-29T04:27:49.577904Z","message":"aptos-node resources for Forge removed in namespace: forge-e2e-pr-11725"}

Failed to run tests:
Tests Failed
failures:
    CompositeNetworkTest

test result: FAILED. 0 passed; 1 failed; 0 filtered out

Error: Tests Failed

Stack backtrace:
   0: anyhow::error::<impl anyhow::Error>::msg
             at /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/anyhow-1.0.79/src/error.rs:83:36
   1: aptos_forge::runner::Forge<F>::run
             at ./testsuite/forge/src/runner.rs:653:13
   2: forge::run_forge
             at ./testsuite/forge-cli/src/main.rs:458:11
   3: forge::main
             at ./testsuite/forge-cli/src/main.rs:384:21
   4: core::ops::function::FnOnce::call_once
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
   5: std::sys_common::backtrace::__rust_begin_short_backtrace
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:155:18
   6: std::rt::lang_start::{{closure}}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:166:18
   7: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:284:13
   8: std::panicking::try::do_call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
   9: std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  10: std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  11: std::rt::lang_start_internal::{{closure}}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:48
  12: std::panicking::try::do_call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  13: std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  14: std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  15: std::rt::lang_start_internal
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:20
  16: main
  17: __libc_start_main
  18: _start
Debugging output:
NAME                                    READY   STATUS      RESTARTS   AGE
aptos-node-0-fullnode-eforge227-0       1/1     Running     0          11m
aptos-node-0-validator-0                1/1     Running     0          11m
aptos-node-1-fullnode-eforge227-0       1/1     Running     0          11m
aptos-node-1-validator-0                1/1     Running     0          11m
aptos-node-2-fullnode-eforge227-0       1/1     Running     0          11m
aptos-node-2-validator-0                1/1     Running     0          11m
aptos-node-3-fullnode-eforge227-0       1/1     Running     0          11m
aptos-node-3-validator-0                1/1     Running     0          11m
aptos-node-4-fullnode-eforge227-0       1/1     Running     0          11m
aptos-node-4-validator-0                1/1     Running     0          11m
aptos-node-5-validator-0                1/1     Running     0          11m
aptos-node-6-validator-0                1/1     Running     0          11m
genesis-aptos-genesis-eforge227-r6ckl   0/1     Completed   0          11m

github-actions[bot] avatar Aug 29 '24 04:08 github-actions[bot]

:white_check_mark: Forge suite framework_upgrade success on d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> da68844d2fcb3805fcfdbba0cb157dd3c2f97923

Compatibility test results for d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> da68844d2fcb3805fcfdbba0cb157dd3c2f97923 (PR)
Upgrade the nodes to version: da68844d2fcb3805fcfdbba0cb157dd3c2f97923
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1310.25 txn/s, submitted: 1312.66 txn/s, failed submission: 2.42 txn/s, expired: 2.42 txn/s, latency: 2340.69 ms, (p50: 2100 ms, p90: 3600 ms, p99: 5100 ms), latency samples: 119220
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1180.81 txn/s, submitted: 1182.58 txn/s, failed submission: 1.77 txn/s, expired: 1.77 txn/s, latency: 2718.24 ms, (p50: 2400 ms, p90: 4800 ms, p99: 6200 ms), latency samples: 106560
5. check swarm health
Compatibility test for d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> da68844d2fcb3805fcfdbba0cb157dd3c2f97923 passed
Upgrade the remaining nodes to version: da68844d2fcb3805fcfdbba0cb157dd3c2f97923
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1201.71 txn/s, submitted: 1203.51 txn/s, failed submission: 1.80 txn/s, expired: 1.80 txn/s, latency: 2514.32 ms, (p50: 2300 ms, p90: 3900 ms, p99: 5500 ms), latency samples: 106800
Test Ok

github-actions[bot] avatar Aug 29 '24 04:08 github-actions[bot]

Forge is running suite realistic_env_max_load on da68844d2fcb3805fcfdbba0cb157dd3c2f97923

github-actions[bot] avatar Aug 29 '24 04:08 github-actions[bot]

:white_check_mark: Forge suite realistic_env_max_load success on da68844d2fcb3805fcfdbba0cb157dd3c2f97923

two traffics test: inner traffic : committed: 13148.31 txn/s, latency: 3028.50 ms, (p50: 2700 ms, p90: 3900 ms, p99: 5100 ms), latency samples: 4999260
two traffics test : committed: 100.04 txn/s, latency: 2928.52 ms, (p50: 2500 ms, p90: 4500 ms, p99: 5400 ms), latency samples: 1780
Latency breakdown for phase 0: ["QsBatchToPos: max: 0.235, avg: 0.220", "QsPosToProposal: max: 0.253, avg: 0.207", "ConsensusProposalToOrdered: max: 0.321, avg: 0.296", "ConsensusOrderedToCommit: max: 0.480, avg: 0.457", "ConsensusProposalToCommit: max: 0.778, avg: 0.753"]
Max non-epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 0.96s no progress at version 2747400 (avg 0.21s) [limit 15].
Max epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 7.76s no progress at version 2747398 (avg 7.76s) [limit 15].
Test Ok

github-actions[bot] avatar Aug 29 '24 04:08 github-actions[bot]

Forge is running suite realistic_env_max_load on 949fa49298bd3fac912799c652a3b55a4547677e

github-actions[bot] avatar Aug 29 '24 15:08 github-actions[bot]

Forge is running suite framework_upgrade on d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 949fa49298bd3fac912799c652a3b55a4547677e

github-actions[bot] avatar Aug 29 '24 15:08 github-actions[bot]

:white_check_mark: Forge suite realistic_env_max_load success on 949fa49298bd3fac912799c652a3b55a4547677e

two traffics test: inner traffic : committed: 13642.49 txn/s, latency: 2914.15 ms, (p50: 2700 ms, p90: 3300 ms, p99: 3900 ms), latency samples: 5187200
two traffics test : committed: 99.90 txn/s, latency: 2588.72 ms, (p50: 2400 ms, p90: 3000 ms, p99: 6400 ms), latency samples: 1840
Latency breakdown for phase 0: ["QsBatchToPos: max: 0.230, avg: 0.217", "QsPosToProposal: max: 0.300, avg: 0.243", "ConsensusProposalToOrdered: max: 0.315, avg: 0.295", "ConsensusOrderedToCommit: max: 0.477, avg: 0.453", "ConsensusProposalToCommit: max: 0.770, avg: 0.748"]
Max non-epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 0.91s no progress at version 1988142 (avg 0.21s) [limit 15].
Max epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 8.27s no progress at version 1988140 (avg 6.95s) [limit 15].
Test Ok

github-actions[bot] avatar Aug 29 '24 15:08 github-actions[bot]

:white_check_mark: Forge suite framework_upgrade success on d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 949fa49298bd3fac912799c652a3b55a4547677e

Compatibility test results for d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 949fa49298bd3fac912799c652a3b55a4547677e (PR)
Upgrade the nodes to version: 949fa49298bd3fac912799c652a3b55a4547677e
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1286.53 txn/s, submitted: 1288.70 txn/s, failed submission: 2.17 txn/s, expired: 2.17 txn/s, latency: 2530.97 ms, (p50: 2100 ms, p90: 4500 ms, p99: 6400 ms), latency samples: 106660
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1283.10 txn/s, submitted: 1285.16 txn/s, failed submission: 2.05 txn/s, expired: 2.05 txn/s, latency: 2536.82 ms, (p50: 2400 ms, p90: 3900 ms, p99: 6000 ms), latency samples: 112400
5. check swarm health
Compatibility test for d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 949fa49298bd3fac912799c652a3b55a4547677e passed
Upgrade the remaining nodes to version: 949fa49298bd3fac912799c652a3b55a4547677e
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1246.16 txn/s, submitted: 1248.45 txn/s, failed submission: 2.29 txn/s, expired: 2.29 txn/s, latency: 2450.11 ms, (p50: 2100 ms, p90: 4300 ms, p99: 6000 ms), latency samples: 108880
Test Ok

github-actions[bot] avatar Aug 29 '24 15:08 github-actions[bot]

Forge is running suite framework_upgrade on d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 9e37bf0baf1a61c6680eba316f97dad5124cf64c

github-actions[bot] avatar Aug 29 '24 17:08 github-actions[bot]

Forge is running suite realistic_env_max_load on 9e37bf0baf1a61c6680eba316f97dad5124cf64c

github-actions[bot] avatar Aug 29 '24 17:08 github-actions[bot]

:white_check_mark: Forge suite realistic_env_max_load success on 9e37bf0baf1a61c6680eba316f97dad5124cf64c

two traffics test: inner traffic : committed: 13543.49 txn/s, latency: 2936.26 ms, (p50: 2700 ms, p90: 3200 ms, p99: 3600 ms), latency samples: 5149580
two traffics test : committed: 99.91 txn/s, latency: 2602.83 ms, (p50: 2500 ms, p90: 2800 ms, p99: 9800 ms), latency samples: 1700
Latency breakdown for phase 0: ["QsBatchToPos: max: 0.237, avg: 0.221", "QsPosToProposal: max: 0.271, avg: 0.223", "ConsensusProposalToOrdered: max: 0.317, avg: 0.297", "ConsensusOrderedToCommit: max: 0.488, avg: 0.471", "ConsensusProposalToCommit: max: 0.788, avg: 0.768"]
Max non-epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 1.02s no progress at version 2731154 (avg 0.21s) [limit 15].
Max epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 8.28s no progress at version 2731152 (avg 8.28s) [limit 15].
Test Ok

github-actions[bot] avatar Aug 29 '24 17:08 github-actions[bot]

:white_check_mark: Forge suite framework_upgrade success on d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 9e37bf0baf1a61c6680eba316f97dad5124cf64c

Compatibility test results for d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 9e37bf0baf1a61c6680eba316f97dad5124cf64c (PR)
Upgrade the nodes to version: 9e37bf0baf1a61c6680eba316f97dad5124cf64c
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1101.84 txn/s, submitted: 1104.75 txn/s, failed submission: 2.90 txn/s, expired: 2.90 txn/s, latency: 2837.50 ms, (p50: 2200 ms, p90: 5300 ms, p99: 7200 ms), latency samples: 98680
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 1017.43 txn/s, submitted: 1020.95 txn/s, failed submission: 3.52 txn/s, expired: 3.52 txn/s, latency: 3062.55 ms, (p50: 2400 ms, p90: 5800 ms, p99: 7300 ms), latency samples: 92460
5. check swarm health
Compatibility test for d1bf834728a0cf166d993f4728dfca54f3086fb0 ==> 9e37bf0baf1a61c6680eba316f97dad5124cf64c passed
Upgrade the remaining nodes to version: 9e37bf0baf1a61c6680eba316f97dad5124cf64c
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 974.25 txn/s, submitted: 976.26 txn/s, failed submission: 2.01 txn/s, expired: 2.01 txn/s, latency: 3583.33 ms, (p50: 2400 ms, p90: 6600 ms, p99: 15100 ms), latency samples: 87280
Test Ok

github-actions[bot] avatar Aug 29 '24 18:08 github-actions[bot]