パフォーマンス 2026年4月26日

貸出 Mac mini:Spotlight mds インデックスと CI ディスク予算 2026 VmMac マトリクス

VmMac エンジニアリングチーム 2026年4月26日 約 21 分

ビルド基盤の責任者が VmMac から Apple Silicon Mac mini を借り受けると、受け取る macOS デフォルトはノート向けのままであり、コンパイル専用ファーム向けではありません。Spotlight とメタデータ基盤の mds は、.o ファイルのテラバイト規模を喜んでインデックスし、一方で xcodebuild ジョブは SLO を逃しがちです。本 2026 年版マトリクスは、VM のゴールデンイメージでいつもインデックスを落とす理由、ベアメタルで mdutil によって同じ規律を再現する方法、そして 香港・日本・韓国・シンガポール・米国 各ホストを退屈なほど同一に保つ方法を扱います。比較表が二つ、強制手順九段、数値しきい値、FAQ があります。ディスク方針とスケジューラ方針が衝突しないよう、DerivedData 並列レーンAPFS セカンダリボリュームアイドル省電力と CI 用のパワー表明と併読してください。

SSH 初期導入は 接続手順インデックス off のコンパイル用プールインデックス on のインタラクティブ用 QA 用端末を分けたいときの費用比較は 料金、テスター向けのデスクトップ検索の前提を書くのは VNC を参照します。

VM ゴールデンはなぜ Spotlight を常に外すのか。ベアメタルが真似るべき点

ハイパーバイザのテンプレートは、予測不能な mdworker バーストが A/B 性能比較を壊すため、インデックスを無効にして出荷されます。VmMac では、毎朝差分ディスクに戻すのではなく、SSH 越しの常駐ホストとして Apple のメタデータ更新の影響を受けます。すなわち「クリーンルーム」は、巻戻しボタンではなく、方針ファイル+定期ガードです。ここを軽く見ると、Xcode の新しい Spotlight インポーターが来た週にすら p95 コンパイル時間が二桁 % 拡大し、リモート Mac ファームを信頼しなくさせる、典型的な揺れ方になります。

  • git clean -fdx のたびの インデックス揺れ。大量の小さなファイルは、mds にはファイルシステム再構築に見えます。
  • Spotlight が ld と同じ NVMe キューで競合するときの IO 優先度の反転
  • 顧客フィクスチャを載せた巻を Spotlight がデスクトップ検索へ広告すると生じる、セキュリティ上の曖昧さ

mds、mdworker、mds_stores は炎グラフに出ないのに、どう CI SLO を奪うのか

CPU プロファイラの時間配分は Swift コンパイラに帰着しますが、地の文は メタデータ書き込みがロックを握るあいだの読み取り遅延 です。ユーザ CPU は低いのに ディスク利用率 95% という図式は、多くの場合、.Spotlight-V100 下でメタデータストアが膨らんでいるサインです。もう一つの手掛かりは launchd ジョブの実開始遅延で、スケジュール時刻と最初のコンパイラシステムコールのあいだが 400ms を超えると、先にスケジューラを疑う前に mdworker 嵐の有無を疑ってください。

目安:クリーンビルドの壁時計のうち、ネットワーク以外のカーネル待ちに 7%超を費やすなら、Swift フラッグ最適化の前に fs_usage で mds 系パスを取ってください。

マトリクス:CI 巻のインデックス off 対 全体有効 対 部分除外

方針 運用の手間 性能の再現性 デスクトップ体験
CI 専用 APFS 巻でインデックス off 中—マウント命名の規律が要る GUI 利用者がその巻を辿らない限り影響なし
Data 巻でグローバルにインデックス有効 大枝切り替えの最中は低い VNC テスターにとっては検索品質が高い
プライバシー plist によるパス除外 高—フォルダの改名で外れる 限定的。新しいパスにテスト担当が置き違うと抜けがでる

先頭行が VmMac の無人 CI に対する推奨デフォルトです。インタラクティブ用プロファイルは、別ホストか別巻に置き、プロダクト側が「PDF を探すため」とビルドルート上で再びインデックスを有効にするのを防ぎます。

ランブックにそのまま貼る mdutil コマンド

新しい巻のたびに、まず現状の確認から始めてください。

mdutil -s /Volumes/VmMacCI

セキュリティレビューのうえ、当該マウントのインデックスを切ります。

sudo mdutil -i off /Volumes/VmMacCI

侵害ホスト上で捜索のため意図的にメタデータを再構築するときは、メンテ窓のあと、監視系の健康チェックを戻すまで CI へ返しません。

sudo mdutil -E /Volumes/VmMacCI

誰がこれらを実行してよいか文書化してください。共有貸出では、sudo をインフラ肩に制限し、アプリチームがリリース真っ最中に個人のデスクトップ癖のためにトグルするのを防ぎます。

プライバシー、Spotlight、共有ホスト上の顧客データ

インデックスは CPU 代だけの問題ではありません。ファイル名やスニペットが、人間が想定しなかった API 表面へ出る可能性があります。レーンフォルダに PII を含むログ があるなら、インデックスを GDPR あるいは APPI の処理活動目録の横の話として扱ってください。ディスクレイアウトの考え方は レーン分離 の記事と併せ、巻の残りがインデックス on でも、当該パスには「インデックス禁止」を明示的に掛けてください。

2026 年版・強制手順 9 段階

  1. 香港・日本・韓国・シンガポール・米国の各マウント巻を棚卸しし、既定の mdutil 状態を記録する。
  2. 巻を CI_ARTIFACTINTERACTIVEMIXED に分類し、重いコンパイル用ホストでは MIXED を禁ずる。
  3. CI_ARTIFACT には mdutil -i offmdutil -s 出力をホスト種別ごとに git へ入れる。
  4. 週次の launchd ジョブで方針を再適用し、逸脱を検知したらアラートする。
  5. mdworker CPU を全コアに対する割合で可視化し、12% 超を 15 分 続いたらオンページする。
  6. 急増を fseventsd まわりの巻再マウントと相関させ、巻を振らせる自動化を直す。
  7. 一時的なパッケージキャッシュを、CI と同じパス表でデスクトプロファイルからも除外し、理解のズレを減らす。
  8. ロールバック手順:調査用に 30 分 以内に安全にインデックスを戻しうる、と定義する。
  9. 四半期ゲームデイ:CI 巻を意図的に満杯にし、インデックスが上がり続けないことを検証する。
注意:生産稼働中に、連絡なしにインデックスを切り替えると、その週の性能退行テストの再現性を壊しうる。カーネルフラッグ同様の扱いにします。

VmMac 五リージョン同型(香港/日本/韓国/シンガポール/米国)

遅延チューニングは地理で違いますが、メタデータ方針は違わせてはいけません。シンガポールのコンパイル用ホストだけ黙ってインデックスし、米国はしない、という事態は、Swift ダッシュボード上で幻の退行原因になります。plist の断片とシェル断片を一つの非公開リポジトリに置き、リリースにタグを打ち、コンパイラのピンに使うのと同じパイプラインで昇格させてください。

本物の退行に効く数値しきい値

指標 しきい値 意味
mdworker CPU 15 分 > 12% インデックスの嵐か、ストアの膠着
CI 巻の空き容量 30GB 未満 mds の拡大リスク+ビルド失敗リスク
ビルドラッパー基準外の遅延 p95 > 400ms 先に Spotlight 側、コンパイラは次

FAQ:貸出 Mac mini CI における Spotlight

インデックスを切ると Xcode は壊れるか。 コマンドライン上のビルドでは、いいえ。同一巻の Xcode Organizer 検索に頼るなら、はい。ホストを分けてください。

Time Machine との干渉は? レイアウトは直交するが、バックアップ先に CI ディスクを向けると重い mds を誘う。そういう位相は避けてください。

sudo mdutil の承認者は? プラットフォームエンジニアリングのみ。例外は 48 時間以内のチケット化。

なぜ Mac mini M4 と VmMac なら、インデックス方針を安く徹底できるのか

Mac mini M4 なら、QA 用に 意図的に インデックスを入れても、正当な作業量を比較的速く回し切れ、コンパイル専用の借り出しは冷えたまま保てます。VmMac のマルチリージョン性により、index-off のコンパイル用プールを 香港・日本・韓国・シンガポール・米国のユーザー近くに置け、ゴールデン VM イメージを USB のように運ばずにすみます。検索 on のテスト担当と、検索 off のビルド担当を、別の mini 一台で分ける方が、不確定な性能フレークに溶けるエンジニア時間より安価です。

コンパイル用とインタラクティブ QA を分ける

CI 巻の冷え方と、VNC 向きの検索既定用に、プラン行を一つずつ分けて扱う。