2009년 8월 26일 수요일

OpenSPARC & GPL


얼마전 Oracle에 인수된 SUN Microsystems에서 몇년 전부터 OpenSPARC이라는 이름으로 직접 설계하고 회사에서 팔고 있는 Server에 사용되는 SPARC Processor의 Verilog RTL Source Code를 일반인에게 공개하였습니다. 일종의 Open Source 운동을 Hardware(정확하게는 Chip 및 FPGA 설계)에 적용한 것이고, 이것은 어쩌면 용기있는 결정인데, SUN은 이것으로 무엇을 얻었는지 궁금합니다.

Open Source Software, 의미는 다르지만 좀 더 확실한 Free Software(자유 소프트웨어로 번역)는 그것의 사용이 공짜라는 점 때문에 사용자들이 늘어나고 그에 따른 버그 리포트나 개선 사항들이 개발자들에게 feedback 되어 좀더 나은 Software가 만들어지는 선순환이 일어나고 있습니다. Free Software는 보통 BSD/GPL/LGPL 등의 license를 사용합니다. GPL License의 경우 사용자에게 사용하고, 변경하고, distribute할 수 있는 권리를 주는데 단 한가지 제약이 있다면 변경된 code를 distribute할 경우 그것을 받은 다른 사용자도 GPL에 따르는 권리를 모두 가지게 되고 source code도 같이 distribute해야 한다는 점입니다. 이것은 "자유"가 계속 퍼지도록 하는 장치라고 볼 수 있습니다. GPL의 경우 변경된 code의 의미가 open된 source code 뿐 아니라 그 code와 link되는 모든 code를 의미한다.

OpenSPARC은 GPL(General Public License)에 따라 공개가 되었는데, Software와는 달리 chip은 GPL이 곤란합니다.

우선 일반 사용자 입장에서 chip의 내용을 변경하는 것은 상당히 힘이 듭니다. Source Code는 변경할 수 있겠지만 그 변경된 source code로 chip을 만드는 것은 비용이 너무 많이 들어 일반 사용자는 엄두를 낼 수 없습니다. Simulation이나, chip 보다는 비용이 덜 드는 FPGA가 있지만, 일반 사용자가 변경한 code를 다시 재사용하여 chip을 만들 회사는 별로 없습니다. 회사 입장에서도 chip을 만드는데 드는 비용이 상당히 크므로, 검증에 심혈을 기울여야 하는데 일반 사용자가 simulation이나 FPGA에서 돌려 봤다고 해서 그것을 그대로 사용할 회사는 없다고 봐야 합니다. 회사는 비용을 지불하고 다른 회사에서 구매하는 block에 대해서도 소위 silicon proven이라고 하여 실제로 그 block이 chip으로 구현되어 잘 동작되었는지를 매우 따집니다. 따라서 일반 사용자의 feedback을 통한 design 개선이라는 것을 기대하기는 상당히 힘듭니다.

그렇다면 회사가 사용해서 SUN에 feedback을 주는 방향이 있을 수 있는데 이것도 참 곤란합니다. GPL에 따르는 OpenSPARC을 chip에 넣게 되면 해당 chip의 전체 Source Code도 GPL에 따라 공개가 되어야 합니다. 대부분의 회사가 그런 RTL 공개를 꺼리기 때문에 OpenSPARC을 사용할 가능성이 별로 없습니다. 이 부분은 Software의 경우도 어느 정도 마찬가지지만, Software는 GPL Source Code를 별도의 executable로 만들어 그 부분만 source code를 GPL로 공개하고 그것을 C의 system() 함수 등을 이용하여 수행하는 경우에는 전체 source code를 공개할 의무가 없습니다. 이것을 chip에 적용하면 OpenSPARC을 어느 정도 변경하여 별도의 chip으로 만들고 그것을 회사가 만드는 별도의 chip과 board level에서 연결한다는 것인데, 이렇게 system을 구성할 만한 회사는 별로 없다고 봐야 합니다. 그냥 SUN에 비용을 지불하고 개별 chip을 사서 쓰고, 변경된 부분을 회사에서 설계하는 chip의 부분으로 구현하는 편이 유리하기 때문입니다.

Source Code를 GPL로 공개하려고 의도했다 하더라도 곤란한 경우가 있습니다. 소위 IP(Intelectual Property)라고 하여, 다른 회사의 hardware block을 license 받아 사용하는 경우가 많기 때문입니다. Software도 library 형태로 다른 회사에서 파는 software를 GPL source code와 link하는 것이 불가능 한 것과 마찬가지입니다. Hardware는 software에 비해 그럴 가능성이 더 크다는 점이 문제입니다. 더군다나 OpenSPARC과 같은 고성능 CPU를 사용하면서 다른 회사의 IP를 사용하지 않는 chip을 만드는 것은 쉽지 않은 일입니다. Chip 내부의 모든 block을 회사 자체에서 모두 만드는 것은 매우 힘이 듭니다. 굴지의 chip 회사들도 CPU는 ARM에 license하고 3D Graphic은 영국 Imagination사에서 license하고, USB 2.0은 아마도 synopsys나 mentor 등에서 license하고 뭐 다 이런 식입니다..

GPL에 의해 source code를 공개해야 하는데, chip 개발비에 비해서 시장 규모가 작으면 chip의 customer가 chip을 개발하는 것보다는 chip을 구매하는 것이 유리하게 됩니다. 또한 OpenSPARC은 고성능을 추구하므로, 이 두 가지 요소를 고려했을 때, 현재 특정 회사가 OpenSPARC을 이용하여 chip을 구현할 만한 시장은 아마도 Router나 Firewall에 들어가는 Network Processor 정도가 되지 않을까 싶습니다. Network Processor의 시장 규모가 얼마나 되는지 확실히는 모르지만, 일단 consumer 시장은 아니므로 규모(매출이 아니라 chip 갯수면에서)가 상당히 작을 것으로 봅니다. 또한 그 chip에 올라가서 동작하는 software는 굳이 GPL일 필요는 없으므로 software를 판매하여 수익을 올릴 수 있다는 점이 매력적입니다. 또한 chip의 datasheet를 세세히 공개할 필요가 없고, 치사한 방법이지만 RTL source code를 공개할 의무는 있지만 test bench를 open할 이유는 없으므로, 경쟁자나 customer가 source code로 chip을 구현하기 위해서 검증하는데 많은 노력이 들게 만들 수 있습니다.

FPGA쪽을 생각해 보지 않을 수 없습니다. FPGA를 통한 RTL source code의 hardware 구현이 가능하고, FPGA는 적어도 chip의 구현에 비해 훨씬 비용이 적게 듭니다. SUN과 Xilinx과 OpenSPARC용이라고 발표한 FPGA Evaluation Board는 일반 사용자에게는 $1,999이고 학생은 $750이면 살 수 있습니다. 당연히 FPGA는 chip으로 구현했을 때에 비해 동작 속도가 많이 느릴 것으로 예상됩니다. FPGA를 이용하여 System을 만드는 회사의 경우를 생각해 보면, 역시 source code가 공개되므로 이 것을 꺼리게 될 가능성이 매우 큽니다. 우선 FPGA를 이용한 system이 복제 되는 것은 chip을 복제하는 것보다 매우 쉬우므로 더욱 꺼려할 가능성이 있겠습니다. FPGA를 이용한 system을 만들 때 source code 공개를 회피하면서 굳이 OpenSPARC을 사용하고 싶으면 FPGA 하나에 OpenSparc을 모두 넣고(source code 공개), 나머지 FPGA를 이용하여 다른 기능을 구현(source code 공개 불필요)하면 되겠지만, 이 경우도 System 회사에 merit는 별로 없을 것 같습니다. FPGA 자체가 비싸고 FPGA는 chip과 달라 OpenSPARC이 빠른 속도로 동작하지 않을 것이므로, 동일한 일을 수행하는 빠른 chip을 사용하여 구현하는 것이 더 유리합니다.

참고로 GPL이 아니라 LGPL(Lesser GPL)을 이용해서 source code를 공개한 CPU인, leon2와 openrisc 등은 다른 회사가 그것을 사용하여 chip을 구현한 예가 있습니다. LGPL의 경우에는 chip 전체의 source code를 공개할 의무는 없고, 단지 해당 block, 즉 leon2와 openrisc 내부에서 변경된 부분이 있으면 해당 부분의 source code만 open할 의무가 있기 때문입니다. 다른 회사에서 OpenSPARC을 이용하여 chip을 만들기를 원했다면 GPL 보다 LGPL이 훨씬 좋은 선택이었습니다.

당연히 SUN에서도 GPL을 통해서 Source Code를 공개하면서 저와 비슷한 생각을 하고 상황을 예측했을 텐데, SUN이 바랬던 것은 무엇일까요? 추측을 해 봅니다.

- 평판
당연히 우리는 RTL source code도 open하는 회사다라는 평판을 얻을 수 있습니다. 실제로 SUN은 Solaris나 JAVA, openoffice 등의 software의 source code도 open하고 있습니다.

- 학교에서의 feedback
학교는 영리를 추구하지 않으므로 source code 공개 문제가 별로 없습니다.
OpenSPARC을 사용하여 여러 시스템에 적용하고 그것에 대한 결과를 논문으로 발표할 것이므로 학생 및 교수들의 다양한 아이디어를 얻을 수 있는 기회가 될 수 있습니다. 학교는 software를 개발해도 open source일 가능성이 크므로 그것을 활용할 수 있는 가능성도 열려 있습니다. 부수적으로 학교에서 이러한 사용히 많아지면 학생들의 SPARC 시스템에 대한 이해도/친밀도가 높아지는 이익이 있습니다.

- 다른 license(?)를 통한 영리
OpenSPARC Source Code를 GPL이 아닌 다른 license를 통해서 SUN에게 비용을 주고 구매할 수 있다면 매력적입니다. OpenSPARC을 넣은 chip을 만드는 입장에서는 SUN이 공개한 source code로 충분히 test를 할 수 있고, test가 끝나면 source code 공개를 할 필요가 없는 license를 구매하면 됩니다. SUN 입장에서도 다른 회사가 테스트를 모두 끝내고 와서 구매를 하겠다고 하면 나쁘지 않습니다. 더군다나 OpenSPARC을 사용할 회사의 인력이 학교에서 이미 OpenSPARC을 통해 연구나 공부를 사람이라면, SUN 입장에서는 개발지원 문제도 줄어들 가능성이 큽니다. 다만 이런 다른 license 조항을 OpenSPARC 사이트에서 쉽게 찾아 볼 수는 없었으므로 이것이 가능할 지는 확실하지 않고, 이것이 주 목적이 아닐 가능성이 있습니다.

- Software 개발자의 개발에 도움을 주기 위해
가능성은 낮지만 SUN이 판매하고 있는 Server에 OpenSPARC 칩이 사용되므로 OpenSPARC의 내용을 속속들이 알면 Software 개발자가 software를 개발, 최적화하는데 도움이 됩니다. 다만 일반적인 software 개발자가 verilog simulation을 통해서 그것을 확인한다는 것이 거의 불가능합니다. 일반적인 Software 개발자 입장에서는 좋은 개발 tool과 잘 정리된 architecture 문서만 있으면 충분할 것이니까 말이죠.

- 기타
기타 다른 이유들이 있었을 수도 있겠습니다만 언뜻 떠오르지 않습니다. 소스코드가 공개된 후에 계속 버젼업이 이루어지는 것으로 보이는데, 버젼업이 어떤 부분에서 일어나는지를 체크하면 떠오를 지도 모르겠습니다.



OpenSPARC의 내부 구조를 이야기하려는 마음을 먹고 글을 시작했는데 정작 글의 내용은 전혀 다른 방향으로 흘렀습니다. 내부 구조 이야기는 다음에...


Reference:
OpenSPARC

OpenSPARC FPGA Evaluation Board


2009년 8월 7일 금요일

C 언어 프로그래밍...


embedded.com에 아래와 같이 재미 있는 column이 올라왔습니다.

Real men program in C(진정한 사나이는 C 언어로 프로그램을 개발한다?)

Embedded System에서 C 언어의 중요성을 강조하며, 대학에서의 교육과의 괴리를 이야기하고 있습니다.

요즘 각광을 받고 있는 Google의 platform인 Android는 JAVA 기반이라고 합니다. 물론 그 바탕에는 linux가 있고, linux는 assembly와 C로 되어있지만, application은 JAVA로 개발한다고 합니다. 또한 Apple의 iphone은 Object-C 기반으로 개발을 한다고 합니다. 하지만 일반적인 Embedded System에서는 C 언어가 많이 사용되고 중요성을 강조할 만 합니다.

C 언어를 배우는 일은 "C 언어 21일 완성"(책을 읽어 보지는 않았습니다만...)과 같은 책을 읽는다고 끝나는 것은 아닙니다. 모든 프로그래밍 언어가 그렇듯이 문법 자체를 배우는 데는 책이름 처럼 21일이면 끝날 지 모릅니다. 하지만 위의 column에서 언급한 바 대로 C 언어에서 사용하는 volatile keyword 같은 것은 사실 그냥 책을 읽어서는 이해할 수 있는 것이 아닙니다.

언어에서 기본적으로 제공하는 함수, OS 등에서 제공하는 API 등을 배우는 것은 그렇게 간단하지 않습니다. 물론 C 언어가 기본적으로 제공하는 라이브러리, 즉 C Standard Library의 내용은 다른 언어에 비해 그다지 많다고 할 수 없습니다. 하지만 C Standard Library에서 제공하는 것은 파일 입출력, 간단한 문자열 조작, 메모리 관련 뿐으로 그것만으로는 다양한 프로그램을 작성할 수 없습니다. 예를 들어, multi thread 프로그래밍을 하기 위해서는 별도의 library(예를 들어 pthread library)나 OS에서 제공하는 API 등을 익혀야 합니다. 또한 GUI 프로그래밍을 위해서도 마찬가지로 많은 함수의 사용법을 숙지하고 있거나, 아니면 그것을 쉽게 찾아서 사용할 수 있도록 훈련이 필요합니다. -- 그래서 저는 GUI 프로그래밍을 거의 하지 않습니다.

또한 프로그래밍을 하기 위해서는 기본적으로 프로그래밍 tool의 사용법을 숙지해야 합니다. compiler의 사용에 있어서, compiler option의 의미, compiler가 출력하는 에러나 경고 메시지의 해석등은 꼭 익혀야 합니다. debugging을 위해서는 debugger 사용법을 익힐 필요가 있습니다. 단순한 프로그램이야 소위 말해 printf-debugger(printf 함수를 이용하여 코드의 곳곳에 필요한 것을 출력하도록 한 후에 출력 결과를 보고 debugging하는 방법을 말함)을 사용해도 무방하지만 그렇지 않은 경우에는 debugger 사용법은 필수적입니다. 최적화를 통해 프로그램의 run-time을 줄이거나 하게 되면 profiling tool의 사용법을 익혀야 합니다.

PC Windows 프로그래밍을 위해서 배워야 할 것은 비교적 간단할 수도 있습니다. Tool은 Visual C++만 익히면 큰 문제가 없고, MS Windows만 공부하면 끝이라고 볼 수 있습니다. 그리고 인터넷에 돌아다니면 도움을 얻을 수 있는 곳도 상당히 많이 있습니다. 대신 PC 프로그램은 대부분 화려한 GUI와 복잡하거나 특수한 기능을 가지고 있어야 상품화가 가능하고, 호환성에서 문제를 일으키지 않아야 하므로 개발 과정이 까다로울 수 있습니다.

Embedded System은 반면, Tool이 system 마다 다르고 사용하는 OS마다 배워야 하는 API들이 다릅니다. 또한 개발하는 System 마다 하드웨어가 다르기 때문에 chip data sheet을 읽을 수 있는 능력이 있어야 합니다. 인터넷에서 얻은 자료나 소스 코드는 대부분 바로 적용할 수 없고 system에 맞추어 변형을 해야 하는 어려움이 있습니다. 대신 System에 특화된 software를 만들게 되므로 test가 비교적 단순한 편이고, source line count를 복잡도라고 한다면 따진다면 PC 프로그램 보다는 단순한 경우가 많다고 볼 수 있습니다.



2009년 8월 4일 화요일

삼성, 1GHz로 동작하는 Cortex A8 발표

아래와 같은 기사를 통해 삼성이 1GHz로 동작하는 Cortex A8을 발표했습니다.

EETimes
전자신문

기본적으로 1GHz로 동작하는 ARM Core는 이전에도 있었습니다. 우선 ARM11이 TSMC 65nm에서 1.1GHz로 동작한다는 이야기도 있었고, Marvell에서 제공하는 Sheeva, Qualcomm에서 만든 Snapdragon과 같은 processor는 이미 1GHz 이상으로 동작하는 제품이 있습니다. 또한 TI도 OMAP4 시리즈에서는 Cortex A9 MPCore를 1GHz 이상으로 동작시킬 예정이라는 발표도 있었습니다.

기사대로 Cortex A8을 1GHz로 동작시킨 것은 이번이 처음이고, 국내의 기사에는 나오지 않지만 Intrinsity라는 회사의 Fast14라는 dynamic(domino) logic을 이용하여 저전력으로 구현한 것으로 보입니다.(Domino logic이라니 학교에 있을 때 들어본 이후로 처음 들어봅니다.)

삼성은 1GHz Cortex A8을 이용하여 Application Processor 제품군을 강화할 수 있을 것 같습니다. Application Processor라고 하면 일반적인 Smartphone 제품이나 PMP, Navigation Device 등에 사용할 수 있는데, 사실 이 Application Processor 시장의 경쟁이 만만치 않습니다.
- TI의 OMAP 시리즈 : Palm Pre 등에 사용
- Qualcomm의 Snapdragon : HTC에서 smartphone 발매 예정
- nVidia의 Tegra : MS Zune HD에서 사용 예정
- Freescale의 i.MX : $200이하의 netbook용으로 사용될 예정
- Marvell의 Sheeva

뿐만 아니라 Intel이 Atom Core를 이용하여 호시탐탐 이 시장을 노리고 있습니다. Atom Core가 성능 면에서야 여타의 ARM Core에 비해서 월등하겠지만, Intel은 전통적으로 저전력에 중점을 두고 있지 않아서 단위 전력당 성능에서는 ARM Core에 밀리고 있습니다. 그래서 들고 나온 개념이 MID(Mobile Internet Device)였는데, 재미있게도 MID 보다는 netbook 시장이 각광을 받고 있는 형국입니다. 하지만 Intel이 XScale 사업부를 Marvell에 넘긴 이후에 계속 이 시장을 노려보고 있고, Portable Device 보다는 전력에 민감하지 않은 Settop box용 chip을 Atom을 이용해서 출시하고 있습니다. 하지만 당분간은 ARM Core가 강세를 가지고 갈 수 있는 시장임은 틀림이 없습니다.

사실 삼성 LSI 사업부, 특히 ARM core를 이용한 processor를 만드는 부분은 몇년전까지는 경쟁력이 뛰어나다고 할 수 없었습니다. 하지만 s3c2440이 Navigation Device에서 히트를 하며 어느 정도 체면치레를 하다가 Apple ipod 제품군과 iphone 등에 processor를 공급하면서 상당히 선전하고 있는 중입니다. 하지만 Apple은 작년에 PA-Semi라고 하는 반도체 설계회사를 인수했는데, 들리는 소문에 의하면 이 회사에서 ipod/iphone용 processor를 개발한다고 합니다. 또한 ARM ISA license를 받았다는 소문도 들리고 있습니다. 그것이 사실이라면 Apple의 차기 제품군에 삼성이 만든 Processor가 더이상 사용되지 않을 가능성이 큽니다.

사실 삼성이 다른 경쟁자들에 비해 기술 적으로 뛰어난 점은 찾기 힘듭니다. Cortex A8의 속도야 다른 회사들도 곧 따라올 것이고, 이미 Marvell이나 Qualcomm은 더 빠른 속도로 동작하는 ARM Core를 가지고 있습니다. 또한 TI는 전통적으로 뛰어난 DSP를 가지고 있고, nVidia는 3D Graphic 처리 부분에서는 최고를 자랑합니다. 하지만 삼성 Application Processor 내부의 상당 부분은 다른 회사에서 license한 IP들로 채워져 있습니다. 예를 들어 3D Graphic은 Imagination사의 PowerVR SGX라는 녀석을 license했습니다. 물론 이렇게 다른 IP를 license하여 chip을 만드는 것은 요즘은 일반화되어 있고, 특별히 나쁘다고는 할 수 없습니다만, 기술 장벽이 낮다는 점에서 좋다고 할 수는 없습니다.
삼성은 다행히 다른 경쟁자에 비해 가지는 가장 큰 강점은 같은 회사내에 휴대폰 사업부가 있다는 것입니다. 예전의 상태였으면 LSI 사업부가 낸 chip을 휴대폰 사업부가 사용을 하지 않을 가능성이 컸겠지만, 당분간은 i-phone 등에서 입증된 상품성을 휴대폰 사업부가 마다할 이유는 없을 것으로 보입니다. 물론 휴대폰 사업부가 꼭 LSI 사업부의 chip을 사용하리라고 확언할 수는 없습니다. 예를 들어 Omnia HD에는 TI OMAP이 사용되었다고 합니다.

참고로 ARM은 Core를 license하거나 ISA(Instruction Set Architecture)를 license하는데, 현재까지 공식적으로 ARM ISA를 license 받아 별도의 Core를 만드는 회사는 Marvell과 Qualcomm, Faraday 등이 있습니다. ISA를 license 받으면 해당 ISA를 동작할 수 있는 Core를 만들어 팔 수 있는 권리가 생기는 것 같습니다. ISA가 ARM이므로 ARM의 일반적인 개발환경에서 만든 소프트웨어가 큰 수정 없이 동작하게 되고, Core를 구성하는 자유를 가지므로 ARM에서 제공하는 Core 보다는 빠른 속도를 달성하게 됩니다. 삼성과 TI, Freescale 같은 회사는 Core를 license 받은 회사로, ARM에서 개발한 Core를 자신의 FAB에 포팅하여 사용할 수 있는 권리를 가지게 되는 것으로 보입니다.

또 눈여겨 봐야 하는 것은 삼성이 Cortex A8 Core를 다른 fabless 업체가 사용할 수 있게 해줄 것인가 입니다. 삼성은 foundary service도 하므로 다른 fabless 업체가 삼성 FAB에 포팅된 여러 IP를 사용하게 해 주는데, Cortex A8 Core를 그와 같이 open해 줄 것이냐는 점은 체크해야 할 포인트입니다. 또한 전통적으로 삼성은 ARM Core의 license fee가 비교적 싸다(혹은 없다)고 알려져 있는데 Cortex A8 Core도 동일할 지 주목해 봐야 합니다. 그렇게 되면 국외는 모르겠지만 국내의 몇몇 덩치가 있는 Fabless는 그것을 사용하려고 할 가능성이 큽니다. 다만 45nm 공정이므로 NRE가 상당한 부담이 되겠지만 말이죠.


Reference:
1.1GHz ARM11 @ TSMC 65nm

Marvell Sheeva 발표 기사

Qualcomm Snapdragon

Freescale i.MX515

TI OMAP35

Omnia HD