]> granicus.if.org Git - php/commitdiff
Added information about interned strings usage
authorDmitry Stogov <dmitry@zend.com>
Fri, 21 Feb 2014 08:43:42 +0000 (12:43 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 21 Feb 2014 08:43:42 +0000 (12:43 +0400)
NEWS
ext/opcache/ZendAccelerator.c
ext/opcache/zend_accelerator_module.c

diff --git a/NEWS b/NEWS
index d37bb71b270f6ec28ab2249900b5c51231c3a200..f0347a356457510af7676693e03e994ee5104cea 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,7 @@ PHP                                                                        NEWS
 
 - OPCache
   . Added function opcache_is_script_cached(). (Danack)
+  . Added information about interned strings usage. (Terry, Julien, Dmitry)
 
 - Openssl:
   . Fixed bug #66501 (Add EC key support to php_openssl_is_private_key).
index d174f2a42fef3391f1b01412033bcbcb16a34fae..44064004f882f6040f9d8ad487c763c2a571430e 100644 (file)
@@ -338,6 +338,7 @@ const char *accel_new_interned_string(const char *arKey, int nKeyLength, int fre
        if (ZCSG(interned_strings_top) + ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength) >=
            ZCSG(interned_strings_end)) {
            /* no memory, return the same non-interned string */
+               zend_accel_error(ACCEL_LOG_WARNING, "Interned string buffer overflow");
                return arKey;
        }
 
index b15c080c40cd467c709f73113403e0df7d04235b..9d7a5a93f50e01b62c28f01ed9952e2c4fc6edda 100644 (file)
@@ -444,6 +444,14 @@ void zend_accel_info(ZEND_MODULE_INFO_FUNC_ARGS)
                        php_info_print_table_row(2, "Free memory", buf);
                        snprintf(buf, sizeof(buf), "%ld", ZSMMG(wasted_shared_memory));
                        php_info_print_table_row(2, "Wasted memory", buf);
+#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+                       if (ZCSG(interned_strings_start) && ZCSG(interned_strings_end) && ZCSG(interned_strings_top)) {
+                               snprintf(buf, sizeof(buf), "%ld", ZCSG(interned_strings_top) - ZCSG(interned_strings_start));
+                               php_info_print_table_row(2, "Interned Strings Used memory", buf);
+                               snprintf(buf, sizeof(buf), "%ld", ZCSG(interned_strings_end) - ZCSG(interned_strings_top));
+                               php_info_print_table_row(2, "Interned Strings Free memory", buf);
+                       }
+#endif
                        snprintf(buf, sizeof(buf), "%ld", ZCSG(hash).num_direct_entries);
                        php_info_print_table_row(2, "Cached scripts", buf);
                        snprintf(buf, sizeof(buf), "%ld", ZCSG(hash).num_entries);
@@ -573,6 +581,20 @@ static ZEND_FUNCTION(opcache_get_status)
        add_assoc_double(memory_usage, "current_wasted_percentage", (((double) ZSMMG(wasted_shared_memory))/ZCG(accel_directives).memory_consumption)*100.0);
        add_assoc_zval(return_value, "memory_usage", memory_usage);
 
+#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+       if (ZCSG(interned_strings_start) && ZCSG(interned_strings_end) && ZCSG(interned_strings_top)) {
+               zval *interned_strings_usage;
+
+               MAKE_STD_ZVAL(interned_strings_usage);
+               array_init(interned_strings_usage);
+               add_assoc_long(interned_strings_usage, "buffer_size", ZCSG(interned_strings_end) - ZCSG(interned_strings_start));
+               add_assoc_long(interned_strings_usage, "used_memory", ZCSG(interned_strings_top) - ZCSG(interned_strings_start));
+               add_assoc_long(interned_strings_usage, "free_memory", ZCSG(interned_strings_end) - ZCSG(interned_strings_top));
+               add_assoc_long(interned_strings_usage, "number_of_strings", ZCSG(interned_strings).nNumOfElements);
+               add_assoc_zval(return_value, "interned_strings_usage", interned_strings_usage);
+       }
+#endif
+       
        /* Accelerator statistics */
        MAKE_STD_ZVAL(statistics);
        array_init(statistics);