From patchwork Sat Sep 23 19:39:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 817823 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JXsN0VV+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y00zB4CyBz9s7g for ; Sun, 24 Sep 2017 05:39:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751877AbdIWTjP (ORCPT ); Sat, 23 Sep 2017 15:39:15 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:34632 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751847AbdIWTjO (ORCPT ); Sat, 23 Sep 2017 15:39:14 -0400 Received: by mail-pf0-f193.google.com with SMTP id g65so1896460pfe.1 for ; Sat, 23 Sep 2017 12:39:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=EL/xELy3xyzpLAOLEuwo0PmcxX34W7ti3UpO+ajV24c=; b=JXsN0VV+/tDytuOwEFRqjvJpi82Rhzmysny9fCTTtuzEO6Oi4sIBokUDxnBsZGDp3L jJz+8l/TcZH4R/8/woaVEqDj8dBFDzDp4oHX0yNfoq0MUheKrSJfMA6NuIGlFp8emwp6 7A8vt8WyXLF2tf/v3aokDWdlPN5lEHo/ZKJmKy36nlNSU0MbGnA3NHfevQ4J/xOsilWR AjSXmw7TSIYyQ87jzGW253wXmKhdNTvGYWIGwX1alKbhiq2ZfkMOWhmND7q8eFyJPW6C IfnUKzDKypcNjzOsnZdNNen+4iAvNZ34QTvUZoJ+J9+CaaP7KvOnZAEPjsdiGWtZSf8s bInw== 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:mime-version :content-transfer-encoding; bh=EL/xELy3xyzpLAOLEuwo0PmcxX34W7ti3UpO+ajV24c=; b=JxhEqvjCxAyNapiHMkusFgAPkseZNnBnLxPPN+xUAPCzzflawRVBH5pSjZu37rkMvK i39HPQktD7zP8prKUF7B3AfAsL6+jAAuCChk/jATjOrj8nMlSNx6ANuP5kDXFRuIlyCy OV0xdpfSvy1E0cK19zeu3DmwovPV/9gUSHpq3etqPJg62QUqbV09KFTMufQa/VD9Qo1a 2DfBWWbp84tW2sLrQwm7IepPwiXaRXuMkkVvl83rvB15KKBQlPYu0x1UvvImGx9qX5+J /Y+KhP790GGlrzGA010eB1SjPGILD3ktukR/A16o0TCsReUlzJE9VwtdaBD4+KKxiaau oZTg== X-Gm-Message-State: AHPjjUiiOGRT68+GnnbKz3o9pwM7vmZPfras/fsCwCmhMvLl4QXcvSji gEIdhROMNkj35MSehXKJGjx3aw== X-Google-Smtp-Source: AOwi7QBHFMtPROgvfj4mYCElo6wjLZ1c0bpVGunSSiQX5CZjCj3t0bylmWh9LwPdFDI0akCQnA9yug== X-Received: by 10.98.16.15 with SMTP id y15mr2861905pfi.192.1506195554500; Sat, 23 Sep 2017 12:39:14 -0700 (PDT) Received: from [192.168.86.171] (c-67-180-167-114.hsd1.ca.comcast.net. [67.180.167.114]) by smtp.googlemail.com with ESMTPSA id d124sm4861495pfc.42.2017.09.23.12.39.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Sep 2017 12:39:13 -0700 (PDT) Message-ID: <1506195552.29839.214.camel@edumazet-glaptop3.roam.corp.google.com> Subject: [PATCH net-next] net: speed up skb_rbtree_purge() From: Eric Dumazet To: David Miller Cc: netdev Date: Sat, 23 Sep 2017 12:39:12 -0700 X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Eric Dumazet As measured in my prior patch ("sch_netem: faster rb tree removal"), rbtree_postorder_for_each_entry_safe() is nice looking but much slower than using rb_next() directly, except when tree is small enough to fit in CPU caches (then the cost is the same) Also note that there is not even an increase of text size : $ size net/core/skbuff.o.before net/core/skbuff.o text data bss dec hex filename 40711 1298 0 42009 a419 net/core/skbuff.o.before 40711 1298 0 42009 a419 net/core/skbuff.o From: Eric Dumazet --- net/core/skbuff.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 16982de649b97b92423a4f9f5eac1e98ca803370..000ce735fa8d649e7abeeef2ebab8501dea96efd 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -2848,12 +2848,15 @@ EXPORT_SYMBOL(skb_queue_purge); */ void skb_rbtree_purge(struct rb_root *root) { - struct sk_buff *skb, *next; + struct rb_node *p = rb_first(root); - rbtree_postorder_for_each_entry_safe(skb, next, root, rbnode) - kfree_skb(skb); + while (p) { + struct sk_buff *skb = rb_entry(p, struct sk_buff, rbnode); - *root = RB_ROOT; + p = rb_next(p); + rb_erase(&skb->rbnode, root); + kfree_skb(skb); + } } /**