http://bugs.winehq.org/show_bug.cgi?id=35587
--- Comment #23 from Riccardo c10ud.dev@gmail.com --- (In reply to Riccardo from comment #22)
(In reply to Dmitry Timoshkov from comment #21)
(In reply to Riccardo from comment #20)
sample run:
- windows xp sp3:
Large read: 15 for 11128460 bytes - overlapped: 0 Small reads: 14500 for 11128460 bytes - overlapped (total: 2782115): 2782115
- wine 1.7.16 ubuntu 14.04 x64 kernel 3.13.0-24-generic:
Large read: 15 for 11128460 bytes - overlapped: 0 Small reads: 44849 for 11128460 bytes - overlapped (total: 2782115): 0
It would be interesting to compare this to a not overlapped case, which I suspect will show the same results.
Hello Dmitry, you're right, without FLAG_FILE_OVERLAPPED the results are more or less the same for both Windows and wine.
It looks like this issue is actually two different issues: - Commenting out (or, actually, disabling for type=FD_TYPE_FILE) send_completion in ntdll/file.c NtReadFile brings down my test case execution time from 55s to 5s in wine. See relevant line: if (send_completion) NTDLL_AddCompletion( hFile, cvalue, status, total );
- The fact that we're not doing overlapped IO locks the game UI for a while during load
game load time: - with send_completion: ~120s to load - without send_completion: ~105s to load
I think the game issue is a mixture of those two: the game may crash for slow systems because it might remain "locked" for a while (no overlapped IO)..and it's even a bit slower than it should because of the NTDLL_AddCompletion call.