1*a06d9eddSRichard Henderson /* 2*a06d9eddSRichard Henderson * QEMU buffer_is_zero speed benchmark 3*a06d9eddSRichard Henderson * 4*a06d9eddSRichard Henderson * This work is licensed under the terms of the GNU GPL, version 2 or 5*a06d9eddSRichard Henderson * (at your option) any later version. See the COPYING file in the 6*a06d9eddSRichard Henderson * top-level directory. 7*a06d9eddSRichard Henderson */ 8*a06d9eddSRichard Henderson #include "qemu/osdep.h" 9*a06d9eddSRichard Henderson #include "qemu/cutils.h" 10*a06d9eddSRichard Henderson #include "qemu/units.h" 11*a06d9eddSRichard Henderson 12*a06d9eddSRichard Henderson static void test(const void *opaque) 13*a06d9eddSRichard Henderson { 14*a06d9eddSRichard Henderson size_t max = 64 * KiB; 15*a06d9eddSRichard Henderson void *buf = g_malloc0(max); 16*a06d9eddSRichard Henderson int accel_index = 0; 17*a06d9eddSRichard Henderson 18*a06d9eddSRichard Henderson do { 19*a06d9eddSRichard Henderson if (accel_index != 0) { 20*a06d9eddSRichard Henderson g_test_message("%s", ""); /* gnu_printf Werror for simple "" */ 21*a06d9eddSRichard Henderson } 22*a06d9eddSRichard Henderson for (size_t len = 1 * KiB; len <= max; len *= 4) { 23*a06d9eddSRichard Henderson double total = 0.0; 24*a06d9eddSRichard Henderson 25*a06d9eddSRichard Henderson g_test_timer_start(); 26*a06d9eddSRichard Henderson do { 27*a06d9eddSRichard Henderson buffer_is_zero_ge256(buf, len); 28*a06d9eddSRichard Henderson total += len; 29*a06d9eddSRichard Henderson } while (g_test_timer_elapsed() < 0.5); 30*a06d9eddSRichard Henderson 31*a06d9eddSRichard Henderson total /= MiB; 32*a06d9eddSRichard Henderson g_test_message("buffer_is_zero #%d: %2zuKB %8.0f MB/sec", 33*a06d9eddSRichard Henderson accel_index, len / (size_t)KiB, 34*a06d9eddSRichard Henderson total / g_test_timer_last()); 35*a06d9eddSRichard Henderson } 36*a06d9eddSRichard Henderson accel_index++; 37*a06d9eddSRichard Henderson } while (test_buffer_is_zero_next_accel()); 38*a06d9eddSRichard Henderson 39*a06d9eddSRichard Henderson g_free(buf); 40*a06d9eddSRichard Henderson } 41*a06d9eddSRichard Henderson 42*a06d9eddSRichard Henderson int main(int argc, char **argv) 43*a06d9eddSRichard Henderson { 44*a06d9eddSRichard Henderson g_test_init(&argc, &argv, NULL); 45*a06d9eddSRichard Henderson g_test_add_data_func("/cutils/bufferiszero/speed", NULL, test); 46*a06d9eddSRichard Henderson return g_test_run(); 47*a06d9eddSRichard Henderson } 48