#1073: Caching hash method pointers globally to improve performances #1077
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes the performance issue with TCrypto hash functions we've observed as explained in issue #1073.
Summary of the changes
I've also performed the change in RSA and ECC code but haven't benchmarked it. However I don't expect a significant performance uplift in those cases. I simply did it for consistency.
I'm also unsure of what code conventions I should follow so please don't hesitate to ask for such changes.
Performance data
The following benchmark were run on a dual Intel(R) Xeon(R) Silver 4310 system. The support of SHANI amplify the magnitude of the issue so systems without SHANI support will see a smaller uplift.
Benchmarks can be replicated using the enclave code here: https://github.com/haxelion/sgx_tcrypto_bench
The benchmark code perform 1,000,000 iteration of the selected algorithm inside an ECALL. Several of those ECALL are called in parallel from multiple threads. What is expected is that, up to the core count, there shouldn't be any noticeable slowdown.
I've also attached the detailed console output to this PR: Intel TCrypto benchmark data.md.
SHA1
24 threads speed-up: 44x
SHA256
24 threads speed-up: 43x
HMAC-SHA256
24 threads speed-up: 14x
SHA384
24 threads speed-up: 12x