Re: BUG #17448: In Windows 10, version 1703 and later, huge_pages doesn't work.
От | Julien Rouhaud |
---|---|
Тема | Re: BUG #17448: In Windows 10, version 1703 and later, huge_pages doesn't work. |
Дата | |
Msg-id | 20220331110309.ws25d6dl5yyzprye@jrouhaud обсуждение исходный текст |
Ответ на | Re: BUG #17448: In Windows 10, version 1703 and later, huge_pages doesn't work. (Julien Rouhaud <rjuju123@gmail.com>) |
Ответы |
Re: BUG #17448: In Windows 10, version 1703 and later, huge_pages doesn't work.
|
Список | pgsql-bugs |
On Thu, Mar 31, 2022 at 06:46:59PM +0800, Julien Rouhaud wrote: > On Thu, Mar 31, 2022 at 04:00:55PM +0800, Julien Rouhaud wrote: > > > Okano-san has mentioned VMMap upthread: > > > https://docs.microsoft.com/en-us/sysinternals/downloads/vmmap > > > > Yes, I totally missed that. Thomas Munro also mentioned it off-list, and > > also found some reference [1] indicating that large pages should show up as > > "Locked WS". I tested with and without the patch and in both case I don't see > > any "Locked WS" usage. I also get the same Page Table size, which seems > > consistent with large pages not being used. Now, this is a vm running with > > virtualbox and we're not entirely sure that huge pages can be allocated with > > it. I wish I could test on my windows 10 machine as it's not virtualized, but > > I can't give the required privileges. > > > > [1] https://aloiskraus.wordpress.com/2016/10/03/windows-10-memory-compression-and-more/ > > So, after more digging it turns out that the patch is supposed to work. If I > force using the PG_FILE_MAP_LARGE_PAGES, postgres starts and I do see "Locked > WS" usage with VMMap, with a size in the order of magnitude of my > shared_buffers. > > What is apparently not working on my VM is IsWindowsVersionOrGreater(10, 0, > 1703). I added some debug around to check what GetVersionEx() [2] is saying, > and I get: > > dwMajorVersion == 6 > dwMinorVersion == 2 > dwBuildNumber == 9200 > > While winver.exe on the same vm says windows 11, version 21H2, build 22000.493. So, what GetVersionEx returns is actually "it depends", and this is documented: > With the release of Windows 8.1, the behavior of the GetVersionEx API has > changed in the value it will return for the operating system version. The > value returned by the GetVersionEx function now depends on how the > application is manifested. > > Applications not manifested for Windows 8.1 or Windows 10 will return the > Windows 8 OS version value (6.2). Once an application is manifested for a > given operating system version, GetVersionEx will always return the version > that the application is manifested for in future releases. To manifest your > applications for Windows 8.1 or Windows 10, refer to Targeting your > application for Windows. There's no such indication on IsWindowsVersionOrGreater(), but after seeing various comments on forums from angry people, it may be a hint that it behaves similarly. I'm not sure what to do at this point, maybe just always use the flag (the PG_ version which may be 0), hoping that hopefully windows won't define it if it can't handle it?
В списке pgsql-bugs по дате отправления: