[PATCH] Optimize pattern filling by limiting small calls to memcpy.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In looking at profiling the speed of fill_pattern(), it calls memcpy()
for the fill pattern repeatedly for multibyte patterns.  So for a 4
byte pattern with 8k IO, it calls memcpy() 2048 times.

Since there is already 512 bytes reserved for the pattern, I figured a
simple solution was to use it.  This patch replicates short patterns
so they can be more efficiently copied.  (Single byte patterns are
left alone since they can make use of the much more efficient memset()
call.)

The result is a 10x performance improvement on pattern filling.  (With
this patch, it's still 3x slower than when it re-uses the already
filled pattern.)

---
 options.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/options.c b/options.c
index f9bd1a4..b6989d4 100644
--- a/options.c
+++ b/options.c
@@ -689,6 +689,10 @@ static int str_verify_pattern_cb(void *data,
const char *input)
 			}
 		}
 	}
+	while (i > 1 && i * 2 <= MAX_PATTERN_SIZE) {
+		memcpy(&td->o.verify_pattern[i], &td->o.verify_pattern[0], i);
+		i *= 2;
+	}
 	td->o.verify_pattern_bytes = i;
 	/*
 	 * VERIFY_META could already be set
-- 
1.7.7.3
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux