]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-132917: Use /proc/self/status for mem usage info. (GH-133544) (gh-133718)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 8 May 2025 23:37:59 +0000 (01:37 +0200)
committerGitHub <noreply@github.com>
Thu, 8 May 2025 23:37:59 +0000 (16:37 -0700)
On Linux, use /proc/self/status for mem usage info.  Using smaps_rollup is quite a lot slower and
we can get the similar info from /proc/self/status.
(cherry picked from commit 751db4e64993b5af98aa1c12cc9d7c7c5882961b)

Co-authored-by: Neil Schemenauer <nas-github@arctrix.com>
Python/gc_free_threading.c

index 757e9cb3227e2601a7c07ceaab47c85542aaed2c..d2ea5b5e06ba4348cecdc186dd0efbc8eb66ef9b 100644 (file)
@@ -1927,8 +1927,7 @@ get_process_mem_usage(void)
     }
 
 #elif __linux__
-    // Linux, use smaps_rollup (Kernel >= 4.4) for RSS + Swap
-    FILE* fp = fopen("/proc/self/smaps_rollup", "r");
+    FILE* fp = fopen("/proc/self/status", "r");
     if (fp == NULL) {
         return -1;
     }
@@ -1938,11 +1937,11 @@ get_process_mem_usage(void)
     long long swap_kb = -1;
 
     while (fgets(line_buffer, sizeof(line_buffer), fp) != NULL) {
-        if (rss_kb == -1 && strncmp(line_buffer, "Rss:", 4) == 0) {
-            sscanf(line_buffer + 4, "%lld", &rss_kb);
+        if (rss_kb == -1 && strncmp(line_buffer, "VmRSS:", 6) == 0) {
+            sscanf(line_buffer + 6, "%lld", &rss_kb);
         }
-        else if (swap_kb == -1 && strncmp(line_buffer, "Swap:", 5) == 0) {
-            sscanf(line_buffer + 5, "%lld", &swap_kb);
+        else if (swap_kb == -1 && strncmp(line_buffer, "VmSwap:", 7) == 0) {
+            sscanf(line_buffer + 7, "%lld", &swap_kb);
         }
         if (rss_kb != -1 && swap_kb != -1) {
             break; // Found both