Rancher Desktop のデフォルト設定は遅い?
先日、Docker Desktop から Rancher Desktop へそのまま移行できるか試してみた という記事を書きましたが、その際に細かい設定はデフォルトのままで使い始めました。
少し使ってみて気づいたのは、ストレージ書き込み速度が遅いように感じることでした。そこで、仮想化エンジンとボリュームマウントの設定を見直してみました。
環境
- Apple M2 MacBook Air(24GB RAM)
- OS: Sonoma
まずは最適設定から掲載
Docker Desktop と同じ構成が選択できるので、基本的にはこれを適用します。
エミュレーションの設定
Rancher Desktop はデフォルトで QEMU
が選択されていますが、VZ
を選択しましょう。
Preferences
-> Virtual Machine
-> Emulation
から設定できます。
VZ
は macOS が提供する仮想化エミュレーターで、Linuxベースの仮想マシンを起動するためのAPIを提供しています。後述の Virtual I/O Device
をサポートしています。
一方、QEMU
は macOS はもちろん、Windows や Linux をホストOSとしても利用できるオープンソースの仮想化エミュレータです。
マウントタイプの設定
デフォルトでは reverse-sshfs
が選択されていますが、virtiofs
を選択しましょう。
Preferences
-> Virtual Machine
-> Volumes
から設定できます。
reverse-sshfs
は、ホストOS側のファイルシステムをSFTPサーバを経由して仮想マシンにマウントします。
一方、virtiofs
は、Docker Desktop でも利用されているファイルシステムで、従来型のネットワークファイルシステムよりもオーバーヘッドを減らし高速化を実現しています。
ベンチマーク
念の為、ローカル、Docker Desktop のデフォルト設定、Rancher Desktop で設定できるいくつかの組み合わせでストレージ書き込み速度を計測してみました。
tl;dr
- Rancher Desktop のデフォルト設定よりも、
VZ
とvirtiofs
を選択した場合の方が書き込み速度が速い - デフォルトの
QEMU
&sshfs
と比較すると 10倍近い性能が出ることもある
検証方法
以下の Python スクリプトを使って、ストレージ書き込み速度を計測しました。
500MB のランダムデータを生成し、5回書き込みを行い、その平均速度を計算しています。
毎回ランダムデータを生成する必要はないので、実行時の1回目だけキャッシュとしてメモリに保持しています。
こちらのリポジトリで公開しています: container-vol-performance-check
import os
import time
import random
import string
from datetime import datetime
class StoragePerformanceTest:
def __init__(self, test_dir="./test_data"):
self.test_dir = test_dir
self.ensure_directory()
def ensure_directory(self):
"""テストディレクトリが存在することを確認"""
os.makedirs(self.test_dir, exist_ok=True)
def generate_random_data(self, size_mb):
"""指定サイズのランダムデータを生成"""
chars = string.ascii_letters + string.digits
return ''.join(random.choice(chars) for _ in range(size_mb * 1024 * 1024)).encode()
def write_test(self, file_size_mb, num_files, cache_random_data=True):
"""書き込みパフォーマンステスト"""
total_time = 0
total_size = 0
print(f"\n=== 書き込みパフォーマンステスト ===")
print(f"ファイルサイズ: {file_size_mb}MB")
print(f"ファイル数: {num_files}")
for i in range(num_files):
if not cache_random_data or i == 0:
print("Start generating random data")
data = self.generate_random_data(file_size_mb)
print("Random data generated")
file_path = os.path.join(self.test_dir, f'test_file_{i}.dat')
start_time = time.time()
with open(file_path, 'wb') as f:
f.write(data)
end_time = time.time()
write_time = end_time - start_time
total_time += write_time
total_size += file_size_mb
print(f"ファイル {i + 1}: {file_size_mb}MB 書き込み完了 - {write_time:.2f}秒")
avg_speed = (total_size / total_time) if total_time > 0 else 0
print(f"\n=== 結果 ===")
print(f"総書き込みサイズ: {total_size}MB")
print(f"総書き込み時間: {total_time:.2f}秒")
print(f"平均書き込み速度: {avg_speed:.2f}MB/秒")
return {
'total_size': total_size,
'total_time': total_time,
'avg_speed': avg_speed
}
def cleanup(self):
"""テストファイルの削除"""
for file in os.listdir(self.test_dir):
if file.startswith('test_file_'):
os.remove(os.path.join(self.test_dir, file))
def main():
# テストパラメータ
FILE_SIZE_MB = 100 # 各ファイルのサイズ
NUM_FILES = 5 # テストするファイル数
# テストの実行
test = StoragePerformanceTest()
try:
print(f"ストレージパフォーマンステスト開始: {datetime.now()}")
results = test.write_test(FILE_SIZE_MB, NUM_FILES)
print(f"\nテスト完了: {datetime.now()}")
finally:
test.cleanup()
if __name__ == "__main__":
main()
Local
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 0.12 | 4321.94 |
サマリ
構成 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
QEMU / 9p 128kb | 11.10 | 45.11 |
QEMU / 9p 512kb | 10.82 | 46.21 |
QEMU / reverse-sshfs | 3.21 | 156.01 |
vz / reverse-sshfs | 1.41 | 354.48 |
vz / virtiofs | 0.48 | 1096.65 |
Docker Desktop デフォルト (vz / virtiofs) | 0.40 | 1242.61 |
QEMU / 9p 128kb
9p を選択したときの初期設定のまま実行したパターンです。
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 10.66 | 46.90 |
2 | 10.90 | 45.89 |
3 | 11.75 | 42.55 |
平均 | 11.10 | 45.11 |
QEMU / 9p 512kb
こちらはブロックサイズを 128kb -> 512kb に変更したパターンです。
特に大きな改善は見られませんでした。
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 10.69 | 46.76 |
2 | 10.97 | 45.57 |
3 | 10.80 | 46.30 |
平均 | 10.82 | 46.21 |
QEMU / reverse-sshfs
Rancher Desktop のデフォルト設定です。
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 3.21 | 155.98 |
2 | 3.46 | 144.35 |
3 | 2.98 | 167.71 |
平均 | 3.21 | 156.01 |
vz / reverse-sshfs
仮想化エミュレーションを変更しただけのパターンです。まだ遅いですが、QEMUよりも早いことがわかります。
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 1.56 | 321.19 |
2 | 1.32 | 377.52 |
3 | 1.37 | 364.75 |
平均 | 1.41 | 354.48 |
vz / virtiofs
個人的推奨設定です。大幅に改善しています。
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 0.68 | 733.15 |
2 | 0.41 | 1213.59 |
3 | 0.37 | 1343.21 |
平均 | 0.48 | 1096.65 |
Docker Desktop デフォルト (vz / virtiofs)
おそらく誤差の範囲だと思いますが、 Rancher Desktop の vz / virtiofs よりも Docker Desktop の vz / virtiofs の方が速いようです。
試行 | 書き込み時間 (秒) | 書き込み速度 (MB/秒) |
---|---|---|
1 | 0.40 | 1239.89 |
2 | 0.42 | 1191.05 |
3 | 0.39 | 1296.89 |
平均 | 0.40 | 1242.61 |
まとめ
macOS の場合、Rancher Desktop はデフォルト設定だとストレージ書き込み速度が遅いです。その場合、仮想化エミュレーションを VZ
に、マウントタイプを virtiofs
に変更することで改善できました。
/以上
Discussion