From owner-freebsd-current@FreeBSD.ORG Thu May 29 21:02:33 2014 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 89BE8566; Thu, 29 May 2014 21:02:33 +0000 (UTC) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 617A92760; Thu, 29 May 2014 21:02:33 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 4E6B1B953; Thu, 29 May 2014 17:02:31 -0400 (EDT) From: John Baldwin To: Adrian Chadd Subject: Re: cpuid_t typedef? (was Re: Processor cores not properly detected/activated?) Date: Thu, 29 May 2014 16:18:54 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.4-CBSD-20140415; KDE/4.5.5; amd64; ; ) References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201405291618.55058.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Thu, 29 May 2014 17:02:31 -0400 (EDT) Cc: Attilio Rao , freebsd-current , Jia-Shiun Li , Alan Somers , Tim Bishop X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 May 2014 21:02:33 -0000 On Thursday, May 29, 2014 4:05:49 pm Adrian Chadd wrote: > On 29 May 2014 11:44, John Baldwin wrote: > > On Thursday, May 29, 2014 2:24:45 pm Adrian Chadd wrote: > >> On 29 May 2014 10:18, John Baldwin wrote: > >> > >> >> > It costs wired memory to increase it for the kernel. The userland set size > >> >> > can be increased rather arbitrarily, so we don't need to make it but so large > >> >> > as it is easy to bump later (even with a branch). > >> >> > >> >> Well, what about making the API/KBI use cpuset_t pointers for things > >> >> rather than including it as a bitmask? Do you think there'd be a > >> >> noticable performance overhead for the bits where it's indirecting > >> >> through a pointer to get to the bitmask data? > >> > > >> > The wired memory is not due to cpuset_t. The wired memory usage is due to things > >> > that do 'struct foo foo_bits[MAXCPU]'. The KBI issues I mentioned above are > >> > 'struct rmlock' (so now you want any rmlock users to malloc space, or you > >> > want rmlock_init() call malloc? (that seems like a bad idea)). The other one > >> > is smp_rendezvous. Plus, it's not just a pointer, you really need a (pointer, > >> > size_t) tuple similar to what cpuset_getaffinity(), etc. use. > >> > >> Why would calling malloc be a problem? Except for the initial setup of > >> things, anything dynamically allocating structs with embedded things > >> like rmlocks are already dynamically allocating them via malloc or > >> uma. > >> > >> There's a larger fundamental problem with malloc, fragmentation and > >> getting the required larger allocations for things. But even a 4096 > >> CPU box would require a 512 byte malloc. That shouldn't be that hard > >> to do. It'd just be from some memory that isn't close to the rest of > >> the lock state. > > > > Other similar APIs like mtx_init() don't call malloc(), so it would be > > unusual behavior. However, we have several other problems before we can > > move beyond 256 anyway (like pf). > > Maybe behaviour has to change over time. :( > > anyway. Besides all of this - I'm thinking of just introducing: > > typedef uint32_t cpuid_t; > > .. then once we've converted all the users, we can make NOCPU > something other than 255 (which is the other limiting factor here..) > > Any objections? This one is a bit harder as you'll have to do shims for kinfo_proc, but I think this is fine. You could also just use u_int, but a new foo_t isn't that bad I guess. -- John Baldwin