# Kernel size

## mreff555

My dailyuse laptop kernel which is extramely functional, but in my optinion, fairly stripped down is 3.5M compressed or 5.5M uncompressed.

What can I compare this to. is this kernel small medium large?

I've hunted around on the internet and while there are plenty of guides on how to shrink your kernel. none really give a target.

how small is small?

----------

## asturm

It's reasonably small.

Actually quite similar to mine, LZO compressed:

```
3,4M    /boot/kernel-3.6.5-ownage

4,8M    /lib/modules/3.6.5-ownage
```

Look here: https://forums.gentoo.org/viewtopic-t-940702.html

----------

## mreff555

I used xz compression because it seemed to be a good balance of speed and compression ratio. 

At this point it's pretty os specific. The only other changes I could see making would be to remove some of the kernel hacking options like printk

or to internalize certain modules. such as ath9k, udf. Does that actually improve kernel size if you are able to turn off loadable modules?

----------

## Hu

 *mreff555 wrote:*   

> Does that actually improve kernel size if you are able to turn off loadable modules?

 The kernel module loading code is only needed if you support loadable modules, so in theory, yes, disabling module support can reduce the size of the kernel binary.  It may not be reduced by a large amount, and it could be a net loss if disabling module support forces you to include rarely used code in the core image instead of placing it in an unloaded module.

----------

## mreff555

Just to see what would happen I updated my kernel config, adjusted every module I could find to compile in to the kernel

I've been running on it for a few hours. lsmod confirms I have no modules loaded. wireless seems to be fine.

The only problem I've noticed is that 1-wire functionality seems to have stopped since I switched it to a module (battery monitor)

I'll have to play with that one.

anyway, my kernel size increased from compressed 3.5 to 3.7. If I removed loadable modules would it drop my kernel size be more than .2M or would it be better to just go back to a couple loadable modules.

----------

## cach0rr0

if you're dealing with wireless, i would lean heavily towards at the very least having wireless handled via modules

as kernel releases go, wireless seems to regularly shit the bed from one release to the next. In my case, with iwlwifi, I run into situations where iwlwifi segfaults, and my only recourse is to either reboot the machine, or, much more desirable, rmmod and modprobe (trying out different parameters/args from modinfo, some of which seem to have help). 

sound cards are another one. Being able to pass args to modprobe is much easier than having to specify a bunch of crap on the kernel command line. 

becomes almost a philosophical discussion of "to module, or not to module". For laptops, i lean module. For servers, i tend to have everything built in. 

FWIW, my kernel is 4.0M, gzipped, my modules are 4.2M. I don't really notice any superfluous bloat.

----------

## mreff555

Yep, for now I've decided leaving some drivers such as wireless and video is definitely the best.

I did some more tweaking and I'm down to 3.4 compressed or 5.4 uncompressed. Removing loadable modules and building in my wifi and video cards pushes the uncompressed size up to 6.8megs

----------

## wagglet

I'm running an almost-monolithic kernel on my venerable-but-oh-so-reliable ThinkPad and since the upgrade from 3.3.8 to 3.5.7 I have to say it seems just a little snappier. I did notice a moderate size increase between the versions: it's gone up around 300K but I still think it is a reasonable size given very nearly everything is compiled-in (including WiFi firmware):-

Kernel (gzip compressed):-

```

-rw-r--r--  1 root root 934K Nov 10 14:55 initramfs-genkernel-x86-3.5.7-gentoo

-rw-r--r--  1 root root 5.0M Nov 10 14:46 kernel-linux-3.5.7-gentoo

```

Modules usually running:-

```

Module                  Size  Used by

vboxnetadp             18790  0 

vboxnetflt             15965  0 

vboxdrv               191664  2 vboxnetadp,vboxnetflt

hdaps                   6344  1 

tp_smapi               12500  0 

thinkpad_ec             3907  2 hdaps,tp_smapi

scsi_wait_scan           483  0 

```

I have no complaints so far...seems stable as a rock.  Perhaps my standards are too low lol  :Smile: 

----------

## mconnolly

My kernel is set up to be entirely monolithic (no modules loaded), and right now the kernel is 4MB, XZ compressed (version 3.6.6).  I am going to tweak it some more, as I know I haven't done all the optimization I can.  It's almost there, though.

Boot up is very quick (<10 seconds) and it's very snappy, although I have a SATA3 SSD in my computer so that's most of it there, I am sure.

----------

## mreff555

 *mconnolly wrote:*   

> My kernel is set up to be entirely monolithic (no modules loaded), and right now the kernel is 4MB, XZ compressed (version 3.6.6).  I am going to tweak it some more, as I know I haven't done all the optimization I can.  It's almost there, though.
> 
> Boot up is very quick (<10 seconds) and it's very snappy, although I have a SATA3 SSD in my computer so that's most of it there, I am sure.

 

Impressive. I'm curious to know what you have removed. I'm not really sure what I could remove without sacrificing daily performance. What if any kernel hacking have you done?

here is mine

compressed and uncompressed kernel 

```

-rw-r--r-- 1 root root 3.5M Nov  7 20:08 /boot/vmlinuz-3.6.6-build5

-rwxr-xr-x 1 root root 5.5M Nov  7 19:55 /usr/src/linux/arch/x86/boot/compressed/vmlinux

```

Typical modules loaded

```

Module                  Size  Used by

i915                  479963  2 

drm_kms_helper         24749  1 i915

intel_agp              10432  1 i915

ath9k                 148831  0 

ath9k_common            1834  1 ath9k

ath9k_hw              382901  2 ath9k,ath9k_common

ath                    15242  3 ath9k,ath9k_common,ath9k_hw

intel_gtt              15069  2 i915,intel_agp

coretemp                5862  0 

mxm_wmi                 1305  0 

```

----------

## dmpogo

Well, kernel size is continously growing.   Mine has reached 2.6 Mb, I remember how it started crossing 2Mb somewhere around 2.6.32

----------

## mreff555

I think the kernel may have shrunk somewhere around 3.7.x or 3.8.x because after that it became easier to keep it small. I gave up on a monolithic kernel because certain programs seem to require a module. Here's what I am down to now

```

-rw-r--r--  1 root root 3.1M Aug 30 20:18 kernel-3.10.9-gentoo-r00

```

Of course I do load a lot of modules these days. Still boots really fast.

```

Module                  Size  Used by

i915                  563019  -2 

iwldvm                126992  -2 

mac80211              385534  -2 

fbcon                  37398  -2 

bitblit                 4945  -2 

uvcvideo               69996  -2 

softcursor              1189  -2 

snd_hda_codec_realtek    34582  -2 

font                    7276  -2 

tileblit                2029  -2 

drm_kms_helper         27435  -2 

cfbfillrect             3794  -2 

cfbimgblt               2055  -2 

cfbcopyarea             3270  -2 

iwlwifi                74152  -2 

fb                     50009  -2 

cfg80211              355207  -2 

videobuf2_vmalloc       2808  -2 

videobuf2_memops        1743  -2 

videobuf2_core         26897  -2 

videodev              101088  -2 

fbdev                    750  -2 

atl1c                  33572  -2 

snd_hda_intel          31543  -2 

snd_hda_codec         130577  -2 

snd_hwdep               5718  -2 

snd_pcm                75054  -2 

snd_page_alloc          6694  -2 

snd_timer              18041  -2 

snd                    56480  -2 

```

----------

## jimmij

i915, atl1c, snd... as a modules, really?

What's the benefit of that besides artificially smaller kernel?

ps. My vanilla 3.10.9 with LZO compression has 4.4M.

----------

## TheLexx

I've always leaned towards a more modular kernel.  I used kernel-seeds and "make localmodconfig" along with my own script that 'merged' multiple ".config" files to come up with my .config file.

All my human interface devices are USB so built in enough USB such that Keyboards, mice and thumb drives can be read w/o any modules loaded. I compile a single kernel to run all my computers. They run on single core, but the most intense computing I do is play youtube and mp3.

ls -l kmh-bzImage-3.4.48-1 -> 2.19M

du -sk  /lib/modules/3.4.48try1 -> 13.7 M

lsmod on computer: harrier

```

Module                  Size  Used by

rtl8192cu              70553  0 

rtl8192c_common        41821  1 rtl8192cu

rtlwifi                69702  1 rtl8192cu

vfat                    6898  0 

fat                    33888  1 vfat

sg                     19182  0 

snd_intel8x0           19777  1 

arc4                     927  2 

zd1211rw               37540  0 

mac80211              146798  4 rtl8192cu,rtl8192c_common,rtlwifi,zd1211rw

cfg80211              115174  3 rtlwifi,zd1211rw,mac80211

rfkill                 10206  1 cfg80211

radeon                631418  0 

ttm                    37688  1 radeon

drm_kms_helper         17789  1 radeon

drm                   136676  3 radeon,ttm,drm_kms_helper

agpgart                17404  2 ttm,drm

backlight               2745  1 radeon

i2c_algo_bit            3640  1 radeon

ipv6                  181191  10 

nfsd                  161480  11 

lockd                  41513  1 nfsd

nfs_acl                 1588  1 nfsd

auth_rpcgss            20813  1 nfsd

sunrpc                116690  11 nfsd,lockd,nfs_acl,auth_rpcgss

exportfs                2556  1 nfsd

snd_ac97_codec         76922  1 snd_intel8x0

pcspkr                  1216  0 

ac97_bus                 683  1 snd_ac97_codec

snd_pcm                43829  2 snd_intel8x0,snd_ac97_codec

fan                     1679  0 

thermal                 6028  0 

processor              14633  0 

button                  3247  0 

tpm_tis                 5819  0 

tpm                     8886  1 tpm_tis

tpm_bios                3281  1 tpm

snd_timer              12300  1 snd_pcm

snd                    34278  6 snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer

snd_page_alloc          4650  2 snd_intel8x0,snd_pcm

floppy                 39117  0 

k8temp                  2304  0 

rtc_cmos                6437  0 

forcedeth              41016  0 

ehci_hcd               30655  0 

i2c_nforce2             3949  0 

i2c_core               12423  5 radeon,drm_kms_helper,drm,i2c_algo_bit,i2c_nforce2

thermal_sys             9495  3 fan,thermal,processor

```

----------

## eccerr0r

I was hoping for minimal memory footprint, but with a twist: want to keep it small regardless of what machine I'm running it on.

Kernel:

```
-rw-r--r-- 1 root root 2968960 May 31 22:07 kernel64-3.9.2
```

Worst Modules:

```
fglrx                5097152  171 

radeon                735920  1 

kvm                   368472  1 kvm_intel

ipv6                  264086  55 bridge

sunrpc                175964  45 nfs,nfsd,auth_rpcgss,lockd,nfsv4,nfs_acl

snd_hda_codec         139451  3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel

kvm_intel             122383  0 

nfsv4                 120263  0 

nfs                   116704  1 nfsv4

nfsd                   91905  11 

bridge                 82056  0 

```

I can't exactly statically link fglrx unfortunately.  I'm not entirely sure why radeon is being used though...  I should get rid of that (probably for KMS, not sure if fgrlx needs it?)  And I don't necessarily need kvm on all machines (and may run this build of kernel as a VM under the same kernel on this machine :D)

----------

## dmpogo

wow, I never saw kernels over 3M  :Smile: 

Here are the kernels I have installed on my Thinkpad laptop

```

-rw-r--r-- 1 root root 2324048 Oct  1  2011 kernel-2.6.38-gentoo+tuxonice-r6

-rw-r--r-- 1 root root 2323792 Nov 12  2011 kernel-2.6.39-gentoo+tuxonice-r3

-rw-r--r-- 1 root root 2618992 Mar 15 00:07 kernel-3.2.40-gentoo+tuxonice

-rw-r--r-- 1 root root 2679280 Mar 13 22:29 kernel-3.4.34-gentoo+tuxonice

-rw-r--r-- 1 root root 2701360 Jul 26 00:37 kernel-3.8.13-gentoo+tuxonice

```

----------

## eccerr0r

32 or 64 bit kernel?

My 64-bit machines (x86_64 and ia64) always had huge kernels... but 32-bit has been increasing...

----------

## asturm

/me saw a steady increase in kernel size since 3.6, only partially due to additional needed options:

```
4,6M  /boot/kernel-3.11_rc7

6,5M  /lib/modules/3.11.0-rc7+
```

@dmpogo: 32/64 bit aside, it also heavily depends on your choice of compression. I could use xz and reduce kernel size quite a lot, but would need to wait longer for decompression.

----------

## toralf

 *dmpogo wrote:*   

> wow, I never saw kernels over 3M 
> 
> Here are the kernels I have installed on my Thinkpad laptop
> 
> 

 me to (T420), but modules is bigger :

```
n22 ~ # ls -lh /boot/*kernel*

-rw-r--r-- 1 root root 1.6M Aug 29 22:16 /boot/initramfs-genkernel-x86-3.10.10

-rw-r--r-- 1 root root 1.6M Aug 31 19:16 /boot/initramfs-genkernel-x86-3.11.0-rc7+

-rw-r--r-- 1 root root 1.7M Aug 29 22:01 /boot/initramfs-genkernel-x86-3.4.60

lrwxrwxrwx 1 root root   32 Aug 31 19:12 /boot/kernel -> kernel-genkernel-x86-3.11.0-rc7+

-rw-r--r-- 1 root root 2.3M Aug 29 22:11 /boot/kernel-genkernel-x86-3.10.10

-rw-r--r-- 1 root root 2.4M Aug 31 19:12 /boot/kernel-genkernel-x86-3.11.0-rc7+

-rw-r--r-- 1 root root 2.2M Aug 29 21:53 /boot/kernel-genkernel-x86-3.4.60

-rw-r--r-- 1 root root 1.4M Aug 29 22:11 /boot/System.map-genkernel-x86-3.10.10

-rw-r--r-- 1 root root 1.5M Aug 31 19:12 /boot/System.map-genkernel-x86-3.11.0-rc7+

-rw-r--r-- 1 root root 1.3M Aug 29 21:53 /boot/System.map-genkernel-x86-3.4.60

n22 ~ # du -ms /lib/modules/*

11      /lib/modules/3.10.10

11      /lib/modules/3.11.0-rc7+

10      /lib/modules/3.4.60

```

----------

## mreff555

 *jimmij wrote:*   

> i915, atl1c, snd... as a modules, really?
> 
> What's the benefit of that besides artificially smaller kernel?
> 
> ps. My vanilla 3.10.9 with LZO compression has 4.4M.

 

My theory was that the kernel should just contain core components needed to boot and repair the system in case of an emergency. I Can do without sound, wireless and graphics in that case.

besides that I actually was having trouble with some of the stuff when it was built in such as wireless.

I guess if I wanted I could build a monolithic kernel. I've done it before but I seem to get better performance this way.

----------

## eccerr0r

 *genstorm wrote:*   

> /me saw a steady increase in kernel size since 3.6, only partially due to additional needed options:
> 
> 

 

It's been increasing since Linux was first released...  :Very Happy: 

I still remember the kernels that could fit on a 5.25" DD floppy when I first started using Linux...

----------

## Hu

I configure with the rule that if a feature is likely to be loaded all or almost all of the time, then it is built-in.  Thus, I include sound and graphics in the core, because both of them are difficult to unload and likely to be loaded as soon as I start using the system.

----------

## asturm

 *eccerr0r wrote:*   

>  *genstorm wrote:*   /me saw a steady increase in kernel size since 3.6, only partially due to additional needed options:
> 
>  
> 
> It's been increasing since Linux was first released... 

 

Of course it is - that was more wrt my first comment in this thread  :Wink: 

----------

## dmpogo

 *eccerr0r wrote:*   

> 32 or 64 bit kernel?
> 
> My 64-bit machines (x86_64 and ia64) always had huge kernels... but 32-bit has been increasing...

 

Mine are 64-bit, x86_64,  and with CONFIG_CC_OPTIMIZE_FOR_SIZE=y.

What my kernels do not have is almost any of kernel debugging

----------

## dmpogo

 *genstorm wrote:*   

> /me saw a steady increase in kernel size since 3.6, only partially due to additional needed options:
> 
> ```
> 4,6M  /boot/kernel-3.11_rc7
> 
> ...

 

my compression is plain gzip

----------

## eccerr0r

I think another problem with my kernel, at least that 3.9.2 one - I have multiple filesystems compiled in, along with mdraid and device mapper (lvm) for boot/autodetect.  

Some of my real bloat kernels have full USB support so that I can boot off of USB with that kernel.  Those are huge.

Drat, I guess I shouldn't use this 3.9.2 kernel for my VMs after all.

----------

