14 void usage(char *prog)
16 printf("usage: %s {-o|-m} filenamefmt count\n", prog);
17 printf(" %s {-o|-m} filenamefmt -seconds\n", prog);
18 printf(" %s {-o|-m} filenamefmt start count\n", prog);
21 /* Print process rank, loop count, message, and exit (i.e. a fatal error) */
22 int rprintf(int rank, int loop, const char *fmt, ...)
26 printf("rank %d, loop %d: ", rank, loop);
36 int main(int argc, char ** argv)
38 int i, rc = 0, do_open, rank;
39 char format[4096], *fmt;
41 long start, last, end;
42 long begin = 0, count;
44 rc = MPI_Init(&argc, &argv);
45 if (rc != MPI_SUCCESS)
46 rprintf(-1, -1, "MPI_Init failed: %d\n", rc);
48 if (argc < 4 || argc > 5) {
53 if (strcmp(argv[1], "-o") == 0) {
55 } else if (strcmp(argv[1], "-m") == 0) {
62 if (strlen(argv[2]) > 4080) {
63 printf("name too long\n");
67 rc = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
68 if (rc != MPI_SUCCESS)
69 rprintf(-1, -1, "MPI_Comm_rank failed: %d\n", rc);
71 rc = MPI_Barrier(MPI_COMM_WORLD);
72 if (rc != MPI_SUCCESS)
73 rprintf(rank, -1, "prep MPI_Barrier failed: %d\n", rc);
75 start = last = time(0);
78 end = strtol(argv[3], NULL, 0);
88 begin = strtol(argv[3], NULL, 0);
89 count = strtol(argv[4], NULL, 0);
92 if (strchr(argv[2], '%'))
95 sprintf(format, "%s%%d", argv[2]);
98 printf("starting at %s", ctime(&start));
99 for (i = 0; i < count && time(0) < end; i++, begin++) {
100 sprintf(filename, fmt, begin);
102 int fd = open(filename, O_CREAT|O_RDWR, 0644);
104 printf("open(%s) error: %s\n", filename,
111 rc = mknod(filename, S_IFREG| 0444, 0);
113 printf("mknod(%s) error: %s\n",
114 filename, strerror(errno));
119 if ((i % 10000) == 0) {
120 printf(" - created %d (time %ld ; total %ld ; last %ld)\n",
121 i, time(0), time(0) - start, time(0) - last);
125 printf("total: %d creates in %ld seconds: %f creates/second\n", i,
126 time(0) - start, ((float)i / (time(0) - start)));
128 printf("finish at %s", ctime(&start));