Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754992AbcDAMot (ORCPT ); Fri, 1 Apr 2016 08:44:49 -0400 Received: from mail-db3on0122.outbound.protection.outlook.com ([157.55.234.122]:29283 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753237AbcDAMor (ORCPT ); Fri, 1 Apr 2016 08:44:47 -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: Vladimir Davydov To: Andrew Morton CC: Peter Zijlstra , Christoph Lameter , Joonsoo Kim , Pekka Enberg , David Rientjes , Johannes Weiner , Michal Hocko , , Subject: [PATCH] mm: slub: replace kick_all_cpus_sync with synchronize_sched in kmem_cache_shrink Date: Fri, 1 Apr 2016 15:30:17 +0300 Message-ID: <1459513817-11853-1-git-send-email-vdavydov@virtuozzo.com> X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR06CA0037.eurprd06.prod.outlook.com (10.162.116.175) To DB5PR08MB0584.eurprd08.prod.outlook.com (10.169.32.142) X-MS-Office365-Filtering-Correlation-Id: 0cdf7404-d61b-427e-bf37-08d35a296673 X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0584;2:E/Se9cLhWB80QU34MT0yNsxJ8S84+zN5SXjpAfYbT5JwMJI6prp92nYbIV21sVRYYBzzotUjZiJZ5jt9tFH2FoLCuaNF3gPi5+0Vz//u53DTokewwFOgcKNE+GNf90cIi4l/q4VO2p2G80qbuEX32q+1WcgqK47iUykxF1CYS+I0Cncz/VWuV3dgHmyv3FeQ;3:5x9OsqH5LfnxjiPtiWgeyQ4bY/WBZeQXhNhL6wkIfvDmexIWQ50RNNEio8EDpOA+LkxfrbG7sqgdqb/VCmjXYoDwzXgTLz63vFNjTVXuVzmU1bViEjsbs0R/kLRDnLOS;25:ISRK4I/43eIL26uDI/Y24A95JPipX3ry2YAjBJHexD6n6AGmqOS/IPWeeqp1OgTIZtbu4FUeGyUC8PXmYtkmvPyfZxblWHBsiGx7Xm/iTQ6v6NVEclBADPfVmuYG78CaQxtyegGkQOqiQNFMxaClrSvT8aRe8R2Rkp/W+04dMYHImWT1hWfqhY678AHCnQeOTe9jK+fItPLSiOzm+3BXbztFKrZA6CnS6C6eW3A/q5Ie1JgwnlRi2LvU0fpk9NSa0t5a2tAdiJhNyoYLbGrP4/kfTUB1zhHsi9JplT+2OM2NAK13TRpRH++GcBZ7OSya3SE3koe6xGizf+3KKM5ROZgX4RxA1JcjfBgKuEIqbv8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR08MB0584; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040046)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041046)(6043046);SRVR:DB5PR08MB0584;BCL:0;PCL:0;RULEID:;SRVR:DB5PR08MB0584; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0584;4:iVyfDmFHR2jZiCV6x9Otw9odetdGOU9Gi54W5MIaO5haKJHNZW5gFpxLeAkWVXGxsCti/W1MGK2Ns9jMM1r/750dqyENNSOzUkhwzraFumGn3cGxVwz2wnaoRoF65LvBPrShTRH4K6pmGV5Q9ovbOsDb80yhiW2KesPGNBj2LvRndr64wa2sDxJiE17Xi6MAooOnAikL3OnzihefXsvve2f0iUlRMnwF//9Re/jysHsenawN/mDEjqgOyzmRUTiknw7JRDoMZO7O1h/ceYn0kQL6LKXyFIKIilvxLrFpZOrvZ9fx58a7yKxVbmvx3f3sVrYC9R+tsN2AZuvacRKdnWEW7tqgpDBFqI4beMXdRmDJvHVvDXm/j7VodX7TeUCSJzxfMZFp8HWCA7lLFsxy5PXmDJ8gjrG+AINlFrMRe3A= X-Forefront-PRVS: 0899B47777 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(19580395003)(5004730100002)(50986999)(77096005)(19580405001)(48376002)(42186005)(47776003)(86362001)(33646002)(50466002)(110136002)(66066001)(189998001)(229853001)(92566002)(80792005)(3846002)(36756003)(81166005)(50226001)(586003)(6116002)(1096002)(2906002)(4326007)(5008740100001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB5PR08MB0584;H:virtuozzo.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0584;23:RQE3UOCvpAOmRuy2D3cDiA1dfamPo1avTGrxV8xndiYFdqB3hnqcTzgORgMQ1v6MfwpV0inG5GByN8FnUyltiPmI24Uwdcxb7S2zB3FX+u58Ik9n3T+x4vZj2repWA9mh3ZKyJ9U0XwtHvpffHM///v3NISI1coonrI95ZjlnG/tFZF91V8eF0BvDlpELHhkCOGiaMUMCMwEMnL550LTDEXkksHglAIJZ7PMuqBFs3uqLhoGHl4PafJ3ZxZMyegzPM9qe5hhem2EqX8NV/LfnbE3Ku0xoFahv8ZsR10+cBQuulXX/opk6qqvuxU5lvMfpHODz4+PkUtw4uL0AC1dULuchGmiUjo5+MnL43n/MAA5FidZrEe2/3Z3XqSlZWNRQh7/Z78Vm/yv1oltKyxyu+PXZY1xF18vOhg3VhiFj3KatcyDQLMx10ooCODVr9x1ZFHz3UxJneLLwRHQUf89zRqc8Efj7m9+j/mWfpn8Sh3pron3w7qMO45bSg+QmI8Wr3jrvpuSfzPh42lx00Z3/6tqCijpe8qtCADS2rlZcORqwfpdJgeUv9HjB79MEIsqW4XDWB4Lr+96LtFMeKNC5PK20Ws/jgYGbvELK2lWPMAicqrMz2DUvP7nPUo+kGwyJPd1qeLWlyl9DR4HZIoP/8nXgBpSFvVKaDpsn8NpMm4EpnYzRtjFatOIpjrmSWgDIIid+oPanzeZUpX7T1PoOMuPdfp6miLhw9iW6A3dok5vMZkcFMCMBDTK/+gvygPVszMDoRSRCTEpO2rS3mcYt7+giAzuvt1ITjhPBA0e+ryK6Es344zde6QsRtJ2oMNV X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0584;5:INmOzEajlFwhWuGM96T6VfS8i30+xYZRen3yYa1m7LUMsPHh/+nCj8nEaDFTIVG0RsHqCoWT6x51Jx1kmoUlJLmgDGdD7iXqWWWZ6IOXcH2qAshykoVGC6dFJgHwVRa+QMThyrc3lEjkivAN905GDA==;24:a6r2cj/nnnPbUHkDKMhoi86Wm8AnCj172d3Eh0fhS/DjpweeU3Du0hedQPhz9ZAKR8Wb9DwZKXrmEdbcT86x1JA1BJM75dlmiinpbCGnAww=;20:roypWsk2vvTbva/s7PVexuiFsYpotxJ3S/DyoA5NfX65xF/I+8sRkqyC5+m8lPLKu+jo6WgfFWv5xqOx89dizWPF9dxUtR0Cbb7u+cP603MUgXXaU0doewOPUbxcZb0UFxZNdHvP+tOVPMRtP2Zva7mVZ2xrK59JZI+w7evmTfA= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2016 12:30:23.3079 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB0584 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1620 Lines: 40 When we call __kmem_cache_shrink on memory cgroup removal, we need to synchronize kmem_cache->cpu_partial update with put_cpu_partial that might be running on other cpus. Currently, we achieve that by using kick_all_cpus_sync, which works as a system wide memory barrier. Though fast it is, this method has a flow - it issues a lot of IPIs, which might hurt high performance or real-time workloads. To fix this, let's replace kick_all_cpus_sync with synchronize_sched. Although the latter one may take much longer to finish, it shouldn't be a problem in this particular case, because memory cgroups are destroyed asynchronously from a workqueue so that no user visible effects should be introduced. OTOH, it will save us from excessive IPIs when someone removes a cgroup. Anyway, even if using synchronize_sched turns out to take too long, we can always introduce a kind of __kmem_cache_shrink batching so that this method would only be called once per one cgroup destruction (not per each per memcg kmem cache as it is now). Reported-and-suggested-by: Peter Zijlstra Signed-off-by: Vladimir Davydov --- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index 279e773d80d3..03067f43dcf4 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -3697,7 +3697,7 @@ int __kmem_cache_shrink(struct kmem_cache *s, bool deactivate) * s->cpu_partial is checked locklessly (see put_cpu_partial), * so we have to make sure the change is visible. */ - kick_all_cpus_sync(); + synchronize_sched(); } flush_all(s); -- 2.1.4