MacOS X이 왜 느릴까?
강백호
0
1,946
2001.06.26 05:09

글쓴이 : 위민복 (2001년 06월 26일 오전 01:36) 읽은수: 23 [ 자유기고 ]
06-20-2001 03:49 PM
President's Letter: Why is OS X slow?
by andrew
최근 오에스 텐의 속도에 대한 토론이 심심찮게 벌어지고있다. 같은 머신에서 오에스 텐이 오에스 9보다 느린 것은 분명하며, 여기에는 설명하고싶은 여러 가지 이유들이 있다. 하지만 우선, 필자에 대해 약간의 설명을 하겠다.
필자는 Ambrosia Software라는 작은 소프트웨어 회사에서 일하고 있다. 우린 10여 년 넘게 여러가지 맥용 유틸리티와 게임을 개발해왔다. 우연히 필자는 넥스트 큐브와 오픈스텝, 그리고 1990년 경에 나온 넥스트 개발자 문서 원본을 갖고 됐다. 혹시 모르는 분들을 위해 설명드리자면, 맥 오에스 텐은 넥스트의 오퍼레이팅 시스템, 오픈스텝에 기반하고 있다.
따라서 필자는 프로그래머적인 관점에서 맥 오에스와 오픈스텝에 매우 친숙하며, 지난 몇 달 동안에는 맥 오에스 텐 API에 파묻혀지냈다. 여러가지 다른 프로젝트를 관리하는 사이에 필자는 앰브로시아의 화면/비디오 캡쳐 유틸리티인 Snapz Pro를 오에스 텐용으로 포팅하는데 열중하고 있었다. 시스템 수준의 통합에 기반하는 제품의 포팅은 분명 어려운 일이긴 하지만 현재 잘 진행되고 있으며, 원한다면 당사 웹에서 스크린샷이나 과정을 볼 수 있을 것이다.
어느 경우에서건, 오에스 텐을 사용하는 대부분의 사람들처럼 필자는 오에스 텐의 퍼포먼스에 약간은 실망했었다. 문제의 진실인즉슨, 오에스 텐을 느리게 하는 것은 어느 한 가지 이유가 아니라는 것이다. 오에스 텐을 더 빠르게 하려면, 여러 작은 트릭과 최적화를 오퍼레이팅 시스템의 모든 차원에 적용시켜야한다.
소프트웨어를 일단 만들어 놓으면, 두 번째엔 이 소프트웨어를 빠르게 해야한다. 즉, 최적화는 언제나 마지막 순번이기 때문에 제품이 끝날 때까지 소프트웨어는 느리게 돌아갈 수 밖에 없다. 여기에 문제가 어디에 있는 지 알기 위해서는 시간이 걸리는 테스팅도 필요하다.(프로파일링으로 알려져있다)
애플도 오에스 텐의 속도가 문제점이라는 것을 이해하리라고 생각한다. 올해 WWDC에서 스티브 잡스는 속도가 오에스 텐에 대해 가장 많이 나온 불평이었다고 밝혔다. 잡스가 애플 개발자들 앞에서 공식적으로 그런 주장을 한 것은 꽤 대견스럽다고 생각하는 바이며, 오에스 텐의 속도를 높이기위한 시도가 있다는 것을 밝히는 것이기도하다.
애플이 오에스 텐을 출하시킨 것은 우리들과 같은 개발자를 위해서 내놓아야했을 때 내놓은 것이다. 이러한 "최후의" 데드라인 없이는 영원히 베타로 머물 수 밖에 없고 출하시킬 수도(수많은 오픈소스 프로젝트는 경영진과 강건한 선도 개발자들이 없기 때문에 이런 경우를 종종 볼 수 있다) 없기 때문에 애플로서는 텐을 출하시켰어야했고, 결국 출하했다. 오에스 텐의 단단한 API를 우리들 개발자에게 선보여서 애플리케이션을 개발하도록 하기 위해 오에스 텐이 나온 것이다.
맥 오에스 텐 10.0.x는 일반 사용자들(따라서 오에스 텐을 보고 "미리 맛보기"라고도 부를 때가 있다)보다는 애플과 애플 개발자들을 위한 것이며, 사용자들의 경우에는 파워 유저에 맞춰져있다 할 수 있겠다. 오에스 텐을 미리 사용하게될 이 두 부류의 사용자들은 애플이나 애플 개발자들에게 오에스 텐의 퍼포먼스와 기능에 대해 지시내릴 수 있기 때문이다.
필자의 경험상, 필자는 단지 새로운 오에스 텐 API(카본)로 애플리케이션을 포팅시키는 것만이 만능이 아니며 이경우에는 상당한 퍼포먼스 저하가 있다고 말할 수 있다. 오에스 텐 포팅에 관련된 당사의 프로젝트 중에 퍼포먼스가 절대적으로 느렸던 경우도 있었다.
퍼포먼스를 증가시키려면, 여러가지 속도 테스팅(프로파일링)과 오에스 텐의 악세사리들(이를테면 그저 myPort->portRect보다는 GetWindowPortBounds()를 호출하는 것과 같다) 중에 어떤 것을 호출하는 지를 결정하면 상당한 결과를 얻을 수 있다. 반면, 우리들의 함수 시작에 이런 악세사리를 호출하기만 할 수도 있다.
현재 우리는 프로젝트를 오에스 텐에서 꽤 돌아가도록 하고 있지만 물론 오에스 9보다 빠르진 않고, 그러기를 기대하고있지도 않다. 오에스 텐은 선점형 멀티태스킹 오퍼레이팅 시스템이기 때문에 퍼포먼스 중심적인 작업을 하기위해 전체 프로세서를 독점적으로 사용할 수도 없다. 더해서, 오에스 9 버전만큼 최적화되지 않은 부분이 많다는 단순한 이유도 있다.
우리들 맥 오에스 개발자들은 여러 부담을 안고있다. 새로운 API를 배워야한다는 부담 뿐만이 아니라, 오에스 텐에서 최대한 많이 이끌어내기 위해 새로운 개발 툴과 테크닉도 배워야한다는 점이다. 여기에 개발자로서 두 가지 접근 방법이 있다. 바뀐 것에 좌절해버리거나, 오에스 텐에 대해서 흥미진진한 모험을 하는 것이다. 분명 오에스 텐에는 멋진 구석이 있다. 여기에 옛날 방식 그대로 접근해서는 안된다.
오에스 텐 상에서의 애플리케이션이 오에스 9에서보다 느리리라는 것을(몇 가지 예외가 있다. 이를테면 OpenGL의 경우는 오에스 텐에서 더 나은 퍼포먼스를 보여준다) 생각하라. 주된 이유는 두 가지다. 첫 번째로 오에스 텐이 아직 최적화되지 않았고 오에스 9보다 훨씬 많은 메모리를 잡아먹는 선점형 멀티태스킹 오에스라는 이유가 있다. 두 번째 이유는 오에스 텐 상에서 돌리는 애플리케이션이 원래는 맥 오에스(맥 오에스 개발자들은 이제서야 오에스 텐용 애플리케이션의 작성을 서두르고있다)용으로 개발된 것이며 아직 최적화되지 않았다는 것이다.
두 가지 상황 모두 애플이 오에스 텐을 최적화시키고 개발자들이 오에스 텐을 배워나감에 따라 바뀌어질 것을 기대해본다. 오에스 텐이 느린 것에 대해 누구를 비난해야하는 지에 대한 상당한 소문들이 있지만 모두 다 혐의가 있다.
Buy new hardware.
애플이 오에스 텐을 최적화시키지 않은 이유 중에 하나가 새 하드웨어 구입을 독려하기 위해서라는 루머가 계속 돌아다니고 있다. 애플이 하드웨어 회사라는 것이 사실이며 지금까지 깔린 기반 이상으로 소비자들을 잃지않고 끌어모으기 위해서라면 애플이 어리석은 짓을 할 리가 없다. 새 하드웨어를 사면 오에스 텐을 더 부드럽게 돌릴 수 있다는 것을 애플도 알고 있으며, 오에스 텐이 여전히 최적화되지 않아서 윈도우즈 XP나 다른 오퍼레이팅 시스템이 더 퍼포먼스가 좋다면 이는 애플에게 막대한 문제가 될 것이다.
Carbon vs. Cocoa.
카본과 코코아는 오에스 텐용 애플리케이션을 작성하는 두 가지 API이다. 코코아는 오픈스텝 API에 기반하고 있으며 카본은 맥오에스 API에 기반하고 있다. 코코아는 객체 지향이고 카본은 절차적이다. 카본과 코코아 모두 CoreServices의 최상단 레이어이기 때문에 카본이건 코코아이건 간에 느린 맥 오에스 텐 애플리케이션을 작성할 수 있다. 물론 카본과 코코아 모두 빠른 맥 오에스 텐 애플리케이션을 작성할 수도 있다. 한 API가 더 퍼포먼스를 높게 해준다는 말은 잘못된 것이다.
Quartz.
쿼츠는 완전히 새로운 오에스 텐의 이미징 모델이다. 꽤 인상적이지만 오에스 텐이 느린 이유중에 쿼츠가 손꼽히기도 한다. 쿼츠의 하드웨어 가속 기능이 속도를 더 높여야한다는 점은 사실이지만 달리보면 쿼츠의 현재 퍼포먼스는 꽤 좋은 편이다. 필자가 가끔 하는 시간 테스트에서 쿼츠는 희생양이 될 수 없었다. (물론 향상의 여지는 있으며 쿼츠의 향상 또한 오에스 텐 최적화의 한 영역이라고 여긴다)
Mach's scheduler.
마흐는 오에스 텐의 핵심이다. 마흐는 메모리 관리나 프로세서 타임 등의 로우-레벨을 다룬다. 사실 마흐 자체는 굉장히 빠르며 최적화된 커널이다. 현재 오에스 텐의 스케쥴러는 사람들의 주장과는 달리 여러 다른 태스크에 각기 다른 우선권을 부여한다. ?ice纜 같은 사용자-수준의 명령만이 스케쥴러에 맞춰서 돌아가지 않을 뿐이다. 이미 프로그래머들은 태스크 우선권의 관리에 스케쥴러를 사용할 수 있으며, 사실 쿼츠가 화면의 업데이트를 빠르게 하기 위해 이미 이뤄져있다.
그렇다면 오에스 텐을 빠르게 돌리려면 무엇을 할 수 있을까? 첫 번째. RAM을 더 장착하라. 오에스 텐은 정말로 램을 많이 잡아먹는다. 부분적인 이유로 화면상의 모든 윈도우 자체가 메모리를 잡아먹으며 새로운 윈도우를 띄우면 그만큼 더 메모리를 잡아먹는다.
예로서, 600X800 픽셀, 수천만 색상의 윈도우 하나는 1.9MB의 램을 차지한다. 실제적인 내용도 없는 단 하나의 윈도우가 말이다. 지금 얼마나 많은 윈도우가 열려있는 지 세보기 바란다. (필자는 거의 90여개의 윈도우가 열려있다) 이 윈도우들이 얼마나 많은 램을 먹는 지 계산할 수 있을 것이다.
이미 램을 다 차지했다면 오에스 텐은 디스크 스왑을 시도한다. 물리적인 메모리보다 하드 드라이브는 느리기 때문에 이는 퍼포먼스를 저하시킨다. 현재 램은 저렴하다. 필자는 512MB 램을 100$ 밑으로 최근 구입한 적이 있다. 더 많은 램은 그만한 가치가 있다.
그 외에 다른 해결책으로서는 애플에게 오에스 텐의 속도가 불만이라고 표현하는 것이다. 합리적인 이유가 있는 편지라면 분명 어필할 것이다. 그러한 편지가 수만 통이 간다면 분명 애플은 귀를 귀울일 것이다. 따라서 다음 싸이트에 가서 작성하라. : http://www.Apple.com/macosx/feedback/
좋아하는 소프트웨어 벤더들에게 메일을 보내는 것도 괜찮다. 무슨 일이 일어나고 있으며 퍼포먼스가 중요하다는 사실을 그들에게 알려라. 단순히 포팅하는 것만이 능사가 아니며 최적화시켜야함을 알려라. 여러분이 바로 힘을 거머쥐고있다.
정말 필자가 갖고 있는 유일한 오에스 텐에 대한 불만도 속도이다. "쉬운 사용"이 충돌하지 않음을 포함하면서 소비자들을 잃는다면 말이 되겠는가? 오에스 텐의 내부는 정말 강력하다.
솔직히 오에스 텐이 초심자나 오에스 8/9를 사용한 적이 있는 사람들에게는 쉽다고 생각한다. 숙련된 사용자들 또한 원할 경우 커맨드라인이 있다는 점을 좋아할 것이다. 오에스 텐의 속도가 좋아지면 애플은 윈도우즈에 소비자를 뺏기기보다는 더 데려올 수 있는 좋은 기회를 맞이할 것이다. 바로, 속도에 대한 희망사항이다.
맥시티에서 퍼온글입니다~~~
-강백호-
◈ 먼길 ─ OS X