1
0
mirror of https://github.com/php/php-src.git synced 2026-04-10 17:43:13 +02:00

Add cache statistics support

This commit is contained in:
Zeev Suraski
1999-12-27 16:42:59 +00:00
parent 8eb145a3be
commit ebd4445ba2
3 changed files with 56 additions and 0 deletions

View File

@@ -116,11 +116,17 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
AG(cache_stats)[size][1]++;
#endif
p->persistent = 0;
p->cached = 0;
return (void *)((char *)p + sizeof(zend_mem_header) + PLATFORM_PADDING);
} else {
#if ZEND_DEBUG
if (size<MAX_CACHED_MEMORY) {
AG(cache_stats)[size][0]++;
}
#endif
p = (zend_mem_header *) malloc(sizeof(zend_mem_header) + size + PLATFORM_PADDING + END_ALIGNMENT(size) + END_MAGIC_SIZE);
}
@@ -323,6 +329,10 @@ ZEND_API void start_memory_manager(ALS_D)
AG(memory_exhausted)=0;
#endif
#if ZEND_DEBUG
memset(AG(cache_stats), 0, sizeof(AG(cache_stats)));
memset(AG(zval_cache_stats), 0, sizeof(AG(zval_cache_stats)));
#endif
memset(AG(cache_count),0,MAX_CACHED_MEMORY*sizeof(unsigned char));
}
@@ -381,6 +391,38 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
t = t->pNext;
}
}
#if ZEND_DEBUG
do {
zval display_memory_cache_stats;
int i, j;
if (zend_get_ini_entry("display_memory_cache_stats", sizeof("display_memory_cache_stats"), &display_memory_cache_stats)==FAILURE) {
break;
}
if (!atoi(display_memory_cache_stats.value.str.val)) {
break;
}
fprintf(stderr, "Memory cache statistics\n"
"-----------------------\n\n"
"[zval, %2d]\t\t%d / %d (%.2f%%)\n",
sizeof(zval),
AG(zval_cache_stats)[1], AG(zval_cache_stats)[0]+AG(zval_cache_stats)[1],
((double) AG(zval_cache_stats)[1] / (AG(zval_cache_stats)[0]+AG(zval_cache_stats)[1]))*100);
for (i=0; i<MAX_CACHED_MEMORY; i+=2) {
fprintf(stderr, "[%2d, %2d]\t\t", i+1, i+2);
for (j=0; j<2; j++) {
fprintf(stderr, "%d / %d (%.2f%%)\t\t",
AG(cache_stats)[i+j][1], AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1],
((double) AG(cache_stats)[i+j][1] / (AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1]))*100);
}
fprintf(stderr, "\n");
}
} while (0);
#endif
}

View File

@@ -181,6 +181,11 @@ struct _zend_alloc_globals {
unsigned char cache_count[MAX_CACHED_MEMORY];
void *zval_list_head;
#if ZEND_DEBUG
/* for performance tuning */
int cache_stats[MAX_CACHED_MEMORY][2];
int zval_cache_stats[2];
#endif
#if MEMORY_LIMIT
unsigned int memory_limit;
unsigned int allocated_memory;

View File

@@ -29,6 +29,13 @@ typedef struct _zend_zval_list_entry {
struct _zend_zval_list_entry *next;
} zend_zval_list_entry;
#if ZEND_DEBUG
# define RECORD_ZVAL_CACHE_HIT() AG(zval_cache_stats)[1]++;
# define RECORD_ZVAL_CACHE_MISS() AG(zval_cache_stats)[0]++;
#else
# define RECORD_ZVAL_CACHE_HIT()
# define RECORD_ZVAL_CACHE_MISS()
#endif
#ifndef ZTS
extern zend_alloc_globals alloc_globals;
@@ -40,8 +47,10 @@ extern zend_alloc_globals alloc_globals;
\
if (((z) = (void *) AG(zval_list_head))) { \
AG(zval_list_head) = ((zend_zval_list_entry *) AG(zval_list_head))->next; \
RECORD_ZVAL_CACHE_HIT(); \
} else { \
(z) = emalloc(sizeof(zval)); \
RECORD_ZVAL_CACHE_MISS(); \
} \
}