MacでRancher Desktopを高速化する設定方法

2024/02/22に公開

TL;DR

そのままの設定だと、ディスクIOが遅すぎるので、デフォルトの設定値から変更することをおすすめします。

Preference - Virtual Machine - Hardware

CPUやメモリの利用数を増やす。

個人的には、通常操作に支障が出ない範囲で、最大限設定するイメージ。

Rosettaのインストール(Intel Macは必要ない)

下記コマンドで入れられる。

/usr/sbin/softwareupdate --install-rosetta --agree-to-license

Rosetta は、Macの機能で、M1 MacなどのARM CPUで、x86 CPU用にビルドされたバイナリをエミュレーションする機能。

注)MacOSのVenturaから、Rosetta2 になり、仮想環境で使えるようになったので、OSがVentura以上でないと後述の Rosetta 部分の設定ができないか、最大限の性能は出ないかも。

Preference - Virtual Machine - Emulation

Virtual Machine Type に、VZを指定する。

右側に出る、VZ OptionEnable Rosetta support にチェックを入れる。
(Intel Macでは、Rosettaは必要ないです)

Preference - Virtual Machine - Volumes

Mount Type に、virtiofs を指定する。

余談だが、上述のVZ指定をしていないと、警告が出る。
(警告のリンクをクリックすれば設定画面に飛ぶ。)

マウントがちゃんと設定されているか確認

下記コマンドでubuntuに入り、ps -ef を実行して、/mnt/lima-rosetta/rosetta と出ていればおk。

$ docker run -it --platform linux/amd64 ubuntu
# ps -ef
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
445a6a12be2b: Pull complete
Digest: sha256:aabed3296a3d45cede1dc866a24476c4d7e093aa806263c27ddaadbdce3c1054
Status: Downloaded newer image for ubuntu:latest
root@0f03298c4ad5:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  3 03:46 pts/0    00:00:00 /mnt/lima-rosetta/rosetta /bin/bash
root         9     1  0 03:46 pts/0    00:00:00 /usr/bin/ps -ef

参考文献
https://github.com/rancher-sandbox/rancher-desktop/issues/3107

設定は以上で終わり。ここから下は原因とかの考察となる。

M1系のMacでRancherDesktopのDockerが遅かった理由

大きく2つ。

  • RancherDesktopのデフォルト指定のファイルシステムが遅くて、ファイルIOに時間がかかっていた。
  • M1などのARM CPU Macで、x86バイナリエミュレーションが遅かった
    • Intel Macはエミュレーションが要らないので、こちらの理由で遅くならない

となる。

上述の設定を入れれば、それぞれの性能が上がり快適になる。

完全に余談だが、僕はLinuxMint使いなので、dockerを高速化して使いたいなら、LinuxOSで開発すればいいのでは?と思ったりもする。
(仮想化を使わないので、仮想化関係のボトルネックが無く速い。)
(Macよりも安くて強力なPCが使えて、ビルドなど鬼速くなる。)

Intel MacでRosettaが必要ない理由とRosettaの導入経緯

2020年11月17日のM1 Mac発売までは、Windows,MacともにデスクトップPCやNotePCは、x86命令セットのCPUがほとんどだった。

なので、その日までビルドバイナリは、x86系だけ考慮しておけばよかった。

その状態から、AppleがMacを Intel CPU から、自社開発のARM命令セットのCPU(M1)に切り替える際に、サードパーティソフトウェアは、当然x86のビルドバイナリがほとんどで、動かない状態になる。

それだと、Macを使っている人たちは困るので、Rosettaを作成して、x86ビルドバイナリをエミュレーションで動くようにしたのが経緯だと思われる。

この機能の出自を考えると当初は仮想環境で使うことを想定せず、ともかくMac本体で動くことに焦点を当てていたと思われる。

それが、Rosetta2となって、仮想環境でも使えるようになったため、MacOSでx86のDockerイメージを速く動かせるようになったという流れになるかと思う。

Linuxのように、MacでネイティブにDocker環境が動かせるのが一番だが、Appleが開発者だけに向けてOSの機能拡充はしないだろうなぁという気がするので無いだろうなぁと。
(そもそも、最近のDockerHubには、ARMビルドのイメージもあるので、最新イメージにすれば解消するので、なおさらやらない気がする。)

最後に

OracleのMySQL5.7のイメージが、x86しか上がってないので、dumpのレストアが遅かったのですが、サードパーティのMySQL5.7にはARM版のイメージがあり、そちらに切り替えたので、Rosettaが無くてもよかったかなぁと思われます。
(できるだけ最新の環境を使いたいところです。。。)

ただ、M1のMacなどで、x86のイメージでビルドするときはエミュレーション機能を使っています。

なので、そこがデフォルトの QEMU から Rosetta に変更していると安定度や速度が違うはずなので、設定しておいたほうがいいかなと思います。

Discussion