성능 2026년 4월 26일

임대 Mac mini: Spotlight mds 인덱싱과 CI 디스크 예산, 2026 VmMac 매트릭스

VmMac Engineering Team 2026년 4월 26일 약 21분

빌드 인프라 소유자는 VmMac에서 Apple Silicon Mac mini를 임대하면, 컴파일 팜이 아닌 랩톱에 맞춰진 macOS 기본값을 이어받습니다. Spotlight와 메타데이터 하위시스템 mds.o 수 테라바이트를 마다하지 않고 인덱싱하는 반면, xcodebuild 잡은 SLO를 자주 놓칩니다. 이 2026 매트릭스는 VM 골든 이미지가 왜 항상 인덱싱을 제거하는지, 베어 메탈에서 mdutil로 그 규율을 어떻게 복제하는지, 홍콩·일본·한국·싱가포르·미국 호스트를 똑같이 지루하게 유지하는 방법을 설명합니다. 비교 표 두 개, 집행 단계 아홉, 수치형 알람, FAQ가 이어집니다. 병행 DerivedData 레인, APFS 2차 볼륨, 유휴 절전 vs CI 전력 선언을 함께 읽으면 디스크 정책과 스케줄러 정책이 싸우지 않습니다.

SSH 부트스트랩은 도움말, 인덱스 off 컴파일 풀과 인덱스 on 대화형 QA 스테이션을 나눌 때는 가격, 테스터가 데스크톱 검색을 기대하는 경우 VNC를 기록해 두십시오.

VM 골든 이미지는 왜 항상 Spotlight를 끄는가—베어 메탈이 따라야 할 점

하이퍼바이저 템플릿은 예측 불가능한 mdworker 버스트가 A/B 성능 테스트를 망가뜨리기 때문에 인덱싱이 꺼진 채 나옵니다. VmMac에서는 매일 아침 차이 디스크로 되감는 것이 아니라 Apple 메타데이터 업데이트를 지속 수신하는 데, SSH로 붙는 영구 호스트이므로, “클린룸”은 되감기 버튼이 아니라 정책 파일+크론 가드입니다. 이를 무시하면 p95 컴파일이 같은 주에 두 자릿수 %로 벌어지고, Xcode에 새 Spotlight 임포터가 올렸다는 시점과 겹쳐—원격 Mac 팜을 믿지 못하는 전형의 노이즈가 됩니다.

  • git clean -fdx 뒤마다 오는 인덱스 churn: 수많은 작은 파일이 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 vs 전체 인덱싱 vs 선택적 제외

정책 운영 노력 성능 예측가능성 데스크톱 UX
CI 전용 APFS 볼륨에 인덱싱 off 중—마운트 이름 규율이 필요 높음 GUI 유저가 그 볼륨을 탐색하지 않으면 없음
Data 볼륨에 전역 인덱싱 on 낮음 큰 브랜치 전환 중에는 낮음 VNC 테스터에게는 검색 품질이 좋음
경로당 프라이버시 plist 제외 높음—이름이 바뀌면 떨어짐 중간 부분적, 새 경로는 놓칠 수 있음

첫 번째 행이 VmMac 무인 CI 권장 기본값입니다. 대화형 프로필은 별 호스트·별 볼륨에 두어 PM이 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 처리 등록 옆에 두고 다루십시오. 레인 격리의 파일시스템 가이드와 맞추고, 전역 인덱싱이 켜져도 해당 경로에는 “no index”를 명시하십시오.

2026 9단계 집행 사다리

  1. 홍콩·일본·한국·싱가포르·미국에 마운트된 모든 볼륨의 기본 mdutil 상태를 기록한다.
  2. 볼륨을 CI_ARTIFACT, INTERACTIVE, MIXED로 나누고, 컴파일이 무거운 호스트에서는 MIXED를 금지한다.
  3. CI_ARTIFACT 마운트에 mdutil -i off를 적용하고, mdutil -s 출력을 호스트 등급별로 git에 넣는다.
  4. 주간 launchd 잡으로 정책을 다시 박고, 기대와 다르면 알람을 낸다.
  5. mdworker CPU를 전체 코어 대비 %로 그래프하며, 12%15분 넘기면 온콜한다.
  6. 스파이크를 fseventsd 잔뜩 리마운트와 상호연관짓고, 마운트를 흔드는 자동화를 고친다.
  7. CI와 같은 경로로 데스크톱 프로필에서도 일시 캐시를 제외해 인지 편차를 줄인다.
  8. 롤백: 조사를 위해 30분 안에 안전하게 인덱싱을 다시 켜는 방법을 문서화한다.
  9. 분기별 게임데이: CI 볼륨을 일부러 채우고 인덱싱이 식지 않는지 확인한다.
경고: 협의 없이 생산 시간에 인덱싱을 뒤집으면, 그 주 성능 회귀 테스트의 재현성을 죽일 수 있습니다. 커널 플래그와 같은 취급입니다.

VmMac 5지역 정합(홍콩 / 일본 / 한국 / 싱가포르 / 미국)

지연은 지역마다 다르지만 메타데이터 정책은 달라지면 안 됩니다. 싱가포르 컴파일 호스트만 몰래 인덱싱하는데 미국은 아니라면, Swift 컴파일 대시보드에서 유령을 쫓게 됩니다. plist 조각·셸 조각을 사설 repo 하나에 두고, 릴리스에 태그를 박고, 컴파일러 핀에 쓰는 파이프라인으로 승격하십시오.

실제 회귀를 잡는 수치 알람

지표 임계값 의미
mdworker CPU 15분 > 12% 인덱싱 폭풍이나 스토어 정체
CI 볼륨 여유 공간 30GB 미만 mds 팽창 위험+빌드 실패 위험
빌드 래퍼 왜곡 p95 > 400ms 컴파일 전에 Spotlight 쪽

FAQ: 임대 Mac mini CI의 Spotlight

인덱싱을 끄면 Xcode가 깨지나요? CLI 빌드에는 아닙니다. 같은 볼륨의 Xcode Organizer 검색에 의지하면 예입니다. 호스트를 나누십시오.

Time Machine과는? 볼륨 구성은 직교이지만, 백업 대상이 CI 디스크를 가리키면 무거운 mds를 유발—그 토폴로지는 피하십시오.

sudo mdutil 누가? 플랫폼 엔지니어링만, 예외는 48시간 미만 티켓.

Mac mini M4와 VmMac이 인덱스 정책을 싸게 만드는 이유

Mac mini M4는, QA 쪽에서 의도적으로 인덱싱을 켤 때에도 꽤 끊김 없는 IO로 정당한 인덱싱을 끝내는 한편, 컴파일 전용 임대는 계속 서늘합니다. VmMac의 다지역 풋프린트로, index-off 컴파일 풀을 홍콩·일본·한국·싱가포르·미국에 사용자 옆에 두며 USB에 골든 VM을 실어 나를 필요가 없습니다. “검색 on” 테스터와 “검색 off” 빌더를 mini 한 대씩으로 나누는 쪽이, 비결정론적 성능 플레이크에 태우는 엔지니어 시간보다 쌉니다.

컴파일용과 대화형 QA를 분리

VmMac 플랜 한 줄은 차가운 CI 볼륨, 다른 한 줄은 VNC에 맞는 검색 기본값용.