From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Safonov Subject: Re: [PATCHv2] lib/ratelimit: Lockless ratelimiting Date: Tue, 26 Jun 2018 18:46:23 +0100 Message-ID: <1530035183.3205.6.camel@arista.com> References: <20180626162438.16306-1-dima@arista.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Andy Shevchenko Cc: Theodore Ts'o , Arnd Bergmann , David Airlie , Greg Kroah-Hartman , intel-gfx@lists.freedesktop.org, Dmitry Safonov <0x7f454c46@gmail.com>, Linux Kernel Mailing List , dri-devel@lists.freedesktop.org, Rodrigo Vivi , Thomas Gleixner List-Id: dri-devel@lists.freedesktop.org SGkgQW5keSwgdGhhbmtzIGZvciB0aGUgcmV2aWV3LAoKT24gVHVlLCAyMDE4LTA2LTI2IGF0IDIw OjA0ICswMzAwLCBBbmR5IFNoZXZjaGVua28gd3JvdGUKWy4uXQo+ID4gICNkZWZpbmUgUkFURUxJ TUlUX1NUQVRFX0lOSVQobmFtZSwgaW50ZXJ2YWxfaW5pdCwgYnVyc3RfaW5pdCkKPiA+IHsgICAg ICAgICAgICAgICAgXAo+ID4gLSAgICAgICAgICAgICAgIC5sb2NrICAgICAgICAgICA9Cj4gPiBf X1JBV19TUElOX0xPQ0tfVU5MT0NLRUQobmFtZS5sb2NrKSwgIFwKPiAKPiBuYW1lIGlzIG5vdyBy ZWR1bmRhbnQsIGlzbid0IGl0PwoKSXQgaXMuIFdvcnRoIHRvIHNwbGl0IG9uIHRoZSBzZWNvbmQg cGF0Y2ggb3Iga2VlcCBjYWxsZXJzIGNoYW5nZXMgaW4KdGhpcyBwYXRjaD8KCj4gPiBAQCAtNDIs OSArNDEsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHJhdGVsaW1pdF9zdGF0ZV9pbml0KHN0cnVj dAo+ID4gcmF0ZWxpbWl0X3N0YXRlICpycywKPiA+ICB7Cj4gPiAgICAgICAgIG1lbXNldChycywg MCwgc2l6ZW9mKCpycykpOwo+ID4gCj4gPiAtICAgICAgIHJhd19zcGluX2xvY2tfaW5pdCgmcnMt PmxvY2spOwo+ID4gICAgICAgICBycy0+aW50ZXJ2YWwgICAgPSBpbnRlcnZhbDsKPiA+ICAgICAg ICAgcnMtPmJ1cnN0ICAgICAgID0gYnVyc3Q7Cj4gPiArICAgICAgIGF0b21pY19zZXQoJnJzLT5w cmludGVkLCAwKTsKPiA+ICsgICAgICAgYXRvbWljX3NldCgmcnMtPm1pc3NlZCwgMCk7Cj4gCj4g Q2FuIGl0IGJlCj4gCj4gKnJzID0gUkFURUxJTUlUX1NUQVRFX0lOSVQoaW50ZXJ2YWwsIGJ1cnN0 KTsKPiAKPiA/Cj4gCj4gKFllcywgdGhlICcoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSknIGhhcyB0 byBiZSBhZGRlZCB0byBtYWNybyB0bwo+IGFsbG93IHRoaXMpCgpTdXJlLgoKPiA+ICBzdGF0aWMg aW5saW5lIHZvaWQgcmF0ZWxpbWl0X3N0YXRlX2V4aXQoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZQo+ ID4gKnJzKQo+ID4gIHsKPiA+ICsgICAgICAgaW50IG1pc3NlZDsKPiA+ICsKPiA+ICAgICAgICAg aWYgKCEocnMtPmZsYWdzICYgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKSkKPiA+ICAgICAgICAg ICAgICAgICByZXR1cm47Cj4gPiAKPiA+IC0gICAgICAgaWYgKHJzLT5taXNzZWQpIHsKPiA+ICsg ICAgICAgaWYgKChtaXNzZWQgPSBhdG9taWNfeGNoZygmcnMtPm1pc3NlZCwgMCkpKQo+IAo+IFBl cmhhcHMKPiAKPiBtaXNzZWQgPSAuLi4KPiBpZiAobWlzc2VkKQo+IAo+ID8KCk9rLCB3aWxsIGNo YW5nZSAtIGNoZWNrcGF0Y2ggaGFzIHdhcm5lZCBtZSwgYnV0IEkgdGhvdWdodCBpdCdzIGp1c3Qg YQpwcmVmZXJlbmNlIHRoYW4gYSBydWxlLgoKPiAKPiA+ICAgICAgICAgICAgICAgICBwcl93YXJu KCIlczogJWQgb3V0cHV0IGxpbmVzIHN1cHByZXNzZWQgZHVlIHRvCj4gPiByYXRlbGltaXRpbmdc biIsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5jb21tLCBycy0+bWlzc2Vk KTsKPiA+IC0gICAgICAgICAgICAgICBycy0+bWlzc2VkID0gMDsKPiA+IC0gICAgICAgfQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+Y29tbSwgbWlzc2VkKTsKPiA+ICB9Cj4g PiArc3RhdGljIHZvaWQgcmF0ZWxpbWl0X2VuZF9pbnRlcnZhbChzdHJ1Y3QgcmF0ZWxpbWl0X3N0 YXRlICpycywKPiA+IGNvbnN0IGNoYXIgKmZ1bmMpCj4gPiArewo+ID4gKyAgICAgICBycy0+YmVn aW4gPSBqaWZmaWVzOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoIShycy0+ZmxhZ3MgJiBSQVRFTElN SVRfTVNHX09OX1JFTEVBU0UpKSB7Cj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgbWlzc2Vk ID0gKHVuc2lnbmVkKWF0b21pY194Y2hnKCZycy0KPiA+ID5taXNzZWQsIDApOwo+ID4gKwo+ID4g KyAgICAgICAgICAgICAgIGlmIChtaXNzZWQpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBw cl93YXJuKCIlczogJXUgY2FsbGJhY2tzIHN1cHByZXNzZWRcbiIsCj4gPiBmdW5jLCBtaXNzZWQp Owo+IAo+IEluc3RlYWQgb2YgY2FzdGluZywgcGVyaGFwcwo+IAo+IGludCBtaXNzZWQgPSAuLi4K PiAKPiBJIHRoaW5rIHlvdSBhbHJlYWR5IGhhcyBhIGd1YXJkIGFnYWluc3QgZ29pbmcgaXQgYmVs b3cgemVyby4gT3IgSQo+IG1pc3NlZCBzb21ldGhpbmc/CgpObywgSSBkbzoKYXRvbWljX2FkZF91 bmxlc3MoJnJzLT5taXNzZWQsIDEsIC0xKTsKClNvLCBpdCdzIGd1YXJkIGFnYWluc3Qgb3ZlcmZs b3csIGJ1dCBub3QgYWdhaW5zdCBuZWdhdGl2ZS4KVGhhdCdzIHdoeSBJIGRvIHByaW50IGl0IGFz IHVuc2lnbmVkLgoKLS0gClRoYW5rcywKICAgICAgICAgICAgIERtaXRyeQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK 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 X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, T_DKIMWL_WL_HIGH autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B313C43144 for ; Tue, 26 Jun 2018 17:46:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D2D08268B5 for ; Tue, 26 Jun 2018 17:46:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=arista.com header.i=@arista.com header.b="EqgBgunt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D2D08268B5 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=arista.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751979AbeFZRq1 (ORCPT ); Tue, 26 Jun 2018 13:46:27 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:54416 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750969AbeFZRq0 (ORCPT ); Tue, 26 Jun 2018 13:46:26 -0400 Received: by mail-wm0-f65.google.com with SMTP id i139-v6so2895323wmf.4 for ; Tue, 26 Jun 2018 10:46:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=googlenew; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version:content-transfer-encoding; bh=HF4EPIGxxb248SaFHrCzIKbApJ5DBG/24sqrNbFkO8g=; b=EqgBgunt60JjR8mSM+9mjGdx39hHjcFN9ruMuCNPrfyf9hyWCc6/jSOyevlRjEL88O 6BNxQrZPrE9dKnq/zAaY0cNX+76nIA4ZAoy+S6MAcOXjukxAcucI3f8Jnv8A8lJ8etwI jFUnZPTw/wI7A1zxAgO+e8pvxVW311XN+owHNxcMuEdmvRACzyu147U8DP7ZLyPoSPAC ZCxMhD/z+0HU3TBSXlNwhKFGhlcmx9cuVHg91uTg/C8b+kpR/DXpNiMckwecGZG10V/n bjFvtrEkDjndnYwhNUjEe5NIWVo16w1iji7CySvrRcltpuo2MtpB7yozme57dDTuh6zq +fAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version:content-transfer-encoding; bh=HF4EPIGxxb248SaFHrCzIKbApJ5DBG/24sqrNbFkO8g=; b=t++0L4Sp8omuqOls79HrN7hNSsWGjLWkzcD4mnYmQrqKH8C2AaASkcLt52QplrtRgO X5PCqzpL35+X/+cffRD+M3p/QWwVDA9kZYpU2vkJ37dXgpLetr5vAZ97KPuxDEyaVjNX C8jzU64OJc5H/jP7qORYYqcEHEjK0U9AcyM5oJ98GCsGTUghai0l23Ea2KyqZzw6iUGR Pwgp51J4fkm6ZOgpvcz4Q8+IZ433t/zQZL6kXO+oEc5bZrBdfbA5vL3aQmKs8RLiBqPc 2d+GgvSCO2BpQEBerZCW21QHG6nfDIDSUQrJM5PfV1DYD4vJNflp7r3NxgCLmKzjPVrs +xTQ== X-Gm-Message-State: APt69E0UY53TLmDl6Tv7Qmfupf8Yw9ih9PkKrr7tn7/tKz3flaZhhBT1 svZqouVGeGKtyzy7izrE0HiwjRGo6NY= X-Google-Smtp-Source: AAOMgpcQVtZ0c5SyjFiELCexUTPggzoridn1rX0M7BtpcQa7LVPopQMmRXASXuhvXLHs6eP3B8NleQ== X-Received: by 2002:a1c:903:: with SMTP id 3-v6mr2385383wmj.130.1530035185098; Tue, 26 Jun 2018 10:46:25 -0700 (PDT) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id p2-v6sm2576214wrn.31.2018.06.26.10.46.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Jun 2018 10:46:24 -0700 (PDT) Message-ID: <1530035183.3205.6.camel@arista.com> Subject: Re: [PATCHv2] lib/ratelimit: Lockless ratelimiting From: Dmitry Safonov To: Andy Shevchenko Cc: Linux Kernel Mailing List , Arnd Bergmann , David Airlie , Dmitry Safonov <0x7f454c46@gmail.com>, Greg Kroah-Hartman , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Theodore Ts'o , Thomas Gleixner , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Tue, 26 Jun 2018 18:46:23 +0100 In-Reply-To: References: <20180626162438.16306-1-dima@arista.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.24.6 (3.24.6-1.fc26) Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Andy, thanks for the review, On Tue, 2018-06-26 at 20:04 +0300, Andy Shevchenko wrote [..] > > #define RATELIMIT_STATE_INIT(name, interval_init, burst_init) > > { \ > > - .lock = > > __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ > > name is now redundant, isn't it? It is. Worth to split on the second patch or keep callers changes in this patch? > > @@ -42,9 +41,10 @@ static inline void ratelimit_state_init(struct > > ratelimit_state *rs, > > { > > memset(rs, 0, sizeof(*rs)); > > > > - raw_spin_lock_init(&rs->lock); > > rs->interval = interval; > > rs->burst = burst; > > + atomic_set(&rs->printed, 0); > > + atomic_set(&rs->missed, 0); > > Can it be > > *rs = RATELIMIT_STATE_INIT(interval, burst); > > ? > > (Yes, the '(struct ratelimit_state)' has to be added to macro to > allow this) Sure. > > static inline void ratelimit_state_exit(struct ratelimit_state > > *rs) > > { > > + int missed; > > + > > if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) > > return; > > > > - if (rs->missed) { > > + if ((missed = atomic_xchg(&rs->missed, 0))) > > Perhaps > > missed = ... > if (missed) > > ? Ok, will change - checkpatch has warned me, but I thought it's just a preference than a rule. > > > pr_warn("%s: %d output lines suppressed due to > > ratelimiting\n", > > - current->comm, rs->missed); > > - rs->missed = 0; > > - } > > + current->comm, missed); > > } > > +static void ratelimit_end_interval(struct ratelimit_state *rs, > > const char *func) > > +{ > > + rs->begin = jiffies; > > + > > + if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) { > > + unsigned missed = (unsigned)atomic_xchg(&rs- > > >missed, 0); > > + > > + if (missed) > > + pr_warn("%s: %u callbacks suppressed\n", > > func, missed); > > Instead of casting, perhaps > > int missed = ... > > I think you already has a guard against going it below zero. Or I > missed something? No, I do: atomic_add_unless(&rs->missed, 1, -1); So, it's guard against overflow, but not against negative. That's why I do print it as unsigned. -- Thanks, Dmitry