Skip to content
Permalink
Browse files

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.
  • Loading branch information...
antirez committed Nov 19, 2012
1 parent af0b220 commit 3bfeb9c1a7044cd96c1bd77677dfe8b575c73c5f
Showing with 26 additions and 0 deletions.
  1. +25 −0 src/zmalloc.c
  2. +1 −0 src/zmalloc.h
@@ -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
@@ -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

0 comments on commit 3bfeb9c

Please sign in to comment.
You can’t perform that action at this time.