]> git.saurik.com Git - redis.git/commitdiff
zmalloc_get_private_dirty() function added (Linux only).
authorantirez <antirez@gmail.com>
Mon, 19 Nov 2012 10:24:56 +0000 (11:24 +0100)
committerantirez <antirez@gmail.com>
Tue, 20 Nov 2012 11:32:14 +0000 (12:32 +0100)
For non Linux systmes it just returns 0.

This function is useful to estimate copy-on-write because of childs
saving stuff on disk.

src/zmalloc.c
src/zmalloc.h

index 1ebf68d17ad309ff0a732a067acbc11589f5f659..1f8c7f08e145b7b2f5de0ad74b2a5e6974e9c1c0 100644 (file)
@@ -324,3 +324,28 @@ size_t zmalloc_get_rss(void) {
 float zmalloc_get_fragmentation_ratio(void) {
     return (float)zmalloc_get_rss()/zmalloc_used_memory();
 }
 float zmalloc_get_fragmentation_ratio(void) {
     return (float)zmalloc_get_rss()/zmalloc_used_memory();
 }
+
+#if defined(HAVE_PROCFS)
+size_t zmalloc_get_private_dirty(void) {
+    char line[1024];
+    size_t pd = 0;
+    FILE *fp = fopen("/proc/self/smaps","r");
+
+    if (!fp) return 0;
+    while(fgets(line,sizeof(line),fp) != NULL) {
+        if (strncmp(line,"Private_Dirty:",14) == 0) {
+            char *p = strchr(line,'k');
+            if (p) {
+                *p = '\0';
+                pd += strtol(line+14,NULL,10) * 1024;
+            }
+        }
+    }
+    fclose(fp);
+    return pd;
+}
+#else
+size_t zmalloc_get_private_dirty(void) {
+    return 0;
+}
+#endif
index 14e79534e17dccd455975e1e328d59741aecb5ca..331d8e4335ffba10a96eb7d6dcd9e38ff1c18f50 100644 (file)
@@ -75,6 +75,7 @@ void zmalloc_enable_thread_safeness(void);
 void zmalloc_set_oom_handler(void (*oom_handler)(size_t));
 float zmalloc_get_fragmentation_ratio(void);
 size_t zmalloc_get_rss(void);
 void zmalloc_set_oom_handler(void (*oom_handler)(size_t));
 float zmalloc_get_fragmentation_ratio(void);
 size_t zmalloc_get_rss(void);
+size_t zmalloc_get_private_dirty(void);
 void zlibc_free(void *ptr);
 
 #ifndef HAVE_MALLOC_SIZE
 void zlibc_free(void *ptr);
 
 #ifndef HAVE_MALLOC_SIZE