From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E1500C5474A for ; Wed, 28 Aug 2024 02:36:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7330A6B0085; Tue, 27 Aug 2024 22:36:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E3306B0088; Tue, 27 Aug 2024 22:36:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 585A76B0089; Tue, 27 Aug 2024 22:36:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 3971E6B0085 for ; Tue, 27 Aug 2024 22:36:15 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id D96278184B for ; Wed, 28 Aug 2024 02:36:14 +0000 (UTC) X-FDA: 82500089868.25.1E35F24 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by imf23.hostedemail.com (Postfix) with ESMTP id D6A20140008 for ; Wed, 28 Aug 2024 02:36:12 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=t3XLNwRM; dmarc=pass (policy=quarantine) header.from=fromorbit.com; spf=pass (imf23.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=david@fromorbit.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724812553; a=rsa-sha256; cv=none; b=FTUhFfmtEkESUOQaH5YuQDbcz9gvTWjhXqToA/qTDZ3VRAX3YlpoHAE89Wv1LLNeXF2cCg Uke20tLRyOUYkqsp7EEj0Pq/aVRTwx2yyruUvw4k1ql+fmsDzfZclfQMSyqqDP6KXY+cer P8AIo2wvH0DnnBRFKncvH56G+TfTiDs= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=t3XLNwRM; dmarc=pass (policy=quarantine) header.from=fromorbit.com; spf=pass (imf23.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=david@fromorbit.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724812553; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=s+TZHjkWTFzawcgL5c/YAk6Y9VsBIUN9NZV7T2LiEuc=; b=rtfZMAtStaFZqr7SN0kO8lGsZp7u6fQ9/ozrDVR/FzaDpqP3vd8QMhUX8otBFMOvxqb9Jr sIdXNqzUDqX+2xCAEhsc1v1nQOHg5PMgdcr2a1xjgwx4r9E6wDWJgjdHNvY+BPIsdBP6HL 1oGaqNbG2MaSHg8g2FlG62trwV4hwL4= Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-202376301e6so48002145ad.0 for ; Tue, 27 Aug 2024 19:36:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fromorbit-com.20230601.gappssmtp.com; s=20230601; t=1724812571; x=1725417371; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=s+TZHjkWTFzawcgL5c/YAk6Y9VsBIUN9NZV7T2LiEuc=; b=t3XLNwRMrNlH/JR/K7eAfiQx5cpmu0y9o1wDbH3XSV87ngeIwb3EERa+JhO3sNVhIk 3RRcuyK1OLIMSiU+s191kUoVCftSlk67DqAJhDTPocGHVb43WZQgursSnoMDGdJUu4/C 4FAgVn1j5x8Z/+55XLTCCMMQKM3ezZ4qAyfYwaGTf1ycMTiYoZap53jS9zS8NUuWNS0G nHlgDF86JO1q8WKOjeEA054elGoaOAOkWF7DhWDNHCxEPzBzDIAqwrQ5jGKvozt48PyD aI+2pp0ZV5rUeQKerVVZjuci8u/em3hy5PbEdaIRoneTHCWMlo8e4pEc1X4WxDbKZyNi Txkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724812571; x=1725417371; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=s+TZHjkWTFzawcgL5c/YAk6Y9VsBIUN9NZV7T2LiEuc=; b=lb8HKAxirCAnA/eZ82kNP7xARoMip7QHdu17ypkODIajDOVg/QPPOJHV58Zt30C2Zg iRAw2XbduZa6my+ebZpTskty49tLRSZizl+BtnpxGgd7vkbrX37Na6W9tqpx4GViyYMe u2C7shyjQlq6Xbp3tfetcUcFqs9ku8GrJ/DcNakhUSzIkD/KJb9nJLDo3lnNVSb1zYij nbD+WlhaaBJLcDLNJW9eS81k1SRnlnKT+0Jkda6DZnla8gsrrp+o/41Dmki1KmtXxokf 5W9s8KWFT+l4adhXJzG2IPZJGdFT4RrUwKbsFhMxdxA3sAi1S/w7ADBzYyVdJ70h3dHM DbYQ== X-Forwarded-Encrypted: i=1; AJvYcCVuJo2atMme7BB3YrKXsoALRAspeZYpgnpc1gG8ryT1+fqH4mKSrDMoTF0BS8aw0hHWsoBgZVi0+Q==@kvack.org X-Gm-Message-State: AOJu0Yweqw7NrAel/JODkH3N0okoo/BJz5oC7NBUGUhnhMpxJaDMxQZs RxDy2q/zoiWTe1FMLw6sxYcz9svOLM1yWfABI0JH8SwCVXArrtFpjafJQ3pb9uD4CG1qmy/xL0i X X-Google-Smtp-Source: AGHT+IEyqvxFYY+dbjkO31rmSGQ2hV432+7XnIJ/GMcJzG6x5EY6O/nt2F4jPCFthVWM+sD4+vmasA== X-Received: by 2002:a17:903:40c6:b0:1fd:a264:9433 with SMTP id d9443c01a7336-2039e4ad2f5mr142880175ad.29.1724812571524; Tue, 27 Aug 2024 19:36:11 -0700 (PDT) Received: from dread.disaster.area (pa49-179-0-65.pa.nsw.optusnet.com.au. [49.179.0.65]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2038557f04asm89600055ad.85.2024.08.27.19.36.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Aug 2024 19:36:10 -0700 (PDT) Received: from dave by dread.disaster.area with local (Exim 4.96) (envelope-from ) id 1sj8XY-00FFBv-1n; Wed, 28 Aug 2024 12:36:08 +1000 Date: Wed, 28 Aug 2024 12:36:08 +1000 From: Dave Chinner To: Kent Overstreet Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Andrew Morton , Qi Zheng , Roman Gushchin Subject: Re: [PATCH 03/10] mm: shrinker: Add new stats for .to_text() Message-ID: References: <20240824191020.3170516-1-kent.overstreet@linux.dev> <20240824191020.3170516-4-kent.overstreet@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240824191020.3170516-4-kent.overstreet@linux.dev> X-Rspam-User: X-Rspamd-Queue-Id: D6A20140008 X-Rspamd-Server: rspam01 X-Stat-Signature: e6gk67xnjwhepfiat59hayyppbprosyo X-HE-Tag: 1724812572-24935 X-HE-Meta: U2FsdGVkX1+uOufu+1vxzP7l4yBm0ZrHgdWVze6ZVRxPq5nui3L7DsOwSBVgO1ZnxI97VH3IVK9ZSoeDQQV7pJKcZ6Vu0cdPUZ5eu75rPoT8vL0zPAOncwU2Gwa7RKWtuO6KB36Bkq72Svx/SqYZxVbd0NM6EXQcmSNdFvwF/4/qk7gCy5MDPo1FoNvKVI06w+HjhbeQwDxuIQnKLToinnz5R+5ciqKHdLDRd8mOPJfsOOu2SLnb/f9UEvBlhxeJvYOezgtZKqNH3bTiQGDoLU5DPGJqoxda+d8MOBaa7VZCOf6h5j6k9KfJjTFOPSEl/HjNH8vI9i4+C/eMAQ7l3PTgw/cDtCi+evDRtbG5Kl1i2tA2eyeSbPtjJ1WoZAlPewqzBiqp8FDcb3t2kD0FKarHc2C0bljGaC3P0key9nLBkArxi2Wc8XEUxxF2aUN9llODsBjt2l9XT/IDuQ2OYHuFir/leuSaWtXtCATtRdOInc3SHTeTKV3nSm2QYubu6iH3g/JlwEWTzfsbpWa1ivOCEFLkvAAjqOz3Ry4gmgps9ZdkMX01UMnzHntzyuNOgWUFvWQPDtBi+K45cFKuwwUA8QN9AmkT8sE/Nrj3zK4eM4YcuKGnyyaYb0j8Y7XPyICgqtl+qufpxKOhyoR25dW5bFKVmMg712ed0xxSyF9mRKFXUJ3iMYU5xU4NL1R4d3Gq1SzYQ1jUDTo/pEL17dMEyyo4NiHSjVqeJheK6f8HOQyrcxRRCAS+pqKYM+eF/fZyF5uXgN0L0MnJW45QC75l3ZKDEqPyCsARLhLXuUjzduxhqL47ewRJq+giANPNgunOUAOo9yp9Tf1wnWZioY+Sy4fMD3lS/uTav51pJsX6QgaHOpDlK6/pDyuVVGhkH+Enby710amg2q9JaU/SMViBOIGOGLsX1zwRdb+mWItOYu9xPFeA8R3fs8QvCCxWpaRq0VOgWN5nifOcQB4 XsC6Iw50 BkUFJgFvAm5mi1jHjZQQw14gl2d+dQR7QDJtEWpFeia6doSxz+or9W1U4QfDH5oACmVHGUFnX6JGjRMxz3GFxO+qy/kr8gH/K/9Q641OHw8mvrfqyF5GE3FSb3SGzMWLaIVtpiy4ovk6JdZ5kMaCHDVQE6cFkHGg1GwBOwhaVY1JaOMq4z1ft73g7UG4MBg/vV3G9KHvcnsaPGQ4RJgF1QmNgogDKhVvFR62fSF3wkMfSIOXPIdmAOocKBpLnhTmQVjueMCG+vnNtglT+gGgPydDa0X9OH6FJIHqtdJw7o22CIw2FBbygGxXT148qyjWbjkuTtmxFXueFy4J26Rk3h0uVu/n4SMzpX50LJeCiB3lZlZMvJpDgLPgfi3UvKSTrpnVXF980tzFKNuJ2jOxT8IvCpl2AMpkMqPdRaN3xb4i2pPDgQftgWzZ37Ped7TntoSvfDupAjo4hTxMmznh2bImTdTkuQW1lEgwTZ70tcYI1+kHLt0Wz1+XxwXmrm82A75bcx1zE8kb54wVZQ7ZpSD9PeFy5+ksjIQb4bHD0mjsiCTXm6U7DxOkqZC6AWhJaJudJd+Ihk/jrzRRd3hjwdzLDHQnUSGdWM41CEVJf5MAHoEwhzLZVqyWn+H29D6ybZaia X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Sat, Aug 24, 2024 at 03:10:10PM -0400, Kent Overstreet wrote: > Add a few new shrinker stats. > > number of objects requested to free, number of objects freed: > > Shrinkers won't necessarily free all objects requested for a variety of > reasons, but if the two counts are wildly different something is likely > amiss. > > .scan_objects runtime: > > If one shrinker is taking an excessive amount of time to free > objects that will block kswapd from running other shrinkers. > > Cc: Andrew Morton > Cc: Qi Zheng > Cc: Roman Gushchin > Cc: linux-mm@kvack.org > Signed-off-by: Kent Overstreet > --- > include/linux/shrinker.h | 6 ++++++ > mm/shrinker.c | 23 ++++++++++++++++++++++- > 2 files changed, 28 insertions(+), 1 deletion(-) > > diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h > index 6193612617a1..106622ddac77 100644 > --- a/include/linux/shrinker.h > +++ b/include/linux/shrinker.h > @@ -118,6 +118,12 @@ struct shrinker { > #endif > /* objs pending delete, per node */ > atomic_long_t *nr_deferred; > + > + atomic_long_t objects_requested_to_free; > + atomic_long_t objects_freed; > + unsigned long last_freed; /* timestamp, in jiffies */ > + unsigned long last_scanned; /* timestamp, in jiffies */ > + atomic64_t ns_run; > }; > #define DEFAULT_SEEKS 2 /* A good number if you don't know better. */ > > diff --git a/mm/shrinker.c b/mm/shrinker.c > index ad52c269bb48..feaa8122afc9 100644 > --- a/mm/shrinker.c > +++ b/mm/shrinker.c > @@ -430,13 +430,24 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, > total_scan >= freeable) { > unsigned long ret; > unsigned long nr_to_scan = min(batch_size, total_scan); > + u64 start_time = ktime_get_ns(); > + > + atomic_long_add(nr_to_scan, &shrinker->objects_requested_to_free); > > shrinkctl->nr_to_scan = nr_to_scan; > shrinkctl->nr_scanned = nr_to_scan; > ret = shrinker->scan_objects(shrinker, shrinkctl); > + > + atomic64_add(ktime_get_ns() - start_time, &shrinker->ns_run); > if (ret == SHRINK_STOP) > break; > freed += ret; > + unsigned long now = jiffies; > + if (ret) { > + atomic_long_add(ret, &shrinker->objects_freed); > + shrinker->last_freed = now; > + } > + shrinker->last_scanned = now; > > count_vm_events(SLABS_SCANNED, shrinkctl->nr_scanned); > total_scan -= shrinkctl->nr_scanned; Doing this inside the tight loop (adding 3 atomics and two calls to ktime_get_ns()) is total overkill. Such fine grained accounting doesn't given any extra insight into behaviour compared to accounting the entire loop once. e.g. the actual time the shrinker takes to run is the time the whole loop takes to run, not only the individual shrinker->scan_objects call. The shrinker code already calculates the total objects scanned and the total objects freed by the entire loop, so there is no reason to be calculating this again using much more expensive atomic operations. And these are diagnostic stats - the do not need to be perfectly correct and so atomics are unnecessary overhead the vast majority of the time. This code will have much lower impact on runtime overhead written like this: start_time = ktime_get_ns(); while (total_scan >= batch_size || total_scan >= freeable) { ..... } shrinker->objects_requested_to_free += scanned; shrinker->objects_freed += freed; end_time = ktime_get_ns(); shrinker->ns_run += end_time - start_time; shrinker->last_scanned = end_time; if (freed) shrinker->last_freed = end_time; And still give pretty much the exact same debug information without any additional runtime overhead.... -Dave. -- Dave Chinner david@fromorbit.com