AIX-Perfstat

 view release on metacpan or  search on metacpan

cpu/cpu.c  view on Meta::CPAN

		safefree(cpu_total);
		die("cpu_total: failed");
	}
	return cpu_total;
}

/* pack a number of (struct perfstat_cpu_t) into an array of hashes
 * and put a reference to this array onto Perl stack
 */
void XS_pack_my_cpu_tPtr(SV *st, my_cpu_t *q)
{
	AV *av = newAV();
	SV *sv;
	perfstat_cpu_t *p;
	int i;

	for (i = 0, p = q->data; i < (q->size); i++, p++)
	{
		HV *hv = newHV();

		PACK_PV(name,0);
		PACK_UV(user);
		PACK_UV(sys);
		PACK_UV(idle);
		PACK_UV(wait);
		PACK_UV(pswitch);
		PACK_UV(syscall);
		PACK_UV(sysread);
		PACK_UV(syswrite);
		PACK_UV(sysfork);
		PACK_UV(sysexec);
		PACK_UV(readch);
		PACK_UV(writech);
		PACK_UV(bread);
		PACK_UV(bwrite);
		PACK_UV(lread);
		PACK_UV(lwrite);
		PACK_UV(phread);
		PACK_UV(phwrite);

		av_push(av, newRV_noinc((SV*)hv));
	}

	/* put ref to hv onto stack */
	sv = newSVrv(st, NULL);
	SvREFCNT_dec(sv);
	SvRV(st) = (SV*)av;
}

/* pack struct perfstat_cpu_total_t into a hash
 * and put a reference to this hash onto Perl stack
 */
void XS_pack_perfstat_cpu_total_tPtr(SV *st, perfstat_cpu_total_t *p)
{
	HV *hv = newHV();
	SV *sv;

	PACK_IV(ncpus);
	PACK_IV(ncpus_cfg);
	PACK_PV(description,0);
	PACK_UV(processorHZ);
	PACK_UV(user);
	PACK_UV(sys);
	PACK_UV(idle);
	PACK_UV(wait);
	PACK_UV(pswitch);
	PACK_UV(syscall);
	PACK_UV(sysread);
	PACK_UV(syswrite);
	PACK_UV(sysfork);
	PACK_UV(sysexec);
	PACK_UV(readch);
	PACK_UV(writech);
	PACK_UV(devintrs);
	PACK_UV(softintrs);
	PACK_IV(lbolt);

	/* loadavg[3] */
	{
		AV *av = newAV();
		int i;

		for (i = 0; i < 3; i++)
		{
			av_push(av, newSVuv(p->loadavg[i]));
		}
		PACK_AV(loadavg);
	}

	PACK_UV(runque);
	PACK_UV(swpque);
	PACK_UV(bread);
	PACK_UV(bwrite);
	PACK_UV(lread);
	PACK_UV(lwrite);
	PACK_UV(phread);
	PACK_UV(phwrite);

	/* put ref to hv onto stack */
	sv = newSVrv(st, NULL);
	SvREFCNT_dec(sv);
	SvRV(st) = (SV*)hv;
}



( run in 1.309 second using v1.01-cache-2.11-cpan-995e09ba956 )