-
-
Notifications
You must be signed in to change notification settings - Fork 311
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Physical memory larger than virtual memory on Windows #1208
Comments
I tracked down what the .NET Runtime does for this API: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.privatememorysize64?view=net-8.0 Win32 API for accessing "Private Bytes" of process: Seems to me like this header is for internal use only and is unstable across Windows versions. |
I suppose we can use the internal use only API for the time being, wouldn't be the first time for windows. Surprisingly enough, they almost never change. Interested into sending a fix? |
I can take a stab at it this weekend, but I'm not super familiar with Rust yet (beginner-intermediate), so no guarantees on producing something workable. |
It's fine. I can help you with the code through reviews. :) |
Can private memory be exposed via some api or struct? Because Windows Task Manager counts Private Memory instead of RSS. This results in the memory statistics being larger than the memory in Windows Task Manager, which is very confusing for common users (Not Developer). |
Didn't know about Private Memory and I found a nice post about it: https://stackoverflow.com/a/1986486 So in here, I don't really know what to answer. I'd like to keep the API unified across supported OSes as much as possible, but I also want to provide the expected information. |
If you're up for implementing this feature, then I'd gladly merge it. :) |
I investigated the implementation of each platform. Some of these platforms don't have a simple implementation, so forget it. Windows:Linux:cat /proc/<PID>/status https://man7.org/linux/man-pages/man5/proc_pid_status.5.html FreeBSDUnknown MacOS:Unknown |
Having Linux and Windows implementation is already good enough. Just add methods returning |
Describe the bug
OS: Windows 10
sysinfo
version: v0.30.5When running a small Rust binary that uses
sysinfo
to print out process stats, I noticed that the reported virtual memory is ~5MB but the physical memory is ~15MB. According to the docs, virtual memory should always include the physical memory size and then add additional address space from paged regions, etc.Here is what Resource Monitor shows for the process:
This is what Task Manager shows:
The "Private" memory is what Windows considers to be the uniquely allocated memory of the process:
I looked into the Windows code here and I think there is a case to be made to use a different value than
WorkingSetSize
for the physical memory of the process.The question is how is this value calculated? It seems to be the "Working Set Size" minus the "Shareable" memory.
Thoughts?
To Reproduce
Run a small Rust app that prints out the virtual and physical memory using
sysinfo
.The text was updated successfully, but these errors were encountered: