🔖
multipass を使ってみた
概要
multipass は Canonical が開発/メンテしている、仮想環境にUbuntuをインストール・管理するためのツールです。
ホストOSは Linux, macOS, Windows に対応しています。macOSではhypervisor.frameworkを使って仮想OSを実行しているので、比較的高速な動作を期待できる(はず)。
手元の開発環境は、本番と同じDockerイメージを使いたいとかでなければ、dockerを使うようりもmultipassで作った方がメリットが多いように思います。
他と比べて
いいところ (docker on macosと比べて)
- mac上でUbuntuを起動するまではdockerとほとんど変わらない。らく。
- ほぼ素のLinuxが起動するので、dockerで必要とされるバッドノウハウのあれこれが不要
- 例: systemd がそのまま使える
- ネットワーク周りの見通しがいい(ブリッジも使える)
- Dockerfileはないけど、cloud-initが使える(構築の手間は変わらない)
残念なところ
- Ubuntu以外はサポート外(使えないことはなさそうだけど、面倒)
- やっぱりx86 on armはちょー遅い (当たり前だし、他も変わらないけど)
立ち位置が近いlimaと比べると、自由度が低い、その代わり構築は楽。最終的にやっていることはほぼ一緒なので性能はほとんど変わらないはず。あとcloud-initが使えるのは大きなアドバンテージ。
multipassのインストール
brew install multipass
multipassの使い方
## 対応しているubuntuのバージョン一覧
$ multipass find
## 起動 (Ubuntu 22.04, Disk 10GB, CPU 2つ, カレントディレクトリをマウント)
$ multipass launch -d 10G -c 2 --mount $PWD:/mnt/work --name test01 22.04
## cloud0-initを使って起動
$ cat cloud-config.yml
timezone: Asia/Tokyo
packages:
- vim
- qemu-user-static
$ multipass launch --cloud-init cloud-config.yml -name test02 22.04
## Shellをとる
$ multipass shell test01
## 後片付け
$ multipass stop test01
$ multipass delete test01
ベンチマーク
p7zip (ubuntu は p7zip-full パッケージ) のベンチマーク機能で比較してみた。
ホストは Apple M2/16GB な MacBook Air。
CPUとメモリの割り当ては、主に使うであろう2CPU, 2GBとした。
ざっくりと、以下の違いだった。
- macOS Native と multipass では2〜3倍の差(CPUとメモリの割り当ての違いかも)
- multipass と lima はほぼ同じ性能(当たり前といえば当たり前)
- qemu(x86) on macOS(arm) による仮想化は遅い、一桁違う
- qemu(x86) on linux on macOS(arm) の方が多少速い
Native
7-Zip [64] 17.05 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.05 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs LE)
LE
CPU Freq: 2080 2932 3471 3494 3492 3494 3492 3487 3495
RAM size: 16384 MB, # CPU hardware threads: 8
RAM usage: 1765 MB, # Benchmark threads: 8
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 43536 683 6205 42352 | 375451 772 4146 32024
23: 41111 694 6040 41888 | 370921 776 4135 32098
24: 41377 736 6044 44489 | 363816 774 4127 31932
25: 40823 751 6209 46611 | 359875 781 4099 32027
---------------------------------- | ------------------------------
Avr: 716 6125 43835 | 776 4127 32020
Tot: 746 5126 37928
Ubuntu22.04 on multipass
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs LE)
LE
CPU Freq: - - - - - - - - -
RAM size: 1966 MB, # CPU hardware threads: 2
RAM usage: 441 MB, # Benchmark threads: 2
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 16336 168 9447 15892 | 116122 199 4974 9915
23: 16726 186 9181 17042 | 115782 200 5013 10022
24: 15513 183 9115 16680 | 113915 200 5001 10001
25: 15256 190 9182 17420 | 111637 200 4977 9936
---------------------------------- | ------------------------------
Avr: 182 9231 16758 | 200 4991 9968
Tot: 191 7111 13363
Ubuntu22.04 on docker on alpine-linux on colima
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,2 CPUs LE)
LE
CPU Freq: 64000000 - - - - - - - -
RAM size: 1979 MB, # CPU hardware threads: 2
RAM usage: 441 MB, # Benchmark threads: 2
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 16527 167 9636 16078 | 115473 198 4978 9859
23: 16572 184 9180 16886 | 115284 200 4992 9979
24: 15732 185 9152 16916 | 113437 200 4984 9959
25: 15009 183 9372 17137 | 111584 200 4970 9932
---------------------------------- | ------------------------------
Avr: 180 9335 16754 | 199 4981 9932
Tot: 190 7158 13343
Ubuntu22.04 on lima(x86_64 emulation)
QEMU Virtual CPU version 2.5+ (60FB1)
CPU Freq: 2909090 16000000 32000000 32000000 64000000 128000000 256000000 512000000 341333333
RAM size: 1959 MB, # CPU hardware threads: 2
RAM usage: 441 MB, # Benchmark threads: 2
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 1886 137 1338 1835 | 29920 198 1291 2555
23: 1969 144 1392 2006 | 29676 199 1294 2569
24: 1967 152 1396 2116 | 29495 199 1304 2589
25: 1972 158 1426 2252 | 28955 199 1296 2577
---------------------------------- | ------------------------------
Avr: 148 1388 2052 | 198 1296 2573
Tot: 173 1342 2312
VM作成コマンド
$ cat jammy-amd64.yaml
arch: "x86_64"
images:
- location: "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
arch: "x86_64"
cpus: 2
memory: "2GiB"
$ limactl start --tty=false jammy-amd64.yaml
Ubuntu22.04 on docker(x86) on multipass(arm)
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,2 CPUs QEMU Virtual CPU version 2.5+ (60FB1),ASM)
QEMU Virtual CPU version 2.5+ (60FB1)
CPU Freq: 3764705 64000000 - - - - - - -
RAM size: 1966 MB, # CPU hardware threads: 2
RAM usage: 441 MB, # Benchmark threads: 2
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 2567 137 1822 2498 | 43795 199 1878 3739
23: 2589 143 1844 2638 | 43698 200 1893 3783
24: 2570 147 1879 2764 | 42913 200 1887 3767
25: 2552 150 1941 2914 | 42338 200 1889 3768
---------------------------------- | ------------------------------
Avr: 144 1871 2704 | 200 1887 3764
Tot: 172 1879 3234
Discussion