From e95ca66320a97d4a7415ce5dda942130d6338f85 Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 19 Nov 2012 11:24:56 +0100 Subject: [PATCH] zmalloc_get_private_dirty() function added (Linux only). 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 | 25 +++++++++++++++++++++++++ src/zmalloc.h | 1 + 2 files changed, 26 insertions(+) diff --git a/src/zmalloc.c b/src/zmalloc.c index 1ebf68d1..1f8c7f08 100644 --- a/src/zmalloc.c +++ b/src/zmalloc.c @@ -324,3 +324,28 @@ size_t zmalloc_get_rss(void) { 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 diff --git a/src/zmalloc.h b/src/zmalloc.h index 14e79534..331d8e43 100644 --- a/src/zmalloc.h +++ b/src/zmalloc.h @@ -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); +size_t zmalloc_get_private_dirty(void); void zlibc_free(void *ptr); #ifndef HAVE_MALLOC_SIZE -- 2.45.2