public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH 0/4] netstress: new option and some enhancements
@ 2019-02-11 18:07 Alexey Kodanev
  2019-02-11 18:07 ` [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag Alexey Kodanev
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-11 18:07 UTC (permalink / raw)
  To: ltp

Mainly, for UDP protocol.

Alexey Kodanev (4):
  netstress: support SO_REUSEPORT with new 'P' flag
  netstress: allow setting MSG_ZEROCOPY for other protocols
  netstress: handle zero length message for datagram sockets
  netstress: increase timeout errors counter

 testcases/network/netstress/netstress.c |   39 ++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 11 deletions(-)


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

* [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag
  2019-02-11 18:07 [LTP] [PATCH 0/4] netstress: new option and some enhancements Alexey Kodanev
@ 2019-02-11 18:07 ` Alexey Kodanev
  2019-02-14 23:21   ` Petr Vorel
  2019-02-11 18:07 ` [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols Alexey Kodanev
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-11 18:07 UTC (permalink / raw)
  To: ltp

netstress tool can be used manually by setting -P flag for
a server. There is no test-case yet that specifically
auto tests this functionality or uses it, but it should be
easy to create one. For example, starting multiple netstress
instances on the same port.

Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
 testcases/network/netstress/netstress.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
index 2c5a6bd..2cdc91a 100644
--- a/testcases/network/netstress/netstress.c
+++ b/testcases/network/netstress/netstress.c
@@ -147,6 +147,7 @@ struct sock_info {
 
 static char *zcopy;
 static int send_flags = MSG_NOSIGNAL;
+static char *reuse_port;
 
 static void init_socket_opts(int sd)
 {
@@ -308,6 +309,8 @@ static void bind_before_connect(int sd)
 
 	if (bind_no_port)
 		SAFE_SETSOCKOPT_INT(sd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, 1);
+	if (reuse_port)
+		SAFE_SETSOCKOPT_INT(sd, SOL_SOCKET, SO_REUSEPORT, 1);
 
 	SAFE_BIND(sd, local_addrinfo->ai_addr, local_addrinfo->ai_addrlen);
 
@@ -674,6 +677,8 @@ static void server_init(void)
 	/* IPv6 socket is also able to access IPv4 protocol stack */
 	sfd = SAFE_SOCKET(family, sock_type, protocol);
 	SAFE_SETSOCKOPT_INT(sfd, SOL_SOCKET, SO_REUSEADDR, 1);
+	if (reuse_port)
+		SAFE_SETSOCKOPT_INT(sfd, SOL_SOCKET, SO_REUSEPORT, 1);
 
 	tst_res(TINFO, "assigning a name to the server socket...");
 	SAFE_BIND(sfd, local_addrinfo->ai_addr, local_addrinfo->ai_addrlen);
@@ -996,6 +1001,7 @@ static struct tst_option options[] = {
 	{"b:", &barg, "-b x     x - low latency busy poll timeout"},
 	{"T:", &type, "-T x     tcp (default), udp, udp_lite, dccp, sctp"},
 	{"z", &zcopy, "-z       enable SO_ZEROCOPY"},
+	{"P:", &reuse_port, "-P       enable SO_REUSEPORT"},
 	{"D:", &dev, "-d x     bind to device x\n"},
 
 	{"H:", &server_addr, "Client:\n-H x     Server name or IP address"},
-- 
1.7.1


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

* [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols
  2019-02-11 18:07 [LTP] [PATCH 0/4] netstress: new option and some enhancements Alexey Kodanev
  2019-02-11 18:07 ` [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag Alexey Kodanev
@ 2019-02-11 18:07 ` Alexey Kodanev
  2019-02-14 23:34   ` Petr Vorel
  2019-02-11 18:07 ` [LTP] [PATCH 3/4] netstress: handle zero length message for datagram sockets Alexey Kodanev
  2019-02-11 18:07 ` [LTP] [PATCH 4/4] netstress: increase timeout errors counter Alexey Kodanev
  3 siblings, 1 reply; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-11 18:07 UTC (permalink / raw)
  To: ltp

Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
 testcases/network/netstress/netstress.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
index 2cdc91a..63d02c9 100644
--- a/testcases/network/netstress/netstress.c
+++ b/testcases/network/netstress/netstress.c
@@ -942,13 +942,14 @@ static void setup(void)
 		}
 	}
 
+	if (zcopy)
+		send_flags |= MSG_ZEROCOPY;
+
 	switch (proto_type) {
 	case TYPE_TCP:
 		tst_res(TINFO, "TCP %s is using %s TCP API.",
 			(client_mode) ? "client" : "server",
 			(fastopen_api) ? "Fastopen" : "old");
-		if (zcopy)
-			send_flags |= MSG_ZEROCOPY;
 		check_tfo_value();
 	break;
 	case TYPE_UDP:
-- 
1.7.1


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

* [LTP] [PATCH 3/4] netstress: handle zero length message for datagram sockets
  2019-02-11 18:07 [LTP] [PATCH 0/4] netstress: new option and some enhancements Alexey Kodanev
  2019-02-11 18:07 ` [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag Alexey Kodanev
  2019-02-11 18:07 ` [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols Alexey Kodanev
@ 2019-02-11 18:07 ` Alexey Kodanev
  2019-02-11 18:07 ` [LTP] [PATCH 4/4] netstress: increase timeout errors counter Alexey Kodanev
  3 siblings, 0 replies; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-11 18:07 UTC (permalink / raw)
  To: ltp

Don't treat them as errors unless there are too many of them.

Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
 testcases/network/netstress/netstress.c |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
index 63d02c9..63fbaed 100644
--- a/testcases/network/netstress/netstress.c
+++ b/testcases/network/netstress/netstress.c
@@ -89,6 +89,7 @@ static char *source_addr;
 static char *server_bg;
 static int busy_poll		= -1;
 static int max_etime_cnt = 12; /* ~30 sec max timeout if no connection */
+static int max_eshutdown_cnt = 10;
 static int max_pmtu_err = 10;
 
 enum {
@@ -142,6 +143,7 @@ struct sock_info {
 	socklen_t raddr_len;
 	int etime_cnt;
 	int pmtu_err_cnt;
+	int eshutdown_cnt;
 	int timeout;
 };
 
@@ -287,14 +289,22 @@ static int client_recv(char *buf, int srv_msg_len, struct sock_info *i)
 		return 0;
 	}
 
-	if (errno == ETIME && sock_type != SOCK_STREAM) {
-		if (++(i->etime_cnt) > max_etime_cnt)
-			tst_brk(TFAIL, "client requests timeout %d times, last timeout %dms",
-				i->etime_cnt, i->timeout);
-		/* Increase timeout in poll up to 3.2 sec */
-		if (i->timeout < 3000)
-			i->timeout <<= 1;
-		return 0;
+	if (sock_type != SOCK_STREAM) {
+		if (errno == ETIME) {
+			if (++(i->etime_cnt) > max_etime_cnt)
+				tst_brk(TFAIL, "client requests timeout %d times, last timeout %dms",
+					i->etime_cnt, i->timeout);
+			/* Increase timeout in poll up to 3.2 sec */
+			if (i->timeout < 3000)
+				i->timeout <<= 1;
+			return 0;
+		}
+		if (errno == ESHUTDOWN) {
+			if (++(i->eshutdown_cnt) > max_eshutdown_cnt)
+				tst_brk(TFAIL, "too many zero-length msgs");
+			tst_res(TINFO, "%d-length msg on sock %d", len, i->fd);
+			return 0;
+		}
 	}
 
 	SAFE_CLOSE(i->fd);
-- 
1.7.1


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

* [LTP] [PATCH 4/4] netstress: increase timeout errors counter
  2019-02-11 18:07 [LTP] [PATCH 0/4] netstress: new option and some enhancements Alexey Kodanev
                   ` (2 preceding siblings ...)
  2019-02-11 18:07 ` [LTP] [PATCH 3/4] netstress: handle zero length message for datagram sockets Alexey Kodanev
@ 2019-02-11 18:07 ` Alexey Kodanev
  3 siblings, 0 replies; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-11 18:07 UTC (permalink / raw)
  To: ltp

Make sure we avoid false-positives with stress test scenarious.

Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
 testcases/network/netstress/netstress.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
index 63fbaed..06882b1 100644
--- a/testcases/network/netstress/netstress.c
+++ b/testcases/network/netstress/netstress.c
@@ -88,7 +88,7 @@ static char *server_addr	= "localhost";
 static char *source_addr;
 static char *server_bg;
 static int busy_poll		= -1;
-static int max_etime_cnt = 12; /* ~30 sec max timeout if no connection */
+static int max_etime_cnt = 21; /* ~60 sec max timeout if no connection */
 static int max_eshutdown_cnt = 10;
 static int max_pmtu_err = 10;
 
-- 
1.7.1


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

* [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag
  2019-02-11 18:07 ` [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag Alexey Kodanev
@ 2019-02-14 23:21   ` Petr Vorel
  2019-02-15 10:50     ` Alexey Kodanev
  0 siblings, 1 reply; 10+ messages in thread
From: Petr Vorel @ 2019-02-14 23:21 UTC (permalink / raw)
  To: ltp

Hi Alexey,

> netstress tool can be used manually by setting -P flag for
> a server. There is no test-case yet that specifically
> auto tests this functionality or uses it, but it should be
> easy to create one. For example, starting multiple netstress
> instances on the same port.

> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>


Kind regards,
Petr

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

* [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols
  2019-02-11 18:07 ` [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols Alexey Kodanev
@ 2019-02-14 23:34   ` Petr Vorel
  2019-02-15  9:26     ` Alexey Kodanev
  0 siblings, 1 reply; 10+ messages in thread
From: Petr Vorel @ 2019-02-14 23:34 UTC (permalink / raw)
  To: ltp

Hi Alexey,

> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>

> ---
>  testcases/network/netstress/netstress.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)

> diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
> index 2cdc91a..63d02c9 100644
> --- a/testcases/network/netstress/netstress.c
> +++ b/testcases/network/netstress/netstress.c
> @@ -942,13 +942,14 @@ static void setup(void)
>  		}
>  	}

> +	if (zcopy)
> +		send_flags |= MSG_ZEROCOPY;
> +
>  	switch (proto_type) {
>  	case TYPE_TCP:
>  		tst_res(TINFO, "TCP %s is using %s TCP API.",
>  			(client_mode) ? "client" : "server",
>  			(fastopen_api) ? "Fastopen" : "old");
> -		if (zcopy)
> -			send_flags |= MSG_ZEROCOPY;
>  		check_tfo_value();
>  	break;
>  	case TYPE_UDP:

BTW MSG_ZEROCOPY is enabled only for TCP and UDP, but we allow it to be set on
all, which leads to BROK:
./netstress -z -T sctp
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
netstress.c:938: INFO: max requests '3'
netstress.c:990: INFO: SCTP server
netstress.c:693: INFO: assigning a name to the server socket...
netstress.c:700: INFO: bind to port 37196
safe_net.c:186: BROK: netstress.c:717: setsockopt(3, 1, 60, 0x7fff155701a4, 4) failed: ???


Kind regards,
Petr

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

* [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols
  2019-02-14 23:34   ` Petr Vorel
@ 2019-02-15  9:26     ` Alexey Kodanev
  2019-02-15 13:45       ` Petr Vorel
  0 siblings, 1 reply; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-15  9:26 UTC (permalink / raw)
  To: ltp

Hi Petr,

On 15.02.2019 02:34, Petr Vorel wrote:
> Hi Alexey,
> 
>> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>

Thanks for review!

> 
>> ---
>>  testcases/network/netstress/netstress.c |    5 +++--
>>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
>> diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
>> index 2cdc91a..63d02c9 100644
>> --- a/testcases/network/netstress/netstress.c
>> +++ b/testcases/network/netstress/netstress.c
>> @@ -942,13 +942,14 @@ static void setup(void)
>>  		}
>>  	}
> 
>> +	if (zcopy)
>> +		send_flags |= MSG_ZEROCOPY;
>> +
>>  	switch (proto_type) {
>>  	case TYPE_TCP:
>>  		tst_res(TINFO, "TCP %s is using %s TCP API.",
>>  			(client_mode) ? "client" : "server",
>>  			(fastopen_api) ? "Fastopen" : "old");
>> -		if (zcopy)
>> -			send_flags |= MSG_ZEROCOPY;
>>  		check_tfo_value();
>>  	break;
>>  	case TYPE_UDP:
> 
> BTW MSG_ZEROCOPY is enabled only for TCP and UDP, but we allow it to be set on
> all, which leads to BROK:
> ./netstress -z -T sctp
> tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
> netstress.c:938: INFO: max requests '3'
> netstress.c:990: INFO: SCTP server
> netstress.c:693: INFO: assigning a name to the server socket...
> netstress.c:700: INFO: bind to port 37196
> safe_net.c:186: BROK: netstress.c:717: setsockopt(3, 1, 60, 0x7fff155701a4, 4) failed: ???
> 

This is expected fail, I would keep it.

Hmm, there is no error description. I've checked the errno returned and the
kernel sources, found that it is actually returning ENOTSUPP(524). I think it
should rather be EOPNOTSUPP(95), since the error is returned to user-space [1]:

diff --git a/net/core/sock.c b/net/core/sock.c
index 6aa2e7e..f6c57de 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1023,9 +1023,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
                               sk->sk_protocol == IPPROTO_TCP) ||
                              (sk->sk_type == SOCK_DGRAM &&
                               sk->sk_protocol == IPPROTO_UDP)))
-                               ret = -ENOTSUPP;
+                               ret = -EOPNOTSUPP;
                } else if (sk->sk_family != PF_RDS) {
-                       ret = -ENOTSUPP;
+                       ret = -EOPNOTSUPP;
                }
                if (!ret) {
                        if (val < 0 || val > 1)



For LTP library: may be we need to return the actual errno if strerror()
returns nothing?


[1] https://lists.gt.net/linux/kernel/2207071

> 
> Kind regards,
> Petr
> 


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

* [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag
  2019-02-14 23:21   ` Petr Vorel
@ 2019-02-15 10:50     ` Alexey Kodanev
  0 siblings, 0 replies; 10+ messages in thread
From: Alexey Kodanev @ 2019-02-15 10:50 UTC (permalink / raw)
  To: ltp

On 15.02.2019 02:21, Petr Vorel wrote:
> Hi Alexey,
> 
>> netstress tool can be used manually by setting -P flag for
>> a server. There is no test-case yet that specifically
>> auto tests this functionality or uses it, but it should be
>> easy to create one. For example, starting multiple netstress
>> instances on the same port.
> 
>> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>

Patch-set applied, thanks for review Petr!

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

* [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols
  2019-02-15  9:26     ` Alexey Kodanev
@ 2019-02-15 13:45       ` Petr Vorel
  0 siblings, 0 replies; 10+ messages in thread
From: Petr Vorel @ 2019-02-15 13:45 UTC (permalink / raw)
  To: ltp

Hi Alexey,

> > BTW MSG_ZEROCOPY is enabled only for TCP and UDP, but we allow it to be set on
> > all, which leads to BROK:
> > ./netstress -z -T sctp
> > tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
> > netstress.c:938: INFO: max requests '3'
> > netstress.c:990: INFO: SCTP server
> > netstress.c:693: INFO: assigning a name to the server socket...
> > netstress.c:700: INFO: bind to port 37196
> > safe_net.c:186: BROK: netstress.c:717: setsockopt(3, 1, 60, 0x7fff155701a4, 4) failed: ???

> This is expected fail, I would keep it.
Agree, other protocols might gain the support one day.

> Hmm, there is no error description. I've checked the errno returned and the
> kernel sources, found that it is actually returning ENOTSUPP(524). I think it
> should rather be EOPNOTSUPP(95), since the error is returned to user-space [1]:

> diff --git a/net/core/sock.c b/net/core/sock.c
> index 6aa2e7e..f6c57de 100644
> --- a/net/core/sock.c
> +++ b/net/core/sock.c
> @@ -1023,9 +1023,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
>                                sk->sk_protocol == IPPROTO_TCP) ||
>                               (sk->sk_type == SOCK_DGRAM &&
>                                sk->sk_protocol == IPPROTO_UDP)))
> -                               ret = -ENOTSUPP;
> +                               ret = -EOPNOTSUPP;
>                 } else if (sk->sk_family != PF_RDS) {
> -                       ret = -ENOTSUPP;
> +                       ret = -EOPNOTSUPP;
>                 }
>                 if (!ret) {
>                         if (val < 0 || val > 1)
Interesting. IMHO it'd make sense to fix it.

> For LTP library: may be we need to return the actual errno if strerror()
> returns nothing?
yes, that'd be useful. Assume you send a patch.

> [1] https://lists.gt.net/linux/kernel/2207071


Kind regards,
Petr

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

end of thread, other threads:[~2019-02-15 13:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-11 18:07 [LTP] [PATCH 0/4] netstress: new option and some enhancements Alexey Kodanev
2019-02-11 18:07 ` [LTP] [PATCH 1/4] netstress: support SO_REUSEPORT with new 'P' flag Alexey Kodanev
2019-02-14 23:21   ` Petr Vorel
2019-02-15 10:50     ` Alexey Kodanev
2019-02-11 18:07 ` [LTP] [PATCH 2/4] netstress: allow setting MSG_ZEROCOPY for other protocols Alexey Kodanev
2019-02-14 23:34   ` Petr Vorel
2019-02-15  9:26     ` Alexey Kodanev
2019-02-15 13:45       ` Petr Vorel
2019-02-11 18:07 ` [LTP] [PATCH 3/4] netstress: handle zero length message for datagram sockets Alexey Kodanev
2019-02-11 18:07 ` [LTP] [PATCH 4/4] netstress: increase timeout errors counter Alexey Kodanev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox