http://bugs.winehq.org/show_bug.cgi?id=18745
Summary: Wine should support MEM_LARGE_PAGES and related interfaces for large pages & variable page sizes Product: Wine Version: 1.1.22 Platform: PC OS/Version: All Status: UNCONFIRMED Severity: normal Priority: P3 Component: kernel32 AssignedTo: wine-bugs@winehq.org ReportedBy: trisk-winehq@forkgnu.org
The ability to allocate large pages can improve the performance of applications with densely populated address spaces. The large page interfaces on Windows were introduced in Windows Server 2003. However, due to limitations in the NT VM, large pages are always pinned in memory (not pageable) and become scarce due to excessive fragmentation. Wine has the advantage of running on platforms with better support for large pages.
Because the memory is normally pinned, the process must have SeLockMemoryPrivilege on Windows.
The new interfaces are: MEM_LARGE_PAGES type for VirtualAlloc (NtAllocateVirtualMemory) (http://msdn.microsoft.com/en-us/library/aa366720%28VS.85%29.aspx) SEC_LARGE_PAGES flag for http://msdn.microsoft.com/en-us/library/aa366543%28VS.85%29.aspx GetLargePageMinimum (http://msdn.microsoft.com/en-us/library/aa366568%28VS.85%29.aspx) /*********************************************************************** * GetLargePageMinimum (KERNEL32.@) * * Get the minimum size of a large page. * * RETURNS * Size: Success * 0: Failure */ SIZE_T WINAPI GetLargePageMinimum(void)
The allocated regions must be aligned to the minimum size and MEM_COMMIT must also be set, or NtAllocateVirtualMemory should return STATUS_INVALID_PARAMETER.
I'm opening this bug to keep notes for my own implementation, although anyone should feel free to jump in.