After upgrading the desktop machine from Ubuntu 14.04 to 16.04 (both LTS versions), I noticed that booting the machine took quite long.
Years ago I had used bootchart, but that did not work anymore - after booting, no /var/log/bootchart* files existed.
Searching further I saw that we don't need bootchart anymore; the almighty systemd logs boot time itself. We can analyze it with systemd-analyze.
Running it without parameters told me bootup time:
$ systemd-analyze Startup finished in 4.138s (kernel) + 33.845s (userspace) = 37.984s
37 seconds? Who is to blame for that time?
$ systemd-analyze blame 30.326s NetworkManager-wait-online.service 770ms winbind.service 746ms nmbd.service 706ms lvm2-monitor.service 684ms samba-ad-dc.service .. many more
Why does the system wait for that? Can't it simply continue booting without network connectivity?
$ systemd-analyze critical-chain The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. graphical.target @33.829s └─multi-user.target @33.811s └─smbd.service @33.546s +265ms └─nmbd.service @32.771s +746ms └─remote-fs.target @32.754s └─mnt-media\x2ddisa.mount @32.574s +176ms └─network-online.target @32.560s └─network.target @2.227s └─NetworkManager.service @2.029s +197ms └─dbus.service @1.822s └─basic.target @1.810s └─sockets.target @1.810s └─docker.socket @1.795s +3ms └─sysinit.target @1.777s └─apparmor.service @1.373s +403ms └─local-fs.target @1.363s └─run-cgmanager-fs.mount @2.047s └─local-fs-pre.target @934ms └─lvm2-monitor.service @227ms +706ms └─lvm2-lvmetad.service @301ms └─systemd-journald.socket @209ms └─-.slice @206ms
So systemd waits for NetworkManager to get fully online because it needs to mount some NFS shares. Valid point.
But why takes that so long? 32 seconds sounds like some valid time plus 30s timeout.
In the network manager connection settings I found that the IPv4 address was static, but IPv6 was set to DHCP. I have no IPv6 DHCP at home, so the IPv6 DHCP requests were not answered, and NetworkManager gave up after 30 seconds.
After disabling IPv6 completely, the system boots up in 15 seconds now:
$ systemd-analyze Startup finished in 4.119s (kernel) + 11.111s (userspace) = 15.231s
$ systemd-analyze blame 7.610s NetworkManager-wait-online.service 749ms winbind.service 724ms nmbd.service 715ms lvm2-monitor.service 667ms samba-ad-dc.service
I'd still like to know why network setup still takes nearly 8 seconds, but a quick look did not reveal anything obvious.