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"

Reply via email to