잠안자는 쑹이
HELO
 
전체보기 (133)
잠안오는이유 (21)
잠안자고찾은것 (20)
잠안자고보는책 (7)
일상 (50)
마북닷컴 (21)
시너지한글패치 (3)
Perl (9)
     
«   2009/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
 
   
월풍도원(月風道院) - Deligh...
[가상KVM] 키보드와 마우스를...
Buy meridia meridia reducti...
Reductil reductil order onl...
bondage toys
bondage torture
free bondage pics
free bondage movies
 
2009/12 - 2
2009/11 - 6
2009/10 - 6
2009/09 - 7
2009/07 - 8
  

Total 323570, yesterday 79, today 2
powered by Tatter tools, designed by kokoro studio.
  1. 2009/11/15 distcc를 이용한 분산컴파일 시도
*1 
요즘 안드로이드때문에 빌드시간을 단축시키기 위해 분산컴파일 환경에 관심이 많다.
안드로이드는 자바로 되어있지만 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 홈페이지에서 권장하는 향상툴을 같이 사용하면 더 좋아질지도 모르겠다.
아직은 뭔지 잘 모르지만.. ㅎㅎ
2009/11/15 14:25 2009/11/15 14:25
   http://www.mabook.com/blog/trackback/148
  1. 구차니
    2010/07/08 17:24
    오래된 글에 리플을 남기게 되는군요 ^^;
    음.. cygwin 자체가 윈도우 상에서 fork() 영향을 많이 받아
    상당히 느린것으로 알고 있습니다. 아마 distcc 쓰면서 native 하게 돌린다면(linux 상에서)
    상당한 효과가 있을것으로 생각이 됩니다.

    멀티코어 cpu라면 make -j 만 해도 상당히 큰 효과를 보실수 있을 겁니다.
*1