netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] udp: Move the udp sysctl to namespace.
@ 2018-03-13  9:57 Tonghao Zhang
  2018-03-13  9:57 ` [PATCH 2/2] doc: Change the udp/sctp rmem/wmem default value Tonghao Zhang
  2018-03-13 11:36 ` [PATCH 1/2] udp: Move the udp sysctl to namespace Paolo Abeni
  0 siblings, 2 replies; 4+ messages in thread
From: Tonghao Zhang @ 2018-03-13  9:57 UTC (permalink / raw)
  To: davem, rshearma, edumazet; +Cc: netdev, Tonghao Zhang

This patch moves the udp_rmem_min, udp_wmem_min
to namespace and init the udp_l3mdev_accept explicitly.

Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
 include/net/netns/ipv4.h   |  3 ++
 net/ipv4/sysctl_net_ipv4.c | 32 ++++++++---------
 net/ipv4/udp.c             | 86 +++++++++++++++++++++++++++-------------------
 net/ipv6/udp.c             | 52 ++++++++++++++--------------
 4 files changed, 96 insertions(+), 77 deletions(-)

diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index 3a970e4..382bfd7 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -168,6 +168,9 @@ struct netns_ipv4 {
 	atomic_t tfo_active_disable_times;
 	unsigned long tfo_active_disable_stamp;
 
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+
 #ifdef CONFIG_NET_L3_MASTER_DEV
 	int sysctl_udp_l3mdev_accept;
 #endif
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index 011de9a..5b72d97 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -520,22 +520,6 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
 		.mode		= 0644,
 		.proc_handler	= proc_doulongvec_minmax,
 	},
-	{
-		.procname	= "udp_rmem_min",
-		.data		= &sysctl_udp_rmem_min,
-		.maxlen		= sizeof(sysctl_udp_rmem_min),
-		.mode		= 0644,
-		.proc_handler	= proc_dointvec_minmax,
-		.extra1		= &one
-	},
-	{
-		.procname	= "udp_wmem_min",
-		.data		= &sysctl_udp_wmem_min,
-		.maxlen		= sizeof(sysctl_udp_wmem_min),
-		.mode		= 0644,
-		.proc_handler	= proc_dointvec_minmax,
-		.extra1		= &one
-	},
 	{ }
 };
 
@@ -1167,6 +1151,22 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
 		.proc_handler	= proc_dointvec_minmax,
 		.extra1		= &one,
 	},
+	{
+		.procname	= "udp_rmem_min",
+		.data		= &init_net.ipv4.sysctl_udp_rmem_min,
+		.maxlen		= sizeof(init_net.ipv4.sysctl_udp_rmem_min),
+		.mode		= 0644,
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &one
+	},
+	{
+		.procname	= "udp_wmem_min",
+		.data		= &init_net.ipv4.sysctl_udp_wmem_min,
+		.maxlen		= sizeof(init_net.ipv4.sysctl_udp_wmem_min),
+		.mode		= 0644,
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &one
+	},
 	{ }
 };
 
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 3013404..7ae77f2 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -122,12 +122,6 @@
 long sysctl_udp_mem[3] __read_mostly;
 EXPORT_SYMBOL(sysctl_udp_mem);
 
-int sysctl_udp_rmem_min __read_mostly;
-EXPORT_SYMBOL(sysctl_udp_rmem_min);
-
-int sysctl_udp_wmem_min __read_mostly;
-EXPORT_SYMBOL(sysctl_udp_wmem_min);
-
 atomic_long_t udp_memory_allocated;
 EXPORT_SYMBOL(udp_memory_allocated);
 
@@ -2533,35 +2527,35 @@ int udp_abort(struct sock *sk, int err)
 EXPORT_SYMBOL_GPL(udp_abort);
 
 struct proto udp_prot = {
-	.name		   = "UDP",
-	.owner		   = THIS_MODULE,
-	.close		   = udp_lib_close,
-	.connect	   = ip4_datagram_connect,
-	.disconnect	   = udp_disconnect,
-	.ioctl		   = udp_ioctl,
-	.init		   = udp_init_sock,
-	.destroy	   = udp_destroy_sock,
-	.setsockopt	   = udp_setsockopt,
-	.getsockopt	   = udp_getsockopt,
-	.sendmsg	   = udp_sendmsg,
-	.recvmsg	   = udp_recvmsg,
-	.sendpage	   = udp_sendpage,
-	.release_cb	   = ip4_datagram_release_cb,
-	.hash		   = udp_lib_hash,
-	.unhash		   = udp_lib_unhash,
-	.rehash		   = udp_v4_rehash,
-	.get_port	   = udp_v4_get_port,
-	.memory_allocated  = &udp_memory_allocated,
-	.sysctl_mem	   = sysctl_udp_mem,
-	.sysctl_wmem	   = &sysctl_udp_wmem_min,
-	.sysctl_rmem	   = &sysctl_udp_rmem_min,
-	.obj_size	   = sizeof(struct udp_sock),
-	.h.udp_table	   = &udp_table,
+	.name			= "UDP",
+	.owner			= THIS_MODULE,
+	.close			= udp_lib_close,
+	.connect		= ip4_datagram_connect,
+	.disconnect		= udp_disconnect,
+	.ioctl			= udp_ioctl,
+	.init			= udp_init_sock,
+	.destroy		= udp_destroy_sock,
+	.setsockopt		= udp_setsockopt,
+	.getsockopt		= udp_getsockopt,
+	.sendmsg		= udp_sendmsg,
+	.recvmsg		= udp_recvmsg,
+	.sendpage		= udp_sendpage,
+	.release_cb		= ip4_datagram_release_cb,
+	.hash			= udp_lib_hash,
+	.unhash			= udp_lib_unhash,
+	.rehash			= udp_v4_rehash,
+	.get_port		= udp_v4_get_port,
+	.memory_allocated	= &udp_memory_allocated,
+	.sysctl_mem		= sysctl_udp_mem,
+	.sysctl_wmem_offset	= offsetof(struct net, ipv4.sysctl_udp_wmem_min),
+	.sysctl_rmem_offset	= offsetof(struct net, ipv4.sysctl_udp_rmem_min),
+	.obj_size		= sizeof(struct udp_sock),
+	.h.udp_table		= &udp_table,
 #ifdef CONFIG_COMPAT
-	.compat_setsockopt = compat_udp_setsockopt,
-	.compat_getsockopt = compat_udp_getsockopt,
+	.compat_setsockopt	= compat_udp_setsockopt,
+	.compat_getsockopt	= compat_udp_getsockopt,
 #endif
-	.diag_destroy	   = udp_abort,
+	.diag_destroy		= udp_abort,
 };
 EXPORT_SYMBOL(udp_prot);
 
@@ -2831,6 +2825,21 @@ u32 udp_flow_hashrnd(void)
 }
 EXPORT_SYMBOL(udp_flow_hashrnd);
 
+static int __net_init udp_sysctl_init(struct net *net)
+{
+	net->ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
+	net->ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
+
+#ifdef CONFIG_NET_L3_MASTER_DEV
+	net->ipv4.sysctl_udp_l3mdev_accept = 0;
+#endif
+	return 0;
+}
+
+static struct pernet_operations __net_initdata udp_sysctl_ops = {
+	.init       = udp_sysctl_init,
+};
+
 void __init udp_init(void)
 {
 	unsigned long limit;
@@ -2843,8 +2852,12 @@ void __init udp_init(void)
 	sysctl_udp_mem[1] = limit;
 	sysctl_udp_mem[2] = sysctl_udp_mem[0] * 2;
 
-	sysctl_udp_rmem_min = SK_MEM_QUANTUM;
-	sysctl_udp_wmem_min = SK_MEM_QUANTUM;
+	init_net.ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
+	init_net.ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
+
+#ifdef CONFIG_NET_L3_MASTER_DEV
+	init_net.ipv4.sysctl_udp_l3mdev_accept = 0;
+#endif
 
 	/* 16 spinlocks per cpu */
 	udp_busylocks_log = ilog2(nr_cpu_ids) + 4;
@@ -2854,4 +2867,7 @@ void __init udp_init(void)
 		panic("UDP: failed to alloc udp_busylocks\n");
 	for (i = 0; i < (1U << udp_busylocks_log); i++)
 		spin_lock_init(udp_busylocks + i);
+
+	if (register_pernet_subsys(&udp_sysctl_ops))
+		panic("UDP: failed to init sysctl parameters.\n");
 }
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 52e3ea0..ad30f5e 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1509,34 +1509,34 @@ void udp6_proc_exit(struct net *net)
 /* ------------------------------------------------------------------------ */
 
 struct proto udpv6_prot = {
-	.name		   = "UDPv6",
-	.owner		   = THIS_MODULE,
-	.close		   = udp_lib_close,
-	.connect	   = ip6_datagram_connect,
-	.disconnect	   = udp_disconnect,
-	.ioctl		   = udp_ioctl,
-	.init		   = udp_init_sock,
-	.destroy	   = udpv6_destroy_sock,
-	.setsockopt	   = udpv6_setsockopt,
-	.getsockopt	   = udpv6_getsockopt,
-	.sendmsg	   = udpv6_sendmsg,
-	.recvmsg	   = udpv6_recvmsg,
-	.release_cb	   = ip6_datagram_release_cb,
-	.hash		   = udp_lib_hash,
-	.unhash		   = udp_lib_unhash,
-	.rehash		   = udp_v6_rehash,
-	.get_port	   = udp_v6_get_port,
-	.memory_allocated  = &udp_memory_allocated,
-	.sysctl_mem	   = sysctl_udp_mem,
-	.sysctl_wmem	   = &sysctl_udp_wmem_min,
-	.sysctl_rmem	   = &sysctl_udp_rmem_min,
-	.obj_size	   = sizeof(struct udp6_sock),
-	.h.udp_table	   = &udp_table,
+	.name			= "UDPv6",
+	.owner			= THIS_MODULE,
+	.close			= udp_lib_close,
+	.connect		= ip6_datagram_connect,
+	.disconnect		= udp_disconnect,
+	.ioctl			= udp_ioctl,
+	.init			= udp_init_sock,
+	.destroy		= udpv6_destroy_sock,
+	.setsockopt		= udpv6_setsockopt,
+	.getsockopt		= udpv6_getsockopt,
+	.sendmsg		= udpv6_sendmsg,
+	.recvmsg		= udpv6_recvmsg,
+	.release_cb		= ip6_datagram_release_cb,
+	.hash			= udp_lib_hash,
+	.unhash			= udp_lib_unhash,
+	.rehash			= udp_v6_rehash,
+	.get_port		= udp_v6_get_port,
+	.memory_allocated	= &udp_memory_allocated,
+	.sysctl_mem		= sysctl_udp_mem,
+	.sysctl_wmem_offset     = offsetof(struct net, ipv4.sysctl_udp_wmem_min),
+	.sysctl_rmem_offset     = offsetof(struct net, ipv4.sysctl_udp_rmem_min),
+	.obj_size		= sizeof(struct udp6_sock),
+	.h.udp_table		= &udp_table,
 #ifdef CONFIG_COMPAT
-	.compat_setsockopt = compat_udpv6_setsockopt,
-	.compat_getsockopt = compat_udpv6_getsockopt,
+	.compat_setsockopt	= compat_udpv6_setsockopt,
+	.compat_getsockopt	= compat_udpv6_getsockopt,
 #endif
-	.diag_destroy      = udp_abort,
+	.diag_destroy		= udp_abort,
 };
 
 static struct inet_protosw udpv6_protosw = {
-- 
1.8.3.1

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

* [PATCH 2/2] doc: Change the udp/sctp rmem/wmem default value.
  2018-03-13  9:57 [PATCH 1/2] udp: Move the udp sysctl to namespace Tonghao Zhang
@ 2018-03-13  9:57 ` Tonghao Zhang
  2018-03-13 11:36 ` [PATCH 1/2] udp: Move the udp sysctl to namespace Paolo Abeni
  1 sibling, 0 replies; 4+ messages in thread
From: Tonghao Zhang @ 2018-03-13  9:57 UTC (permalink / raw)
  To: davem, rshearma, edumazet; +Cc: netdev, Tonghao Zhang

The SK_MEM_QUANTUM was changed from PAGE_SIZE to 4096.

Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
 Documentation/networking/ip-sysctl.txt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 783675a..1d11207 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -755,13 +755,13 @@ udp_rmem_min - INTEGER
 	Minimal size of receive buffer used by UDP sockets in moderation.
 	Each UDP socket is able to use the size for receiving data, even if
 	total pages of UDP sockets exceed udp_mem pressure. The unit is byte.
-	Default: 1 page
+	Default: 4K
 
 udp_wmem_min - INTEGER
 	Minimal size of send buffer used by UDP sockets in moderation.
 	Each UDP socket is able to use the size for sending data, even if
 	total pages of UDP sockets exceed udp_mem pressure. The unit is byte.
-	Default: 1 page
+	Default: 4K
 
 CIPSOv4 Variables:
 
@@ -2101,7 +2101,7 @@ sctp_rmem - vector of 3 INTEGERs: min, default, max
 	It is guaranteed to each SCTP socket (but not association) even
 	under moderate memory pressure.
 
-	Default: 1 page
+	Default: 4K
 
 sctp_wmem  - vector of 3 INTEGERs: min, default, max
 	Currently this tunable has no effect.
-- 
1.8.3.1

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

* Re: [PATCH 1/2] udp: Move the udp sysctl to namespace.
  2018-03-13  9:57 [PATCH 1/2] udp: Move the udp sysctl to namespace Tonghao Zhang
  2018-03-13  9:57 ` [PATCH 2/2] doc: Change the udp/sctp rmem/wmem default value Tonghao Zhang
@ 2018-03-13 11:36 ` Paolo Abeni
  2018-03-13 13:06   ` Tonghao Zhang
  1 sibling, 1 reply; 4+ messages in thread
From: Paolo Abeni @ 2018-03-13 11:36 UTC (permalink / raw)
  To: Tonghao Zhang, davem, rshearma, edumazet; +Cc: netdev

Hi,

On Tue, 2018-03-13 at 02:57 -0700, Tonghao Zhang wrote:
> This patch moves the udp_rmem_min, udp_wmem_min
> to namespace and init the udp_l3mdev_accept explicitly.

Can you please be a little more descriptive on why this is
needed/helpful?

> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
> ---
>  include/net/netns/ipv4.h   |  3 ++
>  net/ipv4/sysctl_net_ipv4.c | 32 ++++++++---------
>  net/ipv4/udp.c             | 86 +++++++++++++++++++++++++++-------------------
>  net/ipv6/udp.c             | 52 ++++++++++++++--------------
>  4 files changed, 96 insertions(+), 77 deletions(-)
> 
> diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
> index 3a970e4..382bfd7 100644
> --- a/include/net/netns/ipv4.h
> +++ b/include/net/netns/ipv4.h
> @@ -168,6 +168,9 @@ struct netns_ipv4 {
>  	atomic_t tfo_active_disable_times;
>  	unsigned long tfo_active_disable_stamp;
>  
> +	int sysctl_udp_wmem_min;
> +	int sysctl_udp_rmem_min;
> +
>  #ifdef CONFIG_NET_L3_MASTER_DEV
>  	int sysctl_udp_l3mdev_accept;
>  #endif
> diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
> index 011de9a..5b72d97 100644
> --- a/net/ipv4/sysctl_net_ipv4.c
> +++ b/net/ipv4/sysctl_net_ipv4.c
> @@ -520,22 +520,6 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
>  		.mode		= 0644,
>  		.proc_handler	= proc_doulongvec_minmax,
>  	},
> -	{
> -		.procname	= "udp_rmem_min",
> -		.data		= &sysctl_udp_rmem_min,
> -		.maxlen		= sizeof(sysctl_udp_rmem_min),
> -		.mode		= 0644,
> -		.proc_handler	= proc_dointvec_minmax,
> -		.extra1		= &one
> -	},
> -	{
> -		.procname	= "udp_wmem_min",
> -		.data		= &sysctl_udp_wmem_min,
> -		.maxlen		= sizeof(sysctl_udp_wmem_min),
> -		.mode		= 0644,
> -		.proc_handler	= proc_dointvec_minmax,
> -		.extra1		= &one
> -	},
>  	{ }
>  };
>  
> @@ -1167,6 +1151,22 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
>  		.proc_handler	= proc_dointvec_minmax,
>  		.extra1		= &one,
>  	},
> +	{
> +		.procname	= "udp_rmem_min",
> +		.data		= &init_net.ipv4.sysctl_udp_rmem_min,
> +		.maxlen		= sizeof(init_net.ipv4.sysctl_udp_rmem_min),
> +		.mode		= 0644,
> +		.proc_handler	= proc_dointvec_minmax,
> +		.extra1		= &one
> +	},
> +	{
> +		.procname	= "udp_wmem_min",
> +		.data		= &init_net.ipv4.sysctl_udp_wmem_min,
> +		.maxlen		= sizeof(init_net.ipv4.sysctl_udp_wmem_min),
> +		.mode		= 0644,
> +		.proc_handler	= proc_dointvec_minmax,
> +		.extra1		= &one
> +	},
>  	{ }
>  };
>  
> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
> index 3013404..7ae77f2 100644
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> @@ -122,12 +122,6 @@
>  long sysctl_udp_mem[3] __read_mostly;
>  EXPORT_SYMBOL(sysctl_udp_mem);
>  
> -int sysctl_udp_rmem_min __read_mostly;
> -EXPORT_SYMBOL(sysctl_udp_rmem_min);
> -
> -int sysctl_udp_wmem_min __read_mostly;
> -EXPORT_SYMBOL(sysctl_udp_wmem_min);
> -
>  atomic_long_t udp_memory_allocated;
>  EXPORT_SYMBOL(udp_memory_allocated);
>  
> @@ -2533,35 +2527,35 @@ int udp_abort(struct sock *sk, int err)
>  EXPORT_SYMBOL_GPL(udp_abort);
>  
>  struct proto udp_prot = {
> -	.name		   = "UDP",
> -	.owner		   = THIS_MODULE,
> -	.close		   = udp_lib_close,
> -	.connect	   = ip4_datagram_connect,
> -	.disconnect	   = udp_disconnect,
> -	.ioctl		   = udp_ioctl,
> -	.init		   = udp_init_sock,
> -	.destroy	   = udp_destroy_sock,
> -	.setsockopt	   = udp_setsockopt,
> -	.getsockopt	   = udp_getsockopt,
> -	.sendmsg	   = udp_sendmsg,
> -	.recvmsg	   = udp_recvmsg,
> -	.sendpage	   = udp_sendpage,
> -	.release_cb	   = ip4_datagram_release_cb,
> -	.hash		   = udp_lib_hash,
> -	.unhash		   = udp_lib_unhash,
> -	.rehash		   = udp_v4_rehash,
> -	.get_port	   = udp_v4_get_port,
> -	.memory_allocated  = &udp_memory_allocated,
> -	.sysctl_mem	   = sysctl_udp_mem,
> -	.sysctl_wmem	   = &sysctl_udp_wmem_min,
> -	.sysctl_rmem	   = &sysctl_udp_rmem_min,
> -	.obj_size	   = sizeof(struct udp_sock),
> -	.h.udp_table	   = &udp_table,
> +	.name			= "UDP",
> +	.owner			= THIS_MODULE,
> +	.close			= udp_lib_close,
> +	.connect		= ip4_datagram_connect,
> +	.disconnect		= udp_disconnect,
> +	.ioctl			= udp_ioctl,
> +	.init			= udp_init_sock,
> +	.destroy		= udp_destroy_sock,
> +	.setsockopt		= udp_setsockopt,
> +	.getsockopt		= udp_getsockopt,
> +	.sendmsg		= udp_sendmsg,
> +	.recvmsg		= udp_recvmsg,
> +	.sendpage		= udp_sendpage,
> +	.release_cb		= ip4_datagram_release_cb,
> +	.hash			= udp_lib_hash,
> +	.unhash			= udp_lib_unhash,
> +	.rehash			= udp_v4_rehash,
> +	.get_port		= udp_v4_get_port,
> +	.memory_allocated	= &udp_memory_allocated,
> +	.sysctl_mem		= sysctl_udp_mem,
> +	.sysctl_wmem_offset	= offsetof(struct net, ipv4.sysctl_udp_wmem_min),
> +	.sysctl_rmem_offset	= offsetof(struct net, ipv4.sysctl_udp_rmem_min),
> +	.obj_size		= sizeof(struct udp_sock),
> +	.h.udp_table		= &udp_table,
>  #ifdef CONFIG_COMPAT
> -	.compat_setsockopt = compat_udp_setsockopt,
> -	.compat_getsockopt = compat_udp_getsockopt,
> +	.compat_setsockopt	= compat_udp_setsockopt,
> +	.compat_getsockopt	= compat_udp_getsockopt,
>  #endif
> -	.diag_destroy	   = udp_abort,
> +	.diag_destroy		= udp_abort,
>  };
>  EXPORT_SYMBOL(udp_prot);
>  
> @@ -2831,6 +2825,21 @@ u32 udp_flow_hashrnd(void)
>  }
>  EXPORT_SYMBOL(udp_flow_hashrnd);
>  
> +static int __net_init udp_sysctl_init(struct net *net)
> +{
> +	net->ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
> +	net->ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
> +
> +#ifdef CONFIG_NET_L3_MASTER_DEV
> +	net->ipv4.sysctl_udp_l3mdev_accept = 0;
> +#endif
> +	return 0;
> +}
> +
> +static struct pernet_operations __net_initdata udp_sysctl_ops = {
> +	.init       = udp_sysctl_init,
> +};
> +
>  void __init udp_init(void)
>  {
>  	unsigned long limit;
> @@ -2843,8 +2852,12 @@ void __init udp_init(void)
>  	sysctl_udp_mem[1] = limit;
>  	sysctl_udp_mem[2] = sysctl_udp_mem[0] * 2;
>  
> -	sysctl_udp_rmem_min = SK_MEM_QUANTUM;
> -	sysctl_udp_wmem_min = SK_MEM_QUANTUM;
> +	init_net.ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
> +	init_net.ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
> +
> +#ifdef CONFIG_NET_L3_MASTER_DEV
> +	init_net.ipv4.sysctl_udp_l3mdev_accept = 0;
> +#endif

You can avoid the code duplication here - and in udp_sysctl_init() -
using a common helper.

Thanks,

Paolo

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

* Re: [PATCH 1/2] udp: Move the udp sysctl to namespace.
  2018-03-13 11:36 ` [PATCH 1/2] udp: Move the udp sysctl to namespace Paolo Abeni
@ 2018-03-13 13:06   ` Tonghao Zhang
  0 siblings, 0 replies; 4+ messages in thread
From: Tonghao Zhang @ 2018-03-13 13:06 UTC (permalink / raw)
  To: Paolo Abeni
  Cc: David Miller, rshearma, Eric Dumazet, Linux Kernel Network Developers

On Tue, Mar 13, 2018 at 7:36 PM, Paolo Abeni <pabeni@redhat.com> wrote:
> Hi,
>
> On Tue, 2018-03-13 at 02:57 -0700, Tonghao Zhang wrote:
>> This patch moves the udp_rmem_min, udp_wmem_min
>> to namespace and init the udp_l3mdev_accept explicitly.
>
> Can you please be a little more descriptive on why this is
> needed/helpful?
Thanks for your reply. In our machine, there are many dockers. The different
dockers may run the different services which require rx queue.

All the dockers in a machine share the .sysctl_mem, so we can mov the
udp_wmem_min/udp_rmem_min, which affect rx queue,  to namespace,
then docker can set it differently.

>> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
>> ---
>>  include/net/netns/ipv4.h   |  3 ++
>>  net/ipv4/sysctl_net_ipv4.c | 32 ++++++++---------
>>  net/ipv4/udp.c             | 86 +++++++++++++++++++++++++++-------------------
>>  net/ipv6/udp.c             | 52 ++++++++++++++--------------
>>  4 files changed, 96 insertions(+), 77 deletions(-)
>>
>> diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
>> index 3a970e4..382bfd7 100644
>> --- a/include/net/netns/ipv4.h
>> +++ b/include/net/netns/ipv4.h
>> @@ -168,6 +168,9 @@ struct netns_ipv4 {
>>       atomic_t tfo_active_disable_times;
>>       unsigned long tfo_active_disable_stamp;
>>
>> +     int sysctl_udp_wmem_min;
>> +     int sysctl_udp_rmem_min;
>> +
>>  #ifdef CONFIG_NET_L3_MASTER_DEV
>>       int sysctl_udp_l3mdev_accept;
>>  #endif
>> diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
>> index 011de9a..5b72d97 100644
>> --- a/net/ipv4/sysctl_net_ipv4.c
>> +++ b/net/ipv4/sysctl_net_ipv4.c
>> @@ -520,22 +520,6 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
>>               .mode           = 0644,
>>               .proc_handler   = proc_doulongvec_minmax,
>>       },
>> -     {
>> -             .procname       = "udp_rmem_min",
>> -             .data           = &sysctl_udp_rmem_min,
>> -             .maxlen         = sizeof(sysctl_udp_rmem_min),
>> -             .mode           = 0644,
>> -             .proc_handler   = proc_dointvec_minmax,
>> -             .extra1         = &one
>> -     },
>> -     {
>> -             .procname       = "udp_wmem_min",
>> -             .data           = &sysctl_udp_wmem_min,
>> -             .maxlen         = sizeof(sysctl_udp_wmem_min),
>> -             .mode           = 0644,
>> -             .proc_handler   = proc_dointvec_minmax,
>> -             .extra1         = &one
>> -     },
>>       { }
>>  };
>>
>> @@ -1167,6 +1151,22 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
>>               .proc_handler   = proc_dointvec_minmax,
>>               .extra1         = &one,
>>       },
>> +     {
>> +             .procname       = "udp_rmem_min",
>> +             .data           = &init_net.ipv4.sysctl_udp_rmem_min,
>> +             .maxlen         = sizeof(init_net.ipv4.sysctl_udp_rmem_min),
>> +             .mode           = 0644,
>> +             .proc_handler   = proc_dointvec_minmax,
>> +             .extra1         = &one
>> +     },
>> +     {
>> +             .procname       = "udp_wmem_min",
>> +             .data           = &init_net.ipv4.sysctl_udp_wmem_min,
>> +             .maxlen         = sizeof(init_net.ipv4.sysctl_udp_wmem_min),
>> +             .mode           = 0644,
>> +             .proc_handler   = proc_dointvec_minmax,
>> +             .extra1         = &one
>> +     },
>>       { }
>>  };
>>
>> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
>> index 3013404..7ae77f2 100644
>> --- a/net/ipv4/udp.c
>> +++ b/net/ipv4/udp.c
>> @@ -122,12 +122,6 @@
>>  long sysctl_udp_mem[3] __read_mostly;
>>  EXPORT_SYMBOL(sysctl_udp_mem);
>>
>> -int sysctl_udp_rmem_min __read_mostly;
>> -EXPORT_SYMBOL(sysctl_udp_rmem_min);
>> -
>> -int sysctl_udp_wmem_min __read_mostly;
>> -EXPORT_SYMBOL(sysctl_udp_wmem_min);
>> -
>>  atomic_long_t udp_memory_allocated;
>>  EXPORT_SYMBOL(udp_memory_allocated);
>>
>> @@ -2533,35 +2527,35 @@ int udp_abort(struct sock *sk, int err)
>>  EXPORT_SYMBOL_GPL(udp_abort);
>>
>>  struct proto udp_prot = {
>> -     .name              = "UDP",
>> -     .owner             = THIS_MODULE,
>> -     .close             = udp_lib_close,
>> -     .connect           = ip4_datagram_connect,
>> -     .disconnect        = udp_disconnect,
>> -     .ioctl             = udp_ioctl,
>> -     .init              = udp_init_sock,
>> -     .destroy           = udp_destroy_sock,
>> -     .setsockopt        = udp_setsockopt,
>> -     .getsockopt        = udp_getsockopt,
>> -     .sendmsg           = udp_sendmsg,
>> -     .recvmsg           = udp_recvmsg,
>> -     .sendpage          = udp_sendpage,
>> -     .release_cb        = ip4_datagram_release_cb,
>> -     .hash              = udp_lib_hash,
>> -     .unhash            = udp_lib_unhash,
>> -     .rehash            = udp_v4_rehash,
>> -     .get_port          = udp_v4_get_port,
>> -     .memory_allocated  = &udp_memory_allocated,
>> -     .sysctl_mem        = sysctl_udp_mem,
>> -     .sysctl_wmem       = &sysctl_udp_wmem_min,
>> -     .sysctl_rmem       = &sysctl_udp_rmem_min,
>> -     .obj_size          = sizeof(struct udp_sock),
>> -     .h.udp_table       = &udp_table,
>> +     .name                   = "UDP",
>> +     .owner                  = THIS_MODULE,
>> +     .close                  = udp_lib_close,
>> +     .connect                = ip4_datagram_connect,
>> +     .disconnect             = udp_disconnect,
>> +     .ioctl                  = udp_ioctl,
>> +     .init                   = udp_init_sock,
>> +     .destroy                = udp_destroy_sock,
>> +     .setsockopt             = udp_setsockopt,
>> +     .getsockopt             = udp_getsockopt,
>> +     .sendmsg                = udp_sendmsg,
>> +     .recvmsg                = udp_recvmsg,
>> +     .sendpage               = udp_sendpage,
>> +     .release_cb             = ip4_datagram_release_cb,
>> +     .hash                   = udp_lib_hash,
>> +     .unhash                 = udp_lib_unhash,
>> +     .rehash                 = udp_v4_rehash,
>> +     .get_port               = udp_v4_get_port,
>> +     .memory_allocated       = &udp_memory_allocated,
>> +     .sysctl_mem             = sysctl_udp_mem,
>> +     .sysctl_wmem_offset     = offsetof(struct net, ipv4.sysctl_udp_wmem_min),
>> +     .sysctl_rmem_offset     = offsetof(struct net, ipv4.sysctl_udp_rmem_min),
>> +     .obj_size               = sizeof(struct udp_sock),
>> +     .h.udp_table            = &udp_table,
>>  #ifdef CONFIG_COMPAT
>> -     .compat_setsockopt = compat_udp_setsockopt,
>> -     .compat_getsockopt = compat_udp_getsockopt,
>> +     .compat_setsockopt      = compat_udp_setsockopt,
>> +     .compat_getsockopt      = compat_udp_getsockopt,
>>  #endif
>> -     .diag_destroy      = udp_abort,
>> +     .diag_destroy           = udp_abort,
>>  };
>>  EXPORT_SYMBOL(udp_prot);
>>
>> @@ -2831,6 +2825,21 @@ u32 udp_flow_hashrnd(void)
>>  }
>>  EXPORT_SYMBOL(udp_flow_hashrnd);
>>
>> +static int __net_init udp_sysctl_init(struct net *net)
>> +{
>> +     net->ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
>> +     net->ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
>> +
>> +#ifdef CONFIG_NET_L3_MASTER_DEV
>> +     net->ipv4.sysctl_udp_l3mdev_accept = 0;
>> +#endif
>> +     return 0;
>> +}
>> +
>> +static struct pernet_operations __net_initdata udp_sysctl_ops = {
>> +     .init       = udp_sysctl_init,
>> +};
>> +
>>  void __init udp_init(void)
>>  {
>>       unsigned long limit;
>> @@ -2843,8 +2852,12 @@ void __init udp_init(void)
>>       sysctl_udp_mem[1] = limit;
>>       sysctl_udp_mem[2] = sysctl_udp_mem[0] * 2;
>>
>> -     sysctl_udp_rmem_min = SK_MEM_QUANTUM;
>> -     sysctl_udp_wmem_min = SK_MEM_QUANTUM;
>> +     init_net.ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
>> +     init_net.ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
>> +
>> +#ifdef CONFIG_NET_L3_MASTER_DEV
>> +     init_net.ipv4.sysctl_udp_l3mdev_accept = 0;
>> +#endif
>
> You can avoid the code duplication here - and in udp_sysctl_init() -
> using a common helper.
Yes, great, I will send v2

> Thanks,
>
> Paolo

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

end of thread, other threads:[~2018-03-13 13:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-13  9:57 [PATCH 1/2] udp: Move the udp sysctl to namespace Tonghao Zhang
2018-03-13  9:57 ` [PATCH 2/2] doc: Change the udp/sctp rmem/wmem default value Tonghao Zhang
2018-03-13 11:36 ` [PATCH 1/2] udp: Move the udp sysctl to namespace Paolo Abeni
2018-03-13 13:06   ` Tonghao Zhang

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).