MacOS vs. Linux 어떤 게 빠를까?
on
그냥 호기심에 아주 간단한 실험을 했다. 이것만으로 둘 중에 어떤 OS가 더 빠르다 할 수는 없다. 그러니까 사용자가 빌드한 애플리케이션을 둘 중에 어떤 것이 더 빠르게 실행시킬 수 있을까 하는 것만 보는 거다. 그러니까 다시 말하면 어떤 OS에서 사용자 응용프로그램을 만들어서 돌리면 성능상 손해를 보는 것일까 보는 거다. 어차피 MacOS라고 하더라도 동일한 컴파일러와 동일한 소스를 가지고 성능을 보는 것이니까 리눅스에 비해서 특별히 손해가 날 것은 없다고 본다. 다만 CPU 클럭을 최적화하는 별도의 어플리케이션을 양쪽다 모두 돌릴 수가 없으니까 어찌보면 공평하다고도 볼 수 있을 것 같다.
실행할 애플리케이션과 실험조건은 다음과 같다.
- 실험용 애플리케이션:
- pthread로 32개 thread를 동시에 잡는 애플리케이션. floating point 연산이 대부분이다.
- 실험 조건
- 실험용 머신: Ryzen 5950X, Hackintosh
- 동일 소스를 gcc 13 (-O3)으로 빌드해서 system이 거의 idle인 상태에서 동작시킨다.
- 하드웨어 상으로 완벽하게 동일한 조건의 머신이며 BIOS setting도 완전히 같다.
- MacOS는 Ventura 13.5.2에서 동작시키고 Linux kernel 6.1.49에서 실험했다.
실험결과는 다음과 같다.
- MacOS에서 측정한 총 실행시간 (second):
- Ryzen power control 미적용: 576.324403
- 적용 후: 532.063189
- Linux에서 측정한 총 실행시간: 443.057569
숫자에서 보듯 실행시간의 차이는 대략 2분 정도로 10분이 못 되는 총 수행시간 대비 20%가 넘는 실험 오차 수준을 넘어서는 차이라고 볼 수 있다. 아무래도 이 유의미한 차이는 Ryzen 머신에 MacOS를 설치할 때 CPU를 속이는 과정이 추가되어 본래의 성능을 100% 발휘할 수 없게 되기 때문이 아닐까 싶은데, 동일한 조건에서 intel CPU로 바꾼 시스템에서 테스트해봐도 결과는 별반 다르지 않다.
그러니까 CPU의 클럭을 최적화하는 부분에 있어서 뭔가 안정성을 고려해서 덜 밀어붙이는 것으로 보여진다. 성능 향상을 꾀한다면 테이블을 수정해서 클럭 사이클을 더 끌어올리게 뭔가 튜닝을 한다거나 말이다. Geekbench를 돌려보면 Windows/Linux 대비 대략 20% 가량 빠지는 것으로 나타나는데, 이것은 내 실험결과와 비슷한 수치라고 보여진다. 장담할 수는 없지만 그만큼 MacOS가 뭔가 느슨하게 돌고 있다는 것을 보여준다.
여기에 실험을 하나 추가해서 벤치상에서 유사한 single core 성능을 갖는 M1 pro를 가져다 thread 수만 8로 낮춰서 실험해봤다. 그러니까 MacOS가 M1를 구동하는 방법도 유사한지 확인해보려는 것이다. 물론 이 실험 자체의 결과가 유의미한 결과를 보여준다고는 말할 수 없다. 응용프로그램이 서서히 thread 수를 낮춰가는 작업이기 때문에 단순히 실행시간이 thread 수에 반비례한다고 할 수 없다. 또 개개의 thread에서 이루어지는 작업이 거의 독립적이기 때문에 thread 간의 연계 성능이 우수해야 할 필요도 없다. file access도 그다지 많지 않기 때문에 file system speed가 미치는 영향도 작다.
- M1 pro + MacOS에서 측정한 총 실행시간: 684.783700
- Ryzen 5950x + MacOS에서 측정한 총 실행시간: 708.222784
- Ryzen 5950x + Linux에서 측정한 총 실행시간: 556.128947
Single core speed에 있어서 M1이 MacOS에서 5950x대비 제법 우수하고 Windows/Linux 상에서는 유사한 수치를 보여주는데, 지금 결과에서 보면 x86 Linux가 가장 우수하고 MacOS에서는 역시나 x86 머신이 손해보는 장사라는 결과를 보여준다.
여기에 추가적으로 brew로 가져온 gcc가 MacOS 상에서는 성능이 최적화되지 않은 것이 아닐까 하는 의심을 잠재우기 위해서 apple clang으로 build한 binary를 실행했을 때의 결과도 추가한다.
apple clang
- M1 pro + MacOS에서 측정한 총 실행시간: 676.78608
- Ryzen 5950x + MacOS에서 측정한 총 실행시간: 736.245131
clang (15)
- Ryzen 5950x + Linux에서 측정한 총 실행시간: 562.032399
추가로 MacOS는 CPU 속도에 큰 차이 없이 반응이 약간 느리다. 사실 이러하다면 응응 프로그램의 처리 속도는 빨라야 할 것 같은데 그것도 아니다. M1 pro를 linux 상에서 동작시킬 경우에 어떤 성능이 나올지도 궁금하다.
그러하다.
결론을 지어보면:
오직 CPU 연산만을 사용하는 사용자 응응프로그램을 빌드해서 동작시킬 때,
- x86 머신에서는 Windows/Linux가 젤 빠르다. MacOS에서의 수행시간 차이는 꽤 크게 나타난다.
- MacOS는 뭔가 사용자 응용프로그램보다 순위가 높은 kernel process들이 제법 있는 것이 아닐까 싶다.
- gcc/clang의 성능 차이는 크진 않지만 존재한다. 둘 사이에 장단점이 존재하기 때문에 뭐가 좋다 나쁘다 하기 보단 둘 다 있어서 좋다(!)라고 해야할 것 같다.
- 오직 CPU 연산만을 사용하는 사용자 애플리케이션을 동작시키는 것에는 linux machine만한 게 없다.
이 결과는 사람들이 흔히 사용하는 웹브라우징/유튜브/MS office 작업에서의 체감성능과는 관계가 없다.