X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=smalloc.c;h=4cd8298eaa004d7a56d861aefcb1373ae7fd7001;hp=ac5754d5f496119a342180eeae58bb4a229e4cf0;hb=3a8600b4ae9027d02aca7eb1990e5cda4e9f423a;hpb=86375e3446fdeb6c4dd1406cc0e4c456af954a2c diff --git a/smalloc.c b/smalloc.c index ac5754d5..4cd8298e 100644 --- a/smalloc.c +++ b/smalloc.c @@ -10,9 +10,11 @@ #include #include #include +#include #include "mutex.h" #include "arch/arch.h" +#include "os/os.h" #define SMALLOC_REDZONE /* define to detect memory corruption */ @@ -20,7 +22,7 @@ #define SMALLOC_BPI (sizeof(unsigned int) * 8) #define SMALLOC_BPL (SMALLOC_BPB * SMALLOC_BPI) -#define INITIAL_SIZE 1024*1024 /* new pool size */ +#define INITIAL_SIZE 8192*1024 /* new pool size */ #define MAX_POOLS 128 /* maximum number of pools to setup */ #define SMALLOC_PRE_RED 0xdeadbeefU @@ -176,7 +178,7 @@ static int find_next_zero(int word, int start) static int add_pool(struct pool *pool, unsigned int alloc_size) { - int fd, bitmap_blocks; + int fd, bitmap_blocks, ret; char file[] = "/tmp/.fio_smalloc.XXXXXX"; void *ptr; @@ -196,10 +198,18 @@ static int add_pool(struct pool *pool, unsigned int alloc_size) bitmap_blocks = alloc_size / SMALLOC_BPL; alloc_size += bitmap_blocks * sizeof(unsigned int); pool->mmap_size = alloc_size; - + pool->nr_blocks = bitmap_blocks; pool->free_blocks = bitmap_blocks * SMALLOC_BPB; +#ifdef FIO_HAVE_FALLOCATE + ret = posix_fallocate(fd, 0, alloc_size); + if (ret > 0) { + fprintf(stderr, "posix_fallocate pool file failed: %s\n", strerror(ret)); + goto out_unlink; + } +#endif + if (ftruncate(fd, alloc_size) < 0) goto out_unlink;