Hi all, another release for wazero has arrived! This v1.7.2 is just as boring as the previous v1.7.1, but includes important bug fixes!
Notably,
On amd64, wazero properly saves the potentially clobbered registers during memory.{copy,init,fill} instructions after #2202, by @mathetake.
For very large stack traces with lots of inlined function calls, previously it included the omitted frames... comment in the wrong position, which is fixed in #2199 by @mathetake.
A race condition during the concurrent compilation has been fixed in #2194 by @mathetake
The custom memory allocator introduced in v1.7.1 has been fixed and now sets the memory capacity properly in #2189 by @anuraaga
Enjoy! 👯 🕺 💃
v1.7.1
Hiya folks, time to celebrate the new wazero release again! The last release 1.7.0 was such a blast so this new 1.7.1 is a little bit boring compared to it, but it still has some niceties!
This patch release has basically two major things: various bug fixes and experimental memory allocation API!
Bug fixes
Since the release of 1.7.0, several community members (@jerbob92, @anuraaga and @davidmdm) tried the new optimizing compiler and reported some bugs. @mathetake and @evacchi worked on the fix and all the reported bugs were removed. Notably, the arm64 compiler has become more robust against huge binaries like the ones produced by the Go official compiler, in addition to a corner case in the bounds check elimination optimization pass applied to both arm64 and amd64.
Experimental Memory Allocator API
The experimental Memory Allocator API has been added to our experimental friends by @ncruces in collaboration with @achille-roussel. This allows you to control how to allocate the linear memory of Wasm instance. For instance, you can use a memory mapped buffer as a Wasm linear memory. This is highly advanced feature hence requires a lot of detailed knowledge on how Wasm module works. If this is something interesting to you, we highly recommend to talk to @ncruces who is an expert in here ;)
Other Contributions
it is now possible to successfully build wazero with TinyGo compiler thanks to the contributions by @deadprogram and @orsinium
@ncruces helped clean up the dead codes and experimental packages.
v1.7.0
Welcome to wazero 1.7: the release that upgrades like a minor, but feels like a major!
It's finally time for the long-awaited, final release of our brand new optimizing compiler. This is such a big deal that we are celebrating it at [Wasm I/O 2024][wasmio] with another round of wonderful lightning talks from wazero users [like we did in 2023][wazero1]. In fact, even this release is being tagged during the event! Stay tuned on our usual channels to see the recording:
Follow the [#wazero hashtag on Twitter][twitter]
Join the [#wazero channel on the Gophers Slack][gophers]
wazero optimizes machine code compiled from wasm
Translating Wasm bytecode into machine code can take multiple forms. An optimizing compiler performs multiple nontrivial transformations on the input code, ultimately producing more efficient ("optimized") code.
In 1.7 we replaced our internal wasm compiler with an optimizing one. This means it is a drop-in: you don’t need to do anything to use it. If interested in compiler design, please read [the docs][wazevo-docs], contributed by @evacchi.
As for performance improvements, we have come to expect a run-time boost ranging from 10% to even 60%, with 30-40% being the average. Notably:
@ncruces' fork of [coremark][coremark] shows an improved score of 15265 vs 9591, i.e. about +60% on arm64 (Apple M1 Pro)
[mercari/grpc-federation][mercari] improvements between 4-10% on their Wasm extensions to the [Common Extension Language][cel]
[kubernetes-sigs/kube-scheduler-wasm-extension][k8s-sched] sees an average of >40% decrease on schedule lifecycle overhead
... (truncated)
Commits
5a8a053 Merges interpreter and wazeroir packages (#2204)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps github.com/tetratelabs/wazero from 1.5.0 to 1.7.2.
Release notes
Sourced from github.com/tetratelabs/wazero's releases.
... (truncated)
Commits
5a8a053
Merges interpreter and wazeroir packages (#2204)bc0915e
integration test: adds memmov regression tests (#2203)3403dd3
amd64: saves clobbered xmm8-xmm15 beyond runtime.memmove (#2202)bac8bd1
fuzz: adds regression case for #2198 (#2201)b7df8b1
debug: do not include inlined sources in frame counts (#2199)60dbe96
Assumes ctx is not nil (#2196)1e6080a
compiler: uses slice instead of map for refToBinaryOffset (#2195)621f62d
Fixes race condition in concurrent engine usage (#2194)7ad2b70
Removes GOOS=js related leftovers (#2193)5a9cb5a
experimental: reflect custom allocated buffer capacity to internal buffer (#2...Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show