crypto
crypto copied to clipboard
xts: avoid redundant bounds checks
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
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.
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!
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!
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!