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

feat: deplete compute meter for vm errors #3751

Merged
merged 3 commits into from
Dec 5, 2024

Conversation

jstarry
Copy link

@jstarry jstarry commented Nov 22, 2024

Problem

Implements SIMD-0182 by making sure that programs that fail with VM errors consume the remaining compute budget to simplify compute unit handling.

Summary of Changes

  • Consume remaining compute budget for all VM errors except those that originate from syscalls
  • Use existing replay cost tracker feature gate
  • Rekey replay cost tracker feature gate

Feature Gate Issue: solana-labs#29595

Copy link

mergify bot commented Nov 22, 2024

The Firedancer team maintains a line-for-line reimplementation of the
native programs, and until native programs are moved to BPF, those
implementations must exactly match their Agave counterparts.
If this PR represents a change to a native program implementation (not
tests), please include a reviewer from the Firedancer team. And please
keep refactors to a minimum.

@jstarry jstarry force-pushed the feat/deplete-cu-meter branch from a9924e9 to 0b3d2be Compare November 22, 2024 19:30
@jstarry jstarry marked this pull request as ready for review November 22, 2024 19:31
@jstarry jstarry added the feature-gate Pull Request adds or modifies a runtime feature gate label Nov 23, 2024
programs/sbf/tests/programs.rs Show resolved Hide resolved
@@ -1473,6 +1473,24 @@ pub fn execute<'a, 'b: 'a>(
Err(Box::new(error) as Box<dyn std::error::Error>)
}
ProgramResult::Err(mut error) => {
if invoke_context
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

programs/sbf/tests/programs.rs Show resolved Hide resolved
if invoke_context
.get_feature_set()
.is_active(&solana_feature_set::apply_cost_tracker_during_replay::id())
&& !matches!(error, EbpfError::SyscallError(_))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why the exception for syscall errors?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is in the SIMD. Rational is that syscalls always interrupt a basic block so CU metering is required regardless.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok. I left a comment in the SIMD PR

@jstarry jstarry merged commit b120fc1 into anza-xyz:master Dec 5, 2024
54 checks passed
@jstarry jstarry deleted the feat/deplete-cu-meter branch December 5, 2024 20:03
@jstarry jstarry added v2.0 Backport to v2.0 branch v2.1 Backport to v2.1 branch labels Dec 5, 2024
Copy link

mergify bot commented Dec 5, 2024

Backports to the stable branch are to be avoided unless absolutely necessary for fixing bugs, security issues, and perf regressions. Changes intended for backport should be structured such that a minimum effective diff can be committed separately from any refactoring, plumbing, cleanup, etc that are not strictly necessary to achieve the goal. Any of the latter should go only into master and ride the normal stabilization schedule.

Copy link

mergify bot commented Dec 5, 2024

Backports to the beta branch are to be avoided unless absolutely necessary for fixing bugs, security issues, and perf regressions. Changes intended for backport should be structured such that a minimum effective diff can be committed separately from any refactoring, plumbing, cleanup, etc that are not strictly necessary to achieve the goal. Any of the latter should go only into master and ride the normal stabilization schedule. Exceptions include CI/metrics changes, CLI improvements and documentation updates on a case by case basis.

mergify bot pushed a commit that referenced this pull request Dec 5, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)
mergify bot pushed a commit that referenced this pull request Dec 5, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)

# Conflicts:
#	programs/sbf/tests/programs.rs
#	sdk/src/feature_set.rs
bw-solana pushed a commit that referenced this pull request Dec 9, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)
bw-solana pushed a commit that referenced this pull request Dec 9, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)

# Conflicts:
#	programs/sbf/tests/programs.rs
#	sdk/src/feature_set.rs
bw-solana pushed a commit that referenced this pull request Dec 11, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)
bw-solana pushed a commit that referenced this pull request Dec 11, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)

# Conflicts:
#	programs/sbf/tests/programs.rs
#	sdk/src/feature_set.rs
bw-solana pushed a commit that referenced this pull request Dec 11, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)
bw-solana pushed a commit that referenced this pull request Dec 11, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)

# Conflicts:
#	programs/sbf/tests/programs.rs
#	sdk/src/feature_set.rs
bw-solana pushed a commit that referenced this pull request Dec 12, 2024
* feat: deplete compute meter for vm errors

* add tests

* rekey apply_cost_tracker_during_replay

(cherry picked from commit b120fc1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-gate Pull Request adds or modifies a runtime feature gate v2.0 Backport to v2.0 branch v2.1 Backport to v2.1 branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants