Surely correctness is more important here? If an app explicitly requests no buffering, it must already understand that this can significantly impact performance if I/O is done incorrectly
Yes, correctness is most important, but broadly across the apps these flags this is optimization feature, functional result doesn't depend on those. And while using that may have moderate positive impact on Windows if the app implements own sophisticated data caching that is not necessarily the case on Linux (and can instead throttle the performance greatly due to various aspects not working the same). So in this sense it will only be correct if the effect of caching and disabling that is the same. For one, the absence of async file IO in Wine may be standing on the way in this case. The case of benchmarking software is special of course, it will clearly misbehave with cache disable not working, but the question is how well we support such a low level software in Wine anyway now and how much is it needed through Wine (vs the more basic use cases).
Direct I/O on Windows broadly has the same limitations as O_DIRECT according to the documentation (access must be aligned and an integer multiple of block size): https://learn.microsoft.com/en-us/windows/win32/fileio/file-buffering#alignm...
That would need detailed tests, documentation is unfortunately not an argument for correctness and can only be viewed as a hint. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9809#note_126004