X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=debug%2Fsorter%2Ffile-test.c;h=b6915b3fce9a93c230468bc8c026c67fb0c0e332;hb=9458ba8d8926a5b6b5fd5e7aed78286c5b087fdf;hp=c1672d298ea070d0212675b8d4c3d1f95f730db3;hpb=9aa80af72f06dbeafdeba4540cd18f540eb808ca;p=libucw.git diff --git a/debug/sorter/file-test.c b/debug/sorter/file-test.c index c1672d29..b6915b3f 100644 --- a/debug/sorter/file-test.c +++ b/debug/sorter/file-test.c @@ -10,74 +10,113 @@ #include #include +#define COPY +#define DIRECT O_DIRECT + +static timestamp_t timer; + +#define P_INIT do { cnt = 0; cnt_rep = 0; cnt_ms = 1; } while(0) +#define P_UPDATE(cc) do { \ + cnt += cc; \ + if (cnt >= cnt_rep) { cnt_ms += get_timer(&timer); \ + printf("%d of %d MB (%.2f MB/sec)\r", (int)(cnt >> 20), (int)(total_size >> 20), (double)cnt / 1048576 * 1000 / cnt_ms); \ + fflush(stdout); cnt_rep += 1<<26; } } while(0) +#define P_FINAL do { \ + cnt_ms += get_timer(&timer); \ + log(L_INFO, "Spent %.3f sec (%.2f MB/sec)", (double)cnt_ms/1000, (double)cnt / 1048576 * 1000 / cnt_ms); \ +} while(0) + int main(int argc, char **argv) { ASSERT(argc == 4); uns files = atol(argv[1]); uns bufsize = atol(argv[2]) * 1024; // Kbytes - uns rounds = (u64)atol(argv[3]) * 1024*1024 / bufsize; // Mbytes + u64 total_size = (u64)atol(argv[3]) * 1024*1024*1024; // Gbytes + u64 cnt, cnt_rep; + uns cnt_ms; int fd[files]; - byte *buf[files]; + byte *buf[files], name[files][16]; + uns xbufsize = bufsize; // Used for single-file I/O + byte *xbuf = big_alloc(xbufsize); + + init_timer(&timer); + +#ifdef COPY + log(L_INFO, "Creating input file"); + int in_fd = sh_open("tmp/ft-in", O_RDWR | O_CREAT | O_TRUNC | DIRECT, 0666); + ASSERT(in_fd >= 0); + ASSERT(!(total_size % xbufsize)); + P_INIT; + for (uns i=0; i> 20), files, bufsize); + P_INIT; + for (uns r=0; r= total_rep + 1024*1024*1024) - { - printf("Wrote %d MB (round %d of %d)\r", (int)(total >> 20), r, rounds); - fflush(stdout); - total_rep = total; - } + P_UPDATE(c); } } +#ifdef COPY + close(in_fd); +#endif log(L_INFO, "Syncing"); sync(); - uns ms = get_timer(); - log(L_INFO, "Spent %dms (%d MB/sec)", ms, (uns)(total/ms*1000/1048576)); + P_FINAL; log(L_INFO, "Reading the files sequentially"); - total = total_rep = 0; + P_INIT; for (uns i=0; i= total_rep + 1024*1024*1024) - { - printf("Read %d MB (file %d)\r", (int)(total >> 20), i); - fflush(stdout); - total_rep = total; - } + uns c = read(fd[i], xbuf, xbufsize); + ASSERT(c == xbufsize); + P_UPDATE(c); } close(fd[i]); } - ms = get_timer(); - log(L_INFO, "Spent %dms (%d MB/sec)", ms, (uns)(total/ms*1000/1048576)); + P_FINAL; + for (uns i=0; i