Received: by 2002:a19:771d:0:0:0:0:0 with SMTP id s29csp1264989lfc; Wed, 1 Jun 2022 13:32:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxwJlwXGihPo8oL9WSmX7qUoXy2WipX2RRrIVoJODgYSYp0gQoLdKbCgFjyJPBwuFSP1SSD X-Received: by 2002:a62:8101:0:b0:51b:b859:7043 with SMTP id t1-20020a628101000000b0051bb8597043mr1289396pfd.25.1654115558777; Wed, 01 Jun 2022 13:32:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654115558; cv=none; d=google.com; s=arc-20160816; b=jBQWmlMbUdhqvM9hvZMqe/B9gTfsaMY/BJ+dpX4mjx1KB7OcdvHPrxJCva72Q1Ql/M hs0G63E0tjYQyh3k84dQTWN3wOdj6/2RQPq2xhEyURcO9vy4ERVyTVaOpy6r+PSmaMdz OuRrL9R/3vjSNAAltcDGsfjjDeLHjRkb/GuzbYzLOmVBrdyIT87FyP9dtTaGXCP4EK0V QZ9tWBLtgnrCmIz89OhVSskU8l376npyhdtsunGG31O6Zw7JEuioZoE9nABsxezHMYeS Y6yoyer1D8XVHiWRuVvZ0e43OHC65dGfasTsCr2Cn93xLGz4DAd/yIpSPvAS95ugcKm0 JgKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=ZV6oySeonpvdUIam5jdY49JjFC/NWsii46AE5VUm0Nk=; b=ZPEHPktVuq8+uObTfhBxSKM6p71X9Z02DNalM8b+GYJSqOSsVM3ZugeDinAjQ6anR4 ekdAuYvL3J9REqNeA1UuYGBi59tqeWHHz6m3dMPsE1ljUcE8OJTutDqlKLIrVs2pliK2 u0Q82IjXHFY7xgTSpJgIbcolE0bxw8PlWVPI8qvaRBC2Fdo9xs79FDvMG92Z5XujOrt8 6WNmCEvUVTy68/jz1W5SC37MMSvJM3D2D3fbfF9BzP2n5iYh0xruYzd7PZyNb45XxTRC 1opgZbZjSozHn8uuIJ/W1zMjsxW3NTxObVFkQNYtPB/fNRa9ErM1U4mwB/WVKilMTmpl bmxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="s8uFRMz/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id k14-20020a170902c40e00b00164057de574si4146833plk.323.2022.06.01.13.32.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 13:32:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="s8uFRMz/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 812661CAC04; Wed, 1 Jun 2022 12:42:09 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349331AbiFADWm (ORCPT + 99 others); Tue, 31 May 2022 23:22:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345174AbiFADWk (ORCPT ); Tue, 31 May 2022 23:22:40 -0400 Received: from out2.migadu.com (out2.migadu.com [188.165.223.204]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74BEE1582F for ; Tue, 31 May 2022 20:22:36 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1654053754; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=ZV6oySeonpvdUIam5jdY49JjFC/NWsii46AE5VUm0Nk=; b=s8uFRMz//xxr2CRQYsqfNipo0LSW1a6uTBb1SMoswMPS37mItP9o9NSC8xc7q6yu0M1G3A +X+g27FmuCq/2rscya0E3+r/lZ72ExGIQwjnPYszZgmBkkoshaBpUHxdHNa84prQeGKWjK 1xq3JyT1r6Vl7f9ESrxDub3EvG9dHws= From: Roman Gushchin To: Andrew Morton , linux-mm@kvack.org Cc: Dave Chinner , linux-kernel@vger.kernel.org, Kent Overstreet , Hillf Danton , Christophe JAILLET , Muchun Song , Roman Gushchin Subject: [PATCH v5 0/6] mm: introduce shrinker debugfs interface Date: Tue, 31 May 2022 20:22:21 -0700 Message-Id: <20220601032227.4076670-1-roman.gushchin@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: linux.dev X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The only existing debugging mechanism is a couple of tracepoints in do_shrink_slab(): mm_shrink_slab_start and mm_shrink_slab_end. They aren't covering everything though: shrinkers which report 0 objects will never show up, there is no support for memcg-aware shrinkers. Shrinkers are identified by their scan function, which is not always enough (e.g. hard to guess which super block's shrinker it is having only "super_cache_scan"). To provide a better visibility and debug options for memory shrinkers this patchset introduces a /sys/kernel/debug/shrinker interface, to some extent similar to /sys/kernel/slab. For each shrinker registered in the system a directory is created. As now, the directory will contain only a "scan" file, which allows to get the number of managed objects for each memory cgroup (for memcg-aware shrinkers) and each numa node (for numa-aware shrinkers on a numa machine). Other interfaces might be added in the future. To make debugging more pleasant, the patchset also names all shrinkers, so that debugfs entries can have meaningful names. v5: 1) universal shrinker naming scheme, by Dave 2) docs improvement, by Muchun v4: 1) multiple shrinkers naming enhancements, by Kent and Dave 2) multiple minor fixes/optimizations, by Muchun v3: 1) separated the "scan" part into a separate patch, by Dave 2) merged *_memcg, *_node and *_memcg_node interfaces, by Dave 3) shrinkers naming enhancements, by Christophe and Dave 4) added signal_pending() check, by Hillf 5) enabled by default, by Dave v2: 1) switched to debugfs, suggested by Mike, Andrew, Greg and others 2) switched to seq_file API for output, no PAGE_SIZE limit anymore, by Andrew 3) switched to down_read_killable(), suggested by Hillf 4) dropped stateful filtering and "freed" returning, by Kent 5) added docs, by Andrew 6) added memcg_shrinker.py tool rfc: https://lwn.net/Articles/891542/ Roman Gushchin (6): mm: memcontrol: introduce mem_cgroup_ino() and mem_cgroup_get_from_ino() mm: shrinkers: introduce debugfs interface for memory shrinkers mm: shrinkers: provide shrinkers with names mm: docs: document shrinker debugfs tools: add memcg_shrinker.py mm: shrinkers: add scan interface for shrinker debugfs Documentation/admin-guide/mm/index.rst | 1 + .../admin-guide/mm/shrinker_debugfs.rst | 135 +++++++++ arch/x86/kvm/mmu/mmu.c | 2 +- drivers/android/binder_alloc.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_shrinker.c | 3 +- drivers/gpu/drm/msm/msm_gem_shrinker.c | 2 +- .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 2 +- drivers/gpu/drm/ttm/ttm_pool.c | 2 +- drivers/md/bcache/btree.c | 2 +- drivers/md/dm-bufio.c | 3 +- drivers/md/dm-zoned-metadata.c | 4 +- drivers/md/raid5.c | 2 +- drivers/misc/vmw_balloon.c | 2 +- drivers/virtio/virtio_balloon.c | 2 +- drivers/xen/xenbus/xenbus_probe_backend.c | 2 +- fs/btrfs/super.c | 2 + fs/erofs/utils.c | 2 +- fs/ext4/extents_status.c | 3 +- fs/f2fs/super.c | 2 +- fs/gfs2/glock.c | 2 +- fs/gfs2/main.c | 2 +- fs/jbd2/journal.c | 3 +- fs/mbcache.c | 2 +- fs/nfs/nfs42xattr.c | 7 +- fs/nfs/super.c | 2 +- fs/nfsd/filecache.c | 2 +- fs/nfsd/nfscache.c | 3 +- fs/quota/dquot.c | 2 +- fs/super.c | 6 +- fs/ubifs/super.c | 2 +- fs/xfs/xfs_buf.c | 3 +- fs/xfs/xfs_icache.c | 2 +- fs/xfs/xfs_qm.c | 3 +- include/linux/memcontrol.h | 21 ++ include/linux/shrinker.h | 31 +- kernel/rcu/tree.c | 2 +- lib/Kconfig.debug | 9 + mm/Makefile | 1 + mm/huge_memory.c | 4 +- mm/memcontrol.c | 23 ++ mm/shrinker_debug.c | 285 ++++++++++++++++++ mm/vmscan.c | 64 +++- mm/workingset.c | 2 +- mm/zsmalloc.c | 3 +- net/sunrpc/auth.c | 2 +- tools/cgroup/memcg_shrinker.py | 71 +++++ 46 files changed, 688 insertions(+), 46 deletions(-) create mode 100644 Documentation/admin-guide/mm/shrinker_debugfs.rst create mode 100644 mm/shrinker_debug.c create mode 100755 tools/cgroup/memcg_shrinker.py -- 2.35.3