DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/3] Increase test compatibility with PA IOVA
@ 2021-04-12 10:06 Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 1/3] test: disable no-huge test " Stanislaw Kardach
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Stanislaw Kardach @ 2021-04-12 10:06 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: dev, Stanislaw Kardach

While working in some scenarios where only RTE_IOVA_PA is available I've
noticed that some of the EAL tests are failing because of a totally
different reason than the test itself.
Namely the --no-huge flag and PA IOVA can't be used together and EAL
init fails warning about this.
This patchset tries to cleanup the --no-huge usage so that it doesn't
hide the real state of tests when RTE_IOVA_PA is used (i.e. on platforms
without IOMMU).

This means skipping the no-huge test as it is not supported by design and
removing no-huge usage on linux as it seems that it was previously used
with --no-shconf to increase the compatibility with FreeBSD. That is if
I'm not missing a bigger picture of using the --no-huge with --no-shconf
on non-FreeBSD platforms.

Stanislaw Kardach (3):
  test: disable no-huge test with PA IOVA
  test: disable no-huge where it's not necessary
  test: fix the -n unit test description

 app/test/test_eal_flags.c | 45 ++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 13 deletions(-)

-- 
2.27.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH 1/3] test: disable no-huge test with PA IOVA
  2021-04-12 10:06 [dpdk-dev] [PATCH 0/3] Increase test compatibility with PA IOVA Stanislaw Kardach
@ 2021-04-12 10:06 ` Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 2/3] test: disable no-huge where it's not necessary Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 3/3] test: fix the -n unit test description Stanislaw Kardach
  2 siblings, 0 replies; 4+ messages in thread
From: Stanislaw Kardach @ 2021-04-12 10:06 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: dev, Stanislaw Kardach, stable

On linux systems without IOMMU support available (be it lack of
supported IOMMU or lack of IOMMU support in kernel), the IOVA mapping
will default to DMA with physical addresses. This implicitly requires
hugepage support (most prominently for performance reasons).
Therefore trying to run the eal_flags_no_huge_autotest in such scenario
is not a valid requirement.

To verify this even on x86 do (output from i5-10210U):

$ ./app/test/dpdk-test -m 18 --iova-mode=pa --no-huge
EAL: Detected 8 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: FATAL: Cannot use IOVA as 'PA' since physical addresses are not available
EAL: Cannot use IOVA as 'PA' since physical addresses are not available

While doing:

$ sudo ./app/test/dpdk-test --iova-mode=pa
EAL: Detected 8 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available 1048576 kB hugepages reported
EAL: Probing VFIO support...
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
APP: HPET is not enabled, using TSC as default timer
RTE>>

This commit finishes the above test early with SKIP status to signify
that no-huge support is simply not available.

Signed-off-by: Stanislaw Kardach <kda@semihalf.com>
Cc: stable@dpdk.org
---
 app/test/test_eal_flags.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 932fbe3d0..462dc6384 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -756,6 +756,15 @@ test_no_huge_flag(void)
 #else
 	const char * prefix = "--file-prefix=nohuge";
 #endif
+#ifdef RTE_EXEC_ENV_LINUX
+	/* EAL requires hugepages for RTE_IOVA_PA operation on linux.
+	 * The test application is run with RTE_IOVA_DC, so if at this point we
+	 * get RTE_IOVA_PA, it means that newly spawned process will also get
+	 * it.
+	 */
+	if (rte_eal_iova_mode() == RTE_IOVA_PA)
+		return TEST_SKIPPED;
+#endif
 
 	/* With --no-huge */
 	const char *argv1[] = {prgname, prefix, no_huge};
-- 
2.27.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH 2/3] test: disable no-huge where it's not necessary
  2021-04-12 10:06 [dpdk-dev] [PATCH 0/3] Increase test compatibility with PA IOVA Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 1/3] test: disable no-huge test " Stanislaw Kardach
@ 2021-04-12 10:06 ` Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 3/3] test: fix the -n unit test description Stanislaw Kardach
  2 siblings, 0 replies; 4+ messages in thread
From: Stanislaw Kardach @ 2021-04-12 10:06 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: dev, Stanislaw Kardach, stable

In tests where no-shconf flag is used, no-huge is also passed due to
compatibility with FreeBSD system, as described in: b5d878e6d.
However on Linux systems with RTE_IOVA_PA (lack of or an incompatible
IOMMU) this causes issues since hugepages are required by EAL.
Therefore replace all occurrences of no_huge which don't actually test
the no-huge logic with a execution environment conditional
no_huge_compat to indicate that it is passed as a compatibility flag,
not as a requirement for a test itself.

Note that checkpatch is complaining about argvX arrays not being static
const. This patch doesn't change that to not add confusion.

Signed-off-by: Stanislaw Kardach <kda@semihalf.com>
Fixes: b5d878e6db56 ("test: fix EAL flags autotest on FreeBSD")
Cc: stable@dpdk.org
---
 app/test/test_eal_flags.c | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 462dc6384..cfc54684a 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -29,6 +29,17 @@
 #define mp_flag "--proc-type=secondary"
 #define no_hpet "--no-hpet"
 #define no_huge "--no-huge"
+/* FreeBSD does not support running multiple primary processes, hence for tests
+ * requiring no-shconf, no-huge is also required.
+ * On Linux on the other hand no-huge is not needed so don't pass it as it
+ * would break cases when IOMMU is not able to provide IOVA translation
+ * (rte_eal_iova_mode() == RTE_IOVA_PA).
+ */
+#ifdef RTE_EXEC_ENV_LINUX
+#define no_huge_compat ""
+#else
+#define no_huge_compat no_huge
+#endif
 #define no_shconf "--no-shconf"
 #define allow "--allow"
 #define vdev "--vdev"
@@ -354,17 +365,17 @@ test_invalid_vdev_flag(void)
 #endif
 
 	/* Test with invalid vdev option */
-	const char *vdevinval[] = {prgname, prefix, no_huge,
+	const char *vdevinval[] = {prgname, prefix, no_huge_compat,
 				vdev, "eth_dummy"};
 
 	/* Test with valid vdev option */
-	const char *vdevval1[] = {prgname, prefix, no_huge,
+	const char *vdevval1[] = {prgname, prefix, no_huge_compat,
 	vdev, "net_ring0"};
 
-	const char *vdevval2[] = {prgname, prefix, no_huge,
+	const char *vdevval2[] = {prgname, prefix, no_huge_compat,
 	vdev, "net_ring0,args=test"};
 
-	const char *vdevval3[] = {prgname, prefix, no_huge,
+	const char *vdevval3[] = {prgname, prefix, no_huge_compat,
 	vdev, "net_ring0,nodeaction=r1:0:CREATE"};
 
 	if (launch_proc(vdevinval) == 0) {
@@ -674,19 +685,19 @@ test_invalid_n_flag(void)
 #endif
 
 	/* -n flag but no value */
-	const char *argv1[] = { prgname, prefix, no_huge, no_shconf,
+	const char *argv1[] = { prgname, prefix, no_huge_compat, no_shconf,
 				"-n"};
 	/* bad numeric value */
-	const char *argv2[] = { prgname, prefix, no_huge, no_shconf,
+	const char *argv2[] = { prgname, prefix, no_huge_compat, no_shconf,
 				"-n", "e" };
 	/* zero is invalid */
-	const char *argv3[] = { prgname, prefix, no_huge, no_shconf,
+	const char *argv3[] = { prgname, prefix, no_huge_compat, no_shconf,
 				"-n", "0" };
 	/* sanity test - check with good value */
-	const char *argv4[] = { prgname, prefix, no_huge, no_shconf,
+	const char *argv4[] = { prgname, prefix, no_huge_compat, no_shconf,
 				"-n", "2" };
 	/* sanity test - check with no -n flag */
-	const char *argv5[] = { prgname, prefix, no_huge, no_shconf};
+	const char *argv5[] = { prgname, prefix, no_huge_compat, no_shconf};
 
 	if (launch_proc(argv1) == 0
 			|| launch_proc(argv2) == 0
@@ -878,7 +889,7 @@ test_misc_flags(void)
 	const char *argv5[] = {prgname, prefix, mp_flag, "--syslog", "error"};
 	/* With no-sh-conf, also use no-huge to ensure this test runs on BSD */
 	const char *argv6[] = {prgname, "-m", DEFAULT_MEM_SIZE,
-			no_shconf, nosh_prefix, no_huge};
+			no_shconf, nosh_prefix, no_huge_compat};
 
 	/* With --huge-dir */
 	const char *argv7[] = {prgname, "-m", DEFAULT_MEM_SIZE,
@@ -920,7 +931,7 @@ test_misc_flags(void)
 
 	/* With process type as auto-detect with no-shconf */
 	const char * const argv17[] = {prgname, "--proc-type=auto",
-			no_shconf, nosh_prefix, no_huge};
+			no_shconf, nosh_prefix, no_huge_compat};
 
 	/* With process type as --create-uio-dev flag */
 	const char * const argv18[] = {prgname, "--file-prefix=uiodev",
-- 
2.27.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH 3/3] test: fix the -n unit test description
  2021-04-12 10:06 [dpdk-dev] [PATCH 0/3] Increase test compatibility with PA IOVA Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 1/3] test: disable no-huge test " Stanislaw Kardach
  2021-04-12 10:06 ` [dpdk-dev] [PATCH 2/3] test: disable no-huge where it's not necessary Stanislaw Kardach
@ 2021-04-12 10:06 ` Stanislaw Kardach
  2 siblings, 0 replies; 4+ messages in thread
From: Stanislaw Kardach @ 2021-04-12 10:06 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: dev, Stanislaw Kardach, stable

When -n argument became optional, the test logic was fixed (by
1e0b51fd4) but the comment indicating why --no-huge and --no-shconf are
used was not changed.
Today those flags are used for compatibility with FreeBSD (see
b5d878e6d), so change the comment to reflect that.

Signed-off-by: Stanislaw Kardach <kda@semihalf.com>

Fixes: b5d878e6db56 ("test: fix EAL flags autotest on FreeBSD")
Cc: stable@dpdk.org
---
 app/test/test_eal_flags.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index cfc54684a..894e2e90c 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -666,8 +666,8 @@ test_main_lcore_flag(void)
 /*
  * Test that the app doesn't run with invalid -n flag option.
  * Final test ensures it does run with valid options as sanity check
- * Since -n is not compulsory for MP, we instead use --no-huge and --no-shconf
- * flags.
+ * For compatibility with BSD use --no-huge and --no-shconf flags as we need to
+ * run a primary process.
  */
 static int
 test_invalid_n_flag(void)
-- 
2.27.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-04-12 10:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-12 10:06 [dpdk-dev] [PATCH 0/3] Increase test compatibility with PA IOVA Stanislaw Kardach
2021-04-12 10:06 ` [dpdk-dev] [PATCH 1/3] test: disable no-huge test " Stanislaw Kardach
2021-04-12 10:06 ` [dpdk-dev] [PATCH 2/3] test: disable no-huge where it's not necessary Stanislaw Kardach
2021-04-12 10:06 ` [dpdk-dev] [PATCH 3/3] test: fix the -n unit test description Stanislaw Kardach

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git