의성궁

과거에는 SMP가 드물어서 병렬화에 대해 큰 고민 없이 살아도 되었지만 이제는 멀티프로세서가 기본인 시대가 되었습니다. 이런 시대에선 작업이 병렬화 되었는가에 따라 성능이 엄청나게 차이가 나게 됩니다.

아직도 커널이나 하이퍼바이져를 컴파일할 때 그냥 make 명령만 치면서 시간이 오래 걸린다 투덜거리는 사람들을 보면... 일부로 여유를 즐기는 것인가? 멀티코어 기술에 반감이라도 있는것인가 싶다가도 몰라서 그럴 수도 있다는 생각에 글을 적습니다.

make에 -j 옵션이 있습니다. 이것은 동시에 make가 실행하는 작업의 갯수를 조절한다. 기본으로는 1입니다. 즉, 한 번에 컴파일을 하나씩 합니다.
make -j 옵션은 병렬화 할 수 있는데까지 병렬화합니다. 디펜던시가 없는 소스코드들은 모두 동시에 컴파일 되므로 스래슁으로 인해 오히려 더 느려질 수 있습니다. 따라서, 가장 안전하게 성능을 높이는 방법은 자신의 코어 갯수에 맞게 make -j <core number> 이렇게 명령을 주는 것입니다.
하지만, 경험상 하나의 소스의 I/O waiting 동안 다른 소스를 컴파일 할 수 있는 장점 등으로 인해서 <core number + 1> 하는 경우가 오히려 약간 더 빠를 때도 있습니다. 하지만 it depends on.

두배로 빨라진다는 것은 엄청난 것입니다. 커널 컴파일 10분에 되던게 5분이면 된다는 것이니깐.

Posted by euiseong

댓글을 달아 주세요

  1. 형. 올만에요.
    랩에 8-core 시스템 하나 샀는데. 바닐라 커널 컴파일 하는데, 4분도 채 안 걸리더군요.
    make -j 8 의 기분이란. ㅎㅎ

  2. 8코어라... 나는 집에 PC로 쓰려고 Rev. B 페놈 4코어를 샀는데 이거 젠 컴파일하는데 순식간이더라. 평상시에는 듀얼코어 애슬론 6000+가 훨씬 더 빠른데 일단 컴파일에서는 코어 많은 놈이 장땡인 듯해.