DPDK patches and discussions
 help / color / mirror / Atom feed
From: Srikanth Yalavarthi <syalavarthi@marvell.com>
To: Srikanth Yalavarthi <syalavarthi@marvell.com>
Cc: <dev@dpdk.org>, <sshankarnara@marell.com>, <jerinj@marvell.com>
Subject: [PATCH v1 02/12] app/mldev: add common test functions
Date: Mon, 28 Nov 2022 22:50:30 -0800	[thread overview]
Message-ID: <20221129065040.5875-3-syalavarthi@marvell.com> (raw)
In-Reply-To: <20221129065040.5875-1-syalavarthi@marvell.com>

Added common functions used by all tests. Common code
includes functions to check capabilities, options, and
handle ML devices.

Signed-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>
Change-Id: I5f99b57f97ca5b317450b63bff86ff9fdadf388f
---
 app/test-mldev/meson.build   |   1 +
 app/test-mldev/test_common.c | 139 +++++++++++++++++++++++++++++++++++
 app/test-mldev/test_common.h |  27 +++++++
 3 files changed, 167 insertions(+)
 create mode 100644 app/test-mldev/test_common.c
 create mode 100644 app/test-mldev/test_common.h

diff --git a/app/test-mldev/meson.build b/app/test-mldev/meson.build
index 8ca2e1a1c1..964bb9ddc4 100644
--- a/app/test-mldev/meson.build
+++ b/app/test-mldev/meson.build
@@ -12,6 +12,7 @@ sources = files(
         'ml_options.c',
         'ml_test.c',
         'parser.c',
+        'test_common.c',
 )
 
 deps += ['mldev']
diff --git a/app/test-mldev/test_common.c b/app/test-mldev/test_common.c
new file mode 100644
index 0000000000..b6b32904e4
--- /dev/null
+++ b/app/test-mldev/test_common.c
@@ -0,0 +1,139 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2022 Marvell.
+ */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include <rte_common.h>
+#include <rte_memory.h>
+#include <rte_mldev.h>
+
+#include "ml_common.h"
+#include "ml_options.h"
+#include "test_common.h"
+
+bool
+ml_test_cap_check(struct ml_options *opt)
+{
+	struct rte_ml_dev_info dev_info;
+
+	rte_ml_dev_info_get(opt->dev_id, &dev_info);
+	if (dev_info.max_models == 0) {
+		ml_err("Not enough mldev models supported = %d", dev_info.max_models);
+		return false;
+	}
+
+	return true;
+}
+
+int
+ml_test_opt_check(struct ml_options *opt)
+{
+	uint16_t dev_count;
+	int socket_id;
+
+	RTE_SET_USED(opt);
+
+	dev_count = rte_ml_dev_count();
+	if (dev_count == 0) {
+		ml_err("No ML devices found");
+		return -ENODEV;
+	}
+
+	if (opt->dev_id >= dev_count) {
+		ml_err("Invalid option dev_id = %d", opt->dev_id);
+		return -EINVAL;
+	}
+
+	socket_id = rte_ml_dev_socket_id(opt->dev_id);
+	if (!((opt->socket_id != SOCKET_ID_ANY) || (opt->socket_id != socket_id))) {
+		ml_err("Invalid option, socket_id = %d\n", opt->socket_id);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+void
+ml_test_opt_dump(struct ml_options *opt)
+{
+	ml_options_dump(opt);
+}
+
+int
+ml_test_device_configure(struct ml_test *test, struct ml_options *opt)
+{
+	struct test_common *t = ml_test_priv(test);
+	struct rte_ml_dev_config dev_config;
+	int ret;
+
+	ret = rte_ml_dev_info_get(opt->dev_id, &t->dev_info);
+	if (ret != 0) {
+		ml_err("Failed to get mldev info, dev_id = %d\n", opt->dev_id);
+		return ret;
+	}
+
+	/* configure device */
+	dev_config.socket_id = opt->socket_id;
+	dev_config.nb_models = t->dev_info.max_models;
+	dev_config.nb_queue_pairs = t->dev_info.max_queue_pairs;
+	ret = rte_ml_dev_configure(opt->dev_id, &dev_config);
+	if (ret != 0) {
+		ml_err("Failed to configure ml device, dev_id = %d\n", opt->dev_id);
+		return ret;
+	}
+
+	return 0;
+}
+
+int
+ml_test_device_close(struct ml_test *test, struct ml_options *opt)
+{
+	struct test_common *t = ml_test_priv(test);
+	int ret = 0;
+
+	RTE_SET_USED(t);
+
+	/* close device */
+	ret = rte_ml_dev_close(opt->dev_id);
+	if (ret != 0)
+		ml_err("Failed to close ML device, dev_id = %d\n", opt->dev_id);
+
+	return ret;
+}
+
+int
+ml_test_device_start(struct ml_test *test, struct ml_options *opt)
+{
+	struct test_common *t = ml_test_priv(test);
+	int ret;
+
+	RTE_SET_USED(t);
+
+	/* start device */
+	ret = rte_ml_dev_start(opt->dev_id);
+	if (ret != 0) {
+		ml_err("Failed to start ml device, dev_id = %d\n", opt->dev_id);
+		return ret;
+	}
+
+	return 0;
+}
+
+int
+ml_test_device_stop(struct ml_test *test, struct ml_options *opt)
+{
+	struct test_common *t = ml_test_priv(test);
+	int ret = 0;
+
+	RTE_SET_USED(t);
+
+	/* stop device */
+	ret = rte_ml_dev_stop(opt->dev_id);
+	if (ret != 0)
+		ml_err("Failed to stop ML device, dev_id = %d\n", opt->dev_id);
+
+	return ret;
+}
diff --git a/app/test-mldev/test_common.h b/app/test-mldev/test_common.h
new file mode 100644
index 0000000000..05a2e43e2f
--- /dev/null
+++ b/app/test-mldev/test_common.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2022 Marvell.
+ */
+
+#ifndef _ML_TEST_COMMON_
+#define _ML_TEST_COMMON_
+
+#include <rte_mldev.h>
+
+#include "ml_options.h"
+#include "ml_test.h"
+
+struct test_common {
+	struct ml_options *opt;
+	enum ml_test_result result;
+	struct rte_ml_dev_info dev_info;
+};
+
+bool ml_test_cap_check(struct ml_options *opt);
+int ml_test_opt_check(struct ml_options *opt);
+void ml_test_opt_dump(struct ml_options *opt);
+int ml_test_device_configure(struct ml_test *test, struct ml_options *opt);
+int ml_test_device_close(struct ml_test *test, struct ml_options *opt);
+int ml_test_device_start(struct ml_test *test, struct ml_options *opt);
+int ml_test_device_stop(struct ml_test *test, struct ml_options *opt);
+
+#endif /* _ML_TEST_COMMON_ */
-- 
2.17.1


  parent reply	other threads:[~2022-11-29  6:51 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-29  6:50 [PATCH v1 00/12] *** implement mldev test application *** Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 01/12] app/mldev: implement test framework for mldev Srikanth Yalavarthi
2022-11-29  6:50 ` Srikanth Yalavarthi [this message]
2022-11-29  6:50 ` [PATCH v1 03/12] app/mldev: add test case to validate device ops Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 04/12] app/mldev: add test case to validate model ops Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 05/12] app/mldev: add ordered inference test case Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 06/12] app/mldev: add test case to interleave inferences Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 07/12] app/mldev: enable support for burst inferences Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 08/12] app/mldev: enable support for queue pairs and size Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 09/12] app/mldev: enable support for inference batches Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 10/12] app/mldev: enable support for inference validation Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 11/12] app/mldev: enable reporting stats in mldev app Srikanth Yalavarthi
2022-11-29  6:50 ` [PATCH v1 12/12] app/mldev: add documentation for mldev test cases Srikanth Yalavarthi
2022-11-29  7:07 [PATCH v1 00/12] implement mldev test application Srikanth Yalavarthi
2022-11-29  7:07 ` [PATCH v1 02/12] app/mldev: add common test functions Srikanth Yalavarthi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221129065040.5875-3-syalavarthi@marvell.com \
    --to=syalavarthi@marvell.com \
    --cc=dev@dpdk.org \
    --cc=jerinj@marvell.com \
    --cc=sshankarnara@marell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).