From patchwork Tue Feb 13 09:25:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kirill Tkhai X-Patchwork-Id: 872669 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="VcYPCnPn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zgcbp630vz9t6B for ; Tue, 13 Feb 2018 20:26:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934374AbeBMJ0L (ORCPT ); Tue, 13 Feb 2018 04:26:11 -0500 Received: from mail-eopbgr50093.outbound.protection.outlook.com ([40.107.5.93]:16832 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934405AbeBMJ0D (ORCPT ); Tue, 13 Feb 2018 04:26:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=UNP3Cu2ldGvAAtXp7RD+0OExmrbdu+nhDg08WcKqPoI=; b=VcYPCnPnlDAqypWvrgcUBt/a2ERSON3nbpUZCSLqrk7DpR4ngr9cyK+OKInryH8Wzq4WBUcQ9AQdpeJ1grkBaNG2TGvMNs7N+loGTgmP0yTXbM5xMSsxtujGaPGY0tk/FresRX3mZnF1pOMPHDdeK2ViGf7VWE8MlZuGfW/Elds= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Received: from localhost.localdomain (195.214.232.6) by VI1PR0801MB1344.eurprd08.prod.outlook.com (2603:10a6:800:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Tue, 13 Feb 2018 09:25:55 +0000 Subject: [PATCH net-next v3 00/32] Replacing net_mutex with rw_semaphore From: Kirill Tkhai To: davem@davemloft.net, vyasevic@redhat.com, kstewart@linuxfoundation.org, pombredanne@nexb.com, vyasevich@gmail.com, mark.rutland@arm.com, gregkh@linuxfoundation.org, adobriyan@gmail.com, fw@strlen.de, nicolas.dichtel@6wind.com, xiyou.wangcong@gmail.com, roman.kapl@sysgo.com, paul@paul-moore.com, dsahern@gmail.com, daniel@iogearbox.net, lucien.xin@gmail.com, mschiffer@universe-factory.net, rshearma@brocade.com, netdev@vger.kernel.org, ktkhai@virtuozzo.com, ebiederm@xmission.com, avagin@virtuozzo.com, gorcunov@virtuozzo.com, eric.dumazet@gmail.com, stephen@networkplumber.org, ktkhai@virtuozzo.com Date: Tue, 13 Feb 2018 12:25:51 +0300 Message-ID: <151851357738.5034.10272265431844825686.stgit@localhost.localdomain> User-Agent: StGit/0.18 MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0902CA0043.eurprd09.prod.outlook.com (2603:10a6:7:15::32) To VI1PR0801MB1344.eurprd08.prod.outlook.com (2603:10a6:800:3b::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3fe15443-5f1f-4656-4d8b-08d572c3c9c6 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0801MB1344; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1344; 3:D2XnOBAPJuqQBtP25wi3rVjhXv0bCVVRCok02pDvkTz2aM4AncAjhMKUmOGTYBopoMPM1sUiEOzy7FikLYjZSrV96VbQECNc8L9TKPuki5pwYNLhxymq+n0Ae7hsF2aHd2nxTizLiG1NAZPEpYh+yLiG5T4PC9bYbhU2g25xYuMkBK63VyqwMpC7RAUqeL1kOgt6RRbN29e7jOc47PvigaFmvqvxKIxtF0jLXYd/kb67AllqR4GuiAt60OtabPNq; 25:GcsiVVpkUaCayYn+AVftgJKEGr9zyGsX0aETqnw3S6D96a6Sg7MkN+jM55u+C8h0nkj3vZNU+j4PWfuXjzF55pNu+0MfNRZe7kWkk49X8qn4ah/m/zCUGR5ZyaxcpGx9g7UUS/4VxPi9t/QrvsKArshmV5oZ+zweGvJsi2Mw0BNbHksLLrpWIQdU4gdpdunTEEmWOceh+dpRiWR+R2qxjaCGlN+nLh6vP+8ptLojOopXR5tDdWpS2ZjfxLaNmxLNc8/3iAN6R1es+6XbmKXpObZ55R5NmyKnB1+UfQpacclMdI2WPOc1Mg5VmUyl+HJIkCAew7C9cP3xzz47K0bBBg==; 31:SecK780nmDWdN5zgOMz7cNyRQDYMJRsgVUSZcAzZk3TCSKgUnzYkWgWChvQGcRdV+SulcxZeDK3qTJUJ0a69/vsrGu3qdFEYdiOO8PxhEnISJ3UBisHIwuZSmGfsegX19E4R57mCPdknPKz56/chKn+ory58wQRIwnVBIU6e9vTFEtNd60j2jN7hpcLmg853eKJbuyCcwUm8LC7ZqIAqXObs4p7jRSUwfRps4r+r1rk= X-MS-TrafficTypeDiagnostic: VI1PR0801MB1344: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1344; 20:2n7asmXPVhhdvOokqB3Rul6xDstXKaosZ1rPT/P0AZtw8WysociqO25rANbq1Xot/99WntDEPyMfyfgDkBcDWsygGwaAvxRprlakB0Dyprdr3l+PDKXe8SyNo2oHhdk380RMi2q83m2PakgyNbGtNkmDTa+1/Mpmj75/LYto9wTI7eWryKrGrcCAWxVxIcdaZkIK9xQcmTIaBwix8f40XPVZuHi6I5gxpYnWc2tXZulZzQSOD5PVmgc5HY/ClBtF5h4ltn+Rp05718f4UClwgoXLo3qfq0GSP9fVqyX/sC4yIN7bm2R087mycntlte9o9MkAY+uW0+m+x+40bomSFkHlp6ZHEnmHUjiLM61HVBcAdvMCbcvc5Ul5kYa9LeQCgqYlzVE9gD9FVQua7HmOHBufAx9GpKLbZMyu37zBbOLiSthzb0rynrzQW4pKiVuZhcfEMV/UR2xiFcnOkPf6gJ9GYwDOui9PYeroqOjo9zDUFlHkhTHLZcHrQ8ugdFCk; 4:YHavpoUOnIHb9ELPY8ElE2kDrkQtWZnGjwRpJa+ITpte74/4AlWCQ5hyuY1sX7ONdyQD+DJZyVxeuZSDePh7tubWM6khXs4lHOzI+mogCbg997uF55jBpS0s2HyJiZhIQHy1afqFPUEbkfMNtnZIlHOMtI5E7/05BBy++tgZNzyuJmNN7gtqYKmd5+HzMcT8zptVWsSF5KTJEs5O+F6zWs0CLlbuY/5ZAHi/0CH7WX3JlJwWFSDoiGiVhX4r+Tc+mhv+6FreIyYbvWaK8CLCxA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(10201501046)(3231101)(944501161)(3002001)(93006095)(93001095)(6041288)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0801MB1344; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0801MB1344; X-Forefront-PRVS: 0582641F53 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6069001)(39380400002)(39840400004)(346002)(366004)(376002)(396003)(189003)(199004)(377424004)(103116003)(25786009)(386003)(6506007)(105586002)(55236004)(50466002)(5660300001)(7416002)(106356001)(16526019)(186003)(6666003)(39060400002)(7736002)(305945005)(26005)(9686003)(66066001)(47776003)(97736004)(55016002)(2906002)(3846002)(6116002)(53936002)(83506002)(68736007)(316002)(33896004)(58126008)(61506002)(52116002)(7696005)(8936002)(81156014)(8676002)(81166006)(230700001)(23676004)(2486003)(478600001)(86362001)(921003)(1121003); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0801MB1344; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BVI1PR0801MB1344=3B23=3Axf?= =?utf-8?q?TfFw3US7yf2sYUoAeD02y4lLqYD/yVxklaqJZnQW407PE1nZsGlgqeq+?= =?utf-8?q?Ma2ss17n7/jZMbH7y0YS7EvPxionD8WotMcUUtU925Cr7jnmjelogf2w?= =?utf-8?q?Bropr6DwrLkaulMA1GvD1bAp2BBDiiE+N5LXPDWJdVo45+bIVb3TJ/cY?= =?utf-8?q?lNK5M/5EMtYU2aY/YDH3RFeZCS70KwpDoFZEW/p7vp0RYZwdm7s2PIRq?= =?utf-8?q?3CdlnFHHy3t9Md6L5qD9YYKYHAOJJ1YYRWsX/Vgpb6F2ZMLVPIrFQiIF?= =?utf-8?q?omSGAHHo7mSOYYILlnYmC5/85DbiIz+SHJKBsULqJ9Xx6IgQ2vfwUVv7?= =?utf-8?q?1RqmPRV+Cq7CiszyPyyAwu7MdxMrHneWJb+tZfzTHxHCBVe3yI11ghg/?= =?utf-8?q?UfV4peFbfNWeRUdJx3XHZ997C9GyueRxqlv6MRP91VvahdvyOk5pThX3?= =?utf-8?q?ywmgJ1KJJ85ham0/izBUPKSD1OFmbYjVOFl8rsjkXGFPMZb1rLjR8qlc?= =?utf-8?q?d7V7IXyRM8L0GqWInikdJeYApspE8NydFRh1AazbBEaMAWOfWMTmj6sy?= =?utf-8?q?UHdOPFtd2W3HwW3Fxg+cX8yBBCwlJkardCjnZ0bhzC/ecbwiUYGrgLXl?= =?utf-8?q?MHkdF1gU8J5GEKT48qqYPNVjaI+6UOzZk0xDmZhhK/wHPdOX3SiNDZOy?= =?utf-8?q?Gcs/TbcvUzbHjdSmEGcCWoMf/CnS0u9ewDt+SyRMgkR5TKcKavk5XnlJ?= =?utf-8?q?R+J3VtdPo4kTgnB6vl6qPI4eIiWHCtdY0k2d/G62sJUMAzDw/Z78wih8?= =?utf-8?q?i/jGP/l9WmmEzISqV3LngrYytjxokOHjY7LHeKAg38SXDYpp8ObWfpCt?= =?utf-8?q?0UDbGbbNBUqMoap9cABP+Hbx/+cDztPNczoXgIsNiTEOG6CX7GaX4mAM?= =?utf-8?q?BpgG9j3sp29VK9uTYAHG8ZKAVUOCg8PhwGLr9RwCGwII/E7GtnGhVe7U?= =?utf-8?q?5pAlU6APSRqGgOKYUJ1+ImOrp6a9ElAOdU4PulrCI4Ia41Tp5b+one1l?= =?utf-8?q?cJ7gmf/MJErSn2mJXn/CBsz0iXsZJ+wjj2K7bGaIs+VTgy+5dAWARwz9?= =?utf-8?q?PKyx2tgKhlCbNG4MyP+wzSGdSyDw+T4EsYNEdPFSh8ABt1DHipM0payy?= =?utf-8?q?LjjdH41UExvW5v5vuPx0n9OolAnTo/YB06NVtJF0ezWpc6NTFwVfFWie?= =?utf-8?q?7JlZfr5gPzWZFPC3ez5ammALdqPzIu0jWKwX6CWAnxfs9cnWMohjwDl3?= =?utf-8?q?krRAVn7kcG0M0tWkHBHlw5INk=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1344; 6:3NPkcupsUPwEYu4+yUfcaiQkn6GHtjjNFfVukz4PuX47Mz55l9l0pSWMGg8wy8yPsNOeJjbitxJrzfe0Gfb8dhnOihQ5scWCToyDR+ef45F9VOe3E0vRr3cWjDO11jiAhjMzbekoqcxvSbZQ7K0QFc4YeyCd32DTN7guXLwhsC1c7N3siV7ybPArXgbKV3F7TDuBaRO+tv9XcoIjWy7HyYDrcypB8A+xNFI9LGQwanR32umK/oMj3NCUt1qgFMIKrzUCry9iyRhjsy9rD5xKDVzyWSgK1eGh2aKqynvDSVKsm222BjL08fm/Rvy0G3Kz/eboe4sTEwAI8PbDGLY4Uyi8Q7DmOG2gxZ+a3KSLQJs=; 5:Oad7aOwCo6+EHJZ9n1iEPKVqDjXjd1L7P5iBHKs17wkDdts3X2dSp2nmsh/xbP2a+0qOKY2a9v6L+H7+MbOdhdjcnPBY/nrZ1aZQvgencBRzWPqYI8F/P3E85m76/BYFcgPvuHqe3IwMEzA+JhFOCXpwsyACEOIWp/j9bBNBuys=; 24:m/VIQBUulDh6NVTHHRaiRFu0rr4FwBrVhJlBVsk6gC/qMdvsqGrvPKm0jGldTKy09BpfJL7rJFz6S1LYHSzz1deS2wvxsDzxQCS1GCvWHF0=; 7:LSXj83yGEMsel7YmnXAeTMCarqu3SNVefjowdscVhnzLJcvsBQsjOu7/1i+0B+9Kx/ls2VRMxVp/ZjgVlvNZ+VWsJjTw+uIkHqUIxBUPj52LK0aljKNglhsMt1p0HillPo8JjGyzfih49lD6kk8yv0/1JVrPya3PL5vD02TTKhFfzCVtggtECoYypTpHJiE6ONhiT/rGaJXKMlf3r3T4VM+kjkH2Y5c0RU64m4tMeQwjqPurD5Q2rDEkrSbiZ9Xz SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1344; 20:6d4pSlb7lMs4alTcDOWca2N53xOlE3CCrxaDSBAiWpWURG9KeGAbbLdekwNmIUoVzB8wbqFxtL9bSXyH6hzTIB15qycFxVKCDFrvcB8eepCO6Uioj2cPurGW2DLJCy7hEPB4ckEI/RQIOE3S5Q8ieMfofGUUF2SgiOqsnF+eyYU= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2018 09:25:55.3291 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3fe15443-5f1f-4656-4d8b-08d572c3c9c6 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1344 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi, this is the third version of the patchset introducing net_sem instead of net_mutex. The patchset adds net_sem in addition to net_mutex and allows pernet_operations to be "async". This flag means, the pernet_operations methods are safe to be executed with any other pernet_operations (un)initializing another net. If there are only async pernet_operations in the system, net_mutex is not used either for setup_net() or for cleanup_net(). The pernet_operations converted in this patchset allow to create minimal .config to have network working, and the changes improve the performance like you may see below: %for i in {1..10000}; do unshare -n bash -c exit; done *before* real 1m40,377s user 0m9,672s sys 0m19,928s *after* real 0m17,007s user 0m5,311s sys 0m11,779 (5.8 times faster) In the future, when all pernet_operations become async, we'll just remove this "async" field tree-wide. All the new logic is concentrated in patches [1-5/32]. The rest of patches converts specific operations: review, rationale of they can be converted, and setting of async flag. Kirill v3: Improved patches descriptions. Added comment into [5/32]. Added [32/32] converting netlink_tap_net_ops (new pernet operations introduced in 2018). v2: Single patch -> patchset with rationale of every conversion --- Kirill Tkhai (32): net: Assign net to net_namespace_list in setup_net() net: Cleanup in copy_net_ns() net: Introduce net_sem for protection of pernet_list net: Move mutex_unlock() in cleanup_net() up net: Allow pernet_operations to be executed in parallel net: Convert proc_net_ns_ops net: Convert net_ns_ops methods net: Convert sysctl_pernet_ops net: Convert netfilter_net_ops net: Convert nf_log_net_ops net: Convert net_inuse_ops net: Convert net_defaults_ops net: Convert netlink_net_ops net: Convert rtnetlink_net_ops net: Convert audit_net_ops net: Convert uevent_net_ops net: Convert proto_net_ops net: Convert pernet_subsys ops, registered via net_dev_init() net: Convert fib_* pernet_operations, registered via subsys_initcall net: Convert subsys_initcall() registered pernet_operations from net/sched net: Convert genl_pernet_ops net: Convert wext_pernet_ops net: Convert sysctl_core_ops net: Convert pernet_subsys, registered from inet_init() net: Convert unix_net_ops net: Convert packet_net_ops net: Convert ipv4_sysctl_ops net: Convert addrconf_ops net: Convert loopback_net_ops net: Convert default_device_ops net: Convert diag_net_ops net: Convert netlink_tap_net_ops drivers/net/loopback.c | 1 fs/proc/proc_net.c | 1 include/linux/rtnetlink.h | 1 include/net/net_namespace.h | 6 +++ kernel/audit.c | 1 lib/kobject_uevent.c | 1 net/core/dev.c | 2 + net/core/fib_notifier.c | 1 net/core/fib_rules.c | 1 net/core/net-procfs.c | 2 + net/core/net_namespace.c | 95 +++++++++++++++++++++++++------------------ net/core/rtnetlink.c | 5 +- net/core/sock.c | 2 + net/core/sock_diag.c | 1 net/core/sysctl_net_core.c | 1 net/ipv4/af_inet.c | 2 + net/ipv4/arp.c | 1 net/ipv4/devinet.c | 1 net/ipv4/fib_frontend.c | 1 net/ipv4/icmp.c | 1 net/ipv4/igmp.c | 1 net/ipv4/ip_fragment.c | 1 net/ipv4/ipmr.c | 1 net/ipv4/ping.c | 1 net/ipv4/proc.c | 1 net/ipv4/raw.c | 1 net/ipv4/route.c | 4 ++ net/ipv4/sysctl_net_ipv4.c | 1 net/ipv4/tcp_ipv4.c | 2 + net/ipv4/tcp_metrics.c | 1 net/ipv4/udp.c | 1 net/ipv4/udplite.c | 1 net/ipv4/xfrm4_policy.c | 1 net/ipv6/addrconf.c | 1 net/netfilter/core.c | 1 net/netfilter/nf_log.c | 1 net/netlink/af_netlink.c | 2 + net/netlink/genetlink.c | 1 net/packet/af_packet.c | 1 net/sched/act_api.c | 1 net/sched/sch_api.c | 1 net/sysctl_net.c | 1 net/unix/af_unix.c | 1 net/wireless/wext-core.c | 1 net/xfrm/xfrm_policy.c | 1 45 files changed, 116 insertions(+), 41 deletions(-) -- Signed-off-by: Kirill Tkhai Acked-by: Andrei Vagin