최근에 mingw make와 gcc 를 사용해서 프로젝을 빌드하는 프로젝트가 있다. 헌데 이놈이 맘에 안드는게 make -j를 지원하지 않는다. 그래서 4개나 되는 코아를 다 사용하지 못하니 빌드 시간이 오래 걸리고 컴이 놀게 된다. -jN을 쓰지 못하면 너무 아깝지 않은가..
그래서 분석하기 시작!
I've been working on a project using mingw-make on Windows. but mingw-make doesn't support parallel build natively. Since my computers have 4 +cores, totally ineffective! so i'm digging about -jN options.
그래서 cmake로 Generator를 'MSYS Makefiles"로 바꿔서 parallel build(-j)에는 성공했지만, 버그때문인지 불규칙적으로 hang이 걸린다. 그래서 다른 방법을 찾아 보다가 찾은것이 Mingw job server를 제대로! 포팅한 패치가 있길래 mingw-make 3.82버전을 mingw환경에서 빌드해서 돌려보니 어라 잘 된다.
Using cmake's MSYS Generator was my first try. it did work. but there was some side effect. it irregularly caused deadlock.
I've found useful patch for supporting jobserver on Windows. i download mingw-make v3.82 and patch it. it gracefully works. no deadlock probelm.
또 유용한 patch를 발견했는데 이것은 parallel 하게 job이 수행되고 있는 중에 하나의 job이 실패하면 바로 리턴하는 patch. CI에선 거의 필수라 하겠다. 빠른 피드백이 중요하니까.
사실 윈도우에선 위 링크대로 하면 deadlock이 걸리길래 바로 'exit(4)'를 불러줬다. 그러니 child process들도 잘 죽는다.
i've found another useful patch which makes return at a first failure. default behavior is waiting for another job to be finished. the patch doesn't work on Windows. so instead i add 'exit(4)'. it killed all processes belonging to top process make.
혹시몰라 build & strip된 gnumake.exe를 첨부하려고 했으나
... wordpress는 어떻게 첨부파일 어떻게 올리는건지 모르겠다.. zip같은건 원래 불가 ?
댓글 없음:
댓글 쓰기