On Sat Dec 24 11, Bruce Evans wrote:
> 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).

strange. the build(7) man page claims that:

"
     WITH_CTF          If defined, the build process will run the DTrace CTF
                       conversion tools on built objects.  Please note that
                       this WITH_ option is handled differently than all other
                       WITH_ options (there is no WITHOUT_CTF, or correspond-
                       ing MK_CTF in the build system).
"

... so setting MK_CTF to anything shouldn't have (according to the man page).

cheers.
alex

> - 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