From owner-svn-src-head@FreeBSD.ORG Sun Apr 12 14:24:50 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 14401106564A; Sun, 12 Apr 2009 14:24:50 +0000 (UTC) (envelope-from luigi@onelab2.iet.unipi.it) Received: from onelab2.iet.unipi.it (onelab2.iet.unipi.it [131.114.9.129]) by mx1.freebsd.org (Postfix) with ESMTP id CA9BB8FC1A; Sun, 12 Apr 2009 14:24:49 +0000 (UTC) (envelope-from luigi@onelab2.iet.unipi.it) Received: by onelab2.iet.unipi.it (Postfix, from userid 275) id F1A4073098; Sun, 12 Apr 2009 16:30:00 +0200 (CEST) Date: Sun, 12 Apr 2009 16:30:00 +0200 From: Luigi Rizzo To: Robert Watson Message-ID: <20090412143000.GB96365@onelab2.iet.unipi.it> References: <200904121406.n3CE6QSH027497@svn.freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200904121406.n3CE6QSH027497@svn.freebsd.org> User-Agent: Mutt/1.4.2.3i Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: per-cpu counters (Re: svn commit: r190967 - head/sys/netinet) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 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: Sun, 12 Apr 2009 14:24:50 -0000 On Sun, Apr 12, 2009 at 02:06:26PM +0000, Robert Watson wrote: > Author: rwatson > Date: Sun Apr 12 14:06:26 2009 > New Revision: 190967 > URL: http://svn.freebsd.org/changeset/base/190967 > > Log: > Update stats in struct pimstat using two new macros: PIMSTAT_ADD() > and PIMSTAT_INC(), rather than directly manipulating the fields of > the structure. This will make it easier to change the > implementation of these statistics, such as using per-CPU versions > of the data structure. > > MFC after: 3 days i understand that the change is only a cosmetic one, but do we really want to MFC all these counter changes now ? The problem of per-cpu counters exist all over the kernel, so rather than ad-hoc macros for each subsystem, it might be more interesting to first design and discuss a global solution (using HEAD as a test platform, if you like), and only at that stage start MFCing. As an example, an approach i was considering is replace the existing counters with an index in a global_counters[MAXCPU][] array so the counter update will become something like this: - pimstat.pims_rcv_registers_wrongiif++; + global_counters[PCPU_GET(cpuid)] + [pimstat.pims_rcv_registers_wrongiif]++; When you allocate an entry you also need to allocate an entry in the global_counters, but entries have fixed size, and the modules that you build will not depend on the MAXCPU value. All of this is still compatible with the macros you are adding, but I wonder why we should have many PIMSTAT_INC, IPFW_INC, NATD_INC and so on instead of more generic COUNTER64_INC() or COUNTER32_INC() cheers luigi