From owner-svn-src-head@freebsd.org Tue May 22 16:45:34 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 70D8AEFC412; Tue, 22 May 2018 16:45:34 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-qt0-x242.google.com (mail-qt0-x242.google.com [IPv6:2607:f8b0:400d:c0d::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id ED4007F623; Tue, 22 May 2018 16:45:33 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-qt0-x242.google.com with SMTP id j42-v6so24225799qtj.12; Tue, 22 May 2018 09:45:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=OSYGZKtH6sAFXACXdZoh9TkuznqldawEKdRlRYROOGM=; b=cD3TFYHPKbuEHRKi7tOAcbZOIVls6WWsjzU9hu2QKQj+bDdh1ho4IRQ9CxVTP8J/Pf CVT/8tqbHLYcRXh07pt2ewqK3ghkeBZIqiHgo5fAj96dn0Bj17sP/4414iZUbnbp1L4r EYbRuQu6VFroDXjoraPLjCD+fzxKDUb+SESaAAt+Rz7d/RQ48cv8/goe5JF12EoOH3RI oUDSU8qQ6mGqi6kTTTIWyCSq8tBlTa8Dtj8QlmSkvBgOZXFxrmPSLXFqSoHg2+h7AvG/ YArD5IAhOF+BK1HxACjYBu7PguF/1YG9CNq4CSlMj6LwRgHXntBynIZsAz8cxjiFfKtC fnsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=OSYGZKtH6sAFXACXdZoh9TkuznqldawEKdRlRYROOGM=; b=dhnAaS6/ZYtur9Vc2359QYqtugl7/sj3S9lUtv/r34nunYmxn9GIq5Jt0WqJJ4oWyd Xu5AOww7ILIjt4LCLKCn4TBQVMaYqWmg0lNdS3yfXUEyM+MhKs7hiES+5QkBtTGij5+P 3Zxh0yfjrTvhJJC9FakIQQbRTmQdIDG17g7WaUigWTgh5TlZC+eVW7Tj731sEC+GhW3y TmTRNp2FvNYHvwE2HfFJVpO7SWOIbWQQz1WsWV5wVFbG5ccRNtm8sVBMUlsf++Vrn8MC WAcXzbiqFw0V9ycwzCzBZAMi0icbGFMoEeKHjjoly0op588g3WoWEc7A47CMjkf7RRpN Ewsw== X-Gm-Message-State: ALKqPwcQ+RiyT74kAO+6vhNsORhNBW8BdKJYUr4ppeKALUlr9wZig/RB BcsHpWk8fnwOty/kv7rkVW1+FlZVAHb3+AjwOzU= X-Google-Smtp-Source: AB8JxZrk3KUV6fyHyPkl+qXfrnijm9FixuKNwLJ1KWkMmBLDlq67dFnqhwsdT4BLBFk3UWh3cEA2WMFxcyO4IwkCU90= X-Received: by 2002:ac8:4a2:: with SMTP id s34-v6mr23383695qtg.129.1527007533273; Tue, 22 May 2018 09:45:33 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ac8:1c4a:0:0:0:0:0 with HTTP; Tue, 22 May 2018 09:45:32 -0700 (PDT) In-Reply-To: <201805221554.w4MFsPQA083334@repo.freebsd.org> References: <201805221554.w4MFsPQA083334@repo.freebsd.org> From: Mateusz Guzik Date: Tue, 22 May 2018 18:45:32 +0200 Message-ID: Subject: Re: svn commit: r334054 - in head: sys/kern sys/netipsec tools/tools/crypto usr.bin/netstat To: Fabien Thomas Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.26 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 May 2018 16:45:34 -0000 On Tue, May 22, 2018 at 5:54 PM, Fabien Thomas wrote: > Author: fabient > Date: Tue May 22 15:54:25 2018 > New Revision: 334054 > URL: https://svnweb.freebsd.org/changeset/base/334054 > > Log: > Add a SPD cache to speed up lookups. > > When large SPDs are used, we face two problems: > > - too many CPU cycles are spent during the linear searches in the SPD > for each packet > - too much contention on multi socket systems, since we use a single > shared lock. > > > void > +spdcache_init(void) > +{ > + int i; > + > + TUNABLE_INT_FETCH("net.key.spdcache.maxentries", > + &V_key_spdcache_maxentries); > + TUNABLE_INT_FETCH("net.key.spdcache.threshold", > + &V_key_spdcache_threshold); > + > + if (V_key_spdcache_maxentries) { > + V_key_spdcache_maxentries = MAX(V_key_spdcache_maxentries, > + SPDCACHE_MAX_ENTRIES_PER_HASH); > + V_spdcachehashtbl = hashinit(V_key_spdcache_maxentries / > + SPDCACHE_MAX_ENTRIES_PER_HASH, > + M_IPSEC_SPDCACHE, &V_spdcachehash_mask); > + V_key_spdcache_maxentries = (V_spdcachehash_mask + 1) > + * SPDCACHE_MAX_ENTRIES_PER_HASH; > + > + V_spdcache_lock = malloc(sizeof(struct mtx) * > + (V_spdcachehash_mask + 1), > + M_IPSEC_SPDCACHE, M_WAITOK|M_ZERO); > + > + for (i = 0; i < V_spdcachehash_mask + 1; ++i) > + SPDCACHE_LOCK_INIT(i); > + } > +} > + > This ends up putting two locks per cacheline and sharing bucket heads across other lines. Unless you got a good reason not to, you should define a struct a which has both the lock and the list. An example of this can be found in kern/kern_lockf.c -- Mateusz Guzik