zipf: seed zipf/pareto rand with filename hash and job id
We don't want 4 jobs operating on the same file to use the
same hot spots.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/filesetup.c b/filesetup.c
index ac69c65..8636e16 100644
--- a/filesetup.c
+++ b/filesetup.c
@@ -12,6 +12,7 @@
#include "smalloc.h"
#include "filehash.h"
#include "os/os.h"
+#include "hash.h"
#ifdef FIO_HAVE_LINUX_FALLOCATE
#include <linux/falloc.h>
@@ -864,17 +865,18 @@
static int __init_rand_distribution(struct thread_data *td, struct fio_file *f)
{
- unsigned int range_size;
+ unsigned int range_size, seed;
unsigned long nranges;
range_size = min(td->o.min_bs[DDIR_READ], td->o.min_bs[DDIR_WRITE]);
nranges = (f->real_file_size + range_size - 1) / range_size;
+ seed = jhash(f->file_name, strlen(f->file_name), 0) * td->thread_number;
if (td->o.random_distribution == FIO_RAND_DIST_ZIPF)
- zipf_init(&f->zipf, nranges, td->o.zipf_theta);
+ zipf_init(&f->zipf, nranges, td->o.zipf_theta, seed);
else
- pareto_init(&f->zipf, nranges, td->o.pareto_h);
+ pareto_init(&f->zipf, nranges, td->o.pareto_h, seed);
return 1;
}