patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Krzysztof Kanas <kkanas@marvell.com>
Cc: David Marchand <david.marchand@redhat.com>,
	Kevin Traynor <ktraynor@redhat.com>,
	dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'test: optimise fd closing in forks' has been queued to LTS release 18.11.6
Date: Wed, 11 Dec 2019 21:26:17 +0000	[thread overview]
Message-ID: <20191211212702.27851-25-ktraynor@redhat.com> (raw)
In-Reply-To: <20191211212702.27851-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to LTS release 18.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/17/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/c8d8fad706afba896dd43f38f41caa1923e7d977

Thanks.

Kevin.

---
From c8d8fad706afba896dd43f38f41caa1923e7d977 Mon Sep 17 00:00:00 2001
From: Krzysztof Kanas <kkanas@marvell.com>
Date: Tue, 12 Nov 2019 21:31:02 +0100
Subject: [PATCH] test: optimise fd closing in forks

[ upstream commit 18562261abadfbdf7e19006c381bcb1d6fd6c2fe ]

Caught while investigating timeouts on a ARM64 server.

Stracing a test process running the eal_flags_autotest, we can see that
the fork helper is checking all possible file descriptors from
getdtablesize() to 2, and close the existing ones.
We can do better by inspecting this forked process /proc/self/fd
directory.

Besides, checking file descriptors via /proc/self/fd only makes sense for
Linux. This code was a noop on FreeBSD.

Fixes: af75078fece3 ("first public release")

Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
Tested-by: Krzysztof Kanas <kkanas@marvell.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
---
 test/test/process.h | 51 ++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 44 insertions(+), 7 deletions(-)

diff --git a/test/test/process.h b/test/test/process.h
index ba3a18502..f87ff6e72 100644
--- a/test/test/process.h
+++ b/test/test/process.h
@@ -10,4 +10,5 @@
 #include <stdlib.h> /* NULL */
 #include <unistd.h> /* readlink */
+#include <dirent.h>
 
 #ifdef RTE_EXEC_ENV_BSDAPP
@@ -30,6 +31,5 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
 	int num;
 	char *argv_cpy[numargs + 1];
-	int i, fd, status;
-	char path[32];
+	int i, status;
 
 	pid_t pid = fork();
@@ -43,11 +43,48 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
 		num = numargs;
 
-		/* close all open file descriptors, check /proc/self/fd to only
-		 * call close on open fds. Exclude fds 0, 1 and 2*/
-		for (fd = getdtablesize(); fd > 2; fd-- ) {
-			snprintf(path, sizeof(path), "/proc/" exe "/fd/%d", fd);
-			if (access(path, F_OK) == 0)
+#ifdef RTE_EXEC_ENV_LINUX
+		{
+			const char *procdir = "/proc/" self "/fd/";
+			struct dirent *dirent;
+			char *endptr;
+			int fd, fdir;
+			DIR *dir;
+
+			/* close all open file descriptors, check /proc/self/fd
+			 * to only call close on open fds. Exclude fds 0, 1 and
+			 * 2
+			 */
+			dir = opendir(procdir);
+			if (dir == NULL) {
+				rte_panic("Error opening %s: %s\n", procdir,
+						strerror(errno));
+			}
+
+			fdir = dirfd(dir);
+			if (fdir < 0) {
+				status = errno;
+				closedir(dir);
+				rte_panic("Error %d obtaining fd for dir %s: %s\n",
+						fdir, procdir,
+						strerror(status));
+			}
+
+			while ((dirent = readdir(dir)) != NULL) {
+				errno = 0;
+				fd = strtol(dirent->d_name, &endptr, 10);
+				if (errno != 0 || endptr[0] != '\0') {
+					printf("Error converting name fd %d %s:\n",
+						fd, dirent->d_name);
+					continue;
+				}
+
+				if (fd == fdir || fd <= 2)
+					continue;
+
 				close(fd);
+			}
+			closedir(dir);
 		}
+#endif
 		printf("Running binary with argv[]:");
 		for (i = 0; i < num; i++)
-- 
2.21.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-12-11 21:24:14.704348768 +0000
+++ 0025-test-optimise-fd-closing-in-forks.patch	2019-12-11 21:24:12.627652044 +0000
@@ -1 +1 @@
-From 18562261abadfbdf7e19006c381bcb1d6fd6c2fe Mon Sep 17 00:00:00 2001
+From c8d8fad706afba896dd43f38f41caa1923e7d977 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 18562261abadfbdf7e19006c381bcb1d6fd6c2fe ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -25,2 +26,2 @@
- app/test/process.h | 50 ++++++++++++++++++++++++++++++++++++++++------
- 1 file changed, 44 insertions(+), 6 deletions(-)
+ test/test/process.h | 51 ++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 44 insertions(+), 7 deletions(-)
@@ -28,6 +29,6 @@
-diff --git a/app/test/process.h b/app/test/process.h
-index 128ce4121..191d2796a 100644
---- a/app/test/process.h
-+++ b/app/test/process.h
-@@ -12,4 +12,5 @@
- #include <string.h> /* strerror */
+diff --git a/test/test/process.h b/test/test/process.h
+index ba3a18502..f87ff6e72 100644
+--- a/test/test/process.h
++++ b/test/test/process.h
+@@ -10,4 +10,5 @@
+ #include <stdlib.h> /* NULL */
@@ -36 +36,0 @@
- #include <sys/wait.h>
@@ -38 +38,2 @@
-@@ -41,5 +42,5 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
+ #ifdef RTE_EXEC_ENV_BSDAPP
+@@ -30,6 +31,5 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
@@ -41,0 +43 @@
+-	char path[32];
@@ -43,3 +45,3 @@
- 	char path[32];
- #ifdef RTE_LIBRTE_PDUMP
-@@ -57,11 +58,48 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
+ 
+ 	pid_t pid = fork();
+@@ -43,11 +43,48 @@ process_dup(const char *const argv[], int numargs, const char *env_value)


  parent reply	other threads:[~2019-12-11 21:28 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-11 21:25 [dpdk-stable] patch 'net/qede: fix setting MTU' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/qede: fix setting VLAN strip mode' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: support packet type with NEON' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: fix MACsec setting' " Kevin Traynor
2019-12-12  2:42   ` Sun, GuinanX
2019-12-12 10:01     ` Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: fix performance drop caused by MACsec' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: fix link status' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/bnxt: fix debug log level' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix L4 checksum indication in non-vector Rx' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix IP checksum error indication' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'vhost: do not limit packed ring size' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'vhost: fix build dependency on hash lib' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/virtio-user: fix setting filters' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/mlx5: allow pattern start from IP' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: fix expand RSS flows' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: fix item expansion for RSS flow' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: fix last item detection on RSS flow expand' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'eal: add ack interrupt API' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/qede: use ack in interrupt handlers' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/enic: re-enable link status change interrupt' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/sfc: fix adapter lock usage on rule creation' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/testpmd: block xstats for hidden ports' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/dpaa2: fix Rx offload flags on jumbo MTU set' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/vm_power: fix OOB frequency oscillations' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'bus/pci: align next mapping address on page boundary' " Kevin Traynor
2019-12-11 21:26 ` Kevin Traynor [this message]
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix internal links for older releases' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix link to AESNI mb external library' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc/guides: clean repeated words' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'mempool: use actual IOVA addresses when populating' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'build: remove unneeded meson option' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'lib: fix log typos' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'lib: fix doxygen " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'malloc: fix realloc copy size' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'malloc: fix realloc padded element " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/ipsec-secgw: fix default configuration' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/fips_validation: fix auth verify' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/mlx5: fix check of RSS queue index' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix crash in xstats get' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bonding: fix selection logic' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: avoid undefined behaviour on configuration copy' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix resource qcaps with older FW' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/testpmd: report invalid command line parameter' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples: hide error for missing pkg-config path flag' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'common/octeontx: add missing public symbol' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/testpmd: fix invalid port detaching' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'power: handle frequency increase with turbo disabled' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'mk: remove library search path from binary' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/multi_process: check server port validity' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/multi_process: fix client crash with sparse ports' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/eventdev: fix divide by zero' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/eventdev: check function errors' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/crypto-perf: fix input of AEAD decrypt' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix l2fwd-crypto usage in CCP guide' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix maximum queues and burst size' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix CPU authentication crash' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix scheduling of burst' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix digest size capabilities' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'malloc: fix memory element size in case of padding' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'eal: fix header file install with meson' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/virtio-user: drop attribute unused for memory callback' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix tap guide' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/e1000: fix link status update' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/ixgbe: fix link status' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/e1000: " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/ifc: check VFIO query error' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: limit maximum number of queues' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'event/octeontx: fix partial Rx packet handling' " Kevin Traynor
2019-12-11 21:27 ` [dpdk-stable] patch 'test/service: fix wait for service core' " Kevin Traynor
2019-12-11 21:27 ` [dpdk-stable] patch 'usertools: fix typo in SPDX tag of telemetry script' " Kevin Traynor
2019-12-11 21:27 ` [dpdk-stable] patch 'doc: update arm64 cross build tool version' " Kevin Traynor

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=20191211212702.27851-25-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=david.marchand@redhat.com \
    --cc=kkanas@marvell.com \
    --cc=stable@dpdk.org \
    /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).