From patchwork Thu Oct 12 19:47:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Cromie X-Patchwork-Id: 13419734 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 E5C8BCDB46E for ; Thu, 12 Oct 2023 19:47:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9BF798D0145; Thu, 12 Oct 2023 15:47:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 971248D0002; Thu, 12 Oct 2023 15:47:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7EA818D0145; Thu, 12 Oct 2023 15:47:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 6A1A58D0002 for ; Thu, 12 Oct 2023 15:47:34 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 12A5A80878 for ; Thu, 12 Oct 2023 19:47:34 +0000 (UTC) X-FDA: 81337844028.13.A3D6B17 Received: from mail-io1-f48.google.com (mail-io1-f48.google.com [209.85.166.48]) by imf23.hostedemail.com (Postfix) with ESMTP id 47795140017 for ; Thu, 12 Oct 2023 19:47:32 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=RMiseWAq; spf=pass (imf23.hostedemail.com: domain of jim.cromie@gmail.com designates 209.85.166.48 as permitted sender) smtp.mailfrom=jim.cromie@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1697140052; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Q6n2IA/eHEf6LdvM5ZmMrOftNFYznxmP1Ujq1nl5xlM=; b=6EeWZ7owjT4ruhSwmswWLDwBzv8MsBoPwPHRjLb2HgZxl/24rayFUIj/3XERp93WNoTYYv 8mDksdjWyXmss48s+zMAwYjLsN1xifYVSo6rEeq+568EE3u15QsiY+WFpW1v5eievHAp3J iE6u7aq2KMlLQrQwrUAtGmq1KmJmVmY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1697140052; a=rsa-sha256; cv=none; b=cO91jINnCze5Bi+nh3A6pEWNjYRaTaYtYGFDRn0sywgIeaNh9AFho3Mpo2FGDcgU+SQXS/ o7Gf/5kzH8EhWcKGTzMkDsSGdDwmHcRUd2waG3TDY3mfL7fOZ7Qrj9V83oHu42usD903s8 TTUVQbaeDc/G16nwrF0mME439hTZzxc= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=RMiseWAq; spf=pass (imf23.hostedemail.com: domain of jim.cromie@gmail.com designates 209.85.166.48 as permitted sender) smtp.mailfrom=jim.cromie@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-io1-f48.google.com with SMTP id ca18e2360f4ac-7a26fd82847so54046839f.3 for ; Thu, 12 Oct 2023 12:47:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1697140051; x=1697744851; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q6n2IA/eHEf6LdvM5ZmMrOftNFYznxmP1Ujq1nl5xlM=; b=RMiseWAqruMuksa6tckntZ02nFVq4dQB2/i42paA3lvw6y88jkzmWSHJoRQYmUFbse 7NoyGwbnfyQ9ypCzS98KwIOfJVbKIbEAR0rb8Q5Y1qBiR1x/jk2S06ExbS2CLkiLX3W2 HHxLpL0Yhvrw3jY0rfNWd1wcLy2RV82LDpCV3gh0HitjtH24hAqP4Uzr1UIUCuZTBr/F tTef6/0EOGQDDCji/RqE9rI4BxYG6eGigTyRgs8ImjfPW7q18RBFNCB7hOzN8M0SoNXf 3s9OrQRhaUCZdapjZYnjNUbxElLJSh+dOwkddpxnNhct7aw1vjq9xVS4SQzLK+K+zJZX 9wZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697140051; x=1697744851; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q6n2IA/eHEf6LdvM5ZmMrOftNFYznxmP1Ujq1nl5xlM=; b=w+LkctJFgoVNuVslmmb3NI+PfhyGXzVNAAKfc9XRl8IPhMHnhnVKAZhYAtJmgFPEyN UG+po7uElO0uFNCnPEaWHcctr3jI9ut34ZdykKx9Rw2LDV+nAYncw1Ki+SXdiE8/UW8B asZWYWRLGklyl1fkgpK9cbyPlvufAOQMRdmGDlWlS2LT1YV17N/BUjAvX/EsUD+P3/CT 6b/B3OdBBKG7yKP+VICH5t1YQyEI3JxDPESAuuwBtuw8RwuP611j47GDjJ6zHKivpmC2 Jnp1prv5Iw9vXwvzN3B1i8kLGnyP1y5rLMdorq744lW8b+0IbkFtcqdSIUTxNTJkifNX 1kDw== X-Gm-Message-State: AOJu0YwFB3M87woXvmGWZ+O3uvQTglGColTNxvdRBBnPeHZYFB7GcqE/ dY6VcyKS3coEYa2WiHRc8PEI6nWpBh+dBw== X-Google-Smtp-Source: AGHT+IGFZRnX/2jEPkfFaY6CF3iLQdJpD5uSzZ8sAWGpNzzXtIHRrYje0mKyf+N3fhni1GhvWfWi0w== X-Received: by 2002:a5d:9cd5:0:b0:79f:d4e6:5175 with SMTP id w21-20020a5d9cd5000000b0079fd4e65175mr28322159iow.16.1697140051534; Thu, 12 Oct 2023 12:47:31 -0700 (PDT) Received: from frodo.. (c-73-78-62-130.hsd1.co.comcast.net. [73.78.62.130]) by smtp.googlemail.com with ESMTPSA id z7-20020a5ec907000000b0079fbb834232sm4351002iol.19.2023.10.12.12.47.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 12:47:30 -0700 (PDT) From: Jim Cromie To: linux-kernel@vger.kernel.org Cc: david@redhat.com, Liam.Howlett@Oracle.com, linux-mm@kvack.org, Jim Cromie Subject: [RFC PATCH 10/10] dyndbg: cache the dynamically generated prefixes per callsite Date: Thu, 12 Oct 2023 13:47:11 -0600 Message-ID: <20231012194711.3288031-11-jim.cromie@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012194711.3288031-1-jim.cromie@gmail.com> References: <20231012194711.3288031-1-jim.cromie@gmail.com> MIME-Version: 1.0 X-Stat-Signature: 3ntokpmr7c1a8o36uoieu34htqsrdqh4 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 47795140017 X-Rspam-User: X-HE-Tag: 1697140052-820847 X-HE-Meta: U2FsdGVkX1/4+TSfUb2SJk381wdBaAzC0TRlJ1Uq6N1jTihRH+XL8o6t+Jt3trOWcj6PN844+NFlAoFQEIiB7PWBLR7OU05e2DZUdn97kqMY4y5Zt8crMWLGFN4k8hSuFzrhP4C+GdloLs0xp7A2JVv1T1Cmty5Ooa0ShM8QqNgLAOrg/zdNk5UZJIm86hiH+ZNC5BZ7CvBUAuNUcppzdLRvZ2HucAz/ztdsAlzYttVWWlV/iGaTbH1cfQI9v93neupVmsVT/7LJc5n+wN4AHFPaNRzZ+fmJWMW9sY0MfPgX34rACfS9XTCks1+RyUNViMila+ZNjpdgdkR9YjhAuguAScUUSnMSvDQcGAig9aOHvOP+U9V6oDbu/N11KThKVsPyaXhFza5FiXkm/E7n+TNHKVJaNtii0gbndG6WV/0tLbjmRIIOtD8aags/N5wdWYzCDpnyB+itA3YhYK8AYW2t7f1/Z+Upob/ccLDPDJMHo8T3NLfsKO3HEZ4phKaQmvyir78eQJNpfbghQvXcH4zRmkGh320QaxUZ9dBV4uUkhWVraYK50yVxw5DDYAuGbLkqt8VV25vmPPLmryM/CuZeDxq4JCqqQ3cyS5W2lVGtEvHN8GsJ9X38n7/B+ufxIvPuzY9MG0sydwwLn+6JIH9RD0B0jXCY41d0TuobEzqMb98DiMjkHJI1Lr2F1vExKK0Vom+1uyRJLyeB1SU3tu23tRkqreiohAOHz5iMSITOMeW5BORvI8ZskZuDZoMSe8MqUpKf7DN6eDWra/TTF1LqDiLsXo0A6GvdZutRcOFUbbgZEmxWj+OVfZ1Sn2QSba1KGKQVSJmbKzpHHBunoHPr6H99p0yq/5sb7nOBL05dDqkmbBCbzuBc3lBB5F482ynIeBeP5vAKrZPz60+vk+wKkR9E0qeFhuIu1B0rqnq6aJW0Qh8VqSE/ah7r0+sMAMOZBDT64Hl/o8mVM3r PyljLUGD dozH2aqCeqlL1Xp1NCMkqC1cWvv1ibdOaNNwiQSHrzyH0xRI5CWcq7THG07BdogXf+az+2WMLMJGe3kGzpG4XzxxVQysBRVsb9O54HThHBq7I8DO26qC5BaRS2zVlkFG1HpKqByh2d5ghb3N3ziH8qsLnfNSsMflnOzmT7gKGnbHCxKqR5mgGnkl/d8wpBPY2pRE4c1hPZf/Koq+f90eYZxXVlcNblYohiz7XxjNm50Ol+AQGO7j6dgQA0n9d4C5k4rp3GgheGeebyEv2+3ZnBD83eAEqsfg/2coSxO0Scm1J6DoY1FnhLaXiSZ6HyeFMsa1zABqChm8ybnJvSJdIRhUJDTf1zb5bGC3/XF9O2s5lQOBRuhUfAapWY9CV08vIUlAqBh027IVDZt5b3j+GiqR4HmbQ/H7a042QBW6gS5IKf5FAIw3lB83cNElY3uCi6bSSOHIk3AkJymeCjq4syryIo/0E2bBjt6sli9gqdsYtd17tvK79Q8Inxl9mPSk3rWGmwbQhCT1dzi+Jh/sXZZi7uGTfXbsKaBi3 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000058, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Add a private maple-tree to cache any prefix strings required (and then generated) for any enabled pr_debug callsites. And delete any cache entries if any flags are changed afterwards. This cache is strictly per-callsite, so if a function has 20 pr_debugs, all enabled with the same flags: echo function foo +pmfs > /proc/dynamic_debug/control there will be 20 separate, identical cache items created. Maybe this can be trivially improved later. Or lineno could be folded in too, so the %d is rendered once. NB: +tl flags are added outside the cache; the thread-id doesnt belong in the cache, the lineno could be added, esp if the 20:1 sharing isnt trivial enough. NBB: lineno:18 is enormously "sparse". At this point its not so far to pack it into something else. Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 92ffd70a07de..02df61ab6403 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -90,6 +90,8 @@ MODULE_PARM_DESC(verbose, " dynamic_debug/control processing " static DEFINE_MTREE(mt_funcs); static DEFINE_MTREE(mt_files); static DEFINE_MTREE(mt_mods); +/* cache of composed prefixes for enabled pr_debugs */ +static DEFINE_MTREE(pr_prefixes); static void dd_mt_scan(struct maple_tree *mt, const char *kind); static int param_set_do_scan(const char *instr, const struct kernel_param *kp) @@ -112,6 +114,11 @@ static const struct kernel_param_ops param_ops_do_scan = { }; module_param_cb(do_scan, ¶m_ops_do_scan, NULL, 0600); +void ddebug_clear_prefix_cache(const struct _ddebug *dp) +{ + mtree_erase(&pr_prefixes, (unsigned long)dp); +} + /* Return the path relative to source root */ static inline const char *trim_prefix(const char *path) { @@ -350,6 +357,7 @@ static int ddebug_change(const struct ddebug_query *query, newflags = (dp->flags & modifiers->mask) | modifiers->flags; if (newflags == dp->flags) continue; + ddebug_clear_prefix_cache(dp); #ifdef CONFIG_JUMP_LABEL if (dp->flags & _DPRINTK_FLAGS_PRINT) { if (!(newflags & _DPRINTK_FLAGS_PRINT)) @@ -855,8 +863,18 @@ static int remaining(int wrote) return 0; } -static int __dynamic_emit_prefix(const struct _ddebug *desc, char *buf, int pos) +static int __dynamic_emit_prefix(struct _ddebug *desc, char *buf, int pos) { + char *prefix, *cpy; + + if (desc->flags & _DPRINTK_FLAGS_PREFIX_CACHED) { + prefix = (char*) mtree_load(&pr_prefixes, (unsigned long)desc); + if (prefix) { + pos += snprintf(buf + pos, remaining(pos), "%s", prefix); + v4pr_info("using prefix cache:%px %s", buf, buf + pos); + return pos; + } + } if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME) pos += snprintf(buf + pos, remaining(pos), "%s:", desc_modname(desc)); @@ -866,6 +884,13 @@ static int __dynamic_emit_prefix(const struct _ddebug *desc, char *buf, int pos) if (desc->flags & _DPRINTK_FLAGS_INCL_SOURCENAME) pos += snprintf(buf + pos, remaining(pos), "%s:", trim_prefix(desc_filename(desc))); + + /* save dup of buf to cache */ + cpy = kstrdup(buf + pos, GFP_KERNEL); + mtree_store(&pr_prefixes, (unsigned long)desc, (void*)cpy, GFP_KERNEL); + desc->flags |= _DPRINTK_FLAGS_PREFIX_CACHED; + v3pr_info("filling prefix cache:%px %s", desc, cpy); + return pos; }