[v3,2/6] eal: add pseudo-random number generation performance test
Checks
Commit Message
Add performance test for rte_rand().
Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
app/test/Makefile | 1 +
app/test/test_rand_perf.c | 75 +++++++++++++++++++++++++++++++++++++++
2 files changed, 76 insertions(+)
create mode 100644 app/test/test_rand_perf.c
Comments
05/06/2019 12:43, Mattias Rönnblom:
> Add performance test for rte_rand().
>
> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
> app/test/Makefile | 1 +
> app/test/test_rand_perf.c | 75 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 76 insertions(+)
Why it is not added in meson.build?
On 2019-06-27 23:23, Thomas Monjalon wrote:
> 05/06/2019 12:43, Mattias Rönnblom:
>> Add performance test for rte_rand().
>>
>> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
>> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
>> ---
>> app/test/Makefile | 1 +
>> app/test/test_rand_perf.c | 75 +++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 76 insertions(+)
>
> Why it is not added in meson.build?
>
Because the author both made the mistake of not adding it, and failed to
test the meson build in this regard.
I'll send an updated patch set.
Thanks!
@@ -73,6 +73,7 @@ SRCS-y += test_reciprocal_division.c
SRCS-y += test_reciprocal_division_perf.c
SRCS-y += test_fbarray.c
SRCS-y += test_external_mem.c
+SRCS-y += test_rand_perf.c
SRCS-y += test_ring.c
SRCS-y += test_ring_perf.c
new file mode 100644
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Ericsson AB
+ */
+
+#include <inttypes.h>
+#include <stdio.h>
+
+#include <rte_common.h>
+#include <rte_cycles.h>
+#include <rte_random.h>
+
+#include "test.h"
+
+static volatile uint64_t vsum;
+
+#define ITERATIONS (100000000)
+
+enum rand_type {
+ rand_type_64
+};
+
+static const char *
+rand_type_desc(enum rand_type rand_type)
+{
+ switch (rand_type) {
+ case rand_type_64:
+ return "Full 64-bit [rte_rand()]";
+ default:
+ return NULL;
+ }
+}
+
+static __rte_always_inline void
+test_rand_perf_type(enum rand_type rand_type)
+{
+ uint64_t start;
+ uint32_t i;
+ uint64_t end;
+ uint64_t sum = 0;
+ uint64_t op_latency;
+
+ start = rte_rdtsc();
+
+ for (i = 0; i < ITERATIONS; i++) {
+ switch (rand_type) {
+ case rand_type_64:
+ sum += rte_rand();
+ break;
+ }
+ }
+
+ end = rte_rdtsc();
+
+ /* to avoid an optimizing compiler removing the whole loop */
+ vsum = sum;
+
+ op_latency = (end - start) / ITERATIONS;
+
+ printf("%s: %"PRId64" TSC cycles/op\n", rand_type_desc(rand_type),
+ op_latency);
+}
+
+static int
+test_rand_perf(void)
+{
+ rte_srand(42);
+
+ printf("Pseudo-random number generation latencies:\n");
+
+ test_rand_perf_type(rand_type_64);
+
+ return 0;
+}
+
+REGISTER_TEST_COMMAND(rand_perf_autotest, test_rand_perf);