Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932843AbdHVM3h (ORCPT ); Tue, 22 Aug 2017 08:29:37 -0400 Received: from mail-eopbgr00114.outbound.protection.outlook.com ([40.107.0.114]:54782 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932713AbdHVM3e (ORCPT ); Tue, 22 Aug 2017 08:29:34 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Subject: [PATCH 3/3] mm: Count list_lru_one::nr_items lockless From: Kirill Tkhai To: apolyakov@beget.ru, linux-kernel@vger.kernel.org, linux-mm@kvack.org, ktkhai@virtuozzo.com, vdavydov.dev@gmail.com, aryabinin@virtuozzo.com, akpm@linux-foundation.org Date: Tue, 22 Aug 2017 15:29:35 +0300 Message-ID: <150340497499.3845.3045559119569209195.stgit@localhost.localdomain> In-Reply-To: <150340381428.3845.6099251634440472539.stgit@localhost.localdomain> References: <150340381428.3845.6099251634440472539.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: AM5PR0201CA0022.eurprd02.prod.outlook.com (2603:10a6:203:3d::32) To VI1PR0801MB1341.eurprd08.prod.outlook.com (2603:10a6:800:3a::27) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6a6e54fa-98ed-48a6-8a2a-08d4e9597007 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:VI1PR0801MB1341; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;3:bAXDYMb1o7kr539yqvTeKEVbiZqRY0XcYnBX7cikCj9QYzA4wMWySfjXQZMjbObmd6SuzjuMjVW732V8V7Xpw1KGpaJATK093UTvIn7YZuNEaL7hG0QfYWiwzDwju6USumIk6aSrdMFy/8iuOPjZl8kabqWNVIOw3JJfMhALwiNBnJaV+2m2HYnYvxEOEmfzR858Xj0wANWdLMwiXIqq+4v4OCxSnUWMJ1qWYhahhWcSmbRpuZIu7q8anOOdP5ul;25:1eGUfRhhzBGexfGv0k59R9ftE3fDJXKX5Mm5HfJFOAxSakXbYTvPiStfGE9+eBzF1hkLl3Fswf/q1FUXAs4s2wZI9oqwvzTwb5g3o4xszn55gSpeMgnVnPaP5wqR2O8pT59Ezo123L6K9+yUmeuE4yZxUAjmelRx+bXZZpJjzf69OWcaypdsHiT48ZmxTYGcAf2FnQqJIw9JRjrfATDQ9uS6YAK0IaVFvaaYlU2RI9sNu6vkmNe1dOS7rHmanPksVf/x5V5d1Oxq9afb8jaGQe7Cf3LpjkheABxsczEISqZCqi7kUND9svXZeF4Lj+J0ZWRiPq0SHr7GbBVbFqtgYw==;31:RqfQBWuLORv8puKHDvyNR9pG3KLEwrjXUQAcjeY1kcDC4g4ddECkCxKEri5yiy9BYyu+34iRxs55J/X8Myv1/QKeigYjeOjzzYhG4HiWvoAVZeMugSC0KRHnOxIY/f3kc5M+00+nGFqXa3s/HhflIOqAJXyDqg9FUyPRLf0EpMjJo9cPz7SVPsQE/575GRvdes1tbyGqSQUerIAAIVxS/ifEgoSjlisE8oSU9F4oaUc= X-MS-TrafficTypeDiagnostic: VI1PR0801MB1341: X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;20:FJFUIJLlKVUfkfsazRN/hweIVSp/mKiBOW23FDdBh/eUuXINZ2WpJ3ym6N62ffm2YqjNAWtfAyGB86PiOrehCoLxDBCyNe6z6sd8F8Yb7K5p5hLbZGRPk6yPN8KXfNyp9Eb1Rg1Re00tSa9RX5Eo7YTGFKANPznXpldRaXIEVyOXTzt1zLIiR1854YPa4mVEXlV0yKQ6PjIJBJvuZ8LzYCbsLbtMqQaWkpSH44z8ktVUQJ02StQbYi87f6zacSPvHFW1Y75UZKpF9IDAu/G2qBhGyYoAUp+sP4QMcvuG+LL+f9ZYg4HQZ8/zVqISwsNLNZ9PjTXLZVlz4MjLaxux4ltW4cN9OE8tPMeHw9unohlVn6feq55pjABRjoKRtr6MoKJoEoB9H3WTVFEHA9reb/Crbzbwd0AX+kA7wiqT2fI=;4:WaVUcnho7QhvoyoSoM/jd/wVRmHl/63twnP3KvOZ+NQZi0b0DQYML1DIGsaS+9utRtGfg5FNpccW3aqYwQzXRT83NrQmujkWc2XWXDURVpSdRVWJ0AOa+144B2A3yAitdzVgKbZJreZRv5OkSuGwubmfGybK3fAjNB4T3QePCFjMCk6RbhvXM+Pkx2OarhS+6E2yPfLPK8MfQYy7uH2BNfFqgApxqbo8K48SEc238rlVhGfCPGxh7jp+lsavZ8j/JHix0+NXH6Kj0JLXhCAF8ujLahZJwnmhmydM/Y8dyG72qhX5FpGo6G+YocTUYeDVN2n2ForPn+GFddqb33H0JQ== X-Exchange-Antispam-Report-Test: UriScan:(190756311086443)(215187933766430); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(6041248)(20161123562025)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0801MB1341;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0801MB1341; X-Forefront-PRVS: 04073E895A X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(7370300001)(6009001)(6069001)(189002)(199003)(55016002)(6306002)(106356001)(7736002)(105586002)(110136004)(33646002)(9686003)(42186005)(4477795004)(103116003)(6116002)(7350300001)(230700001)(47776003)(53936002)(101416001)(66066001)(61506002)(5660300001)(3846002)(189998001)(54356999)(97736004)(76176999)(2906002)(6506006)(50986999)(50466002)(2950100002)(23676002)(83506001)(86362001)(478600001)(8676002)(4001350100001)(305945005)(81166006)(81156014)(25786009)(966005)(68736007);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1341;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4MDFNQjEzNDE7MjM6aVpBZFU2b01XeCtwRUk0RysvenIydG1n?= =?utf-8?B?SjBqeWVxYkZkb0tkMXBTREFiamZjZmpRQlllTW90VkUzN2loK1B5aEQvZ2Vy?= =?utf-8?B?UlBsUmJKSXk1UUhKbGd2MTR0Uk16ODkrSVpVU2xXVGpncHE3Rk1RS1JzS3lN?= =?utf-8?B?aCtLWlZVYzJ1N3dFNUVLZVJGbGNmMjBiVUVPZ1lzNkFMa0cxWk1ORVpLTTRI?= =?utf-8?B?bHZHd0FuTmlma1NzVHRqMzlmWkVSdjlDcytVVm9FS0VaVDBib3RlTnpMSUQ5?= =?utf-8?B?R2lqOEJPYUdONkVPejhDY2FmM1p3T2t4VmpucEFOY1p3VWs2c0x6R2Y1SXZI?= =?utf-8?B?L2FwSERpOHlNTkFFcGYrK3ZEaktDWEJFemJqem4wYzlCZ1Mzc1NOYldySkVp?= =?utf-8?B?NGJYMEc3eVZqb2FTbExpV2E1MUpYdDIrUzlocnRvUTR0MU94MjI5SFp4Mzdr?= =?utf-8?B?aEVkUW5HNU9mNHBVUlE4a1REZXRTYmVQMjRibFEvcHY4WjhJUlFXTEJiY1p3?= =?utf-8?B?OVdONHNQOGlhQVdsczMrNWo2SWVBd29KTUgzZnFlWlJoK3J1cnRFdWVSVnpD?= =?utf-8?B?emRyRXBEbzdPcmZzRnhSSzV3N1NsTXlWejh4L1BpK2VoL2swWUEzMGd5V2ZF?= =?utf-8?B?bVV1VmVTOVVlVVZFYWlRaW5sSHpleW53alE5OWlWdlRQSVh1QUpwaUpNRVZK?= =?utf-8?B?V2VDaGp2ZC9GUThXM2tCcGtQQm9namlLMUZ3ZzVMeGZBWTI2dC82THVLOVMy?= =?utf-8?B?OXVvSzVGVkV4Sm9weitvSHQ1QW1ENDlvemZiSzFzWHVOL1hpdEZ0cUNiWCth?= =?utf-8?B?Qk9ucHlaSmY5ekFadlNLZTVVbHJpak9TOWQvN05SUGJLU1ZGKysrSTZkZzBL?= =?utf-8?B?ZDZPemxicm4wN1RLNEFGZWgrNXUxNGYxem4xOEoveU1aNzBuVHcrWEZIZXZu?= =?utf-8?B?Y3NyUTdLTDFpd1AraUZFSGdFME9samJCbC9tbm8xSVh0UHA0N25GK29zVjQv?= =?utf-8?B?czFtYTRoUXl5V3JIbjgzcWMrSGdzaklCWlJBQWRDVDRCV08zWEpNOU1MSmFE?= =?utf-8?B?QlNneDZMUHV5Qzl6aS93UmplNVpOVGx0WTRNUHRZRUtZblNnK0tMbHBJV2p5?= =?utf-8?B?VXlsNlp0RzlTeE52Y0RvbGlDblVrRjVvVUpBang1aWxxV1Zib1Jpbm1nbTJS?= =?utf-8?B?aGN1R29oaHk2anNsS2ZKS3FiSlNEbmhoZ1lrWmRBaVprQzZ1QXJKYzZsRlp6?= =?utf-8?B?dFFRdDhFWTVsTVp4Um40aWVsZVhwK0tmK3J1NXpzYmZ1RWtOdGtERXloR1FE?= =?utf-8?B?bjZCd2t2Sk8xb0xpZFptanJ2bGxxdnJXRHBNVmJKYjJCU053MStDbTVXcUdR?= =?utf-8?B?SEFZRzNtUFdtYWVycWVFcm9aaUtwQnlmYnRPSm0vaE5oaFNZWTNGRDNUM0ZR?= =?utf-8?B?T0N5V3ZDa0Q2WTMrZVd4Ui8xMytCeUhsUjFXWlJ2NmxuUFJyaXV6UWk4RGpl?= =?utf-8?B?dnJDTFJYNWRYdUJHcVBtNTlwU1hoSFZMdjZSTDZ6THZmS1VhTWxMVVVxRzM1?= =?utf-8?B?WS9leWJQYm9xL2EyOEMvOCtBWTlCMVNmQT09?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;6:Hi918lzbTqHZuiEtgIC341B5HGGnEb43/RDvfTpMu29bQATz/TjYhLq+dR/uMGVH2BvrIZ0fvFILabO1/DhIkwPtU47MpSMVnq6bYqF9k3SMx4UZZd/sp/wYWYD3xlygTa59Ico3YrqcN1ti70Lkgs0cdhOzYVtWPxGwlydRaIcqgiF9GWXp6uWjxyiGMzNGBseK07BBEslOSmDQsuKqBGqbZNDkvLEh+hBhAmqYWucjWdPGukkP2yLh9VNeV7zPEjS599wgT+JSxIud66PyKN/QGnfok7eGouHvfsScOGq9O3EBILyVMnbHmLTXDCF2ZleAZPvr2/DWp5gkpn+8Bg==;5:NbI1flH7j4QqqHxYTxqmloQxRN3TEaxlsHfkCMLUa2MGjB2OF6FwmjvEiT3PWE07K+no6XktTpsq3Cgydt95jsxT42VzrAgSDiM69FRmpboL1Efe2/yq0hmU7f6jpZlePnNmRSRnv7WTSB8GhV1U4w==;24:VqPGL2QERcIAWqvAakQ3/VB/ghS5tOMS3DMgl6Dk+b/rL3zhYZMHJABKY7DYnyV457dr7dfC0xTT7Z052iqNhTomMsYp8LyEQ0OMDysI8qQ=;7:qCBXrmFAJojsHjFWR2naJY5Q5AjPV4llqtFaPBNQWslmozdoUL8F9iO9Sub54Rc0NK3idLzGDMIn3jEbt8Xhc8VnwW/w7TJvqC+fJWKlQpRdDO9oWFG/0d7d3ALTeFaXYOaCeqIo58yChaOEwd1P60kGDs46yGDaSrkgxflb6rhwnpPvSuuAwIJ0z7V34fBh572x5HMWjsq31uN7Qu5nLWtSAJt1t3eCtjrFhXJ3tcg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;20:y05bztOggfBeoD2xb1XRyrUpILgQS4p+IzXnuSs+iL4jzSjI/Gl2ryLNXCjzKo6vcV+nmBHSP/WogabK592nMpSU/FT2tlYNE103ppVHv0uir2iMa8X//nnp7fgLufMY+dEiW+cPRTSgDMRd0Dx3TtYf/tCdaNRK0y+Sg2VhjKA= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2017 12:29:30.0892 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1341 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2769 Lines: 58 During the reclaiming slab of a memcg, shrink_slab iterates over all registered shrinkers in the system, and tries to count and consume objects related to the cgroup. In case of memory pressure, this behaves bad: I observe high system time and time spent in list_lru_count_one() for many processes on RHEL7 kernel (collected via $perf record --call-graph fp -j k -a): 0,50% nixstatsagent [kernel.vmlinux] [k] _raw_spin_lock [k] _raw_spin_lock 0,26% nixstatsagent [kernel.vmlinux] [k] shrink_slab [k] shrink_slab 0,23% nixstatsagent [kernel.vmlinux] [k] super_cache_count [k] super_cache_count 0,15% nixstatsagent [kernel.vmlinux] [k] __list_lru_count_one.isra.2 [k] _raw_spin_lock 0,15% nixstatsagent [kernel.vmlinux] [k] list_lru_count_one [k] __list_lru_count_one.isra.2 0,94% mysqld [kernel.vmlinux] [k] _raw_spin_lock [k] _raw_spin_lock 0,57% mysqld [kernel.vmlinux] [k] shrink_slab [k] shrink_slab 0,51% mysqld [kernel.vmlinux] [k] super_cache_count [k] super_cache_count 0,32% mysqld [kernel.vmlinux] [k] __list_lru_count_one.isra.2 [k] _raw_spin_lock 0,32% mysqld [kernel.vmlinux] [k] list_lru_count_one [k] __list_lru_count_one.isra.2 0,73% sshd [kernel.vmlinux] [k] _raw_spin_lock [k] _raw_spin_lock 0,35% sshd [kernel.vmlinux] [k] shrink_slab [k] shrink_slab 0,32% sshd [kernel.vmlinux] [k] super_cache_count [k] super_cache_count 0,21% sshd [kernel.vmlinux] [k] __list_lru_count_one.isra.2 [k] _raw_spin_lock 0,21% sshd [kernel.vmlinux] [k] list_lru_count_one [k] __list_lru_count_one.isra.2 This patch aims to make super_cache_count() more effective. It makes __list_lru_count_one() count nr_items lockless to minimize overhead introducing by locking operation, and to make parallel reclaims more scalable. The lock won't be taken on shrinker::count_objects(), it would be taken only for the real shrink by the thread, who realizes it. https://jira.sw.ru/browse/PSBM-69296 Signed-off-by: Kirill Tkhai --- mm/list_lru.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/list_lru.c b/mm/list_lru.c index 2db3cdadb577..8d1d2db5f4fb 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c @@ -177,10 +177,10 @@ static unsigned long __list_lru_count_one(struct list_lru *lru, struct list_lru_one *l; unsigned long count; - spin_lock(&nlru->lock); + rcu_read_lock(); l = list_lru_from_memcg_idx(nlru, memcg_idx); count = l->nr_items; - spin_unlock(&nlru->lock); + rcu_read_unlock(); return count; }