From d5d3795cd141ff5be0e857b5e09131ba0cb0ae0f Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 29 Nov 2017 21:01:36 -0700 Subject: [PATCH] io_u: don't do expensive int divide for buffer scramble We don't need the conversion from nsec to usec to be exact, so just shift by 10 instead. Fixes: 8b6a404cd ("nanosecond: initial commit changing timeval to timespec") Signed-off-by: Jens Axboe --- io_u.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/io_u.c b/io_u.c index 6b950014..e1e44952 100644 --- a/io_u.c +++ b/io_u.c @@ -1673,7 +1673,7 @@ static bool check_get_verify(struct thread_data *td, struct io_u *io_u) static void small_content_scramble(struct io_u *io_u) { unsigned int i, nr_blocks = io_u->buflen / 512; - uint64_t boffset; + uint64_t boffset, usec; unsigned int offset; char *p, *end; @@ -1684,13 +1684,16 @@ static void small_content_scramble(struct io_u *io_u) boffset = io_u->offset; io_u->buf_filled_len = 0; + /* close enough for this purpose */ + usec = io_u->start_time.tv_nsec >> 10; + for (i = 0; i < nr_blocks; i++) { /* * Fill the byte offset into a "random" start offset of * the buffer, given by the product of the usec time * and the actual offset. */ - offset = ((io_u->start_time.tv_nsec/1000) ^ boffset) & 511; + offset = (usec ^ boffset) & 511; offset &= ~(sizeof(uint64_t) - 1); if (offset >= 512 - sizeof(uint64_t)) offset -= sizeof(uint64_t); -- 2.25.1