From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754266AbdDLMtv (ORCPT ); Wed, 12 Apr 2017 08:49:51 -0400 Received: from mail-eopbgr00101.outbound.protection.outlook.com ([40.107.0.101]:44640 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754194AbdDLMtn (ORCPT ); Wed, 12 Apr 2017 08:49:43 -0400 Authentication-Results: linux-foundation.org; dkim=none (message not signed) header.d=none;linux-foundation.org; dmarc=none action=none header.from=virtuozzo.com; From: Andrey Ryabinin To: Andrew Morton CC: , Andrey Ryabinin , , , , , , , , , , , , , Subject: [PATCH v2 5/5] mm/vmalloc: Don't spawn workers if somebody already purging Date: Wed, 12 Apr 2017 15:49:05 +0300 Message-ID: <20170412124905.25443-6-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170412124905.25443-1-aryabinin@virtuozzo.com> References: <20170330102719.13119-1-aryabinin@virtuozzo.com> <20170412124905.25443-1-aryabinin@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0601CA0026.eurprd06.prod.outlook.com (10.166.117.36) To VI1PR0801MB2734.eurprd08.prod.outlook.com (10.166.198.27) X-MS-Office365-Filtering-Correlation-Id: 0a34a20c-451b-49c1-ff12-08d481a25cd1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:VI1PR0801MB2734; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB2734;3:q/sUbgUTEWPvEhnk+Jktxe9NDMnmncZ2tsILU3aTXkIzP+61/LFxIvDvC08MN6Mguj2WI4jbPRSOzeSt3G+kRDzSOHVL3ApMWIuoIYClSuFGyH+eifM4jths0fMJinul0m77ni6wHmCXNyoaWLXcQNu6Isp7q27JX2bMynTRqVEounuS1294uB+eIj5/BPUNzk2HRn767SrIsvTsIVK8GJ8ILzYGUSSto0ERmMeFw2vbpFg+JDepJ8VXS/YSObWcoOjCjlcirN6vGop2oGe/cRJ9eoUQqoVRFSYZSjgPo+o8k3328RM0oviQ6pw+KDNYxYUTfe5fKJAPI/q67pC6IQ==;25:IYOUW8xwhuzqezs9HScV0EyAseg3+4g7L8USjvwn9N+Zt1kjqb5eEb08anC0h+DAXOSRwLNsIm0RZRjo5TkAl0M37MT7GPsiEl7dVDU9xbK4G9ct/gP7DUNrL7EOpm3IlvseWHu1YseyIDh4D0P628D3ik+ZUaQgfprCA/0RZ3UKJFdn8QSSQi5871pj36PEYtluG1J95mMMrTuKQbkB+2SXCoWvmw/c+haH6mMdL5eMCLMqlf9UmfIkrIUJ5wGxUaUU23w0P5ElHxJg2BPOuHf1dpilGd0O9T4e/1Qv8EViCo4eJ/iiIhqu+yhDH5g7TUR6ukpkW4mtA175qkqLvPy63vhEeFJz56AnpzRh+gQQDoxcGBYMAhjtFVcD7joX+aUMQZ906ocDIayFhX25KJKHOLOrkfG2nIKxXgXZN5KnOCBqdaExwkJ2t5rPliThU/Tle+RuguKfLLdLKfOEMQ== X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB2734;31:CBIp7kyU3qPo86cHfalMUqGCv3MrUm5Ic3pXH/97jiGPYQTF0pVklIUGKhm7ecQESOSpQYdJmo5GCWNS7gu8RYRymWZsnpWYp6uC+bnWOsNJ4ZT2o1L9qE7ZRlR+1V/7oIcFDCtjfL4KEsN9aslZZJ4XqWwn4edBRj61P51BCG/mnV3TdgDxewozz9eRagRTg7cryevKuxitUkJAflBfspDxwnuhY0SRiuZJuGYjjSEp7c4Y66/xeBNBP1Sgla6R;20:vg2X7+RM81nQW/FvGIVBzKE/FOCRADPVlIFvCOouBP9uSDWCPb/XRmZe03NctHmSYIeyF8zuwjFIawJFQ5gysbqm446Z+gtmBo9niBq6XmsC2j3pylfy1qjF+4BT4AX8kEWkA131EsE4geI6CgcQVf+jgKCWROyvh60rjdhQP7Df5me3ZuZTPR2gSlSE3AluTgEt+jEpdInQy7N+Q3vdl6cF5kWQCH/bAUScWWLkyQ0m3BdSVwNow3YLysNX2ixqdwYiVlbyPAq4UjlB8fLqDKHoiUJKISKn7crja/UBPMR6AIWVo9yHg89OK98H7szgzs641zdolDdwunPObSorMm1Q07LAu6JTWns92MohNxr5V6qDd5LfKgODeqKdScXbV+30i8eMQJceNCrikSouWY3DrbKQi1gjxzsL0mvWNFY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(61668805478150); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(20161123562025)(20161123564025)(6072148);SRVR:VI1PR0801MB2734;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB2734; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB2734;4:U9FkAvtfepn+9nAe41kkos1/HXr8cA7UAVgWUoL019TjzfuxD8Dd0CsBiJKhQSBmoaZkln4I09FRLnCEpyjFLnQSK+CkI0HTxk0IeTIt+Pdl37lQqwDTTLtL4bRqYtBe2dXiY1b6nfEVQEspApMTLYrTGQvbd75grw7bPdyuMTid6TEhmpY9pNeM9oOIv7TuDuda8YWiUeSY8lfyNM+aBng5JQ86U5P2mrJ99fu8mFV0BrZYBjV94b34AAZX8rVqRbELed/KGl0TtVth25G4d2lm2YWIjvpcGXAcTbWJ+V9PzZS1mRwumeHfMCttbLq5tip7w4rPw0UptY4xrPf0qdYY6+t+D/KXW3wV2aE98N1W6igAqsWVO83fOJFntLQEuFAcE3ApZTRSr/NvT9YEs+M59C8TFwnkTje4ft7D+W+dhE664PVQvlV7sbbOXLkEkNnEjdKGpSFN7/O77qapWRgX1HbJXSUuRuQYUooy8a8joh28hwl9/P87Rdt8qFbXtEBvZ6nyoRrXbQQy4f2ZQqmPdTe20PzMCbb9wVJmMNI/BV3RKr/X1pI0KZizrLM18AeZMpSSFt1pp6O7aVdJEZbS2mLvAZji4W1810tnCmvtijP4Yf56d+7eloiGBLZS8eyz1hX4Ie8ZgNa+GB76TszGW7Pgz+B4KBHFDsQsIVv6VZgVJWJsD0qx3aYAbyFuWK4ZYGkYmdq/4yh1uWjba1kADd1UQCafOu6zE/jRKN8+sGXCV6btd1/OE42WIeNhXGVFZylA4epfqCZyMiys9A== X-Forefront-PRVS: 027578BB13 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(39400400002)(39410400002)(39830400002)(39450400003)(51234002)(42186005)(25786009)(53416004)(3846002)(33646002)(6116002)(76506005)(305945005)(50466002)(53936002)(4326008)(575784001)(86362001)(8676002)(5003940100001)(38730400002)(2950100002)(1076002)(6916009)(2906002)(50226002)(189998001)(110136004)(48376002)(6666003)(6486002)(5660300001)(6512007)(36756003)(54906002)(6506006)(7416002)(81166006)(50986999)(76176999)(7736002)(47776003)(66066001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB2734;H:localhost.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0801MB2734;23:uoTM5wTg7qixGsn08SS/ZSamF3va33zDhil9r/a?= =?us-ascii?Q?g1P4o4s8fNcMpyk8vCgbwnDobkPL+cTLO/EAHrc1DB7l/Dr/DjyqMx8VDO+X?= =?us-ascii?Q?BHFDi4mA1pXxzWNJUVNZDX3492twIEs5u6ij9qe9MKN5UA5iGeugY+YuogEg?= =?us-ascii?Q?HRhgEiU2X5YczK/b0wKwOYWZEx4wxDNCPedwYyNyuzLj/PN+oHoTNdj/sEyQ?= =?us-ascii?Q?Tkqsh1iUOo1R+JPBd6hYlGHWJBIrEcmp+C7ZxMSRlrV5CLvtfTXzkorjGuQR?= =?us-ascii?Q?xnWJFjucWigIYwrU34ji6LYIR2FmFobHIwr/MZ/62vR7VYK+jHQxLyut10if?= =?us-ascii?Q?dVLgEmUaGBrHr+twufVTwVXqUxK8m44YSlAwNIcPInN21xTEvcJb7TSXfrUZ?= =?us-ascii?Q?ws9ItmArrjK85ZK1SjrI/jhhYmzY3YTVmBW0Z86O40T8Hi1bMmV+yrXEvCQK?= =?us-ascii?Q?4MJJTu6k/slpEoJHdM1EKQwjqNToB5/hsnmM9zeXh2uN8CfNPIaTWX4lcCfB?= =?us-ascii?Q?O7kH9vJjCmBRJVVpxFREtTYhGpXTV7BuHjPTJzsg9Clme2UGLEGlspn2JoHe?= =?us-ascii?Q?sgXMWu2FgYoBeqTUUV9s/Os97pSCUaSG4UFV77PflR1shVOycYvH0cFG/qMt?= =?us-ascii?Q?hhOB10QTD13VdLxJYPG4xCww69oSGKN7CmxvL6Yke4+WNYKOzGEaIYF1ISi7?= =?us-ascii?Q?tQknMJBLXRj8e7x69Brq9+SchkeEn+k0rxzlIzQc4lb3JgNWdg4YFzblIFaf?= =?us-ascii?Q?BluN2eDVMV1ZMN5yAwc5A0GaYm8mzMfcUc5w1Bs9bgf/NLdf/QrOglcdXvMd?= =?us-ascii?Q?NX5jBGryGg5FzjZ/wZfgaaFCeDvcuPGvPVUHMA4KPE6QapQlVxybS1ByjKUT?= =?us-ascii?Q?JXQG1teAS4JY1XOwHhMqYNRM3zfmv98oQmiGtrlUsTb0TS2ZWeM6FuuG/Qk+?= =?us-ascii?Q?1J+sVPoxtekRXFKXEjZ40pcFO+btKzmy460pApqANR42zuuL/9kLi89GJZFi?= =?us-ascii?Q?53+khKx2jz1jJVg2M8jrGRuRVEYQEiQtmZxHOjXRiNyggVzjsuRYWcaz/g6D?= =?us-ascii?Q?kwh75xtIj4VQjTVv4V0/GAH0j6J/mUJAJ3QAlT8rFhf/0Mbk+BfxRkOGx6rZ?= =?us-ascii?Q?KvRTHScs2eZ6WI8YyeqwDaOgXm2DHi7iz?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB2734;6:1yh8NnDxVVLRrgOHSlyEnYCgJyhnxhWFHx6Gk7X3XVhsDmK2ZYfUBgG/lFG393QZ98DSBrrMGhKhnpTVh8P0+pOb3hDCWM95FyM3UxXfeXUe28m0NhbaYFwzfENj2oQxAtnFctsdyvZD5lWVMDqZC4ig/QO3GJR93kTS8a01WMh8mEs2A+I6KjWwC1uxjI5aqODGlauMRQlOCP6YQmL2R+oLEYxtxjjibL6OxRw4h+EFd+StEruAtjbavMEhjTmTRVLSXfaKkF2L6mXa9kGYyhBWQS85k7cRgFWpA8kAyn3d7DmlNR5wQx3DKLo4DWrUfVil4vBOq9o/MNeh3d7vdEUpE0lt3butyhGo4HpU4FyFMiDzo6LtDxUPyNgGphZTFARgvzMjmtryfDNDtyBX9c0gIGiu7bWSYS7gtAqSDkpaIF6Y+tSmr/CaBM+VUHGouWdWJHAc8Py69dwXsDKeEw==;5:SZhKJbYErwU1vAvXkbu72UIw2gK0JjIAm9uINiyyHPpl5wHYM9IvUhYRwtT84YjoEY8euG2irYfyuyDVJkX3D90yaAnyaNVzg8+19zaJ2WxLjv7AVuYAMadXGmT2xORWJHkLYh+t9dqADxDZyoMP2Q==;24:yl0Xkd511TR1H8eBazWa98A7aAN2JZ3jZj8h+P0keWSaWDSg5lSEq2ikEJKJDg9cCcCp8b+Z8150CbHG35t4088oGFArhdIt2WdlAu9fWmw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB2734;7:LevdUyecD+r6fDiL3Nz564+gnjnC2o0WfiANPuE/nnMxiCYLE8pRpI0EbrH9s9FfJCoTq2ETJ2s2dlBGRU5+Ss7lUEueYuhECrgkge8QrVstEgT+XsUyGP3Vu3Nuj46eRyr/ik31f3U0cdjNVtVOqEiBtyF9M3CpDKHH/g23j00506lwh/SWqfl5qUqbEueEXYdXLK5oe5zGdJBZZw6OelGyu/usps7H8uuqdFc4SpR+gAOAIdZmHGspDopY6f7MpasdRTiZ4VurVgH4w7TeoJzu+s1crDoMyR0TsoRkJBflUYjNOV+EY1hdzMEkJTga/8jfIGcxdaXxg0/rlUR1dA==;20:q4CWSnYO9txVuSJbYeJZgUpCkKk3TtSosC/8A098W6mRg98G4BeGFEWb4Gf96fb6ReRfhVruSobsy03rT6BmhLwtW552PQ/Wc5pFzkKJvJ9K7PGGVYyg8Ky4E6Y1aFIDWU+rE5xhilK8Abz2SItsDFdYU3dfzeoR8urBhSPGZ5g= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Apr 2017 12:49:29.2251 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB2734 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Don't schedule purge_vmap_work if mutex_is_locked(&vmap_purge_lock), as this means that purging is already running in another thread. There is no point to schedule extra purge_vmap_work if somebody is already purging for us, because that extra work will not do anything useful. To evaluate performance impact of this change test that calls fork() 100 000 times on the kernel with enabled CONFIG_VMAP_STACK=y and NR_CACHED_STACK changed to 0 (so that each fork()/exit() executes vmalloc()/vfree() call) was used. Commands: ~ # grep try_purge /proc/kallsyms ffffffff811d0dd0 t try_purge_vmap_area_lazy ~ # perf stat --repeat 10 -ae workqueue:workqueue_queue_work \ --filter 'function == 0xffffffff811d0dd0' ./fork gave me the following results: before: 30 workqueue:workqueue_queue_work ( +- 1.31% ) 1.613231060 seconds time elapsed ( +- 0.38% ) after: 15 workqueue:workqueue_queue_work ( +- 0.88% ) 1.615368474 seconds time elapsed ( +- 0.41% ) So there is no measurable difference on the performance of the test itself, but without the optimization we queue twice more jobs. This should save kworkers from doing some useless job. Signed-off-by: Andrey Ryabinin Suggested-by: Thomas Hellstrom Reviewed-by: Thomas Hellstrom --- mm/vmalloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index ee62c0a..1079555 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -737,7 +737,8 @@ static void free_vmap_area_noflush(struct vmap_area *va) /* After this point, we may free va at any time */ llist_add(&va->purge_list, &vmap_purge_list); - if (unlikely(nr_lazy > lazy_max_pages())) + if (unlikely(nr_lazy > lazy_max_pages()) && + !mutex_is_locked(&vmap_purge_lock)) schedule_work(&purge_vmap_work); } -- 2.10.2 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi0-f71.google.com (mail-oi0-f71.google.com [209.85.218.71]) by kanga.kvack.org (Postfix) with ESMTP id B13056B03A1 for ; Wed, 12 Apr 2017 08:49:34 -0400 (EDT) Received: by mail-oi0-f71.google.com with SMTP id o83so19228148oik.20 for ; Wed, 12 Apr 2017 05:49:34 -0700 (PDT) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00127.outbound.protection.outlook.com. [40.107.0.127]) by mx.google.com with ESMTPS id l10si4999196oib.138.2017.04.12.05.49.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 05:49:33 -0700 (PDT) From: Andrey Ryabinin Subject: [PATCH v2 5/5] mm/vmalloc: Don't spawn workers if somebody already purging Date: Wed, 12 Apr 2017 15:49:05 +0300 Message-ID: <20170412124905.25443-6-aryabinin@virtuozzo.com> In-Reply-To: <20170412124905.25443-1-aryabinin@virtuozzo.com> References: <20170330102719.13119-1-aryabinin@virtuozzo.com> <20170412124905.25443-1-aryabinin@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain Sender: owner-linux-mm@kvack.org List-ID: To: Andrew Morton Cc: linux-kernel@vger.kernel.org, Andrey Ryabinin , penguin-kernel@I-love.SAKURA.ne.jp, mhocko@kernel.org, linux-mm@kvack.org, hpa@zytor.com, chris@chris-wilson.co.uk, hch@lst.de, mingo@elte.hu, jszhang@marvell.com, joelaf@google.com, joaodias@google.com, willy@infradead.org, tglx@linutronix.de, thellstrom@vmware.com Don't schedule purge_vmap_work if mutex_is_locked(&vmap_purge_lock), as this means that purging is already running in another thread. There is no point to schedule extra purge_vmap_work if somebody is already purging for us, because that extra work will not do anything useful. To evaluate performance impact of this change test that calls fork() 100 000 times on the kernel with enabled CONFIG_VMAP_STACK=y and NR_CACHED_STACK changed to 0 (so that each fork()/exit() executes vmalloc()/vfree() call) was used. Commands: ~ # grep try_purge /proc/kallsyms ffffffff811d0dd0 t try_purge_vmap_area_lazy ~ # perf stat --repeat 10 -ae workqueue:workqueue_queue_work \ --filter 'function == 0xffffffff811d0dd0' ./fork gave me the following results: before: 30 workqueue:workqueue_queue_work ( +- 1.31% ) 1.613231060 seconds time elapsed ( +- 0.38% ) after: 15 workqueue:workqueue_queue_work ( +- 0.88% ) 1.615368474 seconds time elapsed ( +- 0.41% ) So there is no measurable difference on the performance of the test itself, but without the optimization we queue twice more jobs. This should save kworkers from doing some useless job. Signed-off-by: Andrey Ryabinin Suggested-by: Thomas Hellstrom Reviewed-by: Thomas Hellstrom --- mm/vmalloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index ee62c0a..1079555 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -737,7 +737,8 @@ static void free_vmap_area_noflush(struct vmap_area *va) /* After this point, we may free va at any time */ llist_add(&va->purge_list, &vmap_purge_list); - if (unlikely(nr_lazy > lazy_max_pages())) + if (unlikely(nr_lazy > lazy_max_pages()) && + !mutex_is_locked(&vmap_purge_lock)) schedule_work(&purge_vmap_work); } -- 2.10.2 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org