From owner-freebsd-current@FreeBSD.ORG Wed Jun 1 18:21:32 2011 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2308F106566B; Wed, 1 Jun 2011 18:21:32 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-gw0-f54.google.com (mail-gw0-f54.google.com [74.125.83.54]) by mx1.freebsd.org (Postfix) with ESMTP id 82BA28FC1F; Wed, 1 Jun 2011 18:21:31 +0000 (UTC) Received: by gwb15 with SMTP id 15so44955gwb.13 for ; Wed, 01 Jun 2011 11:21:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:date:x-google-sender-auth :message-id:subject:from:to:cc:content-type; bh=f7gEazXcXAjB5FWU2gwaRHmdWnQiRN1tt2kKqaGxwys=; b=QBgp9s4U+c0CwX2mAhNZY/jvrDrb5cc7NMIkAud+emI1uDUYDvjUUDf/fUwz8kbcMM agXztQ8iPUNmLsdlhUGANY3uYipYol+XoYFfd7ePjZxYgNBhclW2CofWsDwU005HQbQZ m1NC/nopHv+SEMQI3UpSvRIscOiw2BlUTIl+I= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type; b=MuNKV0ZSDRODWOI1vNC/NIOBi+R9MyWDltBNMrcoM7knJcNioxcpCKGtHdsnaq5YlC sg0XIjtgB6iDH9SItssVVN6QoywR5knwvuZu67izlmAhwbLvi571U1UWO3kGzESe3aYA dJ+/xZMhO6xcCuAIpg4df3EdEzNkONXHXLyBw= MIME-Version: 1.0 Received: by 10.236.112.199 with SMTP id y47mr8623899yhg.170.1306952490724; Wed, 01 Jun 2011 11:21:30 -0700 (PDT) Sender: asmrookie@gmail.com Received: by 10.236.103.136 with HTTP; Wed, 1 Jun 2011 11:21:30 -0700 (PDT) Date: Wed, 1 Jun 2011 14:21:30 -0400 X-Google-Sender-Auth: pRppI4Qiwmr3bLjmKS0DB1uH0FA Message-ID: From: Attilio Rao To: freebsd-current@freebsd.org Content-Type: text/plain; charset=UTF-8 Cc: Marius Strobl , Sergey Kandaurov , Nick Esborn , Sean Bruno Subject: [PATCH] Add the infrastructure for supporting an infinite number of CPUs X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 01 Jun 2011 18:21:32 -0000 Current maximum number of CPUs supported by the FreeBSD kernel is 32. That number cames from indirectly by the fact that we have a cpumask_t type, representing a mask of CPUs, which is an unsigned int right now. I then made a patch that removes the cpumask_t type and uses cpuset_t type for characterizing a generic mask of CPUs: http://www.freebsd.org/~attilio/largeSMP/largeSMP-patchset-beta-0.diff This is part of a bigger effort which brought to serveral smaller commits along the way, in order to fix some edge cases. Things to pay attention at: - Userland and kerneland cpuset_t size can be different, thus when accessing to a kernel cpuset_t object from userland (via kvm_read() for example) a pattern similar to what pmccontrol does, in this patch, should be followed - There are some cpuset_t object in pcpu representing curcpu mask and !curcpu mask. With transition from cpumask_t to cpuset_t they become inefficient and not really useful. The next weeks I'll focus on removing them and make a smarter usage of the cpuset_t interface. Additively, please note that right now I clobbered pcpu accesses under scheduler pinnings, because it is possible more than a single atomic operation is needed for accessing a cpuset_t. When the cleanup happens those pinnings will go away. - I had to introduce, among the other things, functions for representing cpuset_t object in "visual" way, thus cpusetobj_strprint() and cpusetobj_strscan(). I got the desired format from what Linux already does, so that someone may be already used to it. Anyway strings will be represented as a serie of long, hexadecimal long words, all separated by ", ". The left-most represents the higher word, following natural bits representation. - I used cpusetobj_strscan() for implementing KTR_CPUMASK in a way it supports cpuset_t. Change the kernel config appropriately. - No MAXCPU has been bumped in the patch, but I encourage you to do so with your own kernel configurations. I really need to commit this patch before code slush happens, thus I plan to commit it on June 7th, if no one reports bugs or can make good point on his reviews. Please note that the patch has been greatly tested and reviewed on all FreeBSD tier-1 and tier-2 architectures. Anyway more testing and reviews are welcome to happen. Thanks, Attilio -- Peace can only be achieved by understanding - A. Einstein