r4120 - in developers/werner: . memspeed
werner at sita.openmoko.org
werner at sita.openmoko.org
Wed Feb 27 08:36:32 CET 2008
Author: werner
Date: 2008-02-27 08:36:29 +0100 (Wed, 27 Feb 2008)
New Revision: 4120
Added:
developers/werner/memspeed/
developers/werner/memspeed/Makefile
developers/werner/memspeed/memspeed.c
Log:
Quick and dirty physical memory speed tester.
Added: developers/werner/memspeed/Makefile
===================================================================
--- developers/werner/memspeed/Makefile 2008-02-27 04:18:28 UTC (rev 4119)
+++ developers/werner/memspeed/Makefile 2008-02-27 07:36:29 UTC (rev 4120)
@@ -0,0 +1,5 @@
+CC=arm-angstrom-linux-gnueabi-gcc
+
+CFLAGS=-Wall -g
+
+all: memspeed
Added: developers/werner/memspeed/memspeed.c
===================================================================
--- developers/werner/memspeed/memspeed.c 2008-02-27 04:18:28 UTC (rev 4119)
+++ developers/werner/memspeed/memspeed.c 2008-02-27 07:36:29 UTC (rev 4120)
@@ -0,0 +1,82 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/time.h>
+#include <sys/mman.h>
+
+
+#define LOOPS 10
+
+
+static void usage(const char *name)
+{
+ fprintf(stderr, "usage: %s from to\n", name);
+ exit(1);
+}
+
+
+static double delta(struct timeval t0, struct timeval t1)
+{
+ return (double) t1.tv_sec+t1.tv_usec/1000000.0-
+ (double) t0.tv_sec-t0.tv_usec/1000000.0;
+}
+
+
+int main(int argc, char **argv)
+{
+ size_t from, to;
+ char *end;
+ int fd, i;
+ void *mem, *buf;
+ double t, sum;
+ struct timeval t0, t1;
+
+ if (argc != 3)
+ usage(*argv);
+ from = strtol(argv[1], &end, 0);
+ if (*end)
+ usage(*argv);
+ to = strtol(argv[2], &end, 0);
+ if (*end)
+ usage(*argv);
+ if (from >= to)
+ usage(*argv);
+
+ fd = open("/dev/mem", O_RDWR);
+ if (fd < 0) {
+ perror("/dev/mem");
+ exit(1);
+ }
+ mem = mmap(NULL, to-from, PROT_READ | PROT_WRITE, MAP_SHARED, fd, from);
+ if (mem == MAP_FAILED) {
+ perror("mmap");
+ exit(1);
+ }
+
+ buf = malloc(to-from);
+ if (!buf) {
+ perror("malloc");
+ exit(1);
+ }
+
+ sum = (float) (to-from)*LOOPS/1024.0/1024.0;
+
+ gettimeofday(&t0, NULL);
+ for (i = 0; i != LOOPS; i++)
+ memcpy(buf, mem, to-from);
+ gettimeofday(&t1, NULL);
+ t = delta(t0,t1);
+ printf("Read: %fs, %f MB/s\n", t, sum/t);
+
+ memset(buf, 0x0f, to-from);
+
+ gettimeofday(&t0, NULL);
+ for (i = 0; i != LOOPS; i++)
+ memcpy(mem, buf, to-from);
+ gettimeofday(&t1, NULL);
+ t = delta(t0,t1);
+ printf("Write: %fs, %f MB/s\n", t, sum/t);
+
+ return 0;
+}
More information about the commitlog
mailing list