Changeset 522 in svn for trunk/xcache.c


Ignore:
Timestamp:
2008-02-17T17:49:46+01:00 (7 years ago)
Author:
Xuefer
Message:

slide hits per second and hour

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/xcache.c

    r516 r522  
    313313/* }}} */
    314314#endif
     315static inline zend_uint advance_wrapped(zend_uint val, zend_uint count) /* {{{ */
     316{
     317    if (val + 1 >= count) {
     318        return 0;
     319    }
     320    return val + 1;
     321}
     322/* }}} */
     323static void xc_counters_inc(time_t *curtime, zend_uint *curslot, time_t period, zend_ulong *counters, zend_uint count TSRMLS_DC) /* {{{ */
     324{
     325    time_t n = XG(request_time) / period;
     326    if (*curtime != n) {
     327        zend_uint target_slot = n % count;
     328        if (n - *curtime > period) {
     329            memset(counters, 0, sizeof(counters[0]) * count);
     330        }
     331        else {
     332            zend_uint slot;
     333            for (slot = advance_wrapped(*curslot, count);
     334                    slot != target_slot;
     335                    slot = advance_wrapped(slot, count)) {
     336                counters[slot] = 0;
     337            }
     338            counters[target_slot] = 0;
     339        }
     340        *curtime = n;
     341        *curslot = target_slot;
     342    }
     343    counters[*curslot] ++;
     344}
     345/* }}} */
     346static void xc_cache_hit_dmz(xc_cache_t *cache TSRMLS_DC) /* {{{ */
     347{
     348    cache->hits ++;
     349
     350    xc_counters_inc(&cache->hits_by_hour_cur_time
     351            , &cache->hits_by_hour_cur_slot, 60 * 60
     352            , cache->hits_by_hour
     353            , sizeof(cache->hits_by_hour) / sizeof(cache->hits_by_hour[0])
     354            TSRMLS_CC);
     355
     356    xc_counters_inc(&cache->hits_by_second_cur_time
     357            , &cache->hits_by_second_cur_slot
     358            , 1
     359            , cache->hits_by_second
     360            , sizeof(cache->hits_by_second) / sizeof(cache->hits_by_second[0])
     361            TSRMLS_CC);
     362}
     363/* }}} */
    315364
    316365/* helper function that loop through each entry */
     
    455504static void xc_fillinfo_dmz(int cachetype, xc_cache_t *cache, zval *return_value TSRMLS_DC) /* {{{ */
    456505{
    457     zval *blocks;
     506    zval *blocks, *hits;
     507    int i;
    458508    const xc_block_t *b;
    459509#ifndef NDEBUG
     
    487537        add_assoc_null_ex(return_value, ZEND_STRS("gc"));
    488538    }
     539    MAKE_STD_ZVAL(hits);
     540    array_init(hits);
     541    for (i = 0; i < sizeof(cache->hits_by_hour) / sizeof(cache->hits_by_hour[0]); i ++) {
     542        add_next_index_long(hits, (long) cache->hits_by_hour[i]);
     543    }
     544    add_assoc_zval_ex(return_value, ZEND_STRS("hits_by_hour"), hits);
     545
     546    MAKE_STD_ZVAL(hits);
     547    array_init(hits);
     548    for (i = 0; i < sizeof(cache->hits_by_second) / sizeof(cache->hits_by_second[0]); i ++) {
     549        add_next_index_long(hits, (long) cache->hits_by_second[i]);
     550    }
     551    add_assoc_zval_ex(return_value, ZEND_STRS("hits_by_second"), hits);
    489552
    490553    MAKE_STD_ZVAL(blocks);
     
    12571320        stored_xce = xc_entry_find_dmz(&xce TSRMLS_CC);
    12581321        if (stored_xce) {
    1259             cache->hits ++;
     1322            xc_cache_hit_dmz(cache TSRMLS_CC);
    12601323
    12611324            TRACE("hit %s, holding", stored_xce->name.str.val);
     
    21132176    } LEAVE_LOCK(xce.cache);
    21142177    if (found) {
    2115         xce.cache->hits ++;
     2178        xc_cache_hit_dmz(xce.cache TSRMLS_CC);
    21162179    }
    21172180    else {
     
    21942257    } LEAVE_LOCK(xce.cache);
    21952258    if (found) {
    2196         xce.cache->hits ++;
     2259        xc_cache_hit_dmz(xce.cache TSRMLS_CC);
    21972260    }
    21982261    else {
Note: See TracChangeset for help on using the changeset viewer.