Re:Do Not Use Task Manager for Memory Info
by AGoodName on Sunday January 06, 2019 @03:22PM
(#18840405)
I'm not going to dispute that but just want to highlight it doesn't change the fact that committed RAM can show as extremely high just by working with memory mapped files.
Memory mapping a GB log file for example will absolutely show GB's of committed memory but in reality you'll only have the last page in actual physical RAM.
Re:Do Not Use Task Manager for Memory Info
by quotemstr on Sunday January 06, 2019 @03:23PM
(#18840420)
Right. When you memory-map a file, what you've essentially done is add a temporary new pagefile to the system (your mapped file), and when you work with memory backed by that file, it's no different from working with "anonymous" memory backed by the system-wide pagefile.
Re:Do Not Use Task Manager for Memory Info
by nothrabannosir on Sunday January 06, 2019 @09:20PM
(#18842236)
Aside: I have to say this is a genius perspective on mmap, and I now finally understand why the same syscall is used for both. I never understood the link.
Thank you.
Re:Do Not Use Task Manager for Memory Info
by _cs2017_ on Sunday January 06, 2019 @04:41PM
(#18840897)
I understand commit can happen without physical page file being written to. But you say commit can happen even without any increase in virtual address space usage? That seems strange, could you explain how it can happen?
Re:Do Not Use Task Manager for Memory Info
by quotemstr on Sunday January 06, 2019 @04:48PM
(#18840942)
Change a PAGE_READONLY mapping to a PAGE_WRITECOPY one. The commit charge is billed at VirtualProtect time, and the protection can fail if you run out of commit. The kernel doesn't have to commit anything for a PAGE_READONLY mapping because all pages in such a mapping are guaranteed to be clean and trivially evictable. Not so once you introduce the possibility of COW faults. Reserving a big range of address space and committing it a little bit at a time is a very common pattern.
Another thing: create a 1GB section. Map it, and fill it up. Unmap it. Map it again. What you wrote is still there. Between the map and remap, you have commit without corresponding address space.
That's not actually true though. You can see an increase in a process's commit charge without anything new being written to the pagefile. Commit is a check that the kernel writes to applications; you're confusing that check for cash in a wallet. You can also have commit without any virtual address space to blame for it through section handles or other tricks. It's complicated.