-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
JCC Erratum Impact on .NET Core #35730
Labels
Milestone
Comments
I couldn't figure out the best area label to add to this issue. Please help me learn by adding exactly one area label. |
This was referenced May 1, 2020
This was referenced Nov 12, 2020
Merged
33 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
JCC Erratum Impact on .NET Core
In November 2019, Intel announced the Jump Conditional Code (JCC) erratum which may occur under conditions involving jump instructions that span 64-byte boundaries. Intel is resolving the JCC erratum via a microcode update that has a potential performance side-effect. The goal of this investigation was to determine whether or not we need to do any work in the runtime or framework to mitigate the impact of the microcode update.
For more details on the JCC erratum, or how applications can mitigate the performance impact, see https://www.intel.com/content/dam/support/us/en/documents/processors/mitigations-jump-conditional-code-erratum.pdf.
Thanks to everyone who participated in discussions around the JCC erratum in #13794 and #13795.
The Bottom Line
While we do see some impact from the JCC microcode update on our microbenchmark results on both Windows and Linux, we don’t see any negative impact on the “real world” scenarios that we A/B tested. As a result, we do not intend to implement any mitigations in the runtime or framework at this time. Instead, our ask of you, is to help us identify your business-critical scenarios where you are seeing an unacceptable impact. We will use this data to inform future work in this space.
Comparison Setup
In order to do a clean comparison, we setup two identical machines each with an identical Skylake processor. One machine was setup with a internal-only test build of Windows, and the other was setup with a publicly available build of Linux (Ubuntu 18.04). Both were able to deploy and revert the microcode update (MCU). This allowed for A/B comparisons and switching between the two versions of microcode on each machine.
Testing Strategy
The testing strategy was to run a selection of microbenchmarks and a set of larger scenarios across Windows and Linux, with the goal of understanding how impactful the JCC microcode update is to .NET Core.
Scenario Results
The scenarios used for this test are:
Most scenario averages are within 1%, with the exception of TechEmpower JSON which improves with the microcode update by 2.45%.
Note: Negative percentages are regressions and positive percentages are improvements.
TechEmpower Plaintext - Linux
Techempower Json - Linux
WPF Real-World App Startup - Windows
ASP.NET Core Link-A-Thon Startup - Windows
Microbenchmark Results
The microbenchmark suite contained 1673 benchmarks when run for this investigation. The benchmarks were run both with and without the microcode update applied. The graphs below represent the grouping of differences between the benchmarks with and without the microcode update applied.
Axes:
While there are some outliers, for the most part, the benchmarks are clustered around a ratio of 1 with the most benchmarks in the 1.038 – 1.085 bucket, which represents single digit percentage degradation.
The text was updated successfully, but these errors were encountered: