Date: Sat, 24 Dec 2011 22:06:54 +1100 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Adrian Chadd <adrian@freebsd.org> Cc: Alexander Best <arundel@freebsd.org>, freebsd-current@freebsd.org, freebsd-arch@freebsd.org Subject: Re: [rfc] removing -mpreferred-stack-boundary=2 flag for i386? Message-ID: <20111224211903.I2059@besplex.bde.org> In-Reply-To: <CAJ-VmokbKMBXW2ppEK_tC-OdepHmQT0cF=UuQdxBg=U8t=qmVQ@mail.gmail.com> References: <20111223235642.GA37495@freebsd.org> <20111224160050.T1141@besplex.bde.org> <CAJ-VmokbKMBXW2ppEK_tC-OdepHmQT0cF=UuQdxBg=U8t=qmVQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 23 Dec 2011, Adrian Chadd wrote: > Well, the whole kernel is bloated at the moment, sorry. > > I've been trying to build the _bare minimum_ required to bootstrap > -HEAD on these embedded boards and I can't get the kernel down below 5 > megabytes - ie, one with FFS (with options disabled), MIPS, INET (no > INET6), net80211, ath (which admittedly is big, but I need it no > matter what, right?) comes in at: > > -r-xr-xr-x 1 root wheel 5307021 Nov 29 19:14 kernel.LSSR71 > > And with INET6, on another board (and this includes MSDOS and the > relevant geom modules): > > -r-xr-xr-x 1 root wheel 5916759 Nov 28 12:00 kernel.RSPRO > > .. honestly, that's what should be addressed. That's honestly a bit ridiculous. It's disgusting, but what problems does it cause apart from minor slowness from cache misses? I used to monitor the size of a minimal i386 kernel: % machine i386 % cpu I686_CPU % ident MIN % options SCHED_4BSD In FreeBSD-5-CURRENT between 5.1R and 5.2R, this had size: text data bss dec hex filename 931241 86524 62356 1080121 107b39 /sysc/i386/compile/min/kernel A minimal kernel is not useful, but maybe you can add some i/o to it without bloating it too much. This almost builds in -current too. I had to add the following: - NO_MODULES to de-bloat the compile time - MK_CTF=no to build -current on FreeBSD.9. The kernel .mk files are still broken (depend on nonstandard/new features in sys.mk). - comment out a line in if.c that refers to Vloif. if.c is standard but the loop device is optional. A few more changes to remove non-minimalities that are not defaults made little difference: % machine i386 % cpu I686_CPU % ident MIN % options SCHED_4BSD % % # XXX kill default misconfigurations. % makeoptions NO_MODULES=yes % makeoptions COPTFLAGS="-O -pipe" % % # XXX from here on is to try to kill everything in DEFAULTS. % % # nodevice isa # needed for DELAY... % # nooptions ISAPNP # needed ... % % nodevice npx % % nodevice mem % nodevice io % % nodevice uart_ns8250 % % nooptions GEOM_PART_BSD % nooptions GEOM_PART_EBR % nooptions GEOM_PART_EBR_COMPAT % nooptions GEOM_PART_MBR % % # nooptions NATIVE # needed ... % # nodevice atpic # needed ... % % nooptions NEW_PCIB % % nooptions VFS_ALLOW_NONMPSAFE text data bss dec hex filename 1663902 110632 136892 1911426 1d2a82 kernel (This was about 100K larger with -O2 and all DEFAULTS). The bloat since FreeBSD-5 is only 70%. Here are some sizes for my standard kernel (on i386). The newer versions have about the same number of features since they don't support so many old isa devices or so many NICs: text data bss dec hex filename 1483269 106972 172524 1762765 1ae5cd FreeBSD-3/kernel 1917408 157472 194228 2269108 229fb4 FreeBSD-4/kernel 2604498 198948 237720 3041166 2e678e FreeBSD-5.1.5/kernel 2833842 206856 242936 3283634 321ab2 FreeBSD-5.1.5/kernel-with-acpi 2887573 192456 288696 3368725 336715 FreeBSD-5.1.5/kernel with my changes, -O2 and usb added relative to the above 2582782 195756 298936 3077474 2ef562 previous, with some excessive inlining avoided, and without -O2, and with ipfilter 1998276 159436 137748 2295460 2306a4 kernel.4 a more up to date and less hacked on FreeBSD-4 4365549 262656 209588 4837793 49d1a1 kernel.7 4406155 266496 496532 5169183 4ee01f kernel.7.invariants 3953248 242464 207252 4402964 432f14 kernel.7.noacpi 4418063 268288 240084 4926435 4b2be3 kernel.7.smp various fairly stock FreeBSD-7R kernels 3669544 262848 249712 4182104 3fd058 kernel.c 4174317 258240 540144 4972701 4be09d kernel.c.invariants 3964455 250656 249808 4464919 442117 kernel.c.noacpi 3213928 240160 240596 3694684 38605c kernel.c.noacpi-ule 4285040 268288 286160 4839488 49d840 kernel.c.smp current before FreeBSD-8R not all built at the same time or with the same options. The 20% bloat between kernel.c.noacpi.ule and kernel.c.noacpi is mainly from not killing the default of -O2. 4742714 315008 401692 5459414 534dd6 kernel.8 4816900 319200 1813916 6950016 6a0c80 kernel.8.invariants 4490209 304832 395260 5190301 4f329d kernel.8.noacpi 4795475 323680 475420 5594575 555dcf kernel.8.smp various fairly stock FreeBSD-8R kernels 4979632 287020 488404 5755056 57d0b0 kernel.cur 5062953 289196 1902676 7254825 6eb329 kernel.cur.invariants 5361809 295052 576984 6233845 5f1ef5 kernel.cur.smp amd64 kernels are only bout 4% larger if i386 kernels are built with equivalant CFLAGS (-march=athlon64 for athlon64 CPU), but I usually optimize i386 kernels for space and portability by compiling them with -mtune=old. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20111224211903.I2059>