Exemple #1
0
/*@null@*/
static void do_slabs_stats(ADD_STAT add_stats, void *c) {
    int i, total;
    /* Get the per-thread stats which contain some interesting aggregates */
    struct thread_stats thread_stats;
    threadlocal_stats_aggregate(&thread_stats);

    total = 0;
    for(i = POWER_SMALLEST; i <= power_largest; i++) {
        slabclass_t *p = &slabclass[i];
        if (p->slabs != 0) {
            uint32_t perslab, slabs;
            slabs = p->slabs;
            perslab = p->perslab;

            char key_str[STAT_KEY_LEN];
            char val_str[STAT_VAL_LEN];
            int klen = 0, vlen = 0;

            APPEND_NUM_STAT(i, "chunk_size", "%u", p->size);
            APPEND_NUM_STAT(i, "chunks_per_page", "%u", perslab);
            APPEND_NUM_STAT(i, "total_pages", "%u", slabs);
            APPEND_NUM_STAT(i, "total_chunks", "%u", slabs * perslab);
            APPEND_NUM_STAT(i, "used_chunks", "%u",
                            slabs*perslab - p->sl_curr - p->end_page_free);
            APPEND_NUM_STAT(i, "free_chunks", "%u", p->sl_curr);
            APPEND_NUM_STAT(i, "free_chunks_end", "%u", p->end_page_free);
            APPEND_NUM_STAT(i, "mem_requested", "%llu",
                            (unsigned long long)p->requested);
            APPEND_NUM_STAT(i, "get_hits", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].get_hits);
            APPEND_NUM_STAT(i, "cmd_set", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].set_cmds);
            APPEND_NUM_STAT(i, "delete_hits", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].delete_hits);
            APPEND_NUM_STAT(i, "incr_hits", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].incr_hits);
            APPEND_NUM_STAT(i, "decr_hits", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].decr_hits);
            APPEND_NUM_STAT(i, "cas_hits", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].cas_hits);
            APPEND_NUM_STAT(i, "cas_badval", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].cas_badval);
            APPEND_NUM_STAT(i, "touch_hits", "%llu",
                    (unsigned long long)thread_stats.slab_stats[i].touch_hits);
            total++;
        }
    }

    /* add overall slab stats and append terminator */

    APPEND_STAT("active_slabs", "%d", total);
    APPEND_STAT("total_malloced", "%llu", (unsigned long long)mem_malloced);
    add_stats(NULL, 0, NULL, 0, c);
}
Exemple #2
0
static void mc_do_slabs_stats(add_stat_fn f, void *c)
{
	static struct thread_stats thread_stats;

	int i, total;

	mc_threadlocal_stats_aggregate(&thread_stats);

	total = 0;
	for(i = POWER_SMALLEST; i <= power_largest; i++) {
		slabclass_t *p = &slabclass[i];
		if (p->slabs != 0) {
			int klen = 0, vlen = 0;
			char key_str[STAT_KEY_LEN];
			char val_str[STAT_VAL_LEN];

			u32 perslab, slabs;
			slabs = p->slabs;
			perslab = p->perslab;

			APPEND_NUM_STAT(i, "chunk_size", "%u", p->size);
			APPEND_NUM_STAT(i, "chunks_per_page", "%u", perslab);
			APPEND_NUM_STAT(i, "total_pages", "%u", slabs);
			APPEND_NUM_STAT(i, "total_chunks", "%u", slabs * perslab);
			APPEND_NUM_STAT(i, "used_chunks", "%u",
				    slabs*perslab - p->sl_curr);
			APPEND_NUM_STAT(i, "free_chunks", "%u", p->sl_curr);
			/* Stat is dead, but displaying zero instead of removing it. */
			APPEND_NUM_STAT(i, "free_chunks_end", "%u", 0);
			APPEND_NUM_STAT(i, "mem_requested", "%llu",
				    (unsigned long long)p->requested);
			APPEND_NUM_STAT(i, "get_hits", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].get_hits);
			APPEND_NUM_STAT(i, "cmd_set", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].set_cmds);
			APPEND_NUM_STAT(i, "delete_hits", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].delete_hits);
			APPEND_NUM_STAT(i, "incr_hits", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].incr_hits);
			APPEND_NUM_STAT(i, "decr_hits", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].decr_hits);
			APPEND_NUM_STAT(i, "cas_hits", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].cas_hits);
			APPEND_NUM_STAT(i, "cas_badval", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].cas_badval);
			APPEND_NUM_STAT(i, "touch_hits", "%llu",
			    (unsigned long long)thread_stats.slab_stats[i].touch_hits);
			total++;
		}
	}

	/* add overall slab stats and append terminator */

	APPEND_STAT("active_slabs", "%d", total);
	APPEND_STAT("total_malloced", "%llu", (unsigned long long)mem_malloced);
	f(NULL, 0, NULL, 0, c);
}