index 68dd42772cc0fd1ee298ce20e7beaf1126524ad3..701e0ada06e4e1abbe46d98612eb8f8f1a28b651 100644 (file)
int main()
{
unsigned long physp, virtp, size;
- int i,j;
- unsigned long v1;
- unsigned long v2;
+ int i,j,k;
+ register unsigned long v1;
+ register unsigned long v2;
+ register unsigned long v3;
+ register unsigned long v4;
register long sum=0;
register long *p;
int c;
#ifdef AVOID_MMAP
+p = (long*) virtp;
for(j=1;j<50;j++)
{
v1 = netapi_timing_start();
- for(i=0;i<10000;i++)
+ for(i=0;i<1000;i++)
{
if (netapimod_cacheWb((void *)physp, 128*j)) return -1;
}
v2 = netapi_timing_stop();
- printf("wb: %d cycles for size = %d\n", (v2-v1)/10000, 128*j);
+ printf("wb (clean): %d cycles for size = %d\n", (v2-v1)/1000, 128*j);
sleep(1);
+ sum=0;
v1 = netapi_timing_start();
- for(i=0;i<10000;i++)
+ for(i=0;i<1000;i++)
+ {
+ v3 = netapi_timing_stop();
+ for(k=0;k<j*2;k++) p[64*k] = i;
+ v4 = netapi_timing_stop();
+ sum += (v4-v3);
+ if (netapimod_cacheWb((void *)physp, 128*j)) return -1;
+ }
+ v2 = netapi_timing_stop();
+
+ printf("wb (dirty): %d cycles for size = %d\n", (v2-v1-sum)/1000, 128*j);
+ sleep(1);
+ v1 = netapi_timing_start();
+ for(i=0;i<1000;i++)
{
if (netapimod_cacheInv((void *)physp, 128*j)) return -1;
}
v2 = netapi_timing_stop();
- printf("Inv: %d cycles for size = %d\n", (v2-v1)/10000, 128*j);
+ printf("Inv (no wb): %d cycles for size = %d\n", (v2-v1)/1000, 128*j);
sleep(1);
v1 = netapi_timing_start();
- for(i=0;i<10000;i++)
+ for(i=0;i<1000;i++)
+ {
+ if (netapimod_cacheWbInv((void *)physp, 128*j)) return -1;
+ }
+ v2 = netapi_timing_stop();
+ printf("wbInv (clean): %d cycles for size = %d\n", (v2-v1)/1000, 128*j);
+ sleep(1);
+ sum=0;
+ v1 = netapi_timing_start();
+ for(i=0;i<1000;i++)
{
+ v3 = netapi_timing_stop();
+ for(k=0;k<j*2;k++) p[64*k] = i;
+ v4 = netapi_timing_stop();
+ sum += (v4-v3);
if (netapimod_cacheWbInv((void *)physp, 128*j)) return -1;
}
v2 = netapi_timing_stop();
- printf("wbInv: %d cycles for size = %d\n", (v2-v1)/10000, 128*j);
+ printf("wbInv (dirty): %d cycles for size = %d\n", (v2-v1)/1000, 128*j);
}
//stress test
memcpy(vp,(char *)&i,4);
memcpy(vp+64,(char *) &c,4);
if (netapimod_cacheWbInv((void *)pp, 128)) return -1;
- if (!(c%0x4000)) {
- v2 = netapi_timing_start();
- printf("%d ; ok %d cycles per wbinv call (128 bytes) %x %x\n",c, (v2-v1)/10000, pp,vp);
+ if (!(c%0xc0000)) {
+ v2 = netapi_timing_stop();
+ printf("%d ; ok %d cycles per wbinv call (128 bytes) %x %x\n",c, (v2-v1)/0xc0000, pp,vp);
v1 = netapi_timing_start();
}
if (i*128 > size-128){ i=0; pp = (char*) physp; vp = (char *) virtp;}