The Wine 10.7 development release is out now, and in the highlights they noted an interesting sounding performance improvement for select games.
Highlights of the release:
- User fault fd support to improve write watches performance.
- Support for Float format conversions in WindowsCodecs.
- More work on the new PDB backend.
- Various bug fixes.
For that first bullet point, it comes from a merge request titled "ntdll: Use UFFD for tracking write watches when possible" from CodeWeavers developer Paul Gofman that notes:
The primary motivation for this patchset is performance improvement. The issue was originally observed with Streets of Rage 4 game which was sometimes loading [levels] for about 1-1.5 min (while that was happening almost instantly on Windows). The performance problem is coming from .Net Core memory management / garbage collector code. That huge performance issue was caused not only by direct turnaround difference for write watched memory access but also by specifics of the [algorithm] which was using different memory pools / strategies [effectively] based on memory access timing and was resulting in especially unfortunate pattern hitting write-protected (for write watch) pages much more often than it normally would. Since then something has changed either in the game or in .Net Core it is using, and the difference in level loads is not that dramatic without this optimization, but still it is some 6-8 sec without this patch instead of 1.5-2sec with this patch or on Windows, suggesting that it still provides a huge performance improvement at least for .Net Core memory management.
And the bug fixes noted for this release include:
- #18803 PokerStars windows disappear on alert
- #18926 In Winamp, the "send to..." submenu in the playlist menu does not appear
- #20172 Button "Alt Gr" triggers access violation in Teach2000
- #31775 Misaligned icons in icon bar
- #33624 winhelp: Popups appear with bogus scrollbars which disappear when you click them
- #37706 ScrollWindowEx() returns ERROR if the window is not visible (in the Windows API sense); real Windows returns NULLREGION
- #38379 Barnham Junction fails to start "Cannot create file C\users\username\Temp\BBC*.tmp\Sim Resources\Barnham Junction\Nameboard.bmp"
- #48792 HeidiSQL: some icons completely grayed out
- #50226 Native Access 1.13.5 Setup PC.exe Installer installs infinitely
- #50851 The procedure entry point RasClearConnectionStatistics could not be located in the dynamic link library RASAPI32.dll
- #56107 Comdlg32/Color - Cross not painted
- #57684 Games do not receive keyboard input in virtual desktop mode
- #58072 LVSCW_AUTOSIZE does not include the size of the state imagelist
- #58082 Race condition in GlobalMemoryStatusEx() implementation
Source: Wine GitLab
Scarlet Nexus
https://i.imgur.com/3LisQx9.png
Tales of Arise
https://i.imgur.com/B4zPT30.png
https://i.imgur.com/YuI2IrK.png
Almost forget something more related paul gofman patch:
https://gitlab.winehq.org/wine/wine/-/merge_requests/7871
UFFD supports the functionality similar to Windows write watches starting from kernel 6.7.

Last edited by mrdeathjr on 3 May 2025 at 11:01 am UTC
also the patch similar to this one was in Proton for years and is not known to introduce problems (before UFFD support was added in kernel 6.7 there was similar mechanism introduced with a custom patch in SteamOS and some custom kernels which Proton was using).From how I'm reading the commit message, similar functionality seems to already exist in Proton.
Streets of Rage 4 has a native Linux port, so wonder why they chose that as an example? I have the game but can't remember the load times.What the Wine devs are after are test cases that indicate an issue with Wine's implementation. Fixing the implementation, while a good goal in itself, will likely also help many other applications. It doesn't matter what the test case application actually is, as long as it shows some repeatable thing to test against.
See more from me