]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix process-attributes rss and pmem on GNU/Linux
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 25 Jul 2024 06:32:24 +0000 (23:32 -0700)
committerEshel Yaron <me@eshelyaron.com>
Thu, 25 Jul 2024 08:40:34 +0000 (10:40 +0200)
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.

(cherry picked from commit 42cdfe7f60ef7ae3bccb5b1e43349c3a6b54ac4a)

src/sysdep.c

index d916a695155af2f8f392c589fd2c377168022f91..3955d796ca55563bbc689d06b85f56293a4183d7 100644 (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);