sg_page_stats *sg_get_page_stats_diff() {
    sg_page_stats *page_ptr;
    static sg_page_stats page_stats_diff;

    if(page_stats_uninit) {
        page_ptr=sg_get_page_stats();
        if(page_ptr==NULL) {
            return NULL;
        }
        page_stats_uninit=0;
        return page_ptr;
    }

    page_stats_diff.pages_pagein=page_stats.pages_pagein;
    page_stats_diff.pages_pageout=page_stats.pages_pageout;
    page_stats_diff.systime=page_stats.systime;

    page_ptr=sg_get_page_stats();
    if(page_ptr==NULL) {
        return NULL;
    }

    page_stats_diff.pages_pagein=page_stats.pages_pagein-page_stats_diff.pages_pagein;
    page_stats_diff.pages_pageout=page_stats.pages_pageout-page_stats_diff.pages_pageout;
    page_stats_diff.systime=page_stats.systime-page_stats_diff.systime;

    return &page_stats_diff;
}
void populate_page() {
	sg_page_stats *page;

	page = use_diffs ? sg_get_page_stats_diff() : sg_get_page_stats();
	if (page != NULL) {
		add_stat(LONG_LONG, &page->pages_pagein, "page", "in", NULL);
		add_stat(LONG_LONG, &page->pages_pageout, "page", "out", NULL);
		add_stat(TIME_T, &page->systime, "page", "systime", NULL);
	}
}
static void
populate_page(void) {
	sg_page_stats *page;

	page = use_diffs ? sg_get_page_stats_diff(NULL) : sg_get_page_stats(NULL);
	if (page != NULL) {
		add_stat(STAT_TYPE_UNSIGNED_LONG_LONG, &page->pages_pagein, "page", "in", NULL);
		add_stat(STAT_TYPE_UNSIGNED_LONG_LONG, &page->pages_pageout, "page", "out", NULL);
		add_stat(STAT_TYPE_TIME_T, &page->systime, "page", "systime", NULL);
	}
}
Beispiel #4
0
sg_page_stats *sg_get_page_stats_diff(){
	static sg_page_stats page_stats_diff;
#ifndef WIN32
	sg_page_stats *page_ptr;

	if(page_stats_uninit){
		page_ptr=sg_get_page_stats();
		if(page_ptr==NULL){
			return NULL;
		}
		page_stats_uninit=0;
		return page_ptr;
	}

	page_stats_diff.pages_pagein=page_stats.pages_pagein;
	page_stats_diff.pages_pageout=page_stats.pages_pageout;
	page_stats_diff.systime=page_stats.systime;

	page_ptr=sg_get_page_stats();
	if(page_ptr==NULL){
		return NULL;
	}

	page_stats_diff.pages_pagein=page_stats.pages_pagein-page_stats_diff.pages_pagein;
	page_stats_diff.pages_pageout=page_stats.pages_pageout-page_stats_diff.pages_pageout;
	page_stats_diff.systime=page_stats.systime-page_stats_diff.systime;

#else /* WIN32 */
	if(read_counter_large(SG_WIN32_PAGEIN, &page_stats_diff.pages_pagein)) {
		sg_set_error(SG_ERROR_PDHREAD, PDH_PAGEIN);
		return NULL;
	}
	if(read_counter_large(SG_WIN32_PAGEOUT, &page_stats_diff.pages_pageout)) {
		sg_set_error(SG_ERROR_PDHREAD, PDH_PAGEIN);
		return NULL;
	}
	page_stats_diff.systime = 0;
#endif /* WIN32 */

	return &page_stats_diff;
}
Beispiel #5
0
/*
 * Paging statistics, see <tt>sg_get_page_stats(3)</tt> manpage.
 */
static VALUE
statgrab_page_stats(VALUE self)
{
	sg_page_stats *stats;
	VALUE info, time_at;

	if ((stats = sg_get_page_stats()) == NULL)
		statgrab_handle_error();

	info = rb_hash_new();
	rb_hash_aset(info, ID2SYM(rb_intern("pages_pagein")),
			INT2NUM(stats->pages_pagein));
	rb_hash_aset(info, ID2SYM(rb_intern("pages_pageout")),
			INT2NUM(stats->pages_pageout));
	rb_hash_aset(info, ID2SYM(rb_intern("systime")),
			INT2NUM(stats->systime));

	time_at = rb_funcall(rb_cTime, rb_intern("at"), 1,
			INT2NUM(stats->systime));
	rb_hash_aset(info, ID2SYM(rb_intern("time")), time_at);

	return info;
}