Stream: git-wasmtime

Topic: wasmtime / PR #5190 Cranelift: de-duplicate bounds checks...


view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 18:40):

fitzgen requested cfallin for a review on PR #5190.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 18:40):

fitzgen opened PR #5190 from de-dupe-bounds-checks to main:

When both (1) "dynamic" memories that need explicit bounds checks and (2)
spectre mitigations that perform bounds checks are enabled, reuse the same
bounds checks between the two legalizations.

This reduces the overhead of explicit bounds checks and spectre mitigations over
using virtual memory guard pages with spectre mitigations from ~1.9-2.1x
overhead to ~1.6-1.8x overhead. That is about a 14-19% speed up for when dynamic
memories and spectre mitigations are enabled.

virtual-memory-guards.so vs bounds-checks.so

<details>

execution :: instructions-retired :: benchmarks/spidermonkey/benchmark.wasm

  Δ = 3422455129.47 ± 120159.49 (confidence = 99%)

  virtual-memory-guards.so is 2.09x to 2.09x faster than bounds-checks.so!

  [6563931659 6564063496.07 6564301535] bounds-checks.so
  [3141492675 3141608366.60 3141895249] virtual-memory-guards.so

execution :: instructions-retired :: benchmarks/bz2/benchmark.wasm

  Δ = 338716136.87 ± 1.38 (confidence = 99%)

  virtual-memory-guards.so is 2.08x to 2.08x faster than bounds-checks.so!

  [651961494 651961495.47 651961497] bounds-checks.so
  [313245357 313245358.60 313245362] virtual-memory-guards.so

execution :: instructions-retired :: benchmarks/pulldown-cmark/benchmark.wasm

  Δ = 22742944.07 ± 331.73 (confidence = 99%)

  virtual-memory-guards.so is 1.87x to 1.87x faster than bounds-checks.so!

  [48841295 48841567.33 48842139] bounds-checks.so
  [26098439 26098623.27 26099479] virtual-memory-guards.so

</details>

virtual-memory-guards.so vs de-duped-bounds-checks.so

<details>

execution :: instructions-retired :: benchmarks/spidermonkey/benchmark.wasm

  Δ = 2465900207.27 ± 146476.61 (confidence = 99%)

  virtual-memory-guards.so is 1.78x to 1.78x faster than de-duped-bounds-checks.so!

  [5607275431 5607442989.13 5607838342] de-duped-bounds-checks.so
  [3141445345 3141542781.87 3141711213] virtual-memory-guards.so

execution :: instructions-retired :: benchmarks/bz2/benchmark.wasm

  Δ = 234253620.20 ± 2.33 (confidence = 99%)

  virtual-memory-guards.so is 1.75x to 1.75x faster than de-duped-bounds-checks.so!

  [547498977 547498980.93 547498985] de-duped-bounds-checks.so
  [313245357 313245360.73 313245363] virtual-memory-guards.so

execution :: instructions-retired :: benchmarks/pulldown-cmark/benchmark.wasm

  Δ = 16605659.13 ± 315.78 (confidence = 99%)

  virtual-memory-guards.so is 1.64x to 1.64x faster than de-duped-bounds-checks.so!

  [42703971 42704284.40 42704787] de-duped-bounds-checks.so
  [26098432 26098625.27 26099234] virtual-memory-guards.so

</details>

bounds-checks.so vs de-duped-bounds-checks.so

<details>

execution :: instructions-retired :: benchmarks/bz2/benchmark.wasm

  Δ = 104462517.13 ± 7.32 (confidence = 99%)

  de-duped-bounds-checks.so is 1.19x to 1.19x faster than bounds-checks.so!

  [651961493 651961500.80 651961532] bounds-checks.so
  [547498981 547498983.67 547498989] de-duped-bounds-checks.so

execution :: instructions-retired :: benchmarks/spidermonkey/benchmark.wasm

  Δ = 956556982.80 ± 103034.59 (confidence = 99%)

  de-duped-bounds-checks.so is 1.17x to 1.17x faster than bounds-checks.so!

  [6563930590 6564019842.40 6564243651] bounds-checks.so
  [5607307146 5607462859.60 5607677763] de-duped-bounds-checks.so

execution :: instructions-retired :: benchmarks/pulldown-cmark/benchmark.wasm

  Δ = 6137307.87 ± 247.75 (confidence = 99%)

  de-duped-bounds-checks.so is 1.14x to 1.14x faster than bounds-checks.so!

  [48841303 48841472.93 48842000] bounds-checks.so
  [42703965 42704165.07 42704718] de-duped-bounds-checks.so

</details>

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 18:45):

cfallin created PR review comment:

These trace!s seem a bit verbose to leave in -- big function bodies will be replicated two more times (in addition to the pre-opt, pre-lowering and lowered vcode forms). I don't feel too strongly about that, just a suggestion.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 18:45):

cfallin submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 18:45):

cfallin submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 20:29):

fitzgen created PR review comment:

I'll remove the post-legalization logging, but I think that in general every pass should trace! log its input.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 20:29):

fitzgen submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 03 2022 at 20:29):

fitzgen edited PR review comment.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 09 2022 at 23:49):

fitzgen updated PR #5190 from de-dupe-bounds-checks to main.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 10 2022 at 16:59):

fitzgen requested cfallin for a review on PR #5190.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 10 2022 at 17:00):

fitzgen updated PR #5190 from de-dupe-bounds-checks to main.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 11 2022 at 00:22):

fitzgen requested jameysharp for a review on PR #5190.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 14 2022 at 16:32):

jameysharp submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Nov 15 2022 at 16:47):

fitzgen merged PR #5190.


Last updated: Dec 23 2024 at 12:05 UTC