https://bugs.winehq.org/show_bug.cgi?id=37104
Bug ID: 37104 Summary: Infinite revert loop Product: Wine-Testbot Version: unspecified Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: unknown Assignee: wine-bugs@winehq.org Reporter: fgouget@codeweavers.com
The current task scheduling algorithm can enter into an infinite revert loop while trying to prepare VMs for the next tasks. Assume the following settings: $MaxRevertingVMs = 2; $MaxRevertsWhileRunningVMs = 0; $MaxActiveVMs = 2;
Then the following sequence can play out: | Steps VM | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ----+-----+-----+-----+-----+-----+-----+-----+----- vm1 | rev | idl | off | off | rev | rev | rev | ... vm2 | rev | rev | rev | idl | off | off | rev | ... vm3 | off | off | rev | rev | rev | idl | off | ...
The issue happens in steps 2, 4 and 6. The scheduler can shut down idle VMs to replace them with VMs that are more appropriate for the upcoming tasks. This is what happens in these steps: it decides the idle VM it just prepared is not what it wants after all, and thus shuts it down and prepares another one.
The problem is it keeps changing its mind over and over and can never actually start a task because there is always a reverting VM and $MaxRevertsWhileRunningVMs = 0.
Another prerequisite for this scenario to play out is probably to have multiple tasks have the exact same priority, so that their order is undefined. But regardless, the scheduler should probably not be shutting down an idle VM that has an actual 'pending' task.