🔖

multipass を使ってみた

2023/11/05に公開

概要

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