Skip to content

Commit b81cb44

Browse files
committed
Fix OS-level thread priority degradation in InProcess executors
1 parent 36abf67 commit b81cb44

2 files changed

Lines changed: 16 additions & 8 deletions

File tree

‎src/BenchmarkDotNet/Toolchains/InProcess/Emit/InProcessEmitExecutor.cs‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,12 @@ private async ValueTask<int> ExecuteCore(IHost host, ExecuteParameters parameter
7070
var oldThreadPriority = thread.Priority;
7171

7272
var affinity = parameters.BenchmarkCase.Job.ResolveValueAsNullable(EnvironmentMode.AffinityCharacteristic);
73+
bool processPrioritySet = false;
74+
bool threadPrioritySet = false;
7375
try
7476
{
75-
process.TrySetPriority(ProcessPriorityClass.High, parameters.Logger);
76-
thread.TrySetPriority(ThreadPriority.Highest, parameters.Logger);
77+
processPrioritySet = process.TrySetPriority(ProcessPriorityClass.High, parameters.Logger);
78+
threadPrioritySet = thread.TrySetPriority(ThreadPriority.Highest, parameters.Logger);
7779

7880
if (affinity != null)
7981
{
@@ -88,8 +90,10 @@ private async ValueTask<int> ExecuteCore(IHost host, ExecuteParameters parameter
8890
}
8991
finally
9092
{
91-
process.TrySetPriority(oldPriority, parameters.Logger);
92-
thread.TrySetPriority(oldThreadPriority, parameters.Logger);
93+
if (processPrioritySet)
94+
process.TrySetPriority(oldPriority, parameters.Logger);
95+
if (threadPrioritySet)
96+
thread.TrySetPriority(oldThreadPriority, parameters.Logger);
9397

9498
if (affinity != null && oldAffinity != null)
9599
{

‎src/BenchmarkDotNet/Toolchains/InProcess/NoEmit/InProcessNoEmitExecutor.cs‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,12 @@ private async ValueTask<int> ExecuteCore(IHost host, ExecuteParameters parameter
7171
var oldThreadPriority = thread.Priority;
7272

7373
var affinity = parameters.BenchmarkCase.Job.ResolveValueAsNullable(EnvironmentMode.AffinityCharacteristic);
74+
bool processPrioritySet = false;
75+
bool threadPrioritySet = false;
7476
try
7577
{
76-
process.TrySetPriority(ProcessPriorityClass.High, parameters.Logger);
77-
thread.TrySetPriority(ThreadPriority.Highest, parameters.Logger);
78+
processPrioritySet = process.TrySetPriority(ProcessPriorityClass.High, parameters.Logger);
79+
threadPrioritySet = thread.TrySetPriority(ThreadPriority.Highest, parameters.Logger);
7880

7981
if (affinity != null)
8082
{
@@ -89,8 +91,10 @@ private async ValueTask<int> ExecuteCore(IHost host, ExecuteParameters parameter
8991
}
9092
finally
9193
{
92-
process.TrySetPriority(oldPriority, parameters.Logger);
93-
thread.TrySetPriority(oldThreadPriority, parameters.Logger);
94+
if (processPrioritySet)
95+
process.TrySetPriority(oldPriority, parameters.Logger);
96+
if (threadPrioritySet)
97+
thread.TrySetPriority(oldThreadPriority, parameters.Logger);
9498

9599
if (affinity != null && oldAffinity != null)
96100
{

0 commit comments

Comments
 (0)