crypto icon indicating copy to clipboard operation
crypto copied to clipboard

xts: avoid redundant bounds checks

Open ncruces opened this issue 1 year ago • 6 comments

Small changes to improve performance of xts by about 6%.

This removes all bounds checks, which can be verified by running:

go build -gcflags="-d=ssa/check_bce/debug=1" .

Before this would show mutiple Found IsInBounds/IsSliceInBounds in the inner loops of Encrypt and Decrypt.

Tweaked the benchmark to use a larger buffer to make the improvement more visible. XTS is often used with disk sector sizes, so larger values are appropriate.

goos: linux
goarch: amd64
pkg: golang.org/x/crypto/xts
cpu: Intel(R) Xeon(R) W-2135 CPU @ 3.70GHz
       │ before.txt  │             after.txt              │
       │   sec/op    │   sec/op     vs base               │
XTS-12   1.720µ ± 2%   1.619µ ± 2%  -5.87% (p=0.000 n=10)

       │  before.txt  │              after.txt              │
       │     B/s      │     B/s       vs base               │
XTS-12   177.4Mi ± 2%   188.5Mi ± 2%  +6.24% (p=0.000 n=10)

       │ before.txt │           after.txt            │
       │    B/op    │    B/op     vs base            │
XTS-12   0.000 ± 0%   0.000 ± 0%  ~ (p=1.000 n=10) ¹
¹ all samples are equal

       │ before.txt │           after.txt            │
       │ allocs/op  │ allocs/op   vs base            │
XTS-12   0.000 ± 0%   0.000 ± 0%  ~ (p=1.000 n=10) ¹
¹ all samples are equal

ncruces avatar Oct 14 '24 12:10 ncruces

This PR (HEAD: 6318dab4e0ae3a1e4d1f6c8a1c4cc38b012954ae) has been imported to Gerrit for code review.

Please visit Gerrit at https://go-review.googlesource.com/c/crypto/+/619975.

Important tips:

  • Don't comment on this PR. All discussion takes place in Gerrit.
  • You need a Gmail or other Google account to log in to Gerrit.
  • To change your code in response to feedback:
    • Push a new commit to the branch used by your GitHub PR.
    • A new "patch set" will then appear in Gerrit.
    • Respond to each comment by marking as Done in Gerrit if implemented as suggested. You can alternatively write a reply.
    • Critical: you must click the blue Reply button near the top to publish your Gerrit responses.
    • Multiple commits in the PR will be squashed by GerritBot.
  • The title and description of the GitHub PR are used to construct the final commit message.
    • Edit these as needed via the GitHub web interface (not via Gerrit or git).
    • You should word wrap the PR description at ~76 characters unless you need longer lines (e.g., for tables or URLs).
  • See the Sending a change via GitHub and Reviews sections of the Contribution Guide as well as the FAQ for details.

gopherbot avatar Oct 14 '24 12:10 gopherbot

Message from Gopher Robot:

Patch Set 1:

(1 comment)


Please don’t reply on this GitHub thread. Visit golang.org/cl/619975. After addressing review feedback, remember to publish your drafts!

gopherbot avatar Oct 14 '24 12:10 gopherbot

Message from Nuno Cruces:

Patch Set 1:

(1 comment)


Please don’t reply on this GitHub thread. Visit golang.org/cl/619975. After addressing review feedback, remember to publish your drafts!

gopherbot avatar Oct 14 '24 12:10 gopherbot

Message from Nuno Cruces:

Patch Set 2:

(1 comment)


Please don’t reply on this GitHub thread. Visit golang.org/cl/619975. After addressing review feedback, remember to publish your drafts!

gopherbot avatar Oct 14 '24 12:10 gopherbot


yener35 avatar Oct 15 '24 14:10 yener35


yener35 avatar Oct 15 '24 14:10 yener35