aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2011-02-18 19:42:42 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2011-02-18 19:42:42 -0500
commit33b2ce45700e08ffdb267145ea58513631ff708d (patch)
tree369c16f0f8bffe5371f1d0d69d7815e7d4823a41
parentf97d67b869c047d09d424ca29fd725688a4970de (diff)
write back dirty pages and keep track of speed
-rw-r--r--src/ftsort.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/src/ftsort.c b/src/ftsort.c
index 9049dc9..5ddb48f 100644
--- a/src/ftsort.c
+++ b/src/ftsort.c
@@ -18,9 +18,14 @@
18#include <stdio.h> 18#include <stdio.h>
19#include <stdlib.h> 19#include <stdlib.h>
20#include <string.h> 20#include <string.h>
21
22#include <time.h>
23#include <sys/time.h>
24
21#include <errno.h> 25#include <errno.h>
22#include <unistd.h> 26#include <unistd.h>
23#include <arpa/inet.h> 27#include <arpa/inet.h>
28#include <sys/mman.h>
24 29
25#include "mapping.h" 30#include "mapping.h"
26 31
@@ -31,7 +36,17 @@ static unsigned int reordered = 0;
31 36
32#define LOOK_AHEAD 1000 37#define LOOK_AHEAD 1000
33 38
34static struct timestamp* find_lowest_seq_no(struct timestamp* start, struct timestamp* end, 39/* wall-clock time in seconds */
40double wctime(void)
41{
42 struct timeval tv;
43 gettimeofday(&tv, NULL);
44 return (tv.tv_sec + 1E-6 * tv.tv_usec);
45}
46
47
48static struct timestamp* find_lowest_seq_no(struct timestamp* start,
49 struct timestamp* end,
35 unsigned int seqno) 50 unsigned int seqno)
36{ 51{
37 struct timestamp *pos, *min = start; 52 struct timestamp *pos, *min = start;
@@ -139,6 +154,7 @@ int main(int argc, char** argv)
139 struct timestamp *ts, *end; 154 struct timestamp *ts, *end;
140 int swap_byte_order = 0; 155 int swap_byte_order = 0;
141 int opt; 156 int opt;
157 double start, stop;
142 158
143 while ((opt = getopt(argc, argv, OPTS)) != -1) { 159 while ((opt = getopt(argc, argv, OPTS)) != -1) {
144 switch (opt) { 160 switch (opt) {
@@ -153,6 +169,9 @@ int main(int argc, char** argv)
153 169
154 if (argc - optind != 1) 170 if (argc - optind != 1)
155 die("arguments missing"); 171 die("arguments missing");
172
173 start = wctime();
174
156 if (map_file_rw(argv[optind], &mapped, &size)) 175 if (map_file_rw(argv[optind], &mapped, &size))
157 die("could not map file"); 176 die("could not map file");
158 177
@@ -164,12 +183,24 @@ int main(int argc, char** argv)
164 restore_byte_order(ts, end); 183 restore_byte_order(ts, end);
165 184
166 reorder(ts, end); 185 reorder(ts, end);
186
187 /* write back */
188 msync(ts, size, MS_SYNC | MS_INVALIDATE);
189
190 stop = wctime();
191
167 fprintf(stderr, 192 fprintf(stderr,
168 "Total : %10d\n" 193 "Total : %10d\n"
169 "Holes : %10d\n" 194 "Holes : %10d\n"
170 "Reordered : %10d\n", 195 "Reordered : %10d\n"
196 "Size : %10.2f Mb\n"
197 "Time : %10.2f s\n"
198 "Throughput : %10.2f Mb/s\n",
171 (int) count, 199 (int) count,
172 holes, reordered); 200 holes, reordered,
201 ((double) size) / 1024.0 / 1024.0,
202 (stop - start),
203 ((double) size) / 1024.0 / 1024.0 / (stop - start));
173 204
174 return 0; 205 return 0;
175} 206}