안드로이드는 자바로 되어있지만 native 연결 즉 JNI 를 이용하기 위해서는 NDK 빌드를 해야하는데,
이게 시간이 제법 걸린다. 윈도우에서는 Cygwin( http://www.cygwin.com/ )을 이용하여 빌드를 해야한다.
distcc( http://code.google.com/p/distcc/ )는 gcc를 대신하여 소스파일을 전처리하고 include 종속성이 해결된 c코드를 분산PC에 보내서 컴파일하고,
결과파일을 다시 로컬 위치에 갖다놔서 make 가 진행되도록 한다.
컴퓨터 3대로 테스트를 해봤다. (집에 3대가 있다능~)
모두 Cygwin을 깔고, Devel과 Utility는 전체설치를 한다.
distcc 는 gcc의 버전이 모두 맞아야 잘 작동한다고 한다.(다르게해보진 않아서 모르겠다.)
Cygwin의 devel 항목에 distcc가 있긴하지만, 최신버전의 distcc와는 제대로 호환이 되지 않는다.
그래서 distcc 홈페이지에서 tar볼을 다운받아서 빌드한다.
$ wget http://distcc.googlecode.com/files/distcc-3.1.tar.bz2
$ tar xjf distcc-3.1.tar.bz2
$ cd distcc-3.1
$ ./configure ; make ; make install;
이제 각 컴퓨터 마다 distccd 를 띄워야한다.
/usr/local/share/doc/distcc/example 안에 있는 샘플 스크립트들을 이용해서
init.d나 xinet.d 등을 이용해서 스탠드 얼론이나 net서비스로 띄울수 있는데,
일단 수동으로 띄워보자.
distccd --daemon --allow="192.168.0.0/24"하면 192.168.0.* 에서 오는 것은 모두 허용하게 된다. XP이사에서는 방화벽 차단해제확인이 뜨는데 해제해줘야 한다.
컴파일작업을 넘겨받을 좀비(?) 컴퓨터들에 모두 distccd를 띄웠다면,
이제 아까 distcc의 설치를 위해 했던 distcc의 소스컴파일 작업을 분산빌드로 시작시켜보자.
cd distcc-3.1하면
make clean
export DISTCC_HOSTS="192.168.0.3,lzo,cpp 192.168.0.16,lzo,cpp localhost,lzo,cpp"
./configure
pump make -j8 CC=distcc
__________Using distcc-pump from /usr/local/bin
__________Using 3 distcc servers in pump mode
이라는 메세지와 함께 죽죽 빌드를 하게 된다.
이때 다른 Cygwin콘솔을 띄워서 distccmon-text 2 라고 실행을 시키면 2초에 한번씩
preprocessing , distributing, receiving 등의 진행 상태를 볼수 있다.
테스트 결과.
1대
real 2m28.380s
user 0m17.426s
sys 2m2.571s
2대
real 2m8.611s
user 0m7.852s
sys 2m2.504s
3대
real 2m8.329s
user 0m8.376s
sys 2m8.292s
흠...20초 정도 줄었다. 왜 별로 안줄어들까?
그러나 잘 보면 user 의 사용량이 확실히 줄어든 것을 볼수 있다.
이를 볼때, 컴파일때 CPU사용량이 많을수록 그 시간이 줄어들것이라 예상할수 있다.
소스가 작은 편이라 3대까지는 활용하는데 오히려 문제가 생기는거 같다.
ccache라든지 distcc 홈페이지에서 권장하는 향상툴을 같이 사용하면 더 좋아질지도 모르겠다.
아직은 뭔지 잘 모르지만.. ㅎㅎ







