
IoMeter needs a high resolution time source for performance measurement.
Under IA32 platform, this is achieved via rdtsc().

Under Intel XScale Microarchitecture like IOP331 and IOP321, there is a
32bit CCNT (cycle counter) available for this purpose. But since it is
only 32 bits. It overflows very quickly. So I added an extra counter to
record how many times it overflows. Then expand it to a 64bit value.

Instead of adding a new system call to transfer this value to user space
program, we create a virtual character device and export this value via
ioctl interface.

The device node is created by the ccntmknod script. And user program can
access this counter with code piece:

...
#define CCNT_IOC_MAGIC		0xAC
#define CCNT_IOC_GETCCNT	_IOR(CCNT_IOC_MAGIC, 1, unsigned long long)
if ((fd = open("/dev/ccnt", O_RDONLY)) < 0) {
	printf("device file open fail!\n");
	exit(1);
}

if ((res = ioctl(fd, CCNT_IOC_GETCCNT, &x)) >= 0 ) {
	printf("%llu\n", x);
}
...


Write to me (mingz@ele.uri.edu) if there are any problem or suggestion. Thanks.

