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