GCC 4.0 Benchmarks
GCC 4.0: A Review for AMD and Intel Processors
-O3 옵션을 사용한 벤치마크. amd64에서는 컴파일 속도가 기존 버전에 비해서 느리게 나오고 P4에서는 빠르게 나온다.
-O0 옵션을 사용한 KDE 코드에 대한 벤치마크. 상당한 개선을 볼 수 있다.
GCC 4.0: A Review for AMD and Intel Processors
-O3 옵션을 사용한 벤치마크. amd64에서는 컴파일 속도가 기존 버전에 비해서 느리게 나오고 P4에서는 빠르게 나온다.
-O0 옵션을 사용한 KDE 코드에 대한 벤치마크. 상당한 개선을 볼 수 있다.
The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition by Frederick P. Brooks
소프트웨어 엔지니어링 과목을 수강한 적이 있다면, 소프트웨어 엔지니어링에 어느 정도 관심이 있다면, 한번쯤은 이 책 제목 정도는 들어보았을 것이다. M-MM은 소프트웨어 엔지니어링의 고전이다.
Brooks는 IBM에서 OS/360 개발 프로젝트의 관리자였다. 나중에 Brooks는 이 경험을 분석하고, 그것에 관하여 여러 동료들과 논의했다. 그래서 그 결과로 나온 책이 바로 M-MM이다. 이 책은 각각 하나의 주제를 가지고 있는 에세이 모음의 형식으로 되어있다.
그 중에서도 가장 유명한 내용은 아무래도 Brooks’ Law가 나오는 책과 동명의 에세이인 ‘The Mythical Man-Month’일 것이다. Brooks’ Law는 간단히 말하면,
늦어진 소프트웨어 프로젝트에, 인력을 더 투입하면, 그 프로젝트는 더욱 늦어진다.
는 것이다. Brooks의 논지를 따라가다보면 당연한 얘기다. 하지만, M-MM이 쓰여진 지, 30여년이 지난 지금도, 소프트웨어의 생산을 부품 생산 공장에 빗대어 생각하려는 경향 – 미신은 여전히 존재하는 것을 보면, Brooks’ Law는 아직도 강력한 의미를 지니고 있는 것 같다.
이 책이 워낙 오래 전에 쓰여진 책이라, 현재의 기술에는 약간 맞지 않는 얘기도 나오지만, 대부분은 여전히 유효한 얘기들이다. 뿐만 아니라, 요즘에 나오는 소프트웨어 개발에 관한 수많은 철학의 근간은 M-MM에 빚지고 있는 것으로 보인다.
내가 산 책은 1995년에 나온 Anniversary Edition으로, 그 시점에서 원래의 M-MM에 대한 스스로의 평가를 내리고 있다. 특히, 인상적이었던 것은 , 원래 Parnas가 주창한 Information Hiding을 격하게 비판하던 Brooks가, “Parnas Was Right, and I Was Wrong about Information Hiding”이라고 적으면서, 자신이 틀렸음을 솔직하게 인정하고 있다는 것이었다.
Anniversary Edition에는 역시 엄청나게 유명한 에세이인 “No Silver Bullet”을 함께 싣고 있는데, 이 에세이는 소프트웨어 개발자라면 반드시 읽어봐야할 에세이라고 생각한다. (인터넷에서도 쉽게 구할 수 있고, 번역도 되어있는 걸로 알고 있다.) 이 에세이는 소프트웨어 개발에 있어서의 어려움은 본질적인(essential) 어려움과 비본질적인(accidental) 어려움으로 나눌 수 있다고 얘기한다. 비본질적인 어려움은 기술의 발전과 함께 개선되고 점차 사라져왔지만, 본질적인 어려움에 있어서의 기술 발전은 10년 내의 범위에서 크게 이루어지지 않을 것이다라는 그의 예측은, 이 책이 쓰여진 1975년에도, Anniversary Edition이 쓰여진 1995년에도 맞았고, 지금도 맞지않을까 하는 생각이다. 그가 생각하는 본질적인 어려움의 궁극적인 해결책은 소프트웨어 컴포넌트의 시장화를 통한 재사용이다. 현대에는 어느 정도 컴포넌트의 시장화가 진행되었지만, 본질적인 어려움을 해결할만큼의 재사용에 있어서는 벽에 부딪히고 있는 것이 실정이다. 하지만, “Software Factory”같은 개념을 발전시켜 나가고 있고 그와 같은 개념은 바로 Brooks의 이상을 정확하게 표현한 것이 아닐까 싶다.
흔히, 고전을 “오래된 것”, 그래서 낙후된 것으로 생각하는 사람들이 많다. 하지만, 고전의 참뜻은 “전범”이다. 그리스/로마 신화를 이해하지 못하고서, 서양의 미술을 이해하기 힘든 것처럼, 소프트웨어에 관해 이해하기 위해서 반드시 읽어야할 책들 중의 하나가 바로 M-MM이다.
어떤 practice가 보편화되어있고 그것을 보조하는 툴이나 생각의 장치들이 잘 만들어져있다면, 오히려 그 practice의 장점이 무엇인지 파악하는 데에는 방해가 되기도 한다. 어떻게 보면, 생산성을 높히고자 하는 우리의 노력이 때로는, 각 개인의 능력을 키우는 데에는 방해가 될 수도 있는 것이다.
예를 들어, 잘 만들어진 소프트웨어 프로세스 환경에만 익숙한 개발자는, 그러한 프로세스가필요없다고 주장하는 사람에게, 그것이 왜 필요한지 제대로 설명하지 못할 것이다.현대의 특정 프로그래밍 언어에만 익숙한 사람은, 자신이 활용하고 있는 수많은 언어적 장치들의 이점을 제대로 이해하고 있지 못할 가능성이 높다.
마찬가지로, 잘 만들어진 Model-View-Controller(이하 MVC) 프레임워크에만 익숙한 사람이라면, 그 패턴이 가지고 있는 유용성이나 의미를 발견하지 못할 가능성이 높다. 대부분의 웹어플리케이션 개발자들은, 프리젠테이션과 로직이 뒤섞인 기존의 웹어플리케이션에만 익숙하거나, MVC 프레임워크 웹어플리케이션에만 익숙하다. 기존의 웹어플리케이션이 MVC를 사용함으로써 어떤 점에서 좋아질 수 있는지는 전자나 후자의 프로그래머들 모두 알지못할 가능성이 높다.
이 글의 목적은 기존의 웹어플리케이션에 MVC 패턴을 적용하면서 리팩토링하는 과정을 보임으로써, MVC 패턴의 유용성을 재발견하는데 있다.
…
Galaxy(http://rubyforge.org/projects/galaxy/)의 public release를 위해서, lastmind-specific한 design에서 좀 더 generic한 design으로 손봤습니다. (네, 네, Word Press 스타일입니다. 그렇게 안보이는 분들도 계시겠지만…) 색상이나 형태 등은 가능한 한 CSS로 분리했습니다. (완벽하지는 않습니다.) 게다가 아직도 view/filter 변경 인터페이스나, admin 인터페이스 쪽은 멀었습니다.
제가 혼자 사용하기에는 별로 문제없었는데, product로 release 하려니, 상당히 손이 많이 가는군요. Brooks의 Programming Product에 관한 이야기를 실감합니다.
boost-devel 메일링 리스트에서 최근에 제 관심을 끄는 이슈들입니다.
http://article.gmane.org/gmane.comp.lib.boost.devel/121123/match=proposed+boost+tr1
John Maddock이 작업 중이던, TR1의 (거의) 완전한 첫번째 구현이 나왔습니다. 언제쯤 boost에서 그리고, g++에서 볼 수 있을까요? 기대됩니다.
http://lists.boost.org/boost/2005/04/24164.php
Boost.Net library에 관한 논의는 아주 오래전부터 있어왔지만, 구현을 하시던 분이 실종되기도 하고 (?), 우여곡절 끝에 최근에 다시 논의가 뜨거워지고 있습니다. C++에 아직 보편적으로 쓸만한 network library가 없다는 것은 C++ 개발자로서는 괴로운 일일 수 밖에 없죠. 간단한 작업을 위해서도 reinvent wheel을 해야하니까요. 최근에 개발된 언어들은 대부분 기본적인 socket으로부터, http와 같은 상위 layer protocol 까지 모두 지원하고 있는데 말입니다. 어서 C++ 개발자들도 자유롭게 개발할 수 있었으면 합니다. 전에도 적었듯이 reactor + fsm 을 구현해보고 싶은 생각이 있는데, boost에서도 multiplexor에 대한 논의는 계속 진행중입니다. (fsm은 이미 있긴 한데, 상당히 generic한 디자인이다보니 좀 복잡해서, multiplexor와 함께 잘 쓰일 수 있는지는 의문입니다.)
예전부터 다음 위키 페이지에 잘 정리되고 있으니 관심있는 분은 참고하시길.
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostNet
더불어 Async I/O를 어떻게 제공해야하는가, platform neutral해야하는가, thread와 독립적이어야 하는가 등의 이슈에 대한 논의도 활발하게 진행중입니다.
http://lists.boost.org/boost/2005/04/24098.php
http://lists.boost.org/boost/2005/04/24559.php
Boost에는 원래부터 automated regression testing을 하고 있었습니다만, 아마 개발자가 build를 하고 그 결과를 자동적으로 집계하는 식이었을 겁니다. 최근에 BuildBot(http://buildbot.sourceforge.net/)을 Boost의 regression testing에 도입하기로 결정된 것 같습니다. BuildBot은 분산 환경에서 주기적으로 build를 해주는 소프트웨어로 보입니다.
제가 회사에 있을 때, 팀에서 개발 중인 라이브러리의 regression testing을 담당하고 있었고, Boost를 모델로 했지만, 그 당시에도 차후에는 BuildBot과 같은 것이 필요하다는 생각을 했었습니다. 그 때는 BuildBot과 같은 기능은 차후로 미루고 단순히 cron을 사용했는데요. 굳이 새로이 개발하기보다는 BuildBot을 가져다 쓰는 것도 괜찮을 것 같군요. 주기적으로 build를 trigger하는 것뿐만 아니라, 분산 환경에서 on-demand build도 가능한지가 궁금하군요.
참, Regression Testing에 대해서 알고 싶으신 분은 Regression Testing에 대한 Wikipedia 항목을 참고하시기 바랍니다. (혹, 나중에 블로깅할 일이 생길지도 모르겠네요.) Automated regression testing의 이익에 대해서 알고 싶으신 분들은 Joel Spolsky의 Daily Builds Are Your Friend를 읽어보시기 바랍니다. Daily Build는 Joel의 유명한 The Joel Test에도 들어있는 항목이지요.
TR2와 C++0x의 스케줄이 잡혔다는군요. boost의 threads, filesystem, signals가 제안될 계획이라는 군요. (물론 TR2로 겠죠.) thread를 사용하기 위해서 boost 전체를 설치해야한다는 게 부담스러워서, 따로 thread library를 만들기도 했었는데요. 표준화가 된다면 얘기가 달라질 것 같군요. boost의 위상이 점점 높아만 가는군요. production에서 boost를 쓰는 것도 별 무리가 없지 않을까요?
* October 2005: cutoff date for C++0x major library proposals
* October 2006: cutoff date for library TR2 proposals
* April 2007: cutoff date for C++0x library clean-up papers
The usual rule-of-thumb is that new library components go in TR2, while
changes to existing components go in C++0x. The LWG will consider
exceptions to the rule on a case-by-case basis.
The LWG is planning to issue a “Call for Proposals” with details, but in
the meantime Boost developers might want to start thinking about which
Boost libraries they want to propose to the LWG. Because most proposals go
through one or more revisions before being accepted, it helps a proposal’s
chances if it reaches the committee as many meetings as possible before the
final cut-off.
So far there are plans to propose Boost.Threads, Boost.Filesystem, and
Boost.Signals. As well as proposals for some of the more major libraries, I
personally hope someone will do a sweep through Boost looking at some of
the smaller utilities and helpers for a possible “Small Additions”
proposal.
–Beman
h3. What is websvn?
p. websvn(http://websvn.tigris.org/)은 cvsweb이나 viewcvs와 같은 svn의 web frontend다.
…
요즘, 주변 사람들에게 썰을 풀고 있는 프로그래머의 (가까운; 10년내) 미래에 관한 나의 생각. 지식노동자에 관한 허름한 대화는 무시하거나 조언을 해주시길. 좀 시간이 지난 후에 정리해볼께요.
2005년 04월 12일 오후 4:10:10 부터 2005년 04월 12일 오후 4:34:28 까지 한 윤묵형과의 MSN 대화입니다.
최윤묵: 있구려 내가 뭐좀 알아보고 싶어서요
최윤묵: 지식노동자의 종말이 어떻게 될지 이전의 산업노동자들의 경우와 비교해서 알고 싶은데
최윤묵: 이에 관련한 책이나 자료는 없소?
세라비: 이전의 산업 노동자->지식 노동자로의 변환은…
세라비: 그… 미래 예측으로 유명한… 누구지
세라비: 앨런..뭐시기
세라비: 그리고 드러커도 지식 노동자에 대해서 언급 마니 하지 않았나용
최윤묵: 오래되지 않았소? 그책은
세라비: 네 그쵸 지식노동자의 종말에 대해선 모르겠군요 호호
최윤묵: 드러커는 너무 긍정적으로 쓰고 있다고 하던데…요새 상황과 맞지 않다라는 소문을…
세라비: 네 둘다 긍정이죠
최윤묵: 산업노동자들이 어떻게 되었는지는?
세라비: 아마 앨런쪽이 산업노동자쪽도 언급할 듯?
최윤묵: 그렇구려…
세라비: 시대가 변하고 있다 이런식일 듯 안읽어봤지만;
세라비: 지식 노동자의 종말이라. 정말인가요? T_T
최윤묵: 산업노동자도 처음에는 대우를 잘 받고 살지 않았겠소 자동화가 이루어지면서
세라비: 그렇죠
최윤묵: 처우가 안 좋아지고 있을 것이고
세라비: 분업화되고 replacable 해지고;
최윤묵: 현재 IT쪽도 … 이런 부분이 발전해가면서 산업화가 되어갈텐데 이에 대처해야지 않겠소
세라비: 아 software factory;; 크크 아직은 좀 멀었을 것 같긴한데; 하긴 몇십년 내로 … 바뀌려나;
최윤묵: 모를일이요… ^^
세라비: software factory 에 관한 얘기를 좀 살펴보면 나오려나
최윤묵: 아 그런 용어가 있소?
세라비: 네 책도 있죵
최윤묵: 그렇구려 thanks하오
세라비: 아직 지식 노동자의 종말에 대한 얘긴 잘 안보이는 듯? ;
최윤묵: 그렇구려
최윤묵: 아… 벤쳐가서 고생좀 해봤소?
세라비: 무슨?
최윤묵: 곱게자려서…
세라비: 아라에서요? 고생까지는 아닐 듯
최윤묵: 어 그렇군…
세라비: 거의 개발만 하고
최윤묵: 더 늙기전에 해볼만한가…
세라비: 밤샘이야 좀 해봤지만 KT BT 정도 들어가보고; 딱히 maintenance하러 딴 사이트들어가고 한 적은 없음
최윤묵: BT?
세라비: 벤치마크 테스트인가? 음냐;
최윤묵: yes24가 잘 안열리네…
세라비: 그러는 사람들 많고 맨날 늦게 퇴근하는 사람들 많은거보면 호호; 고생하는 사람들도 많은 듯
세라비: knowledge worker란 용어를 드러커가 만들었구나; 덜덜
세라비: http://en.wikipedia.org/wiki/Knowledge_worker
세라비: “can multiply the results of their efforts through soft factors such as emotional intelligence and trust”
세라비: 음 peopleware의 논조랑 같군;
세라비: 후쿠야마의 trust가 그런 내용이었군;;;
최윤묵: peopleware는 또 무엇이요
세라비: 아 그것도 software development에 대한 유명한 책 (저번에 언급했었는데;)
최윤묵: 그렇구려..
세라비: M-MM를 보면 software development는 essential한 부분과… 아닌(용어가;) 부분으로 나뉘는데 essential한 부분은 사람이 개입해서 해야만 하는 부분 – 디자인 같은 부분이고 다른 부분은 그런 디자인을 프로덕트로 변환하는 작업 (코딩?)인데 지금까지 기술의 발전은 essential한 부분이 아닌 다른 부분의 cost를 줄이는 방향으로 발전해왔고 essential한 부분에서는 아직까지 발전이 미비하다는 주장이에요 (10년 내 prediction으로)
최윤묵: 자동화가 되지 않을 부분을 알아두어야겠군 디자인인가 -_-
세라비: (네 그렇죠)
최윤묵: 그림이나 그려야지 췟
세라비: 음… 그게 85년에 쓰여졌고… 95년의 anniversary edition에서도 몇가지 발전 가능성이 있는 건 나왔지만 아직은 멀은 것 같다고 한 거 같아요
세라비: 여하튼 non-essential한 부분은 점점 작아지고 있는게 사실이죵; machine이 빨라지는 것 하나만 봐도;
최윤묵: 그르게
세라비: tool들도 엄청나게 좋아지고 있고 85년 당시에만 해도 cvs 같은 툴이 없어서 사람이 대신 했던 듯 ;;;
최윤묵: ;;;;
세라비: 아 essential한 부분을 해결하는 방법중의 궁극적인 것이 reuse라고 하고 component 기술에 기대를 걸더군요 아 기술이라기보단 component market이려나
세라비: 뭐 장기적인 방향은 확실히 component/service market software factory 뭐 이런 추세인 건 맞겠죠;
세라비: 따라서, 큰 범위의 design을 하는 architect가 되거나 reuse하기 어려운 system/embedded programming 쪽이 그나마 할만하겠죠
세라비: 이것도 뭐 한 10년?;
최윤묵: 허… 아키텍트라…
세라비: 그 이후로는 어떻게 될지 소프트웨어 개발 기술도 계속 싸지는 추세라서; 덜덜; network programming만 해도 옛날에야 드물었지만, 요즘에야 꽤나 많으니
세라비: use case 그리려고 팀원 기다리는 중
최윤묵: 그렇군… 뭐 해먹고 사나
세라비: 다른 분야로 바꾸거나; 빠르게 변화할 수 있도록 하거나; =_=;;; 지식 노동자의 경우엔 ‘재미’라는 부분이 크긴 할 듯 한데 호호
최윤묵: 늙으면 그 재미도…
세라비: 어쨌든 software는 complex system이라… 뭔가 breakthrough가 없는 한, 사람이 개입되어야 하는 건 사실일 듯 그 complexity에 관여하는 사람이 되는 게 좋을 듯 덜덜
최윤묵: 그렇지요…
네오위즈에 근무하던, 2004년 정도에 이른바 “비용절감” 바람이 불었었다. 직접적인 원인은 아마도 budget의 감소였을 것이다. 하지만, 그동안 성능이나 비용에 크게 신경써오지 않았던 이유도 있으리라고 본다. “필요하다면, 더 많은 기계를 투입하면 된다”는 정책이기 때문인데, 이는 물론 맞는 말이다. 기본적으로 하드웨어는 싸고, time-to-market은 비싸기 때문이다.
어쨌거나 사실 시스템 프로그래머의 입장에서는 자신의 기술이 유용하게 쓰일 수 있다는 점에서, 그런 바람은 달가운 것이었다. 여러 부문에서의 기술적인 검토가 이루어지고, 또 실제로 여러가지 개선이 이루어지게 되었다.
내가 휴직을 위해 인수인계를 시작할 즈음 궁금해 하던 것 중의 하나는, 왜 apache를 대체하는 안은 고려되지 않는가였다. 그도 그럴 것이 네오위즈의 주 서비스인 세이클럽은 웹 어플리케이션이고, 따라서, 웹서버가 PC 서버들 중 상당 부분을 차지하고 있었기 때문이다. 물론 비용의 가장 커다란 부분은 DB 부문이었을테고, PC 서버들이 성능 개선의 요구에서 낮은 priority를 차지하는 것은 당연해보이긴 했지만 말이다.
당시에 내가 작업중이던 reactor framework을 테스트할 target으로 web server로 하면 어떨까 하는 생각도 있었기 때문에, 이러한 요구에 대해서 좀 더 심각하게 고려하게 되었다. 그러다가 같은 팀의 senior 멤버인 윤묵형과 이 주제에 대한 대화를 하게되었다.
윤묵형과 대화하면서 결론 내린 것은, 어느 웹서버를 사용하느냐는 별로 중요하지 않다는 것이었다. 그 이유는, 웹서버 머신 리소스의 대부분을 차지하는 것은 php (알다시피 세이클럽은 php를 사용한다)의 컴파일 및 실행 비용이고, 웹서버의 종류, 즉 apache와 비용은 상관관계가 상대적으로 작을 것이란 것이었다.
그런데, 최근 IRC 채널을 통해서, lighttpd와 php via fastcgi의 조합이 apache와 mod_php의 조합을 능가한다는 고무적인 벤치마크를 발견하게 되었다.
http://www.lighttpd.net/benchmark/
물론 이 벤치마크만으로, 세이클럽에서도 lighttpd + fastcgi의 조합이 apache + mod_php에 비해서 우세하리라고 단정지을 수는 없다. 이 벤치마크에 사용된 php application과 세이클럽에서 사용하는 php application은 다르기 때문이다. 뿐만 아니라, 세이클럽에서 사용하고 있는 apache의 기능이 lighttpd에서도 충분히 구현이 되어있는지, 또 그 기능이 벤치마크에 미칠 영향이 있을 것인지도 중요한 변수가 될 수 있다.
하지만, 이제 나는 회사라는 특정 비즈니스 요구에 한정되는 틀에서 벗어났기 때문에, apache에 비해 성능이 좋은 웹서버를 만드는 것 자체에는 더이상의 설득력 있는 이유가 필요한 것 같지는 않다. 내가 제일 처음 맡았던 job이 고성능 네트워크 서버를 만드는 것이었고, 그 때문인지, reactor + fsm 기반의 네트워크 서버를 위한 library/framework를 만들어야겠다는 조그만 야망을 계속 품어왔었다. 당장은 시간이 나지않지만, 앞으로 시간이 나는대로 작업해보고 싶다.