Performance issue on Win2012R2

I’ve been encountering an unexplained performance issue with Windows 2012R2 Server. It happens on two machines with Win2012 and none of the machines running different version of the OS (Win2008, Win10).

Debugging this problem gives very scarce results - there is no definite point of bottleneck anywhere. The performance problem seems to be uniformly spread over everything - possibly memory allocations, event waits etc. It seems that having a large number of operations (for example blueprint that is child of another blueprint, that’s child of a C++ class, located in different modules and making calls to eachother) influences performance the most, possibly something to do with calls between DLL’s.

A simple trick of “F12” or break all at random points during the low performance yields absolutely nothing - the code breaks in random points (if there was a definite bottleneck, there would be higher probability of breaking there).

I’ve also tried to use the VS2015 profiler - CPU usage is very high and spread over everything. Especially Slate, strangely enough, seems to take up weird amounts of time (but it’s only characteristic of a lot of operations being done in Slate - every other area exhibits same behavior):

LogStats:         50.219ms (   1)  -  Total Slate Tick Time - STAT_SlateTickTime - STATGROUP_Slate - STATCAT_Advanced
LogStats:           44.760ms (   1)  -  Draw Window And Children Time - STAT_SlateDrawWindowTime - STATGROUP_Slate - STATCAT_Advanced
LogStats:             44.577ms (   1)  -  Self

It doesn’t matter which VS was used to build the project (2015 or 2013), nor the build configuration (debug, release all produce same slowdown). It doesn’t matter whether Win2012 has priority set to background services or to applications, whether DEP is on or off, etc.

DxDiag for one of the machines is included.

Worth mentioning that I’ve encountered this issue with versions as old as 4.7. All on a Win2012R2 machine. The impact is highest on the game thread - but if I move physics substepping to a task on another thread (pre-4.12 behavior) it will create weird slowdown in both tasks and the game thread.

It also affects shipping builds too.

After giving up and trying a different route on finding the cause of the problem, we found the solution.

The problem of performance fully goes away by switching from “default” power saving settings to “high performance” (aka no power saving) - and there doesn’t seem to be any specific option in power savings which would affect it (though, there are many hidden options not available in the UI). And there’s no option that fixes the problem when staying on “default” power settings.

It seems to be related to Slow performance when using power plan - Windows Server | Microsoft Docs

Epic Games should add Win2008 and Win2012 to partially-incompatible operating systems with reference to that KB article.