[v2,1/3] test: sched_perf: total number of queues option

Message ID 1535972408-4918-2-git-send-email-odpbot@yandex.ru
State New
Headers show
Series
  • Add options to sched_perf test application
Related show

Commit Message

Github ODP bot Sept. 3, 2018, 11 a.m.
From: Petri Savolainen <petri.savolainen@linaro.org>


Change -q option to be the total number of queues with events.
There's no need to limit the number of queues to a multiple of
worker thread count. Also, add an option for number of dummy
(empty) queues. This enables testing scheduler performance
when all created queues are not used.

Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>

---
/** Email created from pull request 687 (psavol:master-test-sched-perf-options)
 ** https://github.com/Linaro/odp/pull/687
 ** Patch: https://github.com/Linaro/odp/pull/687.patch
 ** Base sha: 97fc51b1e5b3fcea9db99ba63c10bda47f79341a
 ** Merge commit sha: 742c63f02e193181bd9172aeb63cf6d3d1de2e40
 **/
 test/performance/odp_sched_perf.c | 42 +++++++++++++++++++------------
 1 file changed, 26 insertions(+), 16 deletions(-)

Patch

diff --git a/test/performance/odp_sched_perf.c b/test/performance/odp_sched_perf.c
index ac2b9005b..d5fceede9 100644
--- a/test/performance/odp_sched_perf.c
+++ b/test/performance/odp_sched_perf.c
@@ -14,12 +14,12 @@ 
 #include <odp_api.h>
 #include <odp/helper/odph_api.h>
 
-#define MAX_QUEUES_PER_CPU  1024
-#define MAX_QUEUES          (ODP_THREAD_COUNT_MAX * MAX_QUEUES_PER_CPU)
+#define MAX_QUEUES  (256 * 1024)
 
 typedef struct test_options_t {
 	uint32_t num_cpu;
 	uint32_t num_queue;
+	uint32_t num_dummy;
 	uint32_t num_event;
 	uint32_t num_round;
 	uint32_t max_burst;
@@ -60,10 +60,11 @@  static void print_usage(void)
 	       "Usage: odp_sched_perf [options]\n"
 	       "\n"
 	       "  -c, --num_cpu          Number of CPUs (worker threads). 0: all available CPUs. Default: 1.\n"
-	       "  -q, --num_queue        Number of queues per CPU. Default: 1.\n"
-	       "  -e, --num_event        Number of events per queue\n"
+	       "  -q, --num_queue        Number of queues. Default: 1.\n"
+	       "  -d, --num_dummy        Number of empty queues. Default: 0.\n"
+	       "  -e, --num_event        Number of events per queue. Default: 100.\n"
 	       "  -r, --num_round        Number of rounds\n"
-	       "  -b, --burst            Maximum number of events per operation\n"
+	       "  -b, --burst            Maximum number of events per operation. Default: 100.\n"
 	       "  -t, --type             Queue type. 0: parallel, 1: atomic, 2: ordered. Default: 0.\n"
 	       "  -h, --help             This help\n"
 	       "\n");
@@ -78,6 +79,7 @@  static int parse_options(int argc, char *argv[], test_options_t *test_options)
 	static const struct option longopts[] = {
 		{"num_cpu",   required_argument, NULL, 'c'},
 		{"num_queue", required_argument, NULL, 'q'},
+		{"num_dummy", required_argument, NULL, 'd'},
 		{"num_event", required_argument, NULL, 'e'},
 		{"num_round", required_argument, NULL, 'r'},
 		{"burst",     required_argument, NULL, 'b'},
@@ -86,10 +88,11 @@  static int parse_options(int argc, char *argv[], test_options_t *test_options)
 		{NULL, 0, NULL, 0}
 	};
 
-	static const char *shortopts = "+c:q:e:r:b:t:h";
+	static const char *shortopts = "+c:q:d:e:r:b:t:h";
 
 	test_options->num_cpu    = 1;
 	test_options->num_queue  = 1;
+	test_options->num_dummy  = 0;
 	test_options->num_event  = 100;
 	test_options->num_round  = 100000;
 	test_options->max_burst  = 100;
@@ -108,6 +111,9 @@  static int parse_options(int argc, char *argv[], test_options_t *test_options)
 		case 'q':
 			test_options->num_queue = atoi(optarg);
 			break;
+		case 'd':
+			test_options->num_dummy = atoi(optarg);
+			break;
 		case 'e':
 			test_options->num_event = atoi(optarg);
 			break;
@@ -129,15 +135,15 @@  static int parse_options(int argc, char *argv[], test_options_t *test_options)
 		}
 	}
 
-	if (test_options->num_queue > MAX_QUEUES_PER_CPU) {
-		printf("Error: Too many queues per worker. Max supported %i\n.",
-		       MAX_QUEUES_PER_CPU);
+	if ((test_options->num_queue + test_options->num_dummy) > MAX_QUEUES) {
+		printf("Error: Too many queues. Max supported %i\n.",
+		       MAX_QUEUES);
 		ret = -1;
 	}
 
-	test_options->tot_queue = test_options->num_queue *
-				  test_options->num_cpu;
-	test_options->tot_event = test_options->tot_queue *
+	test_options->tot_queue = test_options->num_queue +
+				  test_options->num_dummy;
+	test_options->tot_event = test_options->num_queue *
 				  test_options->num_event;
 
 	return ret;
@@ -182,6 +188,7 @@  static int create_pool(test_global_t *global)
 	test_options_t *test_options = &global->test_options;
 	uint32_t num_cpu   = test_options->num_cpu;
 	uint32_t num_queue = test_options->num_queue;
+	uint32_t num_dummy = test_options->num_dummy;
 	uint32_t num_event = test_options->num_event;
 	uint32_t num_round = test_options->num_round;
 	uint32_t max_burst = test_options->max_burst;
@@ -190,11 +197,12 @@  static int create_pool(test_global_t *global)
 
 	printf("\nScheduler performance test\n");
 	printf("  num cpu          %u\n", num_cpu);
-	printf("  queues per cpu   %u\n", num_queue);
+	printf("  num queues       %u\n", num_queue);
+	printf("  num empty queues %u\n", num_dummy);
+	printf("  total queues     %u\n", tot_queue);
 	printf("  events per queue %u\n", num_event);
 	printf("  max burst size   %u\n", max_burst);
-	printf("  num queues       %u\n", tot_queue);
-	printf("  num events       %u\n", tot_event);
+	printf("  total events     %u\n", tot_event);
 	printf("  num rounds       %u\n", num_round);
 
 	if (odp_pool_capability(&pool_capa)) {
@@ -234,6 +242,7 @@  static int create_queues(test_global_t *global)
 	uint32_t i, j;
 	test_options_t *test_options = &global->test_options;
 	uint32_t num_event = test_options->num_event;
+	uint32_t num_queue = test_options->num_queue;
 	uint32_t tot_queue = test_options->tot_queue;
 	int type = test_options->queue_type;
 	odp_pool_t pool = global->pool;
@@ -285,7 +294,8 @@  static int create_queues(test_global_t *global)
 		}
 	}
 
-	for (i = 0; i < tot_queue; i++) {
+	/* Store events into queues. Dummy queues are left empty. */
+	for (i = 0; i < num_queue; i++) {
 		queue = global->queue[i];
 
 		for (j = 0; j < num_event; j++) {