Ubuntu 16.04: VirtualBox上のUbuntu 16.04の起動時間を速くする

VirtualBox上にインストールしたUbuntu 16.04の起動時間を速くする為の施策を記載します。

コア数が多いほどユーザランドは早くなる傾向にありますが、BIOS、GRUB、カーネルは1コアで動作しているので、本施策が役立つかと思います。

 

1 システム構成と施策実行前の起動時間

OSX上のVirtualBoxで以下の仮想マシンを利用しています。

 

CPU Core Number 1
RAM 1GB
Video Memory 128MB
Storage IDE DVD Drive + SATA 40GB HDD

 

ubuntu-16.04-desktop-amd64.isoをLVM + ext4でインストールしています。インストール直後の起動時間は以下のとおりです。

$ systemd-analyze
Startup finished in 9.372s (kernel) + 5.721s (userspace) = 15.093s

2 BIOS表示時間を変更

VirtualBox上のBIOSは3秒程度の表示時間があります。 こちらの記事に記載されている方法でBIOSを表示時間を変更します。最小値の1にしておいて、必要になったら3000に変更すれば良いと思います。

3 フロッピードライブを追加

VirtualBox 5.0.20 r106931の問題っぽいのですが、フロッピードライブを追加していない状態でも、フロッピードライブが接続されているとバスが認識してしまうようです。

この結果、バスによってLinuxカーネルはフロッピードライブがあると認識してしまい、フロッピードライブの初期化処理が動作します。初期化処理が成功しないので、一度スリープして再度初期化を実行しようと試みることになり、カーネルの起動に遅延が発生します。

[    2.038893] sd 2:0:0:0: [sda] Attached SCSI disk
[    4.311960] floppy0: no floppy controllers found
[    4.312010] work still pending

この問題を回避するために、フロッピードライブを追加して初期化処理を成功させるようにします。フロッピードライブの追加はUbuntu 16.04をシャットダウンした状態で実行します。

Settings -> Storage -> Adds new storage controller -> Add Floppy Controller

0001_Add-Floppy-Drive.png

カーネルの起動時間が2秒ほど速くなりました。

$ systemd-analyze
Startup finished in 6.980s (kernel) + 5.235s (userspace) = 12.216s

4 /etc/initramfs-tools/conf.d/resumeを修正

LVMが有効だとスワップ領域のマウントが遅くなる問題を修正します。

$ sudo su -c 'echo RESUME=/dev/mapper/ubuntu--vg-swap_1 > \
/etc/initramfs-tools/conf.d/resume'
$ sudo update-initramfs -u
$ sudo reboot

カーネルの起動時間が5秒ほど速くなりました。

$ systemd-analyze
Startup finished in 2.223s (kernel) + 5.999s (userspace) = 8.223s

5 vboxadd-x11.serviceをdisable

vboxadd-x11.serviceはCPU負荷が掛かる割には何も実行しません。

$ systemd-analyze blame | head
          2.795s vboxadd.service
          1.770s vboxadd-x11.service
          1.235s dev-mapper-ubuntu\x2d\x2dvg\x2droot.device
          1.035s networking.service
           930ms accounts-daemon.service
           819ms NetworkManager.service
           802ms avahi-daemon.service
           673ms systemd-logind.service
           590ms apport.service
           577ms grub-common.service

systemd-analyze critical-chainで示されるボトルネックはvboxadd.serviceの方ですが、コアが少ない環境なのでvboxadd-x11.serviceをdisableします。

$ sudo systemctl disable vboxadd-x11
$ sudo reboot

ユーザランドの起動時間が1秒ほど速くなりました。

$ systemd-analyze
Startup finished in 2.165s (kernel) + 4.389s (userspace) = 6.555s

6 コア数を2にした場合

systemdが並列実行されるのでユーザランドの起動時間が改善されます。

$ systemd-analyze
Startup finished in 2.175s (kernel) + 2.837s (userspace) = 5.012s