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

Optimization: Modify Heap read and write related functions (wip) #206

Closed
wants to merge 48 commits into from

Conversation

JulianVentura
Copy link
Contributor

@JulianVentura JulianVentura commented Aug 19, 2024

Description

This PR improves vm performance by updating Heap read and write related functions.

Inspiration

We are currently iterating and applying U256 operations with a for loop on some Heap functions, like read. It works, but it's not very efficient. We may replace this with functions like U256::from_big_endian instead.

Changes

  • Heap::store
  • Heap::read
  • Heap::expanded_read
  • Heap::read_unaligned_from_pointer

Results

  • Up to 45% improvement on bench heap_read_write.
  • Around 5% improvement on the other benches.
  • Around 11% improvement on execution time running all but event_spam benches.

Oppen and others added 30 commits August 13, 2024 11:39
From the spec:
> Code pages
> A code page contains 216216 instructions. They are not writable.
> On genesis, code pages are filled as follows:
> The contract code is places starting from the address 0.
> The rest is filled with a value guaranteed to decode as invalid
> instruction.

Our code before this fix panics when running the benchmarks due to this
discrepancy.

The applied fix creates a newtype for code pages that wraps the
`Vec<U256>` and returns `U256::zero()` when reading out of bounds, which
decodes to an invalid instruction, matching the spec and fixing the
`panic`.
ci: fix yml file

ci: fix yml file (again)

debug: temporarily comment workflow to test ci
ci: remove working directory step

ci: add comment

ci: use node-setup
ci: fix yarn cache

ci: comment bench step for now

ci: add working directory for contracts

ci: set path for yarn cache

ci: fix path to zksync-era yarn.lock
makefile: remove 'touch' command from make target
zksync-era: bump era commit
@JulianVentura JulianVentura changed the title Optimization: Modify Heap::read function (wip) Optimization: Modify Heap read and write related functions (wip) Aug 20, 2024
@JulianVentura JulianVentura changed the base branch from bench/base to ci/add_era_benches August 21, 2024 14:41
Base automatically changed from ci/add_era_benches to main August 26, 2024 19:35
@JulianVentura
Copy link
Contributor Author

Close because moved to #216

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.

3 participants