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 10A60C6FD1C for ; Fri, 24 Mar 2023 16:44:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F4CE6B0072; Fri, 24 Mar 2023 12:44:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1A4C36B0074; Fri, 24 Mar 2023 12:44:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 06CC76B0075; Fri, 24 Mar 2023 12:44:06 -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 ECDAB6B0072 for ; Fri, 24 Mar 2023 12:44:05 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id AD0171409BD for ; Fri, 24 Mar 2023 16:44:05 +0000 (UTC) X-FDA: 80604364050.17.103014B Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by imf07.hostedemail.com (Postfix) with ESMTP id DF94A40004 for ; Fri, 24 Mar 2023 16:44:02 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=bW5ncnm9; spf=pass (imf07.hostedemail.com: domain of beaub@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=beaub@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679676243; 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=xxBeia2D78dBK8d70oXp4Atwc+GmrqLlCnWbFHd1K2o=; b=ksqQpgRLytmT8Ui7KXfV97IkiO+vo/SbONmjGTFMBvlj7XTGHpbMDonAiYQd6P56ogmYHU 72Q53jFAMEjP7n4VxYWaJ4LXiopCYPgsQueMiM/G2+Z5ERFjzhB4EUOYRSxyBIqR2d7ghh Wj2oo0+028iicDy1AEuh6YNrDa4aR1k= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=bW5ncnm9; spf=pass (imf07.hostedemail.com: domain of beaub@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=beaub@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679676243; a=rsa-sha256; cv=none; b=HV12Qn2QN0YfVk4oW58NWD5cGDwkUNXaGtxYjQaRF+CaZIUiqhnqC9U8b2VVFeM07pOkOJ qOyBfIlSW8Jc4S61sWs2yfBDHgRmiSladgugrodde32a8dE8qKy2U/GApykCOQ84q93W8v sIXpazFG+fcoU9Jo4+F0WXRLWeBCBlw= Received: from kbox (unknown [76.135.27.212]) by linux.microsoft.com (Postfix) with ESMTPSA id 6BC8B20FC3DB; Fri, 24 Mar 2023 09:44:01 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 6BC8B20FC3DB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1679676241; bh=xxBeia2D78dBK8d70oXp4Atwc+GmrqLlCnWbFHd1K2o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=bW5ncnm9lcwFOnDxV+eVEh8UBtc2Iu7iL+S/bCe4UCuDWfojCFbM6JvkRb65/LVTa NsZm3LNC32boN3XjC5i3bQuEGAfrbYgIvC067oIT5o3bXNxoi/iTyUE82uAIUzgbZo 7cxBwsqCkY4CdBmFifyrYG1vX6fXwd+vYAHfVaOA= Date: Fri, 24 Mar 2023 09:43:53 -0700 From: Beau Belgrave To: Vlastimil Babka Cc: "Masami Hiramatsu (Google)" , rostedt@goodmis.org, mathieu.desnoyers@efficios.com, dcook@linux.microsoft.com, alanau@linux.microsoft.com, brauner@kernel.org, akpm@linux-foundation.org, ebiederm@xmission.com, keescook@chromium.org, tglx@linutronix.de, linux-trace-devel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v8 11/11] tracing/user_events: Limit global user_event count Message-ID: <20230324164353.GA1790@kbox> References: <20230221211143.574-1-beaub@linux.microsoft.com> <20230221211143.574-12-beaub@linux.microsoft.com> <20230324081824.b917c2944da217e5239e1223@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: DF94A40004 X-Stat-Signature: eq413xnhh16iqpmssnnepqmqz4npdp51 X-Rspam-User: X-HE-Tag: 1679676242-983002 X-HE-Meta: U2FsdGVkX1/JWViE1t3xB6v+A3Pk6JhdSE0gEtUBb1kavoChmiQRCOCUxbIHEbMc02HXZ66w4BFdCpMkyhTve4OX2Mr+zXSe+0vCklnCdHnVfm+kl85ATcp/2proUFtbRDzsDNmAf6//ecjpZvfzB3ay7jxGVRTG5fMh6rHUsS7cpEDXyVa/cZ8Yvzt04hgLuR2dvZfuJX+NO29ve3olz1hSBJOMahrB1meN+vj+D7mTQG2Mn3Li9Iv+l/CJxP1fCNr0rnwykzuHcxvfqitayMPUcao2fqRmJRGPFYAyXE5I/BNNTMRyfPX+9fncTA8dt+p8svsNbqlNCD4bJ0JH2wpJ5eIf05t5mkbSAE12KWX0DhXC+UEVLpYFnsxN+sxiYga19XoCMrBO7/CywtSbmeJoxaeHj6luGhSi3raOGSeYKMR4nk4ekkEyZ93RtzQBeC11zMhJOcyrwaPg9Ip4TT5rr+j1o62KhY3L73Sdl0NtM52Iwsfw1OTeLvb11+bS6J21yhHPR17w0rmk3tXWdqYvxObI6WPThPY1e90/Baw+KvVL0DZ6Vn0hsXakm5KsGizqLBBSMXrYegzex0gQ3bSalXL+sesmBlBhQ04jste0Yepuu9H/LWbNcnUFmzJi6Yw/Vprj1MZaR5wJf7neVOh3MB54Qezq5GR9n82yTkp1+WN9Yp3staFgUyhrwYrXwyFpwHpmt9mTX1J56Yn/lZbNkrxtyYfsAZ5u2HzF/TJhIl+57UNGBSwZa/7bGlPFx9r6LMNk+Ddc/FOFlKM7VZ/eTAZIsvnMUEh/C51pQ69S1uzAx9Dn43us1OkQwntAwTuyL1i/QkGA9X85VA2aC5oBaqYhy1XoXbj9hr683c1SYs42/vIionK82W9xHY9VN+ieGfBjSZa2ohP8mwoZ33NOokJ9oiC1MfBvUknYEQhBGPsX4AZnDS0lrCeXVjghlgRJI9O0l/VjBM9xy8j PQEiy5H6 Fo9VxIAc50nz8peDg247alS2lhFtX8nTlq5KTuoz4+Z3Arkdk4zH/S7XDRhQMaTrR0N+QhG6qqq6xkALDIqF/4dO8rX3IeLWYZx5lvDe4TYJuflPPkrCBuwSW9nOK6OdI9nIkXzVUvVnkJS8AGTXIUOELlPSTyXhJjEfUOGkOU63zt0tC9xdNYFDw+OzrKl7zB0cli0JWpjmasloAKMo7GvxHO1EmTpVBLAgQBeGI3kacj/MygruTMVl5O5NX4d3++wQEmg2Tx4tvHrR7ZXIWv+sy1Tnkj7Vo5y3MUCQ1dTQDkPiSr4pGBWRtuP4DgoVcFgoKemcoY+QeOZCSpRhO3TvScZh3/4RXAppesz/bLjlcxC4= 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: On Fri, Mar 24, 2023 at 09:54:48AM +0100, Vlastimil Babka wrote: > On 3/24/23 01:18, Masami Hiramatsu (Google) wrote: > > Hi Beau, > > > > On Tue, 21 Feb 2023 13:11:43 -0800 > > Beau Belgrave wrote: > > > >> Operators want to be able to ensure enough tracepoints exist on the > >> system for kernel components as well as for user components. Since there > >> are only up to 64K events, by default allow up to half to be used by > >> user events. > >> > >> Add a boot parameter (user_events_max=%d) and a kernel sysctl parameter > >> (kernel.user_events_max) to set a global limit that is honored among all > >> groups on the system. This ensures hard limits can be setup to prevent > >> user processes from consuming all event IDs on the system. > > > > sysctl is good to me, but would we really need the kernel parameter? > > The user_events starts using when user-space is up, so I think setting > > the limit with sysctl is enough. > > > > BTW, Vlastimil tried to add 'sysctl.*' kernel parameter support(*). If we > > need a kernel cmdline support, I think this is more generic way. But it > > seems the discussion has been stopped. > > It was actually merged in 5.8. So sysctl should be sufficient with that. > But maybe it's weird to start adding sysctls, when the rest of tracing > tunables is AFAIK under /sys/kernel/tracing/ ? > During the TraceFS meetings Steven runs I was asked to add a boot parameter and sysctl for user_events to limit the max. To me, it seems when user_events moves toward namespace awareness sysctl might be easier to use from within a namespace to turn knobs. Happy to change to whatever, but I want to see Steven and Masami agree on the approach before doing so. Steven, do you agree with Masami to move to just sysctl? Thanks, -Beau > > > (*) https://patchwork.kernel.org/project/linux-mm/patch/20200427180433.7029-2-vbabka@suse.cz/ > > > > Thank you, > > > >> > >> Signed-off-by: Beau Belgrave > >> --- > >> kernel/trace/trace_events_user.c | 59 ++++++++++++++++++++++++++++++++ > >> 1 file changed, 59 insertions(+) > >> > >> diff --git a/kernel/trace/trace_events_user.c b/kernel/trace/trace_events_user.c > >> index 222f2eb59c7c..6a5ebe243999 100644 > >> --- a/kernel/trace/trace_events_user.c > >> +++ b/kernel/trace/trace_events_user.c > >> @@ -20,6 +20,7 @@ > >> #include > >> #include > >> #include > >> +#include > >> #include > >> #include "trace.h" > >> #include "trace_dynevent.h" > >> @@ -61,6 +62,12 @@ struct user_event_group { > >> /* Group for init_user_ns mapping, top-most group */ > >> static struct user_event_group *init_group; > >> > >> +/* Max allowed events for the whole system */ > >> +static unsigned int max_user_events = 32768; > >> + > >> +/* Current number of events on the whole system */ > >> +static unsigned int current_user_events; > >> + > >> /* > >> * Stores per-event properties, as users register events > >> * within a file a user_event might be created if it does not > >> @@ -1241,6 +1248,8 @@ static int destroy_user_event(struct user_event *user) > >> { > >> int ret = 0; > >> > >> + lockdep_assert_held(&event_mutex); > >> + > >> /* Must destroy fields before call removal */ > >> user_event_destroy_fields(user); > >> > >> @@ -1257,6 +1266,11 @@ static int destroy_user_event(struct user_event *user) > >> kfree(EVENT_NAME(user)); > >> kfree(user); > >> > >> + if (current_user_events > 0) > >> + current_user_events--; > >> + else > >> + pr_alert("BUG: Bad current_user_events\n"); > >> + > >> return ret; > >> } > >> > >> @@ -1744,6 +1758,11 @@ static int user_event_parse(struct user_event_group *group, char *name, > >> > >> mutex_lock(&event_mutex); > >> > >> + if (current_user_events >= max_user_events) { > >> + ret = -EMFILE; > >> + goto put_user_lock; > >> + } > >> + > >> ret = user_event_trace_register(user); > >> > >> if (ret) > >> @@ -1755,6 +1774,7 @@ static int user_event_parse(struct user_event_group *group, char *name, > >> dyn_event_init(&user->devent, &user_event_dops); > >> dyn_event_add(&user->devent, &user->call); > >> hash_add(group->register_table, &user->node, key); > >> + current_user_events++; > >> > >> mutex_unlock(&event_mutex); > >> > >> @@ -2386,6 +2406,43 @@ static int create_user_tracefs(void) > >> return -ENODEV; > >> } > >> > >> +static int __init set_max_user_events(char *str) > >> +{ > >> + if (!str) > >> + return 0; > >> + > >> + if (kstrtouint(str, 0, &max_user_events)) > >> + return 0; > >> + > >> + return 1; > >> +} > >> +__setup("user_events_max=", set_max_user_events); > >> + > >> +static int set_max_user_events_sysctl(struct ctl_table *table, int write, > >> + void *buffer, size_t *lenp, loff_t *ppos) > >> +{ > >> + int ret; > >> + > >> + mutex_lock(&event_mutex); > >> + > >> + ret = proc_douintvec(table, write, buffer, lenp, ppos); > >> + > >> + mutex_unlock(&event_mutex); > >> + > >> + return ret; > >> +} > >> + > >> +static struct ctl_table user_event_sysctls[] = { > >> + { > >> + .procname = "user_events_max", > >> + .data = &max_user_events, > >> + .maxlen = sizeof(unsigned int), > >> + .mode = 0644, > >> + .proc_handler = set_max_user_events_sysctl, > >> + }, > >> + {} > >> +}; > >> + > >> static int __init trace_events_user_init(void) > >> { > >> int ret; > >> @@ -2415,6 +2472,8 @@ static int __init trace_events_user_init(void) > >> if (dyn_event_register(&user_event_dops)) > >> pr_warn("user_events could not register with dyn_events\n"); > >> > >> + register_sysctl_init("kernel", user_event_sysctls); > >> + > >> return 0; > >> } > >> > >> -- > >> 2.25.1 > >> > > > >