VS 2010 빌드 속도 올리기

C++만 가지고 쓰는 얘기.

작년에 지급 받은 머신 셋팅을 수정해서 어떻게 빌드 속도를 올렸는지 정리. 아마 한동안 업으로 Win32에서 C++ 할 일은 없을 것 같아서 기억이 사라지기 전에 정리.
저 머신 자체가 내 손을 이미 떠나서 틀린 부분이 있을테니 발견하면 지적 좀 해주시길.

머신 스펙은  대략,

  • CPU: intel i7-2600
  • DRAM: 16 GiB
  • Storage: intel SSD 80 GB + SATA HDD 500 GB

그리고 SSD 용량이 적어서 아래 같은 일을 추가로 했다.

  • 4 GiB의 RAM drive를 할당하고, TEMP, TMP에 해당하는 디렉터리를 RAM 드라이브에 맵핑
  • VisualStudio와 Windows Platform SDK는 SSD에 설치
  • 기타 프로그램(오피스나 LaTeX)은 HDD에 설치
  • 소스 체크아웃은 HDD 쪽에
  • 빌드 스크랫치도 HDD 쪽에
  • IPCH 파일 저장되는 위치 변경. 방법은 민장님 블로그의 “Visual Studio (C/C++) 2010 몇 가지 팁” 참조

대략 이 정도만 설정해도 꽤 빨라지더라. 이전 머신 (Q8600 + 4GiB RAM + HDD only) 에서 빌드할 때 20+분 걸리던게 2+분 수준으로 줄어듦. 예전엔 인크레디빌드 써봐야 빌드 시간이 18분 수준이라 안 쓰느니만 못한 꼴을 몇 번 봤고, 머신 변경 후에는 아예 안 쓰게 되었음. 최대 코어 수도 12개던가로 제한되어 있기도 하고(구입한 라이센스 문제).
그 원인이 된건 다음 것들인듯.

  • IO가 두 디스크에 분산되서 소스 로드 속도가 빨라졌다; 어차피 Windows 헤더와 개발 중이 프로그램 헤더가 모두 로드 되야 하니…
  • VS가 북키핑 용으로 쓰는 듯한 일부 .log, build.unsuccessful[1] 파일들 (내용물이 없거나 매우 짧은) 을 임시 디렉터리에 해당하는 곳에 잔뜩 쓴다. 이게 RAM drive로 옮겨가서 디스크 IO 감소 + 분산
  • CPU 아키텍쳐 변화 (무려 두 세대) + 코어 수 증가(4에서 8로)로 단일 파일 컴파일 속도 증가
  • Win32/x64가 다 있는 경우 개발 중에는 x64 빌드만 사용. 빌드 / 테스트 수행 시간 모두 짧더라

등의 이유로 빨라졌다고 생각한다.

 

궁금한 것:

  • 모든 소스가 SSD 두 개, 혹은 SSD RAID 위에 올라가 있다면 좋겠지만 그런 설정은 받아본 적이 없으니 궁금증만…
  • 빌드 스크랫치 전체를 RAM 위에 올려놓고 싶긴한데, ECC RAM 아니면 살짝 불안하기도 하고, 그 정도로 메모리를 풍족하게 써본 적도 없고…
  • 여기에 unity build를 섞었다면 어땠을까 하는 것..

해보신 분들의 의견을 구합니다(…).

 

PS. 근데 가장 좋은건 Google이나 Microsoft 처럼 빌드 팜이 있는 거겠지만, 그 정도의 엔지니어링을 하는 건 아니었으니…

 

  1. 정확한 파일 이름은 누가 좀.. []

Published by

rein

나는 ...

5 thoughts on “VS 2010 빌드 속도 올리기”

  1. http://funcreators.net/wp 에서 “빌드 속도”로 검색하면 글 두 개 나옵니다(글이 대여섯개라 그냥 보시는 편이…)

    Unity Build 는 C++ 프로젝트의 물리적 구성이 세심하게 된 경우에는 생각보다 별로더군요. 그래도 명백히 빨리지긴 하는데 NDC 에서 발표한 수준까지는 아니었습니다. 프로젝트가 작아서 그럴지도 모르겠습니다. 이론상 프로젝트 규모가 클수록 이득이 커질 가능성이 높아서 말이죠.

    SSD RAID 는 안 쓰고 SSD 로만 구성해서 쓰는데 그런 부분은 모두 위의 글에 적었습니다.

    1. 좋은 글들이네요.

      Unity Build는 속도도 속도고, 특정 최적화의 경우 LTCG 켜도 잘 안되는게 가능해지는 경우가 몇 가지 있습니다.

  2. 혹시 빌드 전체에 대한 프로파일링을 하는 방법이 있을까요?
    모든 장비 구성을 최상으로 할 수 있는 상황이 아닐 때 가장 효과적으로 속도를 줄일 수 있는 것이 무엇인까 고민해봐야할텐데.
    대충은 시스템 프로파일링하면 알 수 있는데, 정확한 내용을 얻기는 어렵더군요.
    도대체 어떻게 찾아봐야하는지 모르겠네요.

    1. 저는 MSBuild 같은 빌드 스크립트를 사용해서 각 작업별 소요시간을 파악할 수 있었습니다. 빌드 툴 중 일부가 멀티코어를 활용 못해서 결국 I/O 의 비중이 제일 컸습니다.

    2. 일단 안드로메다 토끼님이 링크한 글을 한 번 보시고, 빌드 툴 자체의 프로파일러를 써보시기 바랍니다. (대부분의 빌드 도구가 개별 연산의 수행 시간을 추적해줍니다)

      그리고 그 부분에 trace를 넣어서 테스트하는 방법 말곤 잘 모르겠네요; 전 반쯤 노가다로 그런 식으로 최적화했습니다.

Leave a Reply