3

I'm on an SSD where file fragmentation shouldn't matter that much anyway but I noticed "loading initial ramdisk ..." message in grub is taking longer that I think it should. It lasts about 7 seconds before Plymouth runs. Plymouth itself only takes about 3 seconds (it would be nice if it started sooner and lasted longer though). Then lightdm / greeter screen comes up over a 2 to 3 seconds.

So I did a little experimenting and ran filefrag -v /boot/init* and noticed my kernel 4.4.0-53 seems overly fragmented:

File size of /boot/initrd.img-4.4.0-53-generic is 49027703 (11970 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       3:    4351562..   4351565:      4:            
   1:        4..    4095:    2334720..   2338811:   4092:    4351566:
   2:     4096..    8191:    2330624..   2334719:   4096:    2338812:
   3:     8192..   10239:    2355200..   2357247:   2048:    2334720:
   4:    10240..   11969:    2408448..   2410177:   1730:    2357248: last,eof

I'm curious how a fragmented initrd.img will impact booting performance. Is it worth defragging?

Of course I'm always open to suggestions for making initrd.img smaller and faster as well.

Note: Besides the mSata SSD and full-size SSD my laptop has a full-size HDD that contains Ubuntu 14.04 so I'm interested in defragging initrd.img in general, not just for SSD. The current boot session is from the mSata SSD though which is limited to SATA II speeds unlike the full-size drives which are on SATA III bus.

EDIT 1: - systemd Boot Chart

As per comments below I've included the systemd-bootchart which is generated by modifying grub kernel parameters with:

GRUB_CMDLINE_LINUX_DEFAULT="splash vt.handoff=7 kaslr init=/lib/systemd/systemd-bootchart"

The boot chart is saved to: /run/log/bootchart-20161224-1801.svg. I had to use gimp to open and export it in .jpg format at 75% quality to make it fit in Ask Ubuntu's 2.1 MB limit. The exported file is shown below:

systemd bootchart

Notice the 9 second delay at the begining. The "normal" delay of 7 seconds for "Loading initial ramdisk ..." message in grub is now about 10 seconds. The extra time likely attributable to systemd-bootchart overhead.

EDIT 2: RAM and cgroups

As per comments (requests) below RAM and cgroups from /var/log/syslog are included in this edit.

Output from free -m:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7843        3167         820        1574        3854        2740
Swap:          7999           4        7995

Note that SWAP is only used for testing OOM Killer and can be erased. Indeed technically it shouldn't be on an SSD in the first place.

Output from grep cgroup < /var/log/syslog.1:

$ grep cgroup < /var/log/syslog.1
Dec 24 15:22:50 dell kernel: [    0.000000] Initializing cgroup subsys cpuset
Dec 24 15:22:50 dell kernel: [    0.000000] Initializing cgroup subsys cpu
Dec 24 15:22:50 dell kernel: [    0.000000] Initializing cgroup subsys cpuacct
Dec 24 15:22:50 dell kernel: [    0.011642] Initializing cgroup subsys io
Dec 24 15:22:50 dell kernel: [    0.011645] Initializing cgroup subsys memory
Dec 24 15:22:50 dell kernel: [    0.011651] Initializing cgroup subsys devices
Dec 24 15:22:50 dell kernel: [    0.011653] Initializing cgroup subsys freezer
Dec 24 15:22:50 dell kernel: [    0.011655] Initializing cgroup subsys net_cls
Dec 24 15:22:50 dell kernel: [    0.011657] Initializing cgroup subsys perf_event
Dec 24 15:22:50 dell kernel: [    0.011659] Initializing cgroup subsys net_prio
Dec 24 15:22:50 dell kernel: [    0.011662] Initializing cgroup subsys hugetlb
Dec 24 15:22:50 dell kernel: [    0.011664] Initializing cgroup subsys pids
Dec 24 15:22:50 dell kernel: [    6.204710] cgroup: new mount options do not match the existing superblock, will be ignored
Dec 24 15:23:33 dell kernel: [    0.000000] Initializing cgroup subsys cpuset
Dec 24 15:23:33 dell kernel: [    0.000000] Initializing cgroup subsys cpu
Dec 24 15:23:33 dell kernel: [    0.000000] Initializing cgroup subsys cpuacct
Dec 24 15:23:33 dell kernel: [    0.010846] Initializing cgroup subsys io
Dec 24 15:23:33 dell kernel: [    0.010849] Initializing cgroup subsys memory
Dec 24 15:23:33 dell kernel: [    0.010855] Initializing cgroup subsys devices
Dec 24 15:23:33 dell kernel: [    0.010857] Initializing cgroup subsys freezer
Dec 24 15:23:33 dell kernel: [    0.010860] Initializing cgroup subsys net_cls
Dec 24 15:23:33 dell kernel: [    0.010861] Initializing cgroup subsys perf_event
Dec 24 15:23:33 dell kernel: [    0.010864] Initializing cgroup subsys net_prio
Dec 24 15:23:33 dell kernel: [    0.010867] Initializing cgroup subsys hugetlb
Dec 24 15:23:33 dell kernel: [    0.010868] Initializing cgroup subsys pids
Dec 24 15:23:33 dell kernel: [    7.338815] cgroup: new mount options do not match the existing superblock, will be ignored
Dec 24 15:45:25 dell kernel: [    0.000000] Initializing cgroup subsys cpuset
Dec 24 15:45:25 dell kernel: [    0.000000] Initializing cgroup subsys cpu
Dec 24 15:45:25 dell kernel: [    0.000000] Initializing cgroup subsys cpuacct
Dec 24 15:45:25 dell kernel: [    0.010844] Initializing cgroup subsys io
Dec 24 15:45:25 dell kernel: [    0.010847] Initializing cgroup subsys memory
Dec 24 15:45:25 dell kernel: [    0.010853] Initializing cgroup subsys devices
Dec 24 15:45:25 dell kernel: [    0.010855] Initializing cgroup subsys freezer
Dec 24 15:45:25 dell kernel: [    0.010857] Initializing cgroup subsys net_cls
Dec 24 15:45:25 dell kernel: [    0.010859] Initializing cgroup subsys perf_event
Dec 24 15:45:25 dell kernel: [    0.010861] Initializing cgroup subsys net_prio
Dec 24 15:45:25 dell kernel: [    0.010864] Initializing cgroup subsys hugetlb
Dec 24 15:45:25 dell kernel: [    0.010866] Initializing cgroup subsys pids
Dec 24 15:45:25 dell kernel: [    5.977461] cgroup: new mount options do not match the existing superblock, will be ignored
Dec 24 16:09:31 dell kernel: [    0.000000] Initializing cgroup subsys cpuset
Dec 24 16:09:31 dell kernel: [    0.000000] Initializing cgroup subsys cpu
Dec 24 16:09:31 dell kernel: [    0.000000] Initializing cgroup subsys cpuacct
Dec 24 16:09:31 dell kernel: [    0.010848] Initializing cgroup subsys io
Dec 24 16:09:31 dell kernel: [    0.010852] Initializing cgroup subsys memory
Dec 24 16:09:31 dell kernel: [    0.010858] Initializing cgroup subsys devices
Dec 24 16:09:31 dell kernel: [    0.010860] Initializing cgroup subsys freezer
Dec 24 16:09:31 dell kernel: [    0.010862] Initializing cgroup subsys net_cls
Dec 24 16:09:31 dell kernel: [    0.010864] Initializing cgroup subsys perf_event
Dec 24 16:09:31 dell kernel: [    0.010866] Initializing cgroup subsys net_prio
Dec 24 16:09:31 dell kernel: [    0.010870] Initializing cgroup subsys hugetlb
Dec 24 16:09:31 dell kernel: [    0.010871] Initializing cgroup subsys pids
Dec 24 16:09:31 dell kernel: [    6.663158] cgroup: new mount options do not match the existing superblock, will be ignored
Dec 24 18:00:44 dell kernel: [    0.000000] Initializing cgroup subsys cpuset
Dec 24 18:00:44 dell kernel: [    0.000000] Initializing cgroup subsys cpu
Dec 24 18:00:44 dell kernel: [    0.000000] Initializing cgroup subsys cpuacct
Dec 24 18:00:44 dell kernel: [    0.011644] Initializing cgroup subsys io
Dec 24 18:00:44 dell kernel: [    0.011647] Initializing cgroup subsys memory
Dec 24 18:00:44 dell kernel: [    0.011654] Initializing cgroup subsys devices
Dec 24 18:00:44 dell kernel: [    0.011656] Initializing cgroup subsys freezer
Dec 24 18:00:44 dell kernel: [    0.011658] Initializing cgroup subsys net_cls
Dec 24 18:00:44 dell kernel: [    0.011660] Initializing cgroup subsys perf_event
Dec 24 18:00:44 dell kernel: [    0.011662] Initializing cgroup subsys net_prio
Dec 24 18:00:44 dell kernel: [    0.011665] Initializing cgroup subsys hugetlb
Dec 24 18:00:44 dell kernel: [    0.011667] Initializing cgroup subsys pids
Dec 24 18:00:44 dell kernel: [    6.388658] cgroup: new mount options do not match the existing superblock, will be ignored
Dec 24 18:01:33 dell kernel: [    0.000000] Initializing cgroup subsys cpuset
Dec 24 18:01:33 dell kernel: [    0.000000] Initializing cgroup subsys cpu
Dec 24 18:01:33 dell kernel: [    0.000000] Initializing cgroup subsys cpuacct
Dec 24 18:01:33 dell kernel: [    0.010850] Initializing cgroup subsys io
Dec 24 18:01:33 dell kernel: [    0.010854] Initializing cgroup subsys memory
Dec 24 18:01:33 dell kernel: [    0.010860] Initializing cgroup subsys devices
Dec 24 18:01:33 dell kernel: [    0.010862] Initializing cgroup subsys freezer
Dec 24 18:01:33 dell kernel: [    0.010864] Initializing cgroup subsys net_cls
Dec 24 18:01:33 dell kernel: [    0.010866] Initializing cgroup subsys perf_event
Dec 24 18:01:33 dell kernel: [    0.010868] Initializing cgroup subsys net_prio
Dec 24 18:01:33 dell kernel: [    0.010871] Initializing cgroup subsys hugetlb
Dec 24 18:01:33 dell kernel: [    0.010873] Initializing cgroup subsys pids
Dec 24 18:01:34 dell kernel: [   12.036550] cgroup: new mount options do not match the existing superblock, will be ignored

Note this log contains multiple boots.

Edit 3 - Speed improved.

After implementing the Q&A answer I wrote (How can I set up a password for the 'rm' command?) where a wrapper script password protects the rm command, boot speed has doubled.

Here's the new graph:

bootchart dec 30

1 Answers1

1

I don't think defragging is your problem, but you could do this...

In terminal...

  • type man update-initramfs # to learn more about this command.

  • then type sudo update-initramfs -c # to create a new file from scratch.

  • then type reboot

heynnema
  • 70,711
  • update-initramfs is run frequently, ie whenever a new kernel is installed. – WinEunuuchs2Unix Dec 24 '16 at 22:52
  • @WinEunuuchs2Unix I'm creating a new file, not updating an existing file... partially to address the OP's defrag concern... and maybe to speed things up. – heynnema Dec 24 '16 at 22:54
  • The -c parameter by itself doesn't work on my system at least. I need to use: sudo update-initramfs -c - k 'uname -r' where the single quotes around uname -r are really back ticks. – WinEunuuchs2Unix Dec 24 '16 at 23:04
  • Did it make any difference? – heynnema Dec 24 '16 at 23:07
  • ps: are your disk partitions aligned? Use sudo fdisk -l for a quick test, or sudo parted for a more complete test. – heynnema Dec 24 '16 at 23:10
  • As far as file fragmentation is concerned it took out 1 extent so there are now 4 instead of 5. As far as boot time is concerned I don't think so but it's subjective. For full defragging I think the utility e4defrag should be used but am not sure how much that will help. – WinEunuuchs2Unix Dec 24 '16 at 23:13
  • /dev/sdb3 partition isn't aligned but I'm booting off of /dev/sdc3 and it along with /dev/sda have all partitions aligned. – WinEunuuchs2Unix Dec 24 '16 at 23:15
  • maybe install systemd-bootchart? – heynnema Dec 24 '16 at 23:46
  • I've added the bootchart. I'm thinking of renaming the question to "Why is initrd.img (loadiing initial ramdisk...) so slow?" as it likely has nothing to do with file fragmentation even if most users would want a defragged file. – WinEunuuchs2Unix Dec 25 '16 at 16:05
  • @WinEunuuchs2Unix the bootchart image is too small to be readable. ps: when you checked the partition alignment, did you use fdisk or parted? I'd recommend parted for a complete check for "optimal" alignment. And... how much RAM and swap do you have? Do you see any cgroup memory errors in syslog? – heynnema Dec 25 '16 at 16:11
  • Can't you click on the image to zoom in? Partitions are aligned correctly on the disk in question /dev/sdc. Non-aligned extended partition is on a different disc that is unused and not mounted: /dev/sdb – WinEunuuchs2Unix Dec 25 '16 at 16:14
  • I zoomed to the max. Not readable. See my last edit to my previous comment. – heynnema Dec 25 '16 at 16:15
  • RAM and cgroups added. – WinEunuuchs2Unix Dec 25 '16 at 16:28
  • There's a problem with your cgroups and your superblock. – heynnema Dec 25 '16 at 17:06
  • That's interesting... I should check out the BIOS scsi vs achi again. At one time it was setup for Intel RST, maybe I didn't undo it all properly. Probably not but worth a shot. Other than that I'll have to do some reading up on cgroups and superblocks :D – WinEunuuchs2Unix Dec 25 '16 at 17:10
  • You might just need to copy a backup superblock into the primary superblock? – heynnema Dec 25 '16 at 17:11
  • I'll look at that later whilst turkey is roasting :)... In mean time +1 for your great advise to-date. – WinEunuuchs2Unix Dec 25 '16 at 17:13