Fix process-attributes rss and pmem on GNU/Linux

Problem reported by Rahguzar <https://bugs.gnu.org/72278>.
* src/sysdep.c (system_process_attributes):
[GNU_LINUX || CYGWIN || __ANDROID__]: When computing rss and pmem,
don’t assume pagesize is 4096; it could be greater.
This commit is contained in:
Paul Eggert 2024-07-24 23:32:24 -07:00
parent 6eb3827f7b
commit 42cdfe7f60

View file

@ -3548,6 +3548,7 @@ procfs_ttyname (int rdev)
}
# endif /* GNU_LINUX || __ANDROID__ */
/* Total usable RAM in KiB. */
static uintmax_t
procfs_get_total_memory (void)
{
@ -3737,8 +3738,13 @@ system_process_attributes (Lisp_Object pid)
attrs = Fcons (Fcons (Qnice, make_fixnum (niceness)), attrs);
attrs = Fcons (Fcons (Qthcount, INT_TO_INTEGER (thcount)), attrs);
attrs = Fcons (Fcons (Qvsize, INT_TO_INTEGER (vsize / 1024)), attrs);
attrs = Fcons (Fcons (Qrss, INT_TO_INTEGER (4 * rss)), attrs);
pmem = 4.0 * 100 * rss / procfs_get_total_memory ();
/* RSS in KiB. */
uintmax_t rssk = rss;
rssk *= getpagesize () >> 10;
attrs = Fcons (Fcons (Qrss, INT_TO_INTEGER (rssk)), attrs);
pmem = 100.0 * rssk / procfs_get_total_memory ();
if (pmem > 100)
pmem = 100;
attrs = Fcons (Fcons (Qpmem, make_float (pmem)), attrs);