效能 2026年4月26日

租賃 Mac mini:Spotlight mds 索引用與 CI 磁碟預算——2026 VmMac 矩陣

VmMac 工程團隊 2026年4月26日 約 21 分鐘

負責建置基礎架構的團隊從 VmMac 租用Apple Silicon Mac mini 時,接手的往往是為筆電設計的 macOS 預設值,而非專為編譯叢集調校:Spotlightmds 中繼資料子系統會樂意為 TB 級的 .o 產物建索引用,同時讓 xcodebuild 作業趕不上 SLO。本 2026 矩陣說明為何虛擬機黃金映像一律剝除索引用、裸機上如何以 mdutil 重現相同紀律,以及如何把香港、日本、韓國、新加坡、美國主機維持在「可預測的無趣」狀態。內文含兩張對照表、九道執行步驟、數值型告警,以及常見問答。建議併讀 平行的 DerivedData 與模擬器通道APFS 第二卷與 CI 隔離,以及 閒置睡眠與 CI 電源斷言對照互動式 QA,讓磁碟政策永遠不與排程器政策衝突。

啟動與帳單面請參考 說明與 SSH 開通;若將「關閉索引用之純編譯池」與「保留索引用之互動式 QA 站」分池,請用 定價與方案 估算;需要桌面搜尋體驗的測試人員請保留 VNC 通道。導覽可自 首頁 進入產品路徑。

為何黃金映像永遠關掉 Spotlight,以及裸機必須模仿什麼

Hypervisor 範本預設關閉索引用,因為無法預測的 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 編譯器,但底層症狀常是讀取被擋、中繼寫入器握著鎖。當磁碟利用率約 95% 而使用者態 CPU 看起來很閒,請懷疑 .Spotlight-V100 下中繼儲存擴張。另一訊號是 launchd 工作延遲:若包裝器觀測到排定時間與第一個編譯器系統呼叫之間超過 400 毫秒 p95 偏差,在怪排程器之前先查是否發生 mdworker 風暴。

經驗法則:若乾淨建置期間,與網路無關的 kernel 等待佔牆鐘 7% 以上,請在微調 Swift 旗標前以 fs_usage 採樣 mds 相關路徑。

矩陣:關閉索引用之 CI 卷、全域索引用、與選擇性排除

政策 營運成本 效能可預測性 桌面體驗
專用 CI APFS 卷且關閉索引用 中——需掛載命名紀律 若 GUI 使用者不瀏覽該卷則無
Data 卷開啟全域索引用 大型分支切換期間低 VNC 測試者可獲高品質搜尋
每路徑隱私 plist 排除 高——隨資料夾更名偏移 部分;測試者可能漏掉新路徑

第一列是 VmMac 上無人值守 CI 的預設建議:把需要互動式設定檔的主機或卷分開,避免產品經理為了在 build 根目錄找 PDF 而「好心」重開建索引。

Runbook 應逐字引用的 mdutil 指令

新卷一掛載就先檢查狀態:

mdutil -s /Volumes/VmMacCI

通過安全審查後,針對該掛載關閉索引用:

sudo mdutil -i off /Volumes/VmMacCI

若為鑑識搜尋而刻意重建中繼資料,請在維護窗內擦除儲存、完成健康檢查後再把主機交回 CI:

sudo mdutil -E /Volumes/VmMacCI

明文化誰可執行:在共享租賃上,請將 sudo 限於基礎架構職能,避免應用團隊為個人桌上習慣在發佈週中切換索引用狀態。

隱私、Spotlight 與共享主機上的客戶資料

建索引用不僅耗 CPU——檔名與片段可能流入搜尋 API,違反人員原先預期。若通道資料夾含含個資的日誌,請把索引用作業視為與 GDPR 或日本 APPI 登記冊同級的處理活動。請將 通道隔離 的檔案系統佈局指引,與那些路徑上明確的「不建索引」旗標併用,即使磁碟其餘部分仍開啟全域索引用。

2026 九階執行階梯

  1. 盤點香港、日本、韓國、新加坡、美國上每一顆掛載卷,記錄預設 mdutil 狀態。
  2. 將卷分類為 CI_ARTIFACTINTERACTIVEMIXED;在編譯為重的主機上禁止混合。
  3. 對 CI_ARTIFACT 掛載套用 mdutil -i off;依主機等級在 git 中擷取 mdutil -s 輸出。
  4. 新增每週 launchd 工作,重新宣告政策,並在狀態漂移時告警。
  5. 以 mdworker CPU 佔全核心百分比製圖;連續超過 15 分鐘 高於 12% 則 on-call。
  6. 將尖峰與 fseventsd 卷重新掛載關聯;修正讓掛載反覆顫動的自動化。
  7. 在桌面設定檔用與 CI 相同路徑排除暫存套件快取,降低認知落差。
  8. 文件化還原:鑑識若要安全重開索引用,須在 30 分鐘 內可完成。
  9. 每季演練:刻意灌滿 CI 卷,驗證索引用保持關閉。
注意:在上班尖峰未溝通即切換索引用狀態,可能毀掉當週效能迴歸測試的可重現性——當成與內核旗標同級變更。

VmMac 五地域一致性(香港/日本/韓國/新加坡/美國)

延遲可依地理調整,但中繼政策不應。當新加坡編譯機在靜默建索引而美國主機不建,你會在 Swift 編譯儀表板上追逐幻影。請將 plist 片段與 shell 節錄收在同一私有倉庫、為發行打標籤,並以與編譯器釘選相同的管線晉升。

能抓住真迴歸的數值型告警

指標 閾值 意義
mdworker CPU 15 分鐘內 > 12% 索引用風暴或卡住的儲存
CI 卷可用空間 < 30 GB mds 膨脹風險+建置失敗風險
建置包裝器偏差 p95 > 400 ms 在怪編譯器前先查 Spotlight

常見問題:租賃 Mac mini CI 上的 Spotlight

關閉索引用會弄壞 Xcode 嗎? 對命令列建置不會;若你仰賴同一卷上的 Xcode Organizer 搜尋則會——請分主機。

那 Time Machine 呢? 卷配置理論上正交,但若備份指到 CI 磁碟可能觸發大量 mds——請完全避開此拓撲。

誰能核准 sudo mdutil? 僅限平臺工程,帶工單的例外最長 48 小時

為何 Mac mini M4 與 VmMac 讓索引用政策變便宜

Mac mini M4 在需 QA 站真的開啟建索引時,有足夠持續 IO 在合理時間內建完正當索引用,同時專用編譯租賃可維持關閉狀態。VmMac 的多地域版圖讓你可在香港、日本、韓國、新加坡、美國把關閉索引用之編譯池放近使用者,而無需以隨身碟遞送黃金 VM 映像。多租一臺 mini 分開「要桌面搜尋的測試者」與「不要建索引的建置者」,比燒工程時數在難以重現的效能掉釘上更划算。

拆分編譯主機與互動式 QA

一條 VmMac 方案專管冷 CI 卷,另一條保留對 VNC 友善的索引用預設。