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
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"