From patchwork Tue Aug 15 12:52:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinjiang Tu X-Patchwork-Id: 13353758 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 26D08C04A6A for ; Tue, 15 Aug 2023 11:58:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 73B298D000A; Tue, 15 Aug 2023 07:58:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6C49F8D0008; Tue, 15 Aug 2023 07:58:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5B3F38D000B; Tue, 15 Aug 2023 07:58:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 450F08D0008 for ; Tue, 15 Aug 2023 07:58:00 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id EAAD5408B0 for ; Tue, 15 Aug 2023 11:57:59 +0000 (UTC) X-FDA: 81126190278.01.EA60246 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by imf04.hostedemail.com (Postfix) with ESMTP id 2EF2D4000A for ; Tue, 15 Aug 2023 11:57:56 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of tujinjiang@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=tujinjiang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692100678; a=rsa-sha256; cv=none; b=C0Iwy/eCG0QzKdLhTNU4mHa2IihWIau6F5agvIdqpDAWBs7HqrRz4riF4a6UMp8Gw72aya W2vUPKjEG9tw153E5mBKWR3NiWpcSoVccyIB/RSl1SbD2cWjUGDLPyaauTFsp0XN/903S3 NZ6wRxARKSgBV6/rP9wSYEAZbCDzwQw= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of tujinjiang@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=tujinjiang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692100678; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SyouQmDbo9ydF8jAbb2wKGNqt0xyDu8xZkF/Ds9sQtA=; b=0K24rCoi/JDiURZY+ok9DEPC6SaUd0md2llDO+xpgusFb0IMYvnZFHxjHyViosrgT8UWUG 2ibutD3cC1j3PW8NkopGbJ0zaG2PkudczPb0WsESlGev898O2SleVTC+HuP9LMwjF8NM53 XA9kj/WxvxKhTyVdIJTzF1WtUtL7iw8= Received: from dggpeml500011.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4RQ8nV0P2VzNmln; Tue, 15 Aug 2023 19:54:22 +0800 (CST) Received: from huawei.com (10.175.113.32) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Tue, 15 Aug 2023 19:57:52 +0800 From: Jinjiang Tu To: , , , , CC: Subject: [PATCH 4/6] tools/vm/page_owner_sort: support for culling by module name Date: Tue, 15 Aug 2023 20:52:49 +0800 Message-ID: <20230815125251.2865852-5-tujinjiang@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230815125251.2865852-1-tujinjiang@huawei.com> References: <20230815125251.2865852-1-tujinjiang@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.113.32] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpeml500011.china.huawei.com (7.185.36.84) X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 2EF2D4000A X-Stat-Signature: bbrttrra768et3x6izkhfwyougbc5sde X-HE-Tag: 1692100676-732341 X-HE-Meta: U2FsdGVkX18QzQIPnC2RWT4iC14rSaJmbMCVUvy8rH70Ywx9YWKjLui92NjhUqjAXAGWQZ+rFRDbQMTiXkmOjPlCnu77DZr32X9996nH4X86yGPtuz6u0FPK7s7pO06T2A1wmu6jiCVQ23Ifr6raEM7Pr37aXFbHf30F2nkCx3u8eg/r55AGxR+CYR4q9rq+k8evqeMI5kqaWmjdEtMHC9ReIe/+k/HxpiSy+Guct3p2pgEs9WWrO+60WBn9F9nJzlY7I2IwfIx9lUxio8q53BbISp80jtR8jTc6/g6k+vlHe1ZphHBlJFVJce7m9lfnM/ks8kB/vlI1EvELl7mCc6eVzRasIIDcve16ofKnyfs7vRU2udVWf4BAkpX9hO4HEqvWP9J44h/WYBl/URt8KWxcTJ82X2Vpp9w00UpS+fyp/gElHOXfnh3KDgTogxdKpF+AXy7/gqFLFM5ixLEmJeibMp5jYq4nta3amQKaHOScnkqRJskVDDU5X8sLuJrlKU8r3DDGpp9If7Ivn5mYh96FA14LQ96ANaEyV+nXBaNilp+1G7d5gz+1kS0/WljRyt0GLsyRO5dVpepvfX4rPhMnOYnzzIMmgixrFhtXHP1O8jTzxCHV60mLbK5Gr2TDv4bX6lQXbZiBM7UmZX3jucJ3C6+rLg41gEmqb7+MVIHRvuA5X6o4nDsKz5mO4Deu/Y0BBHdDGKXVUyBO1VBEhaQeCJl1nz4xlDW8hMfMOEveqPHNmzATGJI+MZBDyyBzs8iXbyo9Q7YaZTs1m3zFNZMQZttQ8OMKXEKHfqqZTQv/pbYHvv7RSdgT4OQDgJEVOS+YuNyOIJCQTy6DnVTFSIB/QLg09tBQ6sPFPiZ4oaoiG/6o6aqnd9e2QLoDosabXNx1vf9/xIEXk2fmPt475bInj3j4HO3QsUEarH3WPPPFY/t/LlK0/pY/lLQKif6jATAHmu5DBO8ccifK5mn GwOlCMuE jpYTKsHDliN+lhujBUq2aLk6b/ovuFT9zwyPUrcJubHDvNcwPFMyzUKjcfO1heOgvv6LkyGykw1iK9MZA1tIbi0Tzue25UOk0xF+CqOJxb0ndUdyGvOoX6lMTm1awOwvdvoO9csdTc4Tje/IEf2cZfrLVm1h6mQnyTV1MZix0+P5YoVIPp+jBBMDdEMxydWNF34Cq 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: The --cull option allows the items that have the same information to be culled, such as pid, command name, stacktrace. This patch supports new cull arg (i.e. module) to cull the items by who allocates the page. For example, with --cull=module option, the items will be culled as follows: 314842 times, 334218 pages, module: 202508 times, 206389 pages, module: ext4 16711 times, 16753 pages, module: zram For the first line, there is no string afther "module:", which means the pages are allocated by the kernel core, not by modules. Signed-off-by: Jinjiang Tu --- tools/mm/page_owner_sort.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c index 6fd689199789..35acf6932d78 100644 --- a/tools/mm/page_owner_sort.c +++ b/tools/mm/page_owner_sort.c @@ -56,7 +56,8 @@ enum CULL_BIT { CULL_TGID = 1<<3, CULL_COMM = 1<<4, CULL_STACKTRACE = 1<<5, - CULL_ALLOCATOR = 1<<6 + CULL_ALLOCATOR = 1<<6, + CULL_MODULE = 1 << 7 }; enum ALLOCATOR_BIT { ALLOCATOR_CMA = 1<<1, @@ -67,7 +68,7 @@ enum ALLOCATOR_BIT { enum ARG_TYPE { ARG_TXT, ARG_COMM, ARG_STACKTRACE, ARG_ALLOC_TS, ARG_FREE_TS, ARG_CULL_TIME, ARG_PAGE_NUM, ARG_PID, ARG_TGID, ARG_UNKNOWN, ARG_FREE, - ARG_ALLOCATOR + ARG_ALLOCATOR, ARG_MODULE }; enum SORT_ORDER { SORT_ASC = 1, @@ -211,6 +212,13 @@ static int compare_release(const void *p1, const void *p2) return l1->free_ts_nsec ? 1 : -1; } +static int compare_module(const void *p1, const void *p2) +{ + const struct block_list *l1 = p1, *l2 = p2; + + return strcmp(l1->module, l2->module); +} + static int compare_cull_condition(const void *p1, const void *p2) { if (cull == 0) @@ -227,6 +235,8 @@ static int compare_cull_condition(const void *p1, const void *p2) return compare_release(p1, p2); if ((cull & CULL_ALLOCATOR) && compare_allocator(p1, p2)) return compare_allocator(p1, p2); + if ((cull & CULL_MODULE) && compare_module(p1, p2)) + return compare_module(p1, p2); return 0; } @@ -443,6 +453,8 @@ static int get_arg_type(const char *arg) return ARG_ALLOC_TS; else if (!strcmp(arg, "allocator") || !strcmp(arg, "ator")) return ARG_ALLOCATOR; + else if (!strcmp(arg, "module") || !strcmp(arg, "mod")) + return ARG_MODULE; else { return ARG_UNKNOWN; } @@ -601,6 +613,8 @@ static bool parse_cull_args(const char *arg_str) cull |= CULL_UNRELEASE; else if (arg_type == ARG_ALLOCATOR) cull |= CULL_ALLOCATOR; + else if (arg_type == ARG_MODULE) + cull |= CULL_MODULE; else { free_explode(args, size); return false; @@ -920,6 +934,8 @@ int main(int argc, char **argv) fprintf(fout, ", TGID %d", list[i].tgid); if (cull & CULL_COMM || filter & FILTER_COMM) fprintf(fout, ", task_comm_name: %s", list[i].comm); + if (cull & CULL_MODULE || filter & FILTER_MODULE) + fprintf(fout, ", module: %s", list[i].module); if (cull & CULL_ALLOCATOR) { fprintf(fout, ", "); print_allocator(fout, list[i].allocator);