MacでRancher Desktopを高速化する設定方法
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 Option
の Enable 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
参考文献
設定は以上で終わり。ここから下は原因とかの考察となる。
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