/* How fast can we read a file usng the cachetable interface. */ #ident "Copyright (c) 2007, 2008 Tokutek Inc. All rights reserved." #include "test.h" #include "includes.h" enum { KEYLIMIT = 4, BLOCKSIZE=1<<20, N=2048}; static double tdiff (struct timeval *a, struct timeval *b) { return (a->tv_sec-b->tv_sec)+1e-6*(a->tv_usec-b->tv_usec); } static void f_flush (CACHEFILE f, CACHEKEY key, void *value, void *extra __attribute__((__unused__)), long size, BOOL write_me, BOOL keep_me, LSN modified_lsn __attribute__((__unused__)), BOOL rename_p __attribute__((__unused__))) { assert(size==BLOCKSIZE); if (write_me) { int r = pwrite(toku_cachefile_fd(f), value, BLOCKSIZE, key.b); assert(r==BLOCKSIZE); } if (!keep_me) { toku_free(value); } } static int f_fetch (CACHEFILE f, CACHEKEY key, u_int32_t fullhash __attribute__((__unused__)), void**value, long *sizep, void*extraargs __attribute__((__unused__)), LSN *modified_lsn __attribute__((__unused__))) { void *buf = toku_malloc(BLOCKSIZE); int r = pread(toku_cachefile_fd(f), buf, BLOCKSIZE, key.b); assert(r==BLOCKSIZE); *value = buf; *sizep = BLOCKSIZE; return 0; } const char fname[] = __FILE__ ".dat"; CACHETABLE t; CACHEFILE f; static void open_file (void ) { int r; r = toku_create_cachetable(&t, KEYLIMIT, ZERO_LSN, NULL_LOGGER); assert(r==0); r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r==0); } static void writeit (void) { struct timeval start, end; gettimeofday(&start, 0); int i, r; for (i=0; i