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 F2A2DC3ABC0 for ; Wed, 7 May 2025 23:36:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BE10E6B0085; Wed, 7 May 2025 19:36:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B8E0D6B0088; Wed, 7 May 2025 19:36:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A2DA16B0089; Wed, 7 May 2025 19:36:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 7C0816B0085 for ; Wed, 7 May 2025 19:36:28 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id BA60B815B3 for ; Wed, 7 May 2025 23:36:28 +0000 (UTC) X-FDA: 83417723256.26.18C9B78 Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) by imf29.hostedemail.com (Postfix) with ESMTP id D4C9E120004 for ; Wed, 7 May 2025 23:36:26 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=zAOwC47O; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf29.hostedemail.com: domain of surenb@google.com designates 209.85.160.173 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746660986; a=rsa-sha256; cv=none; b=MyT3Fx0yfsoI7CwdE3HlqK4mYeS6mKvqzJQMGHxppbWO8IJYxg1zP/TE1fx7YYbnQGSfFx 2hr8NRGKvO6hbmWHqmQiK4/8fcfHFvBMSuis5KIeuhgdn1qf8fI0qcD3zrd+xWEdth4zAT /rg60IsWoNjT9ZwLI4493jbO49/cwx0= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=zAOwC47O; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf29.hostedemail.com: domain of surenb@google.com designates 209.85.160.173 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746660986; 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:dkim-signature; bh=8aldovWRH+puMg8AxO3x9rqrDR7t6OJycgaSzdWffNg=; b=u2uyuf9LTxxBkfhWOC4FDRcZ07YrN7sk4qoKDSq0wwop9nuDmDJcXFXjlP4eZnEZac3Qfp +Z51V0lBkhrgAXMZB+sYxZLSouycAyUMygd+Z5bCHEiCNo9QTzCZud4ZuJXl4CouUpXWM7 KoI8eyfVmVKD6finpkz5z75bLcJ/0p8= Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-47e9fea29easo93251cf.1 for ; Wed, 07 May 2025 16:36:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1746660986; x=1747265786; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=8aldovWRH+puMg8AxO3x9rqrDR7t6OJycgaSzdWffNg=; b=zAOwC47OJhS4MgfPOKRZnxjhIVr3BUBHq5v+Tig2P1e1oekyVpW8FQEkS1TrzsmfMr Wm25qikI40nrCBVXEFifSp+3KziScEGmZvJTnbQ1rEH25LoAz1p0cwVP69pg2NyN1/CE BYPsZ2KjqIceuG5vsZxKOSALv3Z4tUiXj6cx9FbVbV/A7Rc5GFg6TwUXbBCXEYvLDNsn rPTX6oFsBPISqT4zopXoBq1aMe/CwPl/ca1ODlON8nyt0wHU9MX4GXg+1KBSVWfVomZE O3wP2VHsBUooN8cu5yiVn+Sk8UGE0wFr6XRW/Ok04ahtVFjO4bcKG0D5I930l9SyH6VL dzvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746660986; x=1747265786; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8aldovWRH+puMg8AxO3x9rqrDR7t6OJycgaSzdWffNg=; b=p+u4jt/ikwnUsfboskhu5+FYSao6wq9ue3coehpHQaQ7dykbHIWpQDodpDOfb1ciy7 YvoROkN1q6Lqn5j6vyDcdv4q6OHmzaoY/qn2UltjxPKnAMZGUS3438cpTffsiIpgmD6r tdP1855YtnCVRD4YkQ9Q6w1VhmuCRjxAFKbZ4IX3M+hJhBliVMuCRJoOzFuEXaDla21F aWX35kTAP02RXb6mdv/jipsacCqJrCOq50cWDUBHSjgtWh3OsqMeOH1pb3NmkFMZbodx fnTpFjI+Jc2Gahck0Ajp+Olen75kUFrC88RdL5sW1FZbPZiM1xg8wKp5lq6GYyiGMPq6 G8LA== X-Forwarded-Encrypted: i=1; AJvYcCUko9Wd+UmKjV1iNktdqz9uU44Akqzv5bOoZu+EmGWILjv3SihRLz8+HRmtD8TohEl1Xairm/L30w==@kvack.org X-Gm-Message-State: AOJu0YwqWUQNrnVwKIyL7cKSrVbs6vnskzX0WSQxFsdcHEO738sonUBV bJ/qPX6AyQWPX6ONawilUQZmgxeinp/hiM8sNxDJ4/XfD/88HuleO7JL+XGzHiXkZ7gbPruQEkq wfC0uZM/NZbXOZB4yM2DpoT8LSyky5q32W23AlEBQjPXjy+VHw7JpJwE= X-Gm-Gg: ASbGnctV8JRRdGtjngwx+wS1E17M/a/dHu1i+qAXiqZGosGlWF5yf0Ma5wIeHOFE0+O BuUdvxGeyc8xVBqn3yNVGq7r1mRE5QnVE7dQ4fc2kNKeL3QWfG9x2eOixxY9VQtcM0RYg1t2A5p x4X03VzVslZ0xOKPhGrPv7TPy1QidNYbSq5dlfw+rG08PGS3U1SQ== X-Google-Smtp-Source: AGHT+IEbPkoRLOga2k+Y5MgUZXqmjrfGhvlN0x2PIYFisMbyZ342+nyqgX211Wo2cYAaA8wqfeIUH1miXjcaaDYJooU= X-Received: by 2002:a05:622a:a:b0:480:dde:aa4c with SMTP id d75a77b69052e-49449969697mr1805081cf.4.1746660985591; Wed, 07 May 2025 16:36:25 -0700 (PDT) MIME-Version: 1.0 References: <20250507175500.204569-1-00107082@163.com> In-Reply-To: <20250507175500.204569-1-00107082@163.com> From: Suren Baghdasaryan Date: Wed, 7 May 2025 23:36:14 +0000 X-Gm-Features: ATxdqUF_nc9bmoFQkg3sF4E4VCOpZ0cWg53SUL7J04pEjkzSZ_zEjp-K5KsWGr8 Message-ID: Subject: Re: [PATCH] alloc_tag: avoid mem alloc and iter reset when reading allocinfo To: David Wang <00107082@163.com> Cc: kent.overstreet@linux.dev, akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Queue-Id: D4C9E120004 X-Rspamd-Server: rspam04 X-Stat-Signature: net1hq9t3uqosgtebfpzwe5gn4okugme X-HE-Tag: 1746660986-769530 X-HE-Meta: U2FsdGVkX193CWiisUfc/WqBFycO768GYM5OO8CAr3Xv4m+uZojro6RkcYbOl52z5Dmb56laAHq/FhihXSBu0XnaDBscH5BG59g/6EDEfBordG3Xd2NoSa+v7TEwEBEEPr2jsNQvlwt1gHaUDIQHJrbjlRjiTFvk8Ep8XrzVjf+Pioer+k4QIdtBHMxhECEMqA8zQ1pOazVfuTb3AA3dXMQZ1qeilr4KmxmbN8aBoOSofOWOXdZzkVzmQvxEjzk14R7FS9Ui7EkTUkUonLf6mz5DOm5UlX1dq88phOKr/YTPk+diUOKRYGdFKxQy+HBcRI5hjS1+3TaNunRyNK65lzwH7tECQgFACBCZinpqrxPBCzBRwWNCAp+9Ax510ALTZJjHcMzlvbXdJV5gaiPUxKZUlO8D1ZH8HjZGEVK1tKVd906yNiS6e2IURAsAkpcBD2O8JGFrc0XYCGmiwAWHwjT8pO0ObLp1nAQnUV5yUL2LUR6dEe5mf7IdtBtNILkz+Z7ObEIIweIA7ygRX/OY18zKH2MJTp05lE8X12zcGFy/8j178mXKcAUhMIV7hlg/z9ba7lOtEUfxfiy/xmnB90ZfPpNiuACCQ5zyDkmhnzPUldbRPAoBUIaOJbHfqzvNdU9v74TircFAn3k/2eIuNxYLhKvB61Sck+itH5NuNtsxSRrRfO2RlFYipzVey/2lcCNe4S/HhGUbACOHo7CHU3AS6rQtWPDeeH30djQYtaw4FNWUNfHnK13nACgg3o0ClhtbBvccBM+2p3gqiWyZXGqgzVOtYFFhKdxIYVEoD0IVz9ekfNCEC1v8VS1xJsHbo34DRuXqXfl1yyvHsHIHClbgnAkgUVq1bDZIEFM7jN+lOLAGzyPVdnI2slkTvzXbz4tcmYaFaFfKLFCzjf7aa7fDJ7U2Lk62O2noL/6dFjWRL+kdBxUdXSjvVTJK5yU7HfdPNHCkigATWbR971B 3m6KAMe/ WvSFLTanvkDNl8ic9cYzkQWrJHhpaJZ1zbLJHz0lYEdhc6s9zkpPme8WV0HJhdUeuck3QoWLrqxh0madE59nYL2IkcB/EUUnbjx5G6iiv0gvJxnWoqRgvDRcB8jZzDi3pm1HPE/aUFhZAupfnbC0xRpLFlVQBfSrPvGz81xJ1dwUfk4im9h79RD9/9BiJ4qtiaFO7SCpU21IRD+94/hJ3QIsBaBhV9hVCYyrk/mdtSaMY2wMmKtzO4XCKqp5WhLKAULeI0acDbB6sMBowvCB7O9rLfpiPWUPg2gESs3P2rk5hYC6Mtd2uVJI+066F3sJg3SCwAoaRGkcAx2jXaYGPmA3mLT0PIRWLlgxO 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 Wed, May 7, 2025 at 5:55=E2=80=AFPM David Wang <00107082@163.com> wrote: > > --- > The patch is not complete, just want to get feedbacks whether this > worth carrying on. In such cases it's customary to mark the patch as RFC which saves you time on explaining your motivation :) > --- > When reading /proc/allocinfo, for each read syscall, seq_file would > invoke start/stop callbacks. In start callback, a memory is alloced > to store iterator and the iterator would restart from beginning to > walk to its previous position. > Each seq_file read() takes at most 4096 bytes, even read with a larger > user space buffer, meaning read out /proc/allocinfo, tens of read > syscalls are needed. For example, a 306036 bytes allocinfo files need > 76 reads: > > $ sudo cat /proc/allocinfo | wc > 3964 16678 306036 > > For those n=3D3964 lines, each read takes about m=3D3964/76=3D52 lines, > the iter would be rewinding: > m steps on 1st read, > 2*m steps on 2nd read > 3*m steps on 3rd read > ... > n steps on the last read > totally, the iterator would be iterated O(n*n/m) times. > (Each read would take more time than previous one.) > > To use a private data alloced when /proc/allocinfo is opened, > the n/m memory alloction could be avoid, and there is no need > to restart the iterator from very beginning everytime. > So only 1 memory allocation and n steps for iterating are needed. > (Only when module changed, the iterator should be invalidated and > restart.) Yeah, your change makes sense and looks like a good optimization. From a quick look at the code, codetag_next_ct() should handle the case when a module gets removed from under us while we are not holding cttype->mod_lock. I'll need to take another closer look at it once you post an official patch. Thanks! > > Timings before: > $ time cat /proc/allocinfo > /dev/null > > real 0m0.007s > user 0m0.000s > sys 0m0.007s > read-syscalls get slower and slower: > read(3, "allocinfo - version: 1.0\n# <"..., 131072) =3D 4085 = <0.000062> > ... > read(3, " 0 0 drivers/gp"..., 131072) =3D 4046 <= 0.000135> > read(3, " 0 0 sound/core"..., 131072) =3D 4021 <= 0.000150> > ... > > and with the change: > $ time cat /proc/allocinfo > /dev/null > > real 0m0.004s > user 0m0.000s > sys 0m0.003s > 7ms drop to 4ms, more friendly to monitoring tools. > > Detailed strace stats before the change: > $ sudo strace -T -e read cat /proc/allocinfo > /dev/null > read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@>\2\0\0\0= \0\0"..., 832) =3D 832 <0.000040> > read(3, "allocinfo - version: 1.0\n# <"..., 131072) =3D 4085 = <0.000062> > read(3, " 4096 1 arch/x86/k"..., 131072) =3D 4063 <= 0.000062> > read(3, " 0 0 arch/x86/k"..., 131072) =3D 4029 <= 0.000061> > read(3, " 64 1 kernel/wor"..., 131072) =3D 4064 <= 0.000061> > read(3, " 0 0 kernel/sch"..., 131072) =3D 4041 <= 0.000051> > read(3, " 4992 39 kernel/irq"..., 131072) =3D 4061 <= 0.000070> > read(3, " 0 0 kernel/fut"..., 131072) =3D 4060 <= 0.000071> > read(3, " 0 0 kernel/aud"..., 131072) =3D 4025 <= 0.000122> > read(3, " 1536 3 kernel/tra"..., 131072) =3D 4014 <= 0.000064> > read(3, " 0 0 kernel/tra"..., 131072) =3D 4079 <= 0.000067> > read(3, " 0 0 kernel/tra"..., 131072) =3D 4035 <= 0.000072> > read(3, " 0 0 kernel/bpf"..., 131072) =3D 4044 <= 0.000074> > read(3, " 0 0 kernel/bpf"..., 131072) =3D 4061 <= 0.000063> > read(3, " 0 0 ./include/"..., 131072) =3D 4084 <= 0.000063> > read(3, " 0 0 kernel/eve"..., 131072) =3D 4084 <= 0.000071> > read(3, " 278528 68 mm/memory."..., 131072) =3D 4068 <= 0.000070> > read(3, " 0 0 mm/zswap.c"..., 131072) =3D 4091 <= 0.000082> > read(3, " 0 0 mm/balloon"..., 131072) =3D 4039 <= 0.000083> > read(3, " 0 0 fs/splice."..., 131072) =3D 4095 <= 0.000083> > read(3, " 0 0 fs/binfmt_"..., 131072) =3D 4039 <= 0.000075> > read(3, " 192 3 fs/proc/kc"..., 131072) =3D 4088 <= 0.000076> > read(3, " 0 0 ipc/mqueue"..., 131072) =3D 4017 <= 0.000076> > read(3, " 0 0 security/s"..., 131072) =3D 4075 <= 0.000072> > read(3, " 0 0 security/s"..., 131072) =3D 4029 <= 0.000084> > read(3, " 0 0 security/t"..., 131072) =3D 4053 <= 0.000076> > read(3, " 0 0 security/a"..., 131072) =3D 4054 <= 0.000078> > read(3, " 0 0 crypto/rsa"..., 131072) =3D 4046 <= 0.000081> > read(3, " 0 0 crypto/asy"..., 131072) =3D 4079 <= 0.000081> > read(3, " 1728 9 block/blk-"..., 131072) =3D 4034 <= 0.000084> > read(3, " 0 0 io_uring/r"..., 131072) =3D 4044 <= 0.000085> > read(3, " 0 0 lib/crypto"..., 131072) =3D 4056 <= 0.000363> > read(3, " 0 0 lib/pldmfw"..., 131072) =3D 4079 <= 0.000091> > read(3, " 384 6 drivers/pc"..., 131072) =3D 4091 <= 0.000098> > read(3, " 0 0 drivers/vi"..., 131072) =3D 4068 <= 0.000093> > read(3, " 4096 1 drivers/ac"..., 131072) =3D 4086 <= 0.000089> > read(3, " 11040 230 drivers/ac"..., 131072) =3D 4001 <= 0.000090> > read(3, " 0 0 drivers/ac"..., 131072) =3D 4030 <= 0.000094> > read(3, " 0 0 drivers/dm"..., 131072) =3D 4031 <= 0.000094> > read(3, " 0 0 drivers/xe"..., 131072) =3D 4085 <= 0.000097> > read(3, " 4224 33 drivers/tt"..., 131072) =3D 4086 <= 0.000097> > read(3, " 0 0 drivers/io"..., 131072) =3D 4038 <= 0.000097> > read(3, " 0 0 drivers/io"..., 131072) =3D 4034 <= 0.000100> > read(3, " 64 2 drivers/ba"..., 131072) =3D 4094 <= 0.000110> > read(3, " 0 0 drivers/ba"..., 131072) =3D 4025 <= 0.000100> > read(3, " 0 0 drivers/dm"..., 131072) =3D 4077 <= 0.000106> > read(3, " 0 0 drivers/i2"..., 131072) =3D 4049 <= 0.000103> > read(3, " 0 0 drivers/ed"..., 131072) =3D 4035 <= 0.000108> > read(3, " 0 0 drivers/fi"..., 131072) =3D 4052 <= 0.000107> > read(3, " 0 0 net/core/s"..., 131072) =3D 4057 <= 0.000119> > read(3, " 5248 82 net/core/r"..., 131072) =3D 4050 <= 0.000110> > read(3, " 0 0 net/core/d"..., 131072) =3D 4047 <= 0.000111> > read(3, " 0 0 net/ethtoo"..., 131072) =3D 4059 <= 0.000112> > read(3, " 32 1 net/ipv4/r"..., 131072) =3D 4052 <= 0.000116> > read(3, " 1920 10 net/ipv4/i"..., 131072) =3D 4040 <= 0.000116> > read(3, " 0 0 net/xfrm/x"..., 131072) =3D 4071 <= 0.000118> > read(3, " 0 0 net/ipv6/i"..., 131072) =3D 4053 <= 0.000120> > read(3, " 0 0 net/devlin"..., 131072) =3D 4064 <= 0.000120> > read(3, " 0 0 lib/decomp"..., 131072) =3D 3996 <= 0.000123> > read(3, " 0 0 drivers/vi"..., 131072) =3D 4043 <= 0.000121> > read(3, " 0 0 drivers/us"..., 131072) =3D 4045 <= 0.000123> > read(3, " 0 0 drivers/us"..., 131072) =3D 4020 <= 0.000126> > read(3, " 64 1 drivers/sc"..., 131072) =3D 4043 <= 0.000128> > read(3, " 0 0 drivers/ne"..., 131072) =3D 4094 <= 0.000130> > read(3, " 0 0 drivers/hi"..., 131072) =3D 4025 <= 0.000132> > read(3, " 672 6 fs/ext4/mb"..., 131072) =3D 4071 <= 0.000132> > read(3, " 0 0 fs/autofs/"..., 131072) =3D 4038 <= 0.000134> > read(3, " 0 0 fs/fuse/fi"..., 131072) =3D 4093 <= 0.000134> > read(3, " 0 0 drivers/gp"..., 131072) =3D 4035 <= 0.000133> > read(3, " 0 0 drivers/gp"..., 131072) =3D 4046 <= 0.000135> > read(3, " 0 0 sound/core"..., 131072) =3D 4021 <= 0.000150> > read(3, " 0 0 sound/core"..., 131072) =3D 4000 <= 0.000134> > read(3, " 2048 1 drivers/vi"..., 131072) =3D 4078 <= 0.000138> > read(3, " 3328 104 drivers/gp"..., 131072) =3D 4040 <= 0.000143> > read(3, " 0 0 fs/overlay"..., 131072) =3D 4075 <= 0.000141> > read(3, " 0 0 net/netfil"..., 131072) =3D 4061 <= 0.000139> > read(3, " 0 0 net/xfrm/x"..., 131072) =3D 2022 <= 0.000129> > read(3, "", 131072) =3D 0 <0.000114> > > And with this change: > $ sudo strace -T -e read cat /proc/allocinfo > /dev/null > read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@>\2\0\0\0\0\0"...= , 832) =3D 832 <0.000018> > read(3, "allocinfo - version: 1.0\n# <"..., 131072) =3D 4085 <0.00006= 6> > read(3, " 4096 1 arch/x86/k"..., 131072) =3D 4063 <0.000062= > > read(3, " 0 0 arch/x86/k"..., 131072) =3D 4029 <0.000062= > > read(3, " 64 1 kernel/wor"..., 131072) =3D 4064 <0.000064= > > read(3, " 0 0 kernel/sch"..., 131072) =3D 4041 <0.000046= > > read(3, " 4992 39 kernel/irq"..., 131072) =3D 4061 <0.000053= > > read(3, " 0 0 kernel/fut"..., 131072) =3D 4060 <0.000054= > > read(3, " 0 0 kernel/aud"..., 131072) =3D 4025 <0.000053= > > read(3, " 1536 3 kernel/tra"..., 131072) =3D 4014 <0.000051= > > read(3, " 0 0 kernel/tra"..., 131072) =3D 4079 <0.000050= > > read(3, " 0 0 kernel/tra"..., 131072) =3D 4035 <0.000051= > > read(3, " 0 0 kernel/bpf"..., 131072) =3D 4044 <0.000053= > > read(3, " 0 0 kernel/bpf"..., 131072) =3D 4061 <0.000053= > > read(3, " 0 0 ./include/"..., 131072) =3D 4084 <0.000052= > > read(3, " 0 0 kernel/eve"..., 131072) =3D 4084 <0.000072= > > read(3, " 286720 70 mm/memory."..., 131072) =3D 4068 <0.000071= > > read(3, " 0 0 mm/zswap.c"..., 131072) =3D 4091 <0.000056= > > read(3, " 0 0 mm/balloon"..., 131072) =3D 4039 <0.000056= > > read(3, " 0 0 fs/splice."..., 131072) =3D 4095 <0.000076= > > read(3, " 0 0 fs/binfmt_"..., 131072) =3D 4039 <0.000075= > > read(3, " 192 3 fs/proc/kc"..., 131072) =3D 4088 <0.000057= > > read(3, " 0 0 ipc/mqueue"..., 131072) =3D 4017 <0.000055= > > read(3, " 0 0 security/s"..., 131072) =3D 4075 <0.000046= > > read(3, " 0 0 security/s"..., 131072) =3D 4029 <0.000045= > > read(3, " 0 0 security/t"..., 131072) =3D 4053 <0.000050= > > read(3, " 0 0 security/a"..., 131072) =3D 4054 <0.000060= > > read(3, " 0 0 crypto/rsa"..., 131072) =3D 4046 <0.000181= > > read(3, " 0 0 crypto/asy"..., 131072) =3D 4079 <0.000051= > > read(3, " 1728 9 block/blk-"..., 131072) =3D 4034 <0.000070= > > read(3, " 0 0 io_uring/r"..., 131072) =3D 4044 <0.000078= > > read(3, " 0 0 lib/crypto"..., 131072) =3D 4066 <0.000067= > > read(3, " 0 0 arch/x86/l"..., 131072) =3D 4085 <0.000066= > > read(3, " 7168 7 drivers/pc"..., 131072) =3D 4090 <0.000066= > > read(3, " 0 0 drivers/vi"..., 131072) =3D 4063 <0.000065= > > read(3, " 1024 1 drivers/ac"..., 131072) =3D 4094 <0.000067= > > read(3, " 0 0 drivers/ac"..., 131072) =3D 4023 <0.000063= > > read(3, " 2048 2 drivers/ac"..., 131072) =3D 4020 <0.000066= > > read(3, " 0 0 drivers/dm"..., 131072) =3D 4094 <0.000067= > > read(3, " 0 0 drivers/xe"..., 131072) =3D 4087 <0.000068= > > read(3, " 1024 1 drivers/tt"..., 131072) =3D 4093 <0.000056= > > read(3, " 0 0 drivers/io"..., 131072) =3D 4037 <0.000044= > > read(3, " 0 0 drivers/io"..., 131072) =3D 4095 <0.000061= > > read(3, " 0 0 drivers/ba"..., 131072) =3D 4045 <0.000059= > > read(3, " 0 0 drivers/ba"..., 131072) =3D 4011 <0.000057= > > read(3, " 0 0 drivers/ma"..., 131072) =3D 4087 <0.000064= > > read(3, " 0 0 drivers/i2"..., 131072) =3D 4028 <0.000059= > > read(3, " 0 0 drivers/ed"..., 131072) =3D 4048 <0.000080= > > read(3, " 0 0 drivers/fi"..., 131072) =3D 4082 <0.000054= > > read(3, " 0 0 net/core/s"..., 131072) =3D 4091 <0.000068= > > read(3, " 0 0 net/core/f"..., 131072) =3D 4041 <0.000053= > > read(3, " 20 1 net/sched/"..., 131072) =3D 4054 <0.000051= > > read(3, " 0 0 net/ethtoo"..., 131072) =3D 4045 <0.000051= > > read(3, " 0 0 net/ipv4/r"..., 131072) =3D 4040 <0.000051= > > read(3, " 2048 1 net/ipv4/f"..., 131072) =3D 4056 <0.000050= > > read(3, " 0 0 net/xfrm/x"..., 131072) =3D 4053 <0.000056= > > read(3, " 3072 6 net/ipv6/i"..., 131072) =3D 4095 <0.000060= > > read(3, " 0 0 net/devlin"..., 131072) =3D 4094 <0.000064= > > read(3, " 0 0 lib/decomp"..., 131072) =3D 4023 <0.000063= > > read(3, " 2048 2 drivers/us"..., 131072) =3D 4053 <0.000062= > > read(3, " 0 0 drivers/us"..., 131072) =3D 4011 <0.000068= > > read(3, " 0 0 drivers/in"..., 131072) =3D 4092 <0.000059= > > read(3, " 64 1 drivers/sc"..., 131072) =3D 4067 <0.000064= > > read(3, " 0 0 drivers/ne"..., 131072) =3D 4059 <0.000067= > > read(3, " 8 1 drivers/hi"..., 131072) =3D 4050 <0.000052= > > read(3, " 256 1 fs/ext4/mb"..., 131072) =3D 4024 <0.000070= > > read(3, " 0 0 fs/autofs/"..., 131072) =3D 4082 <0.000070= > > read(3, " 0 0 fs/fuse/in"..., 131072) =3D 4074 <0.000054= > > read(3, " 0 0 drivers/gp"..., 131072) =3D 4066 <0.000063= > > read(3, " 0 0 drivers/gp"..., 131072) =3D 4091 <0.000052= > > read(3, " 0 0 drivers/gp"..., 131072) =3D 4029 <0.000064= > > read(3, " 0 0 drivers/gp"..., 131072) =3D 4094 <0.000062= > > read(3, " 128 2 sound/core"..., 131072) =3D 4069 <0.000068= > > read(3, " 64 1 sound/pci/"..., 131072) =3D 4074 <0.000069= > > read(3, " 384 4 net/bridge"..., 131072) =3D 4021 <0.000054= > > read(3, " 0 0 net/netfil"..., 131072) =3D 4084 <0.000050= > > read(3, " 0 0 net/xfrm/x"..., 131072) =3D 1513 <0.000047= > > read(3, "", 131072) =3D 0 <0.000030> > > Signed-off-by: David Wang <00107082@163.com> > --- > lib/alloc_tag.c | 30 +++++++++++------------------- > 1 file changed, 11 insertions(+), 19 deletions(-) > > diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c > index 25ecc1334b67..ec83cf798209 100644 > --- a/lib/alloc_tag.c > +++ b/lib/alloc_tag.c > @@ -45,21 +45,17 @@ struct allocinfo_private { > static void *allocinfo_start(struct seq_file *m, loff_t *pos) > { > struct allocinfo_private *priv; > - struct codetag *ct; > loff_t node =3D *pos; > > - priv =3D kzalloc(sizeof(*priv), GFP_KERNEL); > - m->private =3D priv; > - if (!priv) > - return NULL; > - > - priv->print_header =3D (node =3D=3D 0); > + priv =3D (struct allocinfo_private *)m->private; > codetag_lock_module_list(alloc_tag_cttype, true); > - priv->iter =3D codetag_get_ct_iter(alloc_tag_cttype); > - while ((ct =3D codetag_next_ct(&priv->iter)) !=3D NULL && node) > - node--; > - > - return ct ? priv : NULL; > + if (node =3D=3D 0) { > + priv->print_header =3D true; > + priv->iter =3D codetag_get_ct_iter(alloc_tag_cttype); > + codetag_next_ct(&priv->iter); > + } > + // TODO: need to check iter is valid, or rewinding it. > + return priv->iter.ct ? priv : NULL; > } > > static void *allocinfo_next(struct seq_file *m, void *arg, loff_t *pos) > @@ -76,12 +72,7 @@ static void *allocinfo_next(struct seq_file *m, void *= arg, loff_t *pos) > > static void allocinfo_stop(struct seq_file *m, void *arg) > { > - struct allocinfo_private *priv =3D (struct allocinfo_private *)m-= >private; > - > - if (priv) { > - codetag_lock_module_list(alloc_tag_cttype, false); > - kfree(priv); > - } > + codetag_lock_module_list(alloc_tag_cttype, false); > } > > static void print_allocinfo_header(struct seq_buf *buf) > @@ -249,7 +240,8 @@ static void __init procfs_init(void) > if (!mem_profiling_support) > return; > > - if (!proc_create_seq(ALLOCINFO_FILE_NAME, 0400, NULL, &allocinfo_= seq_op)) { > + if (!proc_create_seq_private(ALLOCINFO_FILE_NAME, 0400, NULL, &al= locinfo_seq_op, > + sizeof(struct allocinfo_private), NU= LL)) { > pr_err("Failed to create %s file\n", ALLOCINFO_FILE_NAME)= ; > shutdown_mem_profiling(false); > } > -- > 2.39.2 >