#include #include #include #include #include #include #include #include #include #define BSIZE (4 * 1024) #define MAX_NAME (256) char base_name[MAX_NAME]; char *get_name(int n) { static char name[MAX_NAME + 5]; sprintf(name, "%s%d", base_name, n); return name; } void display_rate(struct timeval start, struct timeval end, int len) { int d_s, d_us; float sec; d_s = end.tv_sec - start.tv_sec; d_us = end.tv_usec - start.tv_usec; sec = d_s + d_us / 1000000.0; printf("Transferred %dMb of data in %.2f seconds (%.2fMb/s)\n", len, sec, len / sec); fflush(NULL); } void create_files(int n, int sz) { int out[n], i; char buf[BSIZE]; int pos; struct timeval start, end; printf("Writing %dMb of data to %d files in parallel\n", sz, n); fflush(NULL); for (i = 0; i < n; i++) { out[i] = open(get_name(i), O_WRONLY | O_CREAT | O_TRUNC, 0666); if (out[i] < 0) { perror("Creating output file"); exit(1); } } memset(buf, 0, BSIZE); gettimeofday(&start, NULL); for (pos = 0; pos < (sz * 1024 * 1024); pos += BSIZE) { for(i = 0; i < n; i++) { if (write(out[i], buf, BSIZE) != BSIZE) { fprintf(stderr, "Problem writing output file\n"); exit(2); } } } for (i=0; i