* [PATCH] net: skip genenerating uevents for network namespaces that are exiting
@ 2016-10-21 2:46 Andrei Vagin
[not found] ` <1477017986-18889-1-git-send-email-avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2016-10-22 21:00 ` David Miller
0 siblings, 2 replies; 6+ messages in thread
From: Andrei Vagin @ 2016-10-21 2:46 UTC (permalink / raw)
To: David S. Miller
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Eric W . Biederman, Andrei Vagin,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
No one can see these events, because a network namespace can not be
destroyed, if it has sockets.
My experiments shows that net namespaces are destroyed more 30% faster
with this optimization.
Here is a perf output for destroying network namespaces without this
patch.
- 94.76% 0.02% kworker/u48:1 [kernel.kallsyms] [k] cleanup_net
- 94.74% cleanup_net
- 94.64% ops_exit_list.isra.4
- 41.61% default_device_exit_batch
- 41.47% unregister_netdevice_many
- rollback_registered_many
- 40.36% netdev_unregister_kobject
- 14.55% device_del
+ 13.71% kobject_uevent
- 13.04% netdev_queue_update_kobjects
+ 12.96% kobject_put
- 12.72% net_rx_queue_update_kobjects
kobject_put
- kobject_release
+ 12.69% kobject_uevent
+ 0.80% call_netdevice_notifiers_info
+ 19.57% nfsd_exit_net
+ 11.15% tcp_net_metrics_exit
+ 8.25% rpcsec_gss_exit_net
It's very critical to optimize the exit path for network namespaces,
because they are destroyed under net_mutex and many namespaces can be
destroyed for one iteration.
Cc: "David S. Miller" <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
Cc: Eric W. Biederman <ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
Signed-off-by: Andrei Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
net/core/net-sysfs.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 6e4f347..c02515e 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -950,10 +950,13 @@ net_rx_queue_update_kobjects(struct net_device *dev, int old_num, int new_num)
}
while (--i >= new_num) {
+ struct kobject *kobj = &dev->_rx[i].kobj;
+
+ if (!list_empty(&dev_net(dev)->exit_list))
+ kobj->uevent_suppress = 1;
if (dev->sysfs_rx_queue_group)
- sysfs_remove_group(&dev->_rx[i].kobj,
- dev->sysfs_rx_queue_group);
- kobject_put(&dev->_rx[i].kobj);
+ sysfs_remove_group(kobj, dev->sysfs_rx_queue_group);
+ kobject_put(kobj);
}
return error;
@@ -1340,6 +1343,8 @@ netdev_queue_update_kobjects(struct net_device *dev, int old_num, int new_num)
while (--i >= new_num) {
struct netdev_queue *queue = dev->_tx + i;
+ if (!list_empty(&dev_net(dev)->exit_list))
+ queue->kobj.uevent_suppress = 1;
#ifdef CONFIG_BQL
sysfs_remove_group(&queue->kobj, &dql_group);
#endif
@@ -1525,6 +1530,9 @@ void netdev_unregister_kobject(struct net_device *ndev)
{
struct device *dev = &(ndev->dev);
+ if (!list_empty(&dev_net(ndev)->exit_list))
+ dev->kobj.uevent_suppress = 1;
+
kobject_get(&dev->kobj);
remove_queue_kobjects(ndev);
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
[parent not found: <1477017986-18889-1-git-send-email-avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>]
* Re: [PATCH] net: skip genenerating uevents for network namespaces that are exiting
[not found] ` <1477017986-18889-1-git-send-email-avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
@ 2016-10-21 3:10 ` Cong Wang
[not found] ` <CAM_iQpVA=W3su_a3OUVSD+19A72TMANnCX4dt9UyLOmVoRuBjQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Cong Wang @ 2016-10-21 3:10 UTC (permalink / raw)
To: Andrei Vagin
Cc: LKML, containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Linux Kernel Network Developers, David S. Miller,
Eric W . Biederman
On Thu, Oct 20, 2016 at 7:46 PM, Andrei Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org> wrote:
> No one can see these events, because a network namespace can not be
> destroyed, if it has sockets.
>
Are you sure? kobject_uevent_env() seems sending uevents to all
network namespaces.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] net: skip genenerating uevents for network namespaces that are exiting
2016-10-21 2:46 [PATCH] net: skip genenerating uevents for network namespaces that are exiting Andrei Vagin
[not found] ` <1477017986-18889-1-git-send-email-avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
@ 2016-10-22 21:00 ` David Miller
1 sibling, 0 replies; 6+ messages in thread
From: David Miller @ 2016-10-22 21:00 UTC (permalink / raw)
To: avagin; +Cc: ebiederm, containers, linux-kernel, netdev
From: Andrei Vagin <avagin@openvz.org>
Date: Thu, 20 Oct 2016 19:46:26 -0700
> @@ -1525,6 +1530,9 @@ void netdev_unregister_kobject(struct net_device *ndev)
> {
> struct device *dev = &(ndev->dev);
>
> + if (!list_empty(&dev_net(ndev)->exit_list))
> + dev->kobj.uevent_suppress = 1;
> +
Please use "dev_set_uevent_suppress(dev, 1);"
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-10-24 17:17 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-21 2:46 [PATCH] net: skip genenerating uevents for network namespaces that are exiting Andrei Vagin
[not found] ` <1477017986-18889-1-git-send-email-avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2016-10-21 3:10 ` Cong Wang
[not found] ` <CAM_iQpVA=W3su_a3OUVSD+19A72TMANnCX4dt9UyLOmVoRuBjQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-10-21 5:25 ` Andrey Vagin
2016-10-22 7:37 ` Andrey Vagin
[not found] ` <CANaxB-wvJsts7RUEg1pouD0xMLTQAoVMaWaXZ2wLFT9XE1E1Mw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-10-24 17:17 ` Cong Wang
2016-10-22 21:00 ` David Miller
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).