[UnitTest] 유닛테스트 실행 속도 개선하기

개발 마감을 앞두고 약간의 잉여 시간이 생겨서 작업해 보았다. 시작은 이렇다. DEBUG빌드, 디버거(VS2010SP1)가 붙은 상태에서 약 1,000개의 유닛테스트가 싱글쓰레드로 실행된다. 실행 시간은 46초 정도. 하나당 46ms 정도 걸렸다. 16G i7 머신에서 이정도로 돌리가 없다고 의심했다.

동일한 환경에서 30초로 돌고 있는 동료 머신이 있었다. 뭐가 다르지 하면서 깨작이다가 삼성SSD 매지션이라는 프로그램 설정을 건드렸더니 내것도 30초로 줄었다. 왜 해결되었는지는 그때까지도 몰랐다. 46초였던 다른 동료가 매지션 설정을 변경했지만 안된다고 했다.  그 뒤에 우연히 찾았다. 윈도우즈7 기준으로 제어판->전원 옵션->고성능으로 변경하면 실행 시간이 줄어든다. 매지션이라는 프로그램은 전원 옵션에 새로운 옵션을 하나 만들어 주는 역할을 하는 것이었다.  그럼 고성능 설정이 왜 속도를 빠르게 할까? 말 그대로 고성능이니까 -_-? 좀 더 찾아보니1 균형 모드에서는 터보부스트 기능이 활성화 안되는 문제(?)가 있나보다.

이렇게 재수좋게 성능 향상을 한 뒤(으하하;;) 가벼운 마음으로 다음 의심 되는 녀석인, 각 테스트 하나하나 마다 실행되는 TestEventListener 를 조사했다. (google test 에서의 용어임) 싱글턴 객체의 목록을 초기화 하는 코드가 있는데 탬플릿으로 싱글턴 객체의 크기를 조절할 수 있다. 왜인지 모르겠지만 디버거(VS2010)가 붙은 환경에서만 이 객체의 크기가 ‘커질수록 급격히’ 성능이 줄어든다. (최초의 크기는 320k 정도…추후 줄인 후 크기는 20k) 물론 _NO_DEBUG_HEAP=1 옵션도 입력되어 있는 상태였다.  디버그 모드에서는 해당 싱글턴의 크기가 중요한 건 아니라서, 디버그 모드일 때 크기를 줄여놓는 것으로 결론냈다.  30초였던 실행 시간은 17초로 줄었다.  추후 시간이 된다면2 디버거가 어떤 이유로 더 느려졌는지 따로 실험을 해보고 싶다. 일단 기대하는 성능은 얻었으니 여기서 끝~

 

“[UnitTest] 유닛테스트 실행 속도 개선하기”에 대한 4개의 생각

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다