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

Only store local.get on the provider stack out-of-place when necessary #843

Merged
merged 2 commits into from
Dec 8, 2023

Conversation

Robbepop
Copy link
Member

@Robbepop Robbepop commented Dec 8, 2023

Closes #809.

Local translation benchmarks indicate up to 5% performance improvement.
Performance gains on Wasm are between 5-10%. 🎉

Storing local.get providers on LocalRefs is expensive. We do this to prevent certain attack vectors. However, for most common and practical Wasm inputs we might not even need to do this. This commit implements a naive safety guard.
@Robbepop Robbepop changed the title only use LocalRefs when necessary Only store local.get on the provider stack out-of-place when necessary Dec 8, 2023
@paritytech-cicd-pr
Copy link

BENCHMARKS

NATIVEWASMTIME
BENCHMARKMASTERPRDIFFMASTERPRDIFFWASMTIME OVERHEAD
execute/
br_table
1.47ms 1.52ms 🔴 3.41% 1.35ms 1.32ms 🟢 -1.70% 🟢 -13%
execute/
call/host/1
45.47µs 45.98µs ⚪ 1.12% 63.97µs 68.13µs 🔴 6.50% 🟢 48%
execute/
call/rec
167.66µs 168.62µs ⚪ 0.57% 352.43µs 343.72µs 🟢 -2.47% 🔴 104%
execute/
count_until
6.67ms 7.48ms 🔴 12.20% 7.52ms 7.59ms ⚪ 0.95% 🟢 1%
execute/
divrem
6.21ms 6.27ms ⚪ 0.97% 7.61ms 6.94ms 🟢 -8.77% 🟢 11%
execute/
factorial/iter
239.21µs 237.67µs ⚪ -0.64% 312.23µs 311.67µs ⚪ -0.18% 🟢 31%
execute/
factorial/rec
717.68µs 681.68µs 🟢 -5.02% 1.24ms 1.24ms ⚪ -0.06% 🟡 82%
execute/
fibonacci/iter
1.29ms 1.36ms 🔴 5.55% 1.26ms 1.25ms ⚪ -0.96% 🟢 -8%
execute/
fibonacci/rec
6.18ms 6.12ms ⚪ -0.92% 12.66ms 13.34ms 🔴 5.36% 🔴 118%
execute/
fibonacci/tail
1.36ms 1.47ms 🔴 8.13% 3.59ms 3.58ms ⚪ -0.23% 🔴 144%
execute/
fuse
7.36ms 7.37ms ⚪ 0.21% 11.43ms 11.48ms ⚪ 0.43% 🟡 56%
execute/
global/bump
1.32ms 1.38ms ⚪ 4.58% 1.54ms 1.54ms ⚪ -0.15% 🟢 11%
execute/
global/get_const
712.61µs 729.64µs 🔴 2.39% 751.31µs 745.00µs ⚪ -0.84% 🟢 2%
execute/
is_even/rec
1.09ms 1.08ms ⚪ -1.44% 2.22ms 2.17ms 🟢 -2.46% 🔴 101%
execute/
memory/fill_bytes
1.09ms 1.14ms 🔴 4.70% 1.32ms 1.47ms 🔴 11.14% 🟢 29%
execute/
memory/sum_bytes
1.10ms 1.08ms 🟢 -1.97% 1.25ms 1.22ms 🟢 -2.16% 🟢 13%
execute/
memory/vec_add
2.96ms 2.96ms ⚪ -0.03% 3.62ms 3.65ms ⚪ 0.87% 🟢 23%
execute/
recursive_scan
188.33µs 188.04µs ⚪ -0.15% 389.88µs 377.33µs 🟢 -3.22% 🔴 101%
execute/
recursive_trap
15.47µs 15.49µs ⚪ 0.11% 34.54µs 33.38µs 🟢 -3.37% 🔴 116%
execute/
regex_redux
599.76µs 593.96µs ⚪ -0.97% 1.01ms 1.03ms 🔴 1.68% 🟡 74%
execute/
rev_complement
443.69µs 443.95µs ⚪ 0.06% 646.95µs 645.69µs ⚪ -0.19% 🟢 45%
execute/
tiny_keccak
369.43µs 351.15µs 🟢 -4.95% 379.58µs 376.08µs ⚪ -0.92% 🟢 7%
execute/
trunc_f2i
618.93µs 619.82µs ⚪ 0.14% 962.28µs 965.26µs ⚪ 0.31% 🟡 56%
instantiate/
wasm_kernel
57.02µs 54.91µs 🟢 -3.70% 56.15µs 55.69µs ⚪ -0.81% 🟢 1%
overhead/
call/typed/0
1.28ms 1.19ms 🟢 -7.29% 762.77µs 773.77µs 🔴 1.44% 🟢 -35%
overhead/
call/typed/16
1.61ms 1.61ms ⚪ -0.34% 2.08ms 2.13ms 🔴 2.34% 🟢 33%
overhead/
call/untyped/0
1.62ms 1.63ms ⚪ 0.40% 1.22ms 1.26ms 🔴 3.55% 🟢 -22%
overhead/
call/untyped/16
2.56ms 2.49ms 🟢 -2.52% 3.82ms 4.03ms 🔴 5.29% 🟡 61%
translate/
bz2/checked/default
1.40ms 1.36ms 🟢 -2.80% 2.75ms 2.44ms 🟢 -11.29% 🟡 79%
translate/
bz2/checked/fuel
1.47ms 1.41ms 🟢 -4.19% 2.80ms 2.60ms 🟢 -7.20% 🟡 85%
translate/
bz2/unchecked/default
1.13ms 1.10ms 🟢 -2.46% 2.09ms 1.82ms 🟢 -12.89% 🟡 65%
translate/
bz2/unchecked/fuel
1.17ms 1.13ms 🟢 -3.18% 2.14ms 1.97ms 🟢 -7.92% 🟡 74%
translate/
erc1155/checked/default
287.21µs 277.71µs 🟢 -3.31% 514.50µs 472.83µs 🟢 -8.10% 🟡 70%
translate/
erc1155/checked/fuel
307.72µs 296.10µs 🟢 -3.78% 537.14µs 503.25µs 🟢 -6.31% 🟡 70%
translate/
erc1155/unchecked/default
233.00µs 231.46µs ⚪ -0.66% 403.76µs 361.11µs 🟢 -10.56% 🟡 56%
translate/
erc1155/unchecked/fuel
251.71µs 248.22µs ⚪ -1.39% 420.38µs 388.19µs 🟢 -7.66% 🟡 56%
translate/
erc20/checked/default
139.50µs 134.12µs 🟢 -3.86% 248.12µs 228.76µs 🟢 -7.80% 🟡 71%
translate/
erc20/checked/fuel
146.86µs 143.24µs 🟢 -2.47% 256.36µs 240.56µs 🟢 -6.16% 🟡 68%
translate/
erc20/unchecked/default
112.79µs 111.75µs ⚪ -0.93% 199.45µs 174.06µs 🟢 -12.73% 🟡 56%
translate/
erc20/unchecked/fuel
120.07µs 119.94µs ⚪ -0.11% 199.35µs 185.58µs 🟢 -6.90% 🟡 55%
translate/
erc721/checked/default
197.34µs 192.79µs 🟢 -2.30% 358.89µs 333.36µs 🟢 -7.11% 🟡 73%
translate/
erc721/checked/fuel
209.46µs 200.71µs 🟢 -4.18% 368.44µs 347.41µs 🟢 -5.71% 🟡 73%
translate/
erc721/unchecked/default
157.97µs 156.03µs ⚪ -1.23% 276.68µs 247.13µs 🟢 -10.68% 🟡 58%
translate/
erc721/unchecked/fuel
169.77µs 165.87µs 🟢 -2.30% 285.61µs 262.79µs 🟢 -7.99% 🟡 58%
translate/
pulldown_cmark/checked/default
3.85ms 3.74ms 🟢 -2.89% 7.01ms 6.52ms 🟢 -7.00% 🟡 74%
translate/
pulldown_cmark/checked/fuel
3.96ms 3.83ms 🟢 -3.38% 7.24ms 6.79ms 🟢 -6.21% 🟡 77%
translate/
pulldown_cmark/unchecked/default
3.11ms 3.07ms ⚪ -1.04% 5.44ms 4.91ms 🟢 -9.72% 🟡 60%
translate/
pulldown_cmark/unchecked/fuel
3.23ms 3.18ms 🟢 -1.63% 5.60ms 5.21ms 🟢 -7.00% 🟡 64%
translate/
spidermonkey/checked/default
90.04ms 87.41ms 🟢 -2.91% 167.92ms 155.93ms 🟢 -7.14% 🟡 78%
translate/
spidermonkey/checked/fuel
92.54ms 89.76ms 🟢 -3.00% 172.66ms 163.88ms 🟢 -5.09% 🟡 83%
translate/
spidermonkey/unchecked/default
71.59ms 70.95ms ⚪ -0.89% 128.61ms 116.60ms 🟢 -9.34% 🟡 64%
translate/
spidermonkey/unchecked/fuel
74.65ms 73.39ms 🟢 -1.69% 131.32ms 123.38ms 🟢 -6.04% 🟡 68%
translate/
wasm_kernel/checked/default
5.14ms 5.00ms 🟢 -2.77% 9.33ms 8.73ms 🟢 -6.42% 🟡 75%
translate/
wasm_kernel/checked/fuel
5.34ms 5.14ms 🟢 -3.84% 9.67ms 9.21ms 🟢 -4.76% 🟡 79%
translate/
wasm_kernel/unchecked/default
4.10ms 4.07ms ⚪ -0.72% 7.19ms 6.59ms 🟢 -8.24% 🟡 62%
translate/
wasm_kernel/unchecked/fuel
4.26ms 4.20ms 🟢 -1.38% 7.38ms 7.02ms 🟢 -4.88% 🟡 67%

Link to pipeline

@Robbepop Robbepop merged commit 42b1eb7 into master Dec 8, 2023
@Robbepop Robbepop deleted the rf-opt-local-get-occurrences branch December 8, 2023 16:53
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.

Optimize local.get stack occurrences
2 participants