From owner-freebsd-fs@FreeBSD.ORG Mon Sep 12 11:43:49 2011 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E8C95106564A; Mon, 12 Sep 2011 11:43:49 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id C07D58FC1F; Mon, 12 Sep 2011 11:43:49 +0000 (UTC) Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net [66.111.2.69]) by cyrus.watson.org (Postfix) with ESMTPSA id 7727246B0D; Mon, 12 Sep 2011 07:43:49 -0400 (EDT) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 0ABE38A02E; Mon, 12 Sep 2011 07:43:49 -0400 (EDT) From: John Baldwin To: Andriy Gapon Date: Mon, 12 Sep 2011 07:43:01 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110617; KDE/4.5.5; amd64; ; ) References: <4E6DB696.1080608@FreeBSD.org> In-Reply-To: <4E6DB696.1080608@FreeBSD.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201109120743.02181.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.6 (bigwig.baldwin.cx); Mon, 12 Sep 2011 07:43:49 -0400 (EDT) Cc: freebsd-fs@freebsd.org, FreeBSD-Current Subject: Re: archaic/useless CFLAGS options for x86 boot blocks X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Sep 2011 11:43:50 -0000 On Monday, September 12, 2011 3:36:54 am Andriy Gapon wrote: > > This email is in part inspired by the following problem: > http://article.gmane.org/gmane.os.freebsd.current/135292 > So "harmful" could also be added to the subject line. > > So here is my proposal. > > Part I. ZFS and GPT bootblocks. > > I believe that we do not need here any extra optimizations and happy dances that > seem to be carried over from boot2. > I think that just the -Os should be sufficient of optimization flags. Maybe > even that is not really required. > Rationale: > - these boot blocks are not as nearly space-constrained as boot2 > - using untypical flags increases chances of hitting compiler bugs, > especially for those compilers where we are stuck with > unsupported / locally-maintained versions or where a compiler is maturing yet > - assembly / machine code and debugging may become easier > > Additionally, the '/align/d' '/nop/d' filtering of the intermediate assembly > file seems to be not needed for zfsboot. > > Part II. The original boot2. > > My testing shows that -Os -fomit-frame-pointer are sufficient to produce a small > enough boot2 image (~300 bytes remain available with gcc, 51 bytes for clang). > -mrtd -mregparm=3 do not change size with gcc, but with clang they increase > _available_ space to 79 bytes. > > The '/align/d' '/nop/d' filtering seems to shave off only 7 bytes here. > Not suggesting anything, just an observation... > > Part III. History. > > It seems that all those optimization related options were introduced very long > time ago when the compiler(s) were quite different from what they are now. > So, some re-evaluation may be (long over)due. > For example, -fno-unit-at-a-time is definitely an anti-optmization option and it > was introduced to fight some gcc bugs way back in 2004 (r132870). Its merits > have never been re-evaluated after switch to gcc 4.2, it seems. > -fno-guess-branch-probability and -mno-align-long-strings are even less obvious > options (see e.g. r108149). > > > Finally, here is a diff: > http://people.freebsd.org/~avg/boot-cflags.diff > All the boot blocks are boot tested in qemu. > boot2 is also tested with -mrtd -mregparm removed. I suspect some of the recent changes to shave space down for Clang have made some of the optimization options no longer necessary. I think the patch is fine, and I'd even prefer to go ahead and drop the extra cruft (like removing nops and aligns as well as -mrtd and -mregparm) from the UFS boot2 as well. -- John Baldwin