From 8464f1a53d96195f9c499461fec8072933606569 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Sat, 14 Apr 2012 01:59:11 +0200 Subject: Report speed in seqreader using proper MB/s --- seqreader.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/seqreader.c b/seqreader.c index 1a13cf9..e0afe67 100644 --- a/seqreader.c +++ b/seqreader.c @@ -11,8 +11,8 @@ #include #include -#define BUFSIZE 1048576//65536 -#define BLOCK_SIZE 16384//16384 +#define BUFSIZE 65536 +#define BLOCK_SIZE 16384 #define WRITE_INTERVAL 1 @@ -28,7 +28,9 @@ int main(int argc, char *argv[]) { size_t last_write = 0; size_t skip; size_t run; + ssize_t res; char buffer[BUFSIZE]; + long double mcoef = 1000000. / (1024 * 1024); if (argc < 2) { printf("Usage: %s [skip]\n", argv[0]); @@ -42,25 +44,33 @@ int main(int argc, char *argv[]) { exit(1); } - int size = BLOCK_SIZE; + size_t size = BLOCK_SIZE; gettimeofday(&start, NULL); - err = read(fd, buffer, size); - while (err > 0) { - total_size += err; + res = read(fd, buffer, size); + while (res > 0) { + if (res != size) { + printf("Incomplete read: %zu bytes read instead of %zu\n", res, size); + exit(-1); + } + total_size += res; gettimeofday(&tv, NULL); us = (tv.tv_sec - start.tv_sec) * 1000000 + (tv.tv_usec - start.tv_usec); if ((us - last_write) > WRITE_INTERVAL * 1000000) { last_write = us; - printf("Reading: %s (%lu GB), Measured speed: %lu mB/s\n", argv[0], total_size / 1024 / 1024 / 1024, total_size / us); + printf("Reading: %s (%lu GB), Measured speed: %zu MB/s\n", argv[0], total_size / 1024 / 1024 / 1024, (size_t)(mcoef * total_size / us)); } - err = read(fd, buffer, size); + res = read(fd, buffer, size); } close(fd); + if (res < 0) { + printf("Read failed with errno %i\n", errno); + exit(-1); + } return 0; } @@ -110,7 +120,7 @@ int main(int argc, char *argv[]) { gettimeofday(&tv, NULL); us = (tv.tv_sec - start.tv_sec) * 1000000 + (tv.tv_usec - start.tv_usec); - printf("Reading: %s (%lu MB), Read: %lu files (%lu GB), Measured speed: %lu mB/s\n", ent->d_name, st.st_size/1024/1024, files, total_size / 1024 / 1024 / 1024, total_size / us); + printf("Reading: %s (%lu MB), Read: %lu files (%lu GB), Measured speed: %zu MB/s\n", ent->d_name, st.st_size/1024/1024, files, total_size / 1024 / 1024 / 1024, (size_t)(mcoef * total_size / us)); } closedir(dir); } -- cgit v1.2.1