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


Table of Contents

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-analyzeStartup 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-analyzeStartup 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-analyzeStartup 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-ubuntux2dx2dvgx2droot.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-analyzeStartup finished in 2.165s (kernel) + 4.389s (userspace) = 6.555s

6 コア数を2にした場合

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

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

Android | Linux | SDL - Narrow Escape