* Evolution of Linux kernel sizes
@ 2013-11-27 9:35 Geert Uytterhoeven
2013-11-27 9:59 ` Richard Cochran
2013-11-27 15:17 ` Wolfgang Denk
0 siblings, 2 replies; 3+ messages in thread
From: Geert Uytterhoeven @ 2013-11-27 9:35 UTC (permalink / raw)
To: Linux/m68k, Linux Embedded; +Cc: linux-kernel@vger.kernel.org
Preface:
The results below are for m68k.
Why would you care about m68k? You don't, but that doesn't
mean the results are not applicable to other architectures and
platforms where RAM is a precious resource.
Below are the static kernel sizes (as reported by "size") for m68k
multi-platform kernels (m68k/multi_defconfig), for kernel versions
2.6.28 to 3.12:
text data bss dec hex filename
3420940 204772 163888 3789600 39d320 vmlinux-v2.6.28
3464548 219592 164972 3849112 3abb98 vmlinux-v2.6.29
3388760 207964 156588 3753312 394560 vmlinux-v2.6.30
3453128 210649 157580 3821357 3a4f2d vmlinux-v2.6.31
3477222 212032 158156 3847410 3ab4f2 vmlinux-v2.6.32
3513197 210032 154880 3878109 3b2cdd vmlinux-v2.6.33
3530751 211200 154032 3895983 3b72af vmlinux-v2.6.34
3583761 211404 154448 3949613 3c442d vmlinux-v2.6.35
3570768 179888 153344 3904000 3b9200 vmlinux-v2.6.36
3568083 182516 149992 3900591 3b84af vmlinux-v2.6.37
3609796 182736 149228 3941760 3c2580 vmlinux-v2.6.38
3621429 180576 145056 3947061 3c3a35 vmlinux-v2.6.39
3756437 181424 140184 4078045 3e39dd vmlinux-v3.0
3778616 203272 135564 4117452 3ed3cc vmlinux-v3.1
3550337 182512 183004 3915853 3bc04d vmlinux-v3.2
3579169 183044 182360 3944573 3c307d vmlinux-v3.3
3520525 210752 176384 3907661 3ba04d vmlinux-v3.4
3543961 211604 181788 3937353 3c1449 vmlinux-v3.5
3567386 209328 181888 3958602 3c674a vmlinux-v3.6
3623569 210344 181572 4015485 3d457d vmlinux-v3.7
3981063 216584 184284 4381931 42dceb vmlinux-v3.8
3999784 220336 183356 4403476 433114 vmlinux-v3.9
4040393 217440 188108 4445941 43d6f5 vmlinux-v3.10
4076456 222544 190632 4489632 4481a0 vmlinux-v3.11
4010686 220476 190220 4421382 437706 vmlinux-v3.12
It's not a perfect list, as config files evolve over time, but there's
clearly a trend of increasing kernel sizes, ca. 25 KiB/version.
One issue we're facing is that currently the early kernel startup
code on m68k does not support kernel images larger than 4 MiB.
However, I'm not inclined to fix that, as it removes all incentive
to keep kernel sizes small ;-)
The current distro solution is to make as many drivers as possible
modular, and use an initrd. But this adds complexity, and not
everyone wants to use an initrd.
Then you start wondering: What options can I disable? What does
disabling an option gain?
So I wrote a script to automate this process, starting from the current
.config:
https://github.com/geertu/linux-scripts/blob/master/linux-analyze-marginal-sizes
From the accompanying README:
Starting from the current .config file, find out how much space is saved
in the kernel image by individually disabling each of the currently
enabled config options. Module support and all modules are disabled first.
You can pass make options to specify e.g. the target architecture and
cross compiler.
Caveats:
* This is only about static kernel size, not about dynamic memory
consumption.
* You cannot just add up the numbers, as some config options depend on
other config options.
* It's highly recommended to use ccache or distcc.
Example: Display the top 10 options to decrease kernel image size:
linux-analyze-marginal-sizes CROSS_COMPILE=m68k-linux-gnu- \
ARCH=m68k -j 4 | tee log
grep -w saves log | sort -nr --key=4 | head -10
For v3.13-rc1, the top 10 is:
Disabling CONFIG_NET saves 1038404 bytes
Disabling CONFIG_INET saves 572034 bytes
Disabling CONFIG_EXT4_FS saves 328370 bytes
Disabling CONFIG_NFS_FS saves 258728 bytes
Disabling CONFIG_NETWORK_FILESYSTEMS saves 258728 bytes
Disabling CONFIG_SCSI saves 241850 bytes
Disabling CONFIG_FB saves 207496 bytes
Disabling CONFIG_AMIGA saves 160700 bytes
Disabling CONFIG_MAC saves 151134 bytes
Disabling CONFIG_ATARI saves 138392 bytes
I hope you find this useful!
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Evolution of Linux kernel sizes
2013-11-27 9:35 Evolution of Linux kernel sizes Geert Uytterhoeven
@ 2013-11-27 9:59 ` Richard Cochran
2013-11-27 15:17 ` Wolfgang Denk
1 sibling, 0 replies; 3+ messages in thread
From: Richard Cochran @ 2013-11-27 9:59 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Linux/m68k, Linux Embedded, linux-kernel@vger.kernel.org
On Wed, Nov 27, 2013 at 10:35:25AM +0100, Geert Uytterhoeven wrote:
> For v3.13-rc1, the top 10 is:
>
> Disabling CONFIG_NET saves 1038404 bytes
> Disabling CONFIG_INET saves 572034 bytes
...
> I hope you find this useful!
As another poor soul stuck with tiny resources, thank you for this
work! Now, if I could only leave networking out...
Thanks,
Richard
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Evolution of Linux kernel sizes
2013-11-27 9:35 Evolution of Linux kernel sizes Geert Uytterhoeven
2013-11-27 9:59 ` Richard Cochran
@ 2013-11-27 15:17 ` Wolfgang Denk
1 sibling, 0 replies; 3+ messages in thread
From: Wolfgang Denk @ 2013-11-27 15:17 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Linux/m68k, Linux Embedded, linux-kernel@vger.kernel.org
Dear Geert,
In message <CAMuHMdUr2Vr9+STwcYf1PcB=PF+u3SJxU3LYnzqQ+vdbDsp71A@mail.gmail.com> you wrote:
>
> Below are the static kernel sizes (as reported by "size") for m68k
> multi-platform kernels (m68k/multi_defconfig), for kernel versions
> 2.6.28 to 3.12:
>
> text data bss dec hex filename
...
> 4010686 220476 190220 4421382 437706 vmlinux-v3.12
It's even more dramatic if you look further back. The U-Boot README
still has examples of 2.4.4 kernels for PowerPC _including_ network
support:
-> tools/mkimage -l examples/uImage.TQM850L
Image Name: 2.4.4 kernel for TQM850L
Created: Wed Jul 19 02:34:59 2000
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
Load Address: 0x00000000
Entry Point: 0x00000000
resp. the same kernel using an uncompressed image:
Image Type: PowerPC Linux Kernel Image (uncompressed)
Data Size: 792160 Bytes = 773.59 kB = 0.76 MB
Those were the days then, 13 years ago...
Today:
Image Name: Linux-3.12.0-11101-gfe9baba
Created: Wed Nov 27 15:05:33 2013
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 1509145 Bytes = 1473.77 kB = 1.44 MB
Load Address: 00000000
Entry Point: 00000000
Image Type: PowerPC Linux Kernel Image (uncompressed)
Data Size: 3172240 Bytes = 3097.89 kB = 3.03 MB
Compressed: 1509145 / 335725 = 4.50
Uncompressed: 3172240 / 792160 = 4.00
[1] http://git.denx.de/?p=u-boot.git;a=blob;f=README#l5142
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
I think it's a new feature. Don't tell anyone it was an accident. :-)
-- Larry Wall on s/foo/bar/eieio in <10911@jpl-devvax.JPL.NASA.GOV>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-11-27 15:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-27 9:35 Evolution of Linux kernel sizes Geert Uytterhoeven
2013-11-27 9:59 ` Richard Cochran
2013-11-27 15:17 ` Wolfgang Denk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).