Don't multiply YieldProcessor count by proc count (#13556)
authorKoundinya Veluri <kouvel@users.noreply.github.com>
Fri, 25 Aug 2017 20:14:59 +0000 (13:14 -0700)
committerGitHub <noreply@github.com>
Fri, 25 Aug 2017 20:14:59 +0000 (13:14 -0700)
commit29d740ebb3cdf4ab301c574ef3fd9b76182c34e3
tree0d52f7733c27e5e3955f0994b5ff63f17e5c4ab7
parent5371352ac14424f9c0367705e04c637f0ca4058c
Don't multiply YieldProcessor count by proc count (#13556)

Related to issue mentioned in https://github.com/dotnet/coreclr/issues/13388
- Multipying the YieldProcessor count by proc count can cause excessive delays that are not fruitful on machines with a large number of procs. Even on a 12-proc machine (6-core), the heuristics as they are without the multiply seem to perform much better.
- The issue above also mentions that the delay of PAUSE on Intel Skylake+ processors have a significantly larger delay (140 cycles vs 10 cycles). Simulating that by multiplying the YieldProcessor count by 14 shows that in both tests tested, it begins crawling at low thread counts.
- I did most of the testing on ManualResetEventSlim, and since Task is using the same spin heuristics, applied the same change there as well.
src/mscorlib/src/System/Threading/ManualResetEventSlim.cs
src/mscorlib/src/System/Threading/Tasks/Task.cs