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 59505C6FD1D for ; Fri, 7 Apr 2023 18:26:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E0ED5900004; Fri, 7 Apr 2023 14:26:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DE5306B0075; Fri, 7 Apr 2023 14:26:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C8687900004; Fri, 7 Apr 2023 14:26:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id B24B96B0074 for ; Fri, 7 Apr 2023 14:26:42 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 776A5A01E5 for ; Fri, 7 Apr 2023 17:50:25 +0000 (UTC) X-FDA: 80655334410.17.11324B0 Received: from crane.ash.relay.mailchannels.net (crane.ash.relay.mailchannels.net [23.83.222.43]) by imf16.hostedemail.com (Postfix) with ESMTP id E360D18001D for ; Fri, 7 Apr 2023 17:50:21 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=stgolabs.net header.s=dreamhost header.b=bBcBOgYj; dmarc=none; spf=pass (imf16.hostedemail.com: domain of dave@stgolabs.net designates 23.83.222.43 as permitted sender) smtp.mailfrom=dave@stgolabs.net; arc=pass ("mailchannels.net:s=arc-2022:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680889823; 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=Mu9kZlt0sY3Iz7fipBM4PsZC6jpgc1lK7rIImuJwcmA=; b=d574prXZzS5YhSKf+v+V6peTI2uu30iendnk5HByx4h40I9pabfMlZ/slsnC/sUr8khI5t CbCe3cbEDFIZl+d3vV/qlpNsPpq191698FrQ1M1QaEP+FGNoBwt3RCESOpsAA4etxunPF4 BY9yijZuTnmpUr+LX9WQkXoAPgotXjg= ARC-Authentication-Results: i=2; imf16.hostedemail.com; dkim=pass header.d=stgolabs.net header.s=dreamhost header.b=bBcBOgYj; dmarc=none; spf=pass (imf16.hostedemail.com: domain of dave@stgolabs.net designates 23.83.222.43 as permitted sender) smtp.mailfrom=dave@stgolabs.net; arc=pass ("mailchannels.net:s=arc-2022:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1680889823; a=rsa-sha256; cv=pass; b=X64W+yCZbgdg7G1GM/+kT7H7bRDBt8YBmucN0uBymaxe1187lJR3hjnZYMuOtUyEPvHOps WLvRY2iRN8zcCi5AFGZBoXgk9E9CRH2ek/NtoJaTdQKEs3imEcF6UWFE397SfaoBg/nMiW 2pgrMYVlX77j9njUfR6OuNJuTr4b+QA= X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id A452D642819; Fri, 7 Apr 2023 17:50:17 +0000 (UTC) Received: from pdx1-sub0-mail-a273.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id D0719642887; Fri, 7 Apr 2023 17:50:16 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1680889817; a=rsa-sha256; cv=none; b=TIbVxD5clnbRC5sek/1Y6JVMCwvjldE7zJ5JXvkErmkxZ5spzniOBeaq15Clq/mrQiiyYN n2lqo/kQkSyln3sagMFmv7H1egerBwIll4T7vGyUYZrFy1e6HOoxSwyA7IoAX1oon4aaLb H4lBe8RWXfrLL9/8BvYV+N85B94zycBYg0UnQGaHzOAAMzVhqDimvReWj0eq6wE0ay638z Zcz7OhjkkKTADKq/aT/zBhKy5pRTstItXb4gXEXIWW97lwU+niFyKjXOX9n2Ez0BTzdpg8 tET7CkWpgNLz3zFNUzHzvhJ+ZgxqYPezbDg65K5sQhdOBiTVj7f/+2bhCHD+uA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1680889817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Mu9kZlt0sY3Iz7fipBM4PsZC6jpgc1lK7rIImuJwcmA=; b=mhIdX9AUWfSxKwf98Zsl6nqV1ckKdof33MJI+HCXdMyP5auJGvrULmvYMq5Cj5OO+iLbKh C9MBKMyS4fU18KQ5zchecX13pttwfNJDk0BV8gTrl41LOHkjne76/qW5PD6EYDdiPRB9qX a8u6TIzDUTGBBQRSYn8HA6DIaoYPUTH1jCfHiGta/RXm9vnXFT2Wte63JAapz+09QyqXKn JeAryPUbNfGe7D3ZUgmtO9EjA7/+S8DakHEbfR3k2WuOmtCFl7BvmNR5dH9WoRU8PhJQ+v gPwKt3RsJYuaHRYqO+7/0TyY/3HSIvsqQNii0+iG2n4HYuUlGMld5gEOYKvqLQ== ARC-Authentication-Results: i=1; rspamd-786cb55f77-r5vrk; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Shoe-Cooing: 45257a4105340661_1680889817417_2184140518 X-MC-Loop-Signature: 1680889817417:4182388007 X-MC-Ingress-Time: 1680889817416 Received: from pdx1-sub0-mail-a273.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.114.243.16 (trex/6.7.2); Fri, 07 Apr 2023 17:50:17 +0000 Received: from offworld (ip72-199-50-187.sd.sd.cox.net [72.199.50.187]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a273.dreamhost.com (Postfix) with ESMTPSA id 4PtQr70tB3zFJ; Fri, 7 Apr 2023 10:50:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1680889816; bh=Mu9kZlt0sY3Iz7fipBM4PsZC6jpgc1lK7rIImuJwcmA=; h=Date:From:To:Cc:Subject:Content-Type; b=bBcBOgYjS+tWkkrzlBRKxYSONYL0z2wuJaudfaWFf21tnZlCXeIll5w+XrnpG+c50 Rt1lU5LGEjvogjGcr3ikPfCub4vJ2/NFH4LoOGzkRcrR9AxAq7a3REsIpmY+YNq/Zi y6j9b+CFHCAtZhUqlaCyrqWkkcJam2kj+E7cHcIu3hPsXCKBDrtqYMHQLbzrFDd+Ns agIRq7fTvZo80pX1fA6NsESIwkpOZbxj5qBXYtVj7q+SbuWI0Rc8ig2lhBfBBbh/rw hBZBl9TpfN0ppuOaEUHfNNwn13IaJjeZ+lJ1ECLNcJHYpYtsQVa9L03DXUU6J+nnvL fNEDL9kWNGqYw== Date: Fri, 7 Apr 2023 10:19:29 -0700 From: Davidlohr Bueso To: Luis Chamberlain Cc: david@redhat.com, patches@lists.linux.dev, linux-modules@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, pmladek@suse.com, petr.pavlu@suse.com, prarit@redhat.com, torvalds@linux-foundation.org, gregkh@linuxfoundation.org, rafael@kernel.org, christophe.leroy@csgroup.eu, tglx@linutronix.de, peterz@infradead.org, song@kernel.org, rppt@kernel.org, willy@infradead.org, vbabka@suse.cz, mhocko@suse.com, dave.hansen@linux.intel.com, colin.i.king@gmail.com, jim.cromie@gmail.com, catalin.marinas@arm.com, jbaron@akamai.com, rick.p.edgecombe@intel.com Subject: Re: [PATCH v2 2/2] modules/kmod: replace implementation with a sempahore Message-ID: <20230407171929.xlxi7ewxxtrqo6z5@offworld> Mail-Followup-To: Luis Chamberlain , david@redhat.com, patches@lists.linux.dev, linux-modules@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, pmladek@suse.com, petr.pavlu@suse.com, prarit@redhat.com, torvalds@linux-foundation.org, gregkh@linuxfoundation.org, rafael@kernel.org, christophe.leroy@csgroup.eu, tglx@linutronix.de, peterz@infradead.org, song@kernel.org, rppt@kernel.org, willy@infradead.org, vbabka@suse.cz, mhocko@suse.com, dave.hansen@linux.intel.com, colin.i.king@gmail.com, jim.cromie@gmail.com, catalin.marinas@arm.com, jbaron@akamai.com, rick.p.edgecombe@intel.com References: <20230405203505.1343562-1-mcgrof@kernel.org> <20230405203505.1343562-3-mcgrof@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20230405203505.1343562-3-mcgrof@kernel.org> User-Agent: NeoMutt/20220429 X-Rspamd-Queue-Id: E360D18001D X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: 6njrm963rdyzcrh13o4dwsn344hc1ew9 X-HE-Tag: 1680889821-919420 X-HE-Meta: U2FsdGVkX1/RaNKLjCbIV49RsAVe5Xq/qMKvJTrh4qN8t4/37ooPXnd1Ng/qvn/ziNp+llp/XkBT5e0z7+qvLleEPmz/FUTiEzA9Y4kr/G081uf8gNXijNMB0cumz2QMXhrvTXydAC3dD5YSyeEDHZyAM8YTjuvgFwbQh5+YKYdcFhwg2FuA47ezJrNJWi/yh+U2aJfQWmCpZCTT1xEHD2ine7+LWSSTJ5/e/DqBZ3gQpCXMLlExYGsKxOQo9fNO/rVMnC1aSA78Ibuvbm6OMUSAK/mwT2Rfmpy6bHcr7nghcicbo/Dt0zx28ieFfYSIOLg7mmAINqoHSDP05F2eIzOzPwlg8XngVwbbGXkAL0MnxX4flE8L7Cqfc/COB/RA3hPZmH+ccKuU3aB3vXH9oOzBJijNBLHZjhdmx5T3RED4fG0VuysU74Hwd360Xp/EVj8LdJggngR9tDDj41Zq/5cM90MJa3dEHKfFs8HoQB6sq5RCzK7FpOcTk37sznRZ1zsUIzjcHbECuK6D7hczWX6WbLzoVuQTY+pszpMhhWiZh9124ntAAWKADMLuei8FSxMCw43Us8rmIFc/rC1RQM6oH6N0K6+Y/HWm+1UOIvhqkmikPjb3jcLGMwAoXyg2duOviKx6z5U30KOMW8sgKiaoAxdbyXVD6Mv32xsA0qxPV/ckrPX/zwngbU3iof/Qo2Rqz+1Ncky191Rofi/GyNGMZhhKNdNBZsW+Fme6ZF29X/3M+/OUkvzMffNpp2mWGoCv9LeLYEcMoT8R0UgIkfGXA0XpoSva0MrmwK6NeFTRTPPFF+JYJNdWjkCCgdEdu2/E1URbkBQfP6KFFQRsAOzig0VrNonGCNk28Lxh3na9zslR/PcmWF80iKQPnl2Zm57tMpbJFUBHQI/kVjGbqezMrZmcOUC8N7ijUxK35EVAvyn1+sdrO+LsJku5GBhEtDV7cHSyTOox5sG3UZy 4h9L4+lw MRTjpmhvoXpkbftYQ4qRUjEoeWSfdG2mv+QTuPr/l6CumRhjsZdpBgfZlHCZ+GHlzrF6UMedLj7A3h2GqnEXiBobUzJLZ6l9zIDTRAg9j15tuJRatFjsw0/ZCg2425Sch3Q+dmRY6uLLXb/yqVdbXOWWmLHq3yoA/swdPdgr9l6R32VtBUMbURObWXXkK25u+D7hGX9eHxTo6JnVWDfPkjAjOCeMiI8ckv5KUQdNniz3ETwENvnXNxvJF3GBRenqV/uWpr2KUW0YZ57gCFyBnd+ehQyGbN9jeKtWIlLmralP6ZUa5tkYuWp1VApcSkwA7PgXurGwJ9/EgzNM5/SUip3P0oERqAaS4yNNJiZHB0oP62PZ+PZrnsWJ7Z+41APWKkuCjOqivRGaaUcNEhBZLxEUk01jXfRzGzkhqX6GOlbsBZLoNnH7OQBjWY4gt/KTnlwYVmIsSKy3Qn2VolWZTobRYobocbqrGAGxTT1FWTO2DQuZTl4UbnpOVhw== 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: In the title: s/sempahore/semaphore On Wed, 05 Apr 2023, Luis Chamberlain wrote: >Simplfy the concurrency delimiter we user for kmod with the semaphore. >I had used the kmod strategy to try to implement a similar concurrency >delimiter for the kernel_read*() calls from the finit_module() path >so to reduce vmalloc() memory pressure. That effort didn't provid yet >conclusive results, but one thing that did became clear is we can use >the suggested alternative solution with semaphores which Linus hinted >at instead of using the atomic / wait strategy. > >I've stress tested this with kmod test 0008: > >time /data/linux-next/tools/testing/selftests/kmod/kmod.sh -t 0008 > >And I get only a *slight* delay. That delay however is small, a few >seconds for a full test loop run that runs 150 times, for about ~30-40 >seconds. The small delay is worth the simplfication IMHO. Yes, code looks a lot nicer. Reviewed-by: Davidlohr Bueso >Signed-off-by: Luis Chamberlain >--- > kernel/module/kmod.c | 26 +++++++------------------- > 1 file changed, 7 insertions(+), 19 deletions(-) > >diff --git a/kernel/module/kmod.c b/kernel/module/kmod.c >index b717134ebe17..925eb85b8346 100644 >--- a/kernel/module/kmod.c >+++ b/kernel/module/kmod.c >@@ -40,8 +40,7 @@ > * effect. Systems like these are very unlikely if modules are enabled. > */ > #define MAX_KMOD_CONCURRENT 50 >-static atomic_t kmod_concurrent_max = ATOMIC_INIT(MAX_KMOD_CONCURRENT); >-static DECLARE_WAIT_QUEUE_HEAD(kmod_wq); >+static DEFINE_SEMAPHORE(kmod_concurrent_max, MAX_KMOD_CONCURRENT); > > /* > * This is a restriction on having *all* MAX_KMOD_CONCURRENT threads >@@ -148,29 +147,18 @@ int __request_module(bool wait, const char *fmt, ...) > if (ret) > return ret; > >- if (atomic_dec_if_positive(&kmod_concurrent_max) < 0) { >- pr_warn_ratelimited("request_module: kmod_concurrent_max (%u) close to 0 (max_modprobes: %u), for module %s, throttling...", >- atomic_read(&kmod_concurrent_max), >- MAX_KMOD_CONCURRENT, module_name); >- ret = wait_event_killable_timeout(kmod_wq, >- atomic_dec_if_positive(&kmod_concurrent_max) >= 0, >- MAX_KMOD_ALL_BUSY_TIMEOUT * HZ); >- if (!ret) { >- pr_warn_ratelimited("request_module: modprobe %s cannot be processed, kmod busy with %d threads for more than %d seconds now", >- module_name, MAX_KMOD_CONCURRENT, MAX_KMOD_ALL_BUSY_TIMEOUT); >- return -ETIME; >- } else if (ret == -ERESTARTSYS) { >- pr_warn_ratelimited("request_module: sigkill sent for modprobe %s, giving up", module_name); >- return ret; >- } >+ ret = down_timeout(&kmod_concurrent_max, MAX_KMOD_ALL_BUSY_TIMEOUT); >+ if (ret) { >+ pr_warn_ratelimited("request_module: modprobe %s cannot be processed, kmod busy with %d threads for more than %d seconds now", >+ module_name, MAX_KMOD_CONCURRENT, MAX_KMOD_ALL_BUSY_TIMEOUT); >+ return ret; > } > > trace_module_request(module_name, wait, _RET_IP_); > > ret = call_modprobe(module_name, wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC); > >- atomic_inc(&kmod_concurrent_max); >- wake_up(&kmod_wq); >+ up(&kmod_concurrent_max); > > return ret; > } >-- >2.39.2 >