summaryrefslogtreecommitdiff
path: root/include/qemu-common.h
diff options
context:
space:
mode:
authorLiang Li <liang.z.li@intel.com>2016-03-08 13:53:17 +0800
committerAmit Shah <amit.shah@redhat.com>2016-03-08 16:53:26 +0530
commit28b90d9c19d368645f475e36297ca21c53c38799 (patch)
tree20493c1d2f176a292481e5ba900ca1c986b77299 /include/qemu-common.h
parent99f2dbd34328771b12dee782ebccda1c25b4c23b (diff)
downloadqemu-28b90d9c19d368645f475e36297ca21c53c38799.tar.gz
qemu-28b90d9c19d368645f475e36297ca21c53c38799.tar.bz2
qemu-28b90d9c19d368645f475e36297ca21c53c38799.zip
cutils: add avx2 instruction optimization
buffer_find_nonzero_offset() is a hot function during live migration. Now it use SSE2 instructions for optimization. For platform supports AVX2 instructions, use AVX2 instructions for optimization can help to improve the performance of buffer_find_nonzero_offset() about 30% comparing to SSE2. Live migration can be faster with this optimization, the test result shows that for an 8GiB RAM idle guest just boots, this patch can help to shorten the total live migration time about 6%. This patch use the ifunc mechanism to select the proper function when running, for platform supports AVX2, execute the AVX2 instructions, else, execute the original instructions. Signed-off-by: Liang Li <liang.z.li@intel.com> Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Suggested-by: Richard Henderson <rth@twiddle.net> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <1457416397-26671-3-git-send-email-liang.z.li@intel.com> Signed-off-by: Amit Shah <amit.shah@redhat.com>
Diffstat (limited to 'include/qemu-common.h')
-rw-r--r--include/qemu-common.h8
1 files changed, 1 insertions, 7 deletions
diff --git a/include/qemu-common.h b/include/qemu-common.h
index ced2994402..887ca71c8a 100644
--- a/include/qemu-common.h
+++ b/include/qemu-common.h
@@ -476,13 +476,7 @@ void qemu_hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);
#endif
#define BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR 8
-static inline bool
-can_use_buffer_find_nonzero_offset(const void *buf, size_t len)
-{
- return (len % (BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR
- * sizeof(VECTYPE)) == 0
- && ((uintptr_t) buf) % sizeof(VECTYPE) == 0);
-}
+bool can_use_buffer_find_nonzero_offset(const void *buf, size_t len);
size_t buffer_find_nonzero_offset(const void *buf, size_t len);
/*