Sep 11, 2007

하이퍼트랜스포트


통합된 고속 I/O 버스의 필요성과 3세대 I/O


이 강좌는 I/O 버스 관련 강좌 중 두번째 강좌입니다. 여기서는 차세대 I/O로 주목받고 있는 하이퍼트랜스포트에 대해서 자세히 다루게 됩니다. I/O 버스 관련 강좌 1회 및 칩셋 오딧세이 강좌를 먼저 읽어보실 것을 권해드립니다.

관련강좌
칩셋 오딧세이 - 새로운 세대의 칩셋들
제 8화. I/O 버스. (1) 과거와 현재의 I/O 버스


표준의 필요성


시스템 내부에서 사용되는 데이터는 점점 거대화되고, 점점 더 큰 데이터 전송 대역폭을 필요로 하고 있다. 그래서 이를 극복하고자 3세대 칩셋부터는 사우스브릿지에 PCI 컨트롤러를 탑재하고 노스브릿지-사우스브릿지 사이에는 IHA(Intel Hub Architecture)나 V.Link, MuTIOL 등의 고속 인터페이스로 연결되었다. 하지만 업계표준이 아닌 상태에서 각사들이 별도로 기술을 만들어나가다보니 중복투자 등이 발생하는 것은 물론이며, 사용자 입장에서는 상당한 혼란이 만들어진다.


그래서 컨소시움 형태를 구성하여 공통적으로 표준제정을 함으로써, 각 업체들이 만드는 하드웨어들간의 호환성을 높이고 투자비용을 줄여서 낮은 가격에 높은 성능과 탁월한 호환성을 보장하기 위한 업계표준의 필요성이 부각되었다.


2세대 I/O의 한계


1. 태생적 한계


2.5세대라고 부를 수 있는 IHA(Intel Hub Architecture)나 V.Link, MuTIOL 등은 그 태생적 한계로 인해서 광범위하게 사용되기 어려웠다. 바로, 각 사에서 독자적으로 만든것이기 때문이다.


인텔의 허브 아키텍쳐는 인텔의 800계열 칩셋의 등장과 함께 허브의 개념을 처음으로 도입한 아키텍쳐로써 그 가치를 높게 평가할 수 있다. 이것은 현재 1GB/s까지의 넓은 대역폭을 갖는 버스로 발전하였다. 이름은 다르지만 동일한 목적과, 동일한 토폴로지를 가지는 것이 바로 VIA의 V.Link이다. V.Link는 VIA의 Apollo Pro266A 칩셋 및 Apollo KT266 칩셋과 함께 등장하였다. 이것은 노스브릿지와 사우스브릿지의 이름을 그대로 유지하고 있으며, 버스의 명칭이 V.Link라는 것만 다를 뿐 기본적으로는 인텔의 IHA와 거의 동일했다. 또한 같은 세대의 버스로써 SiS의 MuTIOL을 들 수 있다. 이것은 이론적으로는 앞서의 IHA 및 V.Link에 비해서 월등한 우위를 가진다. 단일 칩 솔루션으로써 가질 수 있는 특징을 최대한 이용한 노스브릿지/사우스브릿지간의 1GB/s의 대역폭은(당시로써는 획기적인 것이었다.) 최대 6개까지의 PCI 버스마스터링을 지원함으로써 다수의 PCI 버스를 사용하는 환경에서는 대단히 높은 성능을 구현해 줄 수 있었다. 하지만 이것은 이후 분리형 칩셋에서는 내부적 한계로 인해서 전송률이 533MB/s로 제한되어서 다른 버스 방식들과 유사하게 되었다.



이름은 갖가지지만 이들 버스구조가 갖는 특징은 PCI 버스 컨트롤러가 사우스브릿지, 혹은 ICH에 통합되었고, 노스브릿지와 사우스브릿지 사이에는 더욱 빠른 속도의 버스를 둠으로써, PCI 버스에서의 병목현상을 줄였다는 것이다.


문제는 이들이 모두 '독자적으로 개발되었다는' 점에 있다. 기본적으로 IHA, V-Link, MuTIOL 모두 Intel, VIA, SiS이 기존의 노스브릿지-사우스브릿지의 구조에서 한계를 발견하고 이를 해결하기 위해서 각자 개발한 것이다. 그 과정에서 거의 동일한 토폴로지를 가지는 유사한 기능의 칩셋이 만들어졌지만, 이는 각사의 독자적인 기술이었기에 서로 공유한다거나 하는 것은 불가능했다. 결국, 그 이후의 기술도 각자 따로따로 개발해나가야 하는 어려움을 얻었을 뿐만 아니라 호환성에 있어서도 큰 문제를 만들어냈다.


아무리 개발목적과 그 결과가 유사하다고는 하지만 독자적으로 개발된 것이다. 완전히 동일한 호환성을 기대한다는 것은 애초부터 불가능하다. 즉, 만약 이들 버스에 직접 연결되는 무언가를 만들고자 하는 회사가 있다면 벌써부터 상당히 커다란 암초에 맞닥뜨린다. 과연 어느 표준에 맞추어서 만들어야 하는가이다. 제 3세대 I/O는 기술적인 한계 뿐만 아니라 이러한 실제 적용에 있어서의 한계도 극복한다는 목적을 가지고 있다.


2. 병렬연결기술로는 더이상 높은 클럭을 기대할 수 없다.


또한 기존의 병렬연결기술의 연장선상에 있다는 것도 더욱 높은 성능을 구현하는데에 있어서 큰 문제점으로 작용한다. 이들 2.5세대 버스는 모두 32bit/64bit의 버스폭에서 66MHz의 동작클럭과 DDR/QDR 기술을 적용하여 266MB/s나 533, 1,066MB/s의 대역폭을 만들어낸다. 그러나 이러한 대역폭의 구성에 있어서 기본적으로 기존의 병렬전송구조를 그대로 답습하고 있기 때문에 높은 클럭의 구현이 대단히 어렵다. 현재 2.5세대 버스에서 가장 높은 대역폭을 보여주는 것은 인텔의 E7000 계열 칩셋에 탑재되어 있는 IHA이다. 이는 64bit/66MHz PCI의 사용을 위해서 1GB/s의 대역폭을 가지고 있다. 하지만 64bit/66MHz의 PCI 버스가 다수 사용되는 상황에서 1GB/s의 대역폭이라는 것은 실상 큰 의미를 가지지 못한다. 그리고, 서버용 메인보드를 중심으로 점차적으로 확산되어가고 있는 PCI-X를 받아주기에는 사실상 무리가 있다.


앞으로 등장하는 10Gbit 이더넷 등을 생각한다면 현재의 버스구조로써는 미래가 암울하기만 하다.


3. 전력소모가 지나치게 많아진다


혹여, 높은 클럭을 어찌어찌해서 달성한다고 치더라도 전력소모가 천문학적이 되어버린다. 회로상에서 동작클럭이라는 것은 소모전력과 거의 비례한다. 즉, 높은 동작클럭을 가지기 위해서는 높은 전력을 필요로 하게 되는데, 안그래도 점차적으로 많아지는 전력 사용량 때문에 골머리를 앓고있는 시스템들에서 이러한 추세는 그다지 반가운 것이 아니다.


현재 I/O에 사용되는 전압은 3.3V이다. 이러한 '높은' 전압으로 고클럭을 구현하려고 할 경우 전자파간섭이 발생하게 된다던가 하는 것은 차치하고라도 당장 엄청난 전력을 필요로한다.


이상과 같은 이유에 의해서 기존의 버스구조를 완전히 탈피한 3세대 버스의 필요성이 부각되며, 그러한 배경을 바탕으로 탄생한 것이 하이퍼트랜스포트와 3GIO이다.


이번 강좌에서는 하이퍼트랜스포트의 탄생배경와 그 기술적 특징, 하이퍼트랜스포트를 적용함으로써 얻을 수 있는 이득, 그리고 하이퍼트랜스포트의 적용 등에 대해서 이야기해 볼 것이다.




하이퍼트랜스포트 컨소시움



지난 1997년, AMD는 서버 플랫폼 상의 칩간 연결구조에서 보다 높은 대역폭을 구현할 수 있는 새로운 버스 방식의 개발을 시작하였으며, 이것이 바로 하이퍼트랜스포트(HyperTransport)의 태동이다. 이 때, AMD와 함께 하이퍼트랜스포트를 개발한 주요 파트너가 API 네트웍과 선 마이크로시스템이다.


앞서의 강좌들에서도 보았듯이, 서버 플랫폼에서는 PCI-X 등의 높은 대역폭을 요구하는 인터페이스가 사용된다. 또한 앞으로 10Gbit Ethernet이나 인피니밴드 등이 등장할 것이기 때문에 이들을 수용해줄 수 있는 칩간 연결구조가 필요해졌으며, 바로 이러한 요구를 만족시키기 위해서 개발된 것이 하이퍼트랜스포트라 할 수 있다. 기본적으로는 서버 플랫폼에서의 사용을 가정하고 있지만, 서버 뿐만이 아니라 다른 분야, 즉 네트웍이나 정보통신, 임베디드 시스템, 그리고 일반 사용자용 PC에 이르기까지 높은 대역폭을 필요로 하는 분야가 점차 다양화되고 있기 때문에 하이퍼트랜스포트의 잠재적 사용영역 역시 이러한 분야로 확산되고 있다. 그래서 그러한 다양한 분야의 업체들이 하이퍼트랜스포트에 관심을 가지게 되었고, 2001년 2월 14일에(발렌타인데이군요. 외우기는 쉽습니다. -_-) 하이퍼트랜스포트의 기술이 공식적으로 발표될 때, 선과 시스코, 브로드컴, HP, ALi, NVIDIA가 이 기술의 사용을 약속하였다.







현 하이퍼트랜스포트 컨소시움 회장인 Gabriele Sartori


이후 하이퍼트랜스포트가 다양한 영역으로 확산되게 되면, 뛰어난 성능의 고집적, 저가격의 디바이스를 제조할 수 있게 된다는 점을 인지한 각 분야의 다양한 업계가 바로 공동으로 하이퍼트랜스포트의 개발과 이와 관련된 기술을 개발하고 홍보할 수 있는 조직을 만들기 위해서 협력하였고, 그 결과로써 2001년 7월 23일에 하이퍼트랜스포트 컨소시움이 탄생하였다. 초기의 하이퍼트랜스포트 컨소시움에는 AMD, API Networks, Apple, Cisco, NVIDIA, PMC-Sierra, Sun, Transmeta의 8개사가 참여하였고, 이후 여기에 SGI와 브로드컴이 참여하여서 총 10개사가 프로모터이자 실행위원회 구성원으로 참여하고 있다. 이 중에서 AMD의 컴퓨터 제품 그룹(CPG) 기술 전수 담당이사인 가브리엘 사토리가 현재 하이퍼트랜스포트 컨소시움의 회장직을 맡고 있다.


하이퍼트랜스포트 컨소시움의 구성원은 3등급으로 구분된다. 가장 높은 등급이 프로모터(Promoter)이며, 프로모터에 소속된 회사는 위의 10개사이다. 이들은 하이퍼트랜스포트 컨소시움의 사업을 관장하며, 실행위원회에서 한표씩의 투표권을 행사할 수 있다. 두번째 등급은 컨트리뷰터(Contributor)인데, 컨트리뷰터 회원사들은 하이퍼트랜스포트와 관련된 기술을 개발하고 하이퍼트랜스포트의 마케팅 이벤트 및 각종 문서에 각 회사의 이름이 등록된다. 또한 워킹그룹에서 한표씩의 투표권을 가질 수도 있다. 가장 간단한 형태의 회원사 등급은 어답터(Adopter)이다. 어답터 회원사는 투표권 등을 행사할 수는 없으나 하이퍼트랜스포트 I/O 링크에 대한 지적재산권을 무료로 라이센스 받아서 사용할 수 있다.


2002년 8월 현재, 하이퍼트랜스포트 컨소시움에는 51개사가 가입되어 있으며 그 목록은 다음과 같다.



널리 알려져 있는 웬만한 회사들은 거의 다 포함되어 있는 것을 알 수 있다. 특히 칩셋 제조사들은 인텔을 제외하면 모두 참여하고 있으며, 시스코 및 브로드컴 등으로 대표되는 네트웍/통신장비 제조사나 QLogic, LSI Logic, 마벨 등으로 대표되는 스토리지(SCSI 등) 컨트롤러 제품군 제조사들이 눈에 띈다. 웍스테이션 및 서버 제품군을 제조하는 HP 및 SGI, Sun, 도시바 등도 참여하고 있다. 트랜스메타 등은 임베디드 시스템과 관련하여 하이퍼트랜스포트 기술을 적용시키려는 것으로 해석할 수 있다.


흥미로운 것은 인텔이 하이퍼트랜스포트 컨소시움에서 빠져 있다는 것이다. 인텔은 프로세서, 칩셋, 네트웍/통신장비, 서버 등 하이퍼트랜스포트가 적용될 수 있는 모든 영역의 제품군을 모두 제조하고 있는 거대 회사이다. 즉, 하이퍼트랜스포트의 적용으로써 가장 큰 수혜를 얻을 수 있는 곳이라고도 할 수 있다. 그럼에도 불구하고 인텔은 아직까지 하이퍼트랜스포트 컨소시움에 참여하지 않고 있다.


인텔이 하이퍼트랜스포트 컨소시움에 참여하지 않는 것은 자존심 때문일 가능성이 크다.(지금까지 인텔은 타사에서 만든 규격을 사용하는 것을 상당히 꺼려왔다. PCI와 관련된 규격의 제정에는 인텔이 앞장서고 있으며, AGP는 애초에 인텔에서 만든 것이다. 그리고 그 외의 갖가지 규격의 제정에도 인텔이 앞장서고 있다. 단, 하이퍼트랜스포트는 AMD가 제창하고 중심이 되어있다.)


하이퍼트랜스포트는 기본적으로 AMD의 프로세서를 위해서 만들어졌다. AMD에서 앞으로 출시할 해머 프로세서가 기본적으로 하이퍼트랜스포트 컨트롤러를 내장하고 있으며, 또한 멀티프로세서 구성에서 프로세서간의 데이터 전송에도 하이퍼트랜스포트를 사용하는 것만 보아도 알 수 있다. 상황이 이렇다 보니 고유의 AGTL+버스를 프로세서에 사용하고, MCH 등에는 자사의 IHA에 기반한 고속 버스를 사용하고 있는 인텔로써는 하이퍼트랜스포트 컨소시움에 가입한다는 것이 AMD에 한수 접어주고 들어가는 격이 되어버린다. 프로세서 왕국의 왕좌 자리를 단 한번도 놓친적이 없는 '절대적 지배자' 인텔의 뻣뻣한 자존심으로써는 대단히 어려운 것이라는 것을 생각해볼 수 있을 것이다. 물론 인텔 역시 하이퍼트랜스포트를 적용함으로써 얻을 수 있는 이득에 대해서 모르는 바는 아닐테지만, 그러한 이득보다도 경쟁사인 AMD 앞에서 수그리고 들어간다는 것이 더욱 큰 상처가 된다고 생각하는 것일지도 모르겠다. 쪼잔하긴...


하이퍼트랜스포트 컨소시움에 관련한 자세한 내용을 알고자 하는 독자는 다음의 관련사이트를 참조하시기 바란다.


관련 URL





하이퍼트랜스포트의 목적과 잇점


하이퍼트랜스포트 기술은 아래와 같은 목적을 달성하기 위해서 만들어졌다. 기존적으로 시스템 내부에서의 I/O 연결을 위함이었는데, 이는 다음과 같이 분류될 수 있다..


1. 시스템 성능의 향상


앞서도 언급했듯이, 2.5세대 버스는 대역폭의 한계에 도달해있다. 하이퍼트랜스포트의 가장 기본적인 목적은 이러한 한계를 돌파하는 것이다. 대역폭을 늘리는 것은 병목현상의 해결과도 이어진다. 현재, 병목현상을 일으키고 있는 곳은 프로세서 버스와 PCI 버스들이다. 이러한 부분에 고속의 하이퍼트랜스포트가 적용되면서 병목현상을 제거할 수 있다.



시스템 내부에는 다양한 버스가 존재한다. 프로세서 버스부터 시작해서 2.5세대 버스들(IHA나 V.Link, MuTIOL 등), PCI도 있으며, 메모리 버스, AGP까지 다종다양한 버스가 존재한다. 이러한 버스 중 중요한 것들을 하나로 통합한다면, 결국 지연시간의 감소라는 이득을 얻게 된다. 각 버스를 이어주는 브릿지의 숫자가 감소하기 때문이다. 또한, 소비전력 역시 줄어들게 된다.


2. 시스템 디자인의 단순화


앞서의 '버스의 통일'에서 이어지는 부분이다. 버스의 종류가 통합됨으로써, 시스템에는 다양한 버스를 위한 브릿지가 존재할 필요가 없고, 통일된 버스구조 안에서는 동일한 프로토콜을 사용하기 때문에 시스템 디자인이 단순해진다.


브릿지의 감소와 프로토콜의 통일로 인해서 각 칩의 패키지 크기도 작아지며, 보다 적은 핀만을 사용할 수 있게 된다. 이것은 제조비용의 절감으로 이어진다.


3. 다양한 대역폭에의 대응


시스템 내부의 다양한 버스를 하나로 통일하기 위해서는, 그리고 앞으로 보다 많은 어플리케이션으로의 대응을 위해서라면 다양한 대역폭을 구성할 수 있어야한다. 그래서 다양한 종류의 브릿지를 통해서 다양한 대역폭을 구현할 수 있으며, 상/하위호환성을 유지할 수 있도록 디자인되었다. 다음은 하이퍼트랜스포트가 어디까지 대응할 수 있는가를 보여준다.



프로세서 속도, I/O 버스의 속도와 하이퍼트랜스포트
(LDT : 초기에는 LDT(Lightspeed Data Transfer)라고 불렸다.)의 관계


4. 기존 시스템과의 호환성 유지


기존의 버스구조와 완전한 호환성을 유지한다는 것은 새로이 만들어지는 버스 아키텍쳐에서 가장 우선적으로 요구되는 부분이다. 만약 기존의 버스구조와의 호환성을 유지할 수 없다면 시장에 부드럽게 적용될 수 없기 때문이다. 또한, 이러한 호환성을 기반으로 기존의 운영체제 및 드라이버에도 그대로 적용할 수 있어야한다.(드라이버는 약간의 수정이 필요할수도 있겠지만)


5. 새로운 시스템 네트웍 아키텍쳐로의 확장을 보장


앞으로 등장할 시스템 네트웍 아키텍쳐로 무리없이 확장할 수 있어야한다. 시스템 네트웍 아키텍쳐는 향후 시스템간의 네트웍 구성을 통해서 SAN 등을 구성하기 위한 요소이다.


6. 다양한 멀티프로세싱 시스템으로의 대응


하이퍼트랜스포트는 기본적으로 프로세서 버스까지를 포괄한다. 동시에, 프로세서간의 버스 역시 하이퍼트랜스포트로 구성하여 다수의 프로세서가 사용되는 멀티프로세서 환경에서 프로세서간의 네트웍이 구성될 수 있다.



이러한 구성에서는 프로세서의 캐시 동시성(cache coherency)을 구현하는데에 큰 잇점을 제공한다.


요약


하이퍼트랜스포트는 기존의 칩간 버스구조를 대체하면서, 단지 이를 대체하는 것을 넘어서서 시스템 내부의 칩간 연결구조를 통일하여 전체적인 구성과 프로토콜을 단순화하고, 이를 통해서 시스템 디자인의 간소화와 성능향상, 그리고 제조비용의 절감이라는 세가지 목표를 모두 달성하는 것을 노리고 있다.


기본적인 목적은 병목현상의 제거라고는 하지만, 상세히 살펴보면 해머 아키텍쳐를 바탕으로 이를 하이퍼트랜스포트와 연계하여 인텔에 비해서 우월한 아키텍쳐와 업계의 지지기반을 확보하고 보다 높은 성능을 추구하며, 동시에 서버 시장에서의 발판을 마련한다는 것이 가장 큰 목적이라고 봐야 할 것이다.


이제 다음 페이지에서는 이러한 목적을 달성하기 위한 기술적 특징에 대해서 알아보고 그에 이어서 하이퍼트랜스포트가 어떻게 사용될 것인지에 대해서 이야기할 것이다.

I/O 버스. 3세대 I/O 버스

I/O의 미래 - 3세대 I/O 버스


2세대까지의 I/O 버스들이 인텔의 주도 하에 만들어져왔다면, 3세대 I/O 버스는 인텔이 주도해온 PCI의 연장선상에 존재하는 PCI Express, 즉 3GIO(3rd Generation I/O, 말 그대로 3세대 I/O)와 AMD가 주도하는 하이퍼트랜스포트로 진영이 양분되어 있다.




현재까지는 하이퍼트랜스포트 쪽이 기술적인 면에서나 업체들의 지원 면에서 약간의 우위를 보이고 있다. 하이퍼트랜스포트의 경우 이미 이를 적용하기 위한 하이퍼트랜스포트 컨소시움에 50개 이상의 업체가 참여한 상태이다.


관련기사 : 하이퍼트랜스포트 컨소시움 가입사 50개사 돌파


이들 인터페이스들을 보면 새로운 I/O를 통해서 시스템의 중추를 구성하겠다는 데에서 공통점을 찾을 수 있다. 3GIO와 하이퍼트랜스포트가 내세우는 개념을 보면 다음과 같다.



3GIO의 다이어그램 예시



하이퍼트랜스포트의 다이어그램 예시


또한, 고속의 시리얼 링크를 사용하여 시스템 내부의 각 기기를 연결하며, 단방향 데이터 버스를 2개 사용해서 양방향으로의 동시 데이터 전송을 가능하게 한다는 점, 지금까지 시스템 내부에서 사용되어 온 다양한 버스방식들을 하나로 통일하고 PCI 등의 외부 확장버스는 브릿지를 사용해서 이들 버스에 연계시킨다는 점 등을 보면 양쪽이 의도하고 있는 바는 거의 동일하다고 할 수 있다.


다만, 3GIO가 프로세서 버스에서만은 현재의 AGTL+ 버스구조를 그대로 유지하는 반면, AMD의 경우 프로세서와 노스브릿지 뿐만 아니라, 프로세서 사이사이도 하이퍼트랜스포트로 연결하여 다중프로세서 구성에서 프로세서끼리의 하이퍼트랜스포트 네트웍을 구성한다는 점 등의 차이점이 있다.


이들은 3세대 I/O의 주도권 시장을 두고 경쟁을 벌이게 되는데, 지금까지 I/O 기술을 주도해 온 인텔이 하이퍼트랜스포트를 앞세운 AMD에게 밀릴 것인가 그렇지 않을 것인가에 큰 관심이 쏠리고 있다. 하이퍼트랜스포트와 3GIO에 대해서는 앞으로 두번의 강좌를 통해서 각각의 상세한 내용에 대해서 더 자세히 알아볼 것이다.


I/O 버스. 2세대 I/O 버스

2세대 I/O 버스 - VESA, PCI, AGP
1. VESA Local Bus
최초로 등장한 로컬버스인 VESA 로컬버스, 줄여서 VL 버스라고 부르는 이 I/O 버스 방식은 기존의 ISA와 호환성을 유지하면서 32bit의 버스폭을 가지도록 디자인되었다.


VL 버스의 모습. 위쪽은 일반적인 ISA 슬롯이며, 아래쪽은 뒤에 VL 버스 확장슬롯이 같이 있는 모습이다


기본적으로는 일반적인 ISA 슬롯의 뒤쪽에 VL 버스 확장 슬롯이 붙어있는 형태를 가진다. 앞쪽의 ISA 버스에서는 전원만을 끌어다 사용하며, 실질적인 신호선은 모두 뒤쪽의 VL 버스쪽에서 담당한다.
컬러 화면과 GUI 등이 본격적으로 사용되면서 점차 발전해온 그래픽 성능은 1991년도에 들어서 시스템에서 상당히 심각한 병목현상을 일으키는 주범이 되어버린다. 당시 이 문제로 인해서 골머리를 앓던 NEC는 자사의 하이엔드 디플레이 제품군과 이를 사용하는 PC 시스템에서의 성능을 향상시키기 위해서 고성능의 I/O 버스의 필요성을 절감하고 새로운 I/O의 개발에 나선다.

관련 홈페이지 : VESA (http://www.vesa.org)


이에 의해서 NEC에 의해서 최초로 설립되었던 VESA(Video Electronics Standards Association : 비디오 전자규격 표준협회)에서는 1992년에 VESA 로컬 버스를 선보인다. VESA는 EISA 위원회와 비슷한 성격을 띄는 비영리 기구로써, VESA 로컬버스의 표준을 제안하고 이를 적용시키는데에 큰 역할을 하였다.
개발 목적에서 드러나듯, VL 버스는 기본적으로 비디오 하드웨어, 즉 그래픽 카드에 사용되기 위해서 만들어졌다. 하지만, 당시의 그래픽 카드 뿐만 아니라 하드디스크 드라이브 역시도 고속의 I/O를 필요로 했기 때문에 VL 버스는 그래픽카드 및 I/O 카드 등에 적용되었다.
VL 버스는 486DX를 위해서 디자인되었으며, 기본적으로 프로세서 버스와 동일한 클럭으로 동작하며, 프로세서의 외부 버스와 동일한 버스폭을 갖는다. 즉, 25/33MHz로 동작하고 32bit의 버스폭을 갖는다. 이러한 특징 때문에 메인보드에 이를 적용시키기 위해서 별도의 칩셋이 필요하지 않았다. 즉, VL 버스를 메인보드에 적용시키는 데에는 별도의 비용이 거의 들어가지 않았으며, 이러한 특징 때문에 486 메인보드는 거의 다 VL 버스를 탑재하였다. 또한 33MHz로 동작할 때 최대 133MB/s의 높은 데이터 전송률을 보일 수 있어서 그래픽카드에서의 병목현상 역시 상당부분 해소해 주었다.

1


하지만, 불행히도 VL 버스는 그 형태부터가 장수할 수 있는 형태가 아니었다. 우선, ISA 슬롯의 뒤쪽에 붙어있는 형태이기 때문에 ISA와 공존해야만 했으며, 전체적인 슬롯의 길이 때문에 확장 카드의 크기 역시 상당히 커졌다. 이는 메인보드 상에서 지나치게 많은 공간을 차지해서 다른 하드웨어들이 장착될 수 있는 공간을 줄이는 문제를 만들어냈다.
호환성에서의 문제 역시 상당히 컸다. 우선, CPU의 FSB와 동일하게 동작한다는 것이 발목을 잡았다. 486 프로세서는 초기에 25MHz, 33MHz 등으로 동작하였고, 이후 DX2가 등장하면서 프로세서 클럭이 지속적으로 높아졌다. 문제는 486 호환 프로세서가 AMD 및 Cyrix 등에서 출시되기 시작하면서 대단히 다양한 FSB가 사용되기 시작한 것이다. 그 결과 33MHz를 넘어서는 40MHz, 심지어 50MHz 등의 FSB도 등장했다. 상황이 이렇다 보니 VL 버스 상에서의 각 확장카드의 동작이 안정적이 될 수가 없었다. 이론적으로는 66MHz까지 동작할 수 있었지만, 캐패시턴스라던가 하는 각종 전기적인 문제로 인해서 실제 동작 클럭은 50MHz도 버거운 상황이었고, 그 결과 호환성의 문제가 나타났다.
프로세서 버스에 직접 연결되어 있다는 것도 문제였다. 486과 펜티엄의 프로세서 버스는 분명히 다르며, 그래서 VESA는 이후 펜티엄 등에는 적용될 수 없었다. (물론 적용된 것도 있기는 하지만 일반적인 방법이 아니었고 성능도 기대 이하였다.)
이러저러한 문제로 인해서 VL 버스는 펜티엄 등장 이후 시장에서 급속히 사라져가고, PCI가 그 자리를 차지하게 된다.

2. PCI
1992년, 인텔은 VESA와 비슷한 목적을 가지는 기구를 만든다. 이 기구는 ISA와 EISA의 한계를 넘어서는 새로운 I/O를 만들고자 하는 것이 목적이었으며, 그것이 바로 PCI(Peripheral Connect Interface)이다. PCI를 만들기 위한 기구는 PCI SIG(PCI Special Interest Group)이라고 명명되었다.

관련 홈페이지 : PCI SIG (http://www.pcisig.org)



PCI의 32bit/64bit 버전이 가지는 사양은 1992년에 완성되었지만, 이에 대한 커넥터와 확장 카드 등의 규격은 1993년에 완성된다. 그리고 그 이후 수년에 한번씩 지속적으로 개량되어 왔는데, 자세한 내용은 다음과 같다.
이러한 구조가 가지는 잇점은 바로 프로세서 버스와 로컬 버스의 분리이다. PCI 버스는 프로세서 버스와 직접 이어져 있는 것이 아니라 브릿지를 사이에 끼운 형태로 이어져 있다. 그래서 프로세서 버스는 프로세서 버스대로 높은 클럭을 사용할 수 있으며, PCI는 주변기기들의 호환을 위해서 일정한 클럭으로 남아있을 수 있게 되었다.
PCI의 도입과 함께 그간의 PCI 구조는 새롭게 변화한다. 앞서도 설명했듯, PCI에서 현대적인 노스브릿지-사우스브릿지의 토폴로지가 확립되었고, '브릿지'라는 개념이 도입되기 시작하였다.


PCI 버스의 토폴로지


이러한 방법의 사용으로 높은 호환성과 범용성을 유지하면서 메모리 및 프로세서의 클럭을 높은 수준으로 끌어올리는 것이 가능해졌다.
32bit PCI의 형태는 다음과 같다.(64bit PCI의 형태는 뒤에서 다시 다룰 것이다.)


PCI 슬롯의 모습
맨 위쪽이 16bit ISA, 가운데가 32bit/33MHz(5V) PCI, 아래쪽이 32bit/66MHz(3.3V) PCI


흔히 사용되는 PCI 슬롯은 32bit의 버스 폭을 가진다. 이들 모델 중에서도 동작전압이 3.3V 인 것이 있고, 5V인 것이 있는데, 3.3V의 동작전압을 가지는 PCI는 보다 높은 클럭인 66MHz로 동작한다. 이들의 구분은 슬롯에 있는 키의 위치로 확인할 수 있다. 막혀 있는 부분이 앞쪽(브라켓 쪽)에 있다면 3.3V 동작이며, 뒤쪽(케이스의 앞쪽)에 있다면 5V의 동작이다. 아래의 사진은 KT133A 칩셋을 사용한 메인보드로써, 가장 일반적인 레이아웃을 보여주는 보드 중의 하나이다. 5V 동작의 32bit/33MHz PCI 슬롯이 있는 것을 볼 수 있다.



사진에서 흰색의 슬롯들이 PCI 슬롯이다.
PCI 방식은 가장 대중화된, 가장 일반적인 I/O가 되었다.


PCI 버스의 전송속도를 계산해보자.


32bit × 33MHz = 1,056Mbit/s = 133MB/s


133MB/s의 데이터 전송 대역폭을 갖는다. 또한, 66MHz 동작에서는 이 두배인 266MB/s의 대역폭을 갖는다. 또한, PCI는 개발 초기부터 PnP를 지향해왔다. 그래서 높은 데이터 전송 대역폭과 플러그 앤 플레이의 편리함 등을 모두 갖추고 있어서 현재는 가장 널리 쓰이는 I/O 버스가 되었다.


3. AGP(Accelerated Graphics Port)


PCI가 133MB/s의 높은 전송속도를 가지고 있다고는 하지만, 그러한 PCI에도 분명한 단점이 존재한다. 바로, 다수의 PCI 기기가 하나의 PCI 버스를 공유하고 있다는 것이다. 위의 일러스트에서도 쉽게 발견할 수 있는 문제점이기도 하다.



PCI 버스는 다수의 기기들에 의해서 공유되어 있다.


그런데, LAN이나 스토리지 등의 디바이스는 '항상' 사용되는 것이 아닌 반면, 그래픽 카드라는 것은 항상 사용되는 것이다. 또한, 3D 그래픽 카드의 등장으로 그래픽 카드가 필요로 하는 데이터 전송 대역폭은 지속적으로 향상되었다. 그 결과, 그래픽카드만으로도 PCI가 제공하는 성능이 부족한 상황에 이르렀고, 그래픽카드와 PCI 버스를 공유해야 하는 다른 주변기기들의 성능저하로 이어졌다.


이러한 문제를 해결하기 위해서 인텔은 PCI와 유사하지만, PCI 버스와 물리적/전기적/논리적으로 완전히 독립되어 있고 보다 높은 전송속도를 가질 수 있는 인터페이스를 개발했는데, 그것이 바로 AGP이다. PCI 버스가 다양한 종류의 하드웨어를 위해서 하나의 버스 위에 여러개의 커넥터를 허용한 것에 반하여, AGP는 오로지 그래픽 카드만을 위한 높은 성능을 구현하기 위해서 1:1 연결구조, 즉 P2P(Point to Point)의 구조를 갖는다는 것이 PCI와의 가장 큰 차이점이다.



위 일러스트에서 보다시피, AGP는 PCI와는 별도로, 노스브릿지에 직접 연결된다. 또한 2개 이상의 디바이스를 허용하지 않고 하나의 시스템에는 1개의 AGP 버스만이 존재한다. 그래서 AGP는 버스를 공유하지 않고 독점적으로 사용하게 되며, 높은 성능을 구현할 수 있다.


이는 왜 그래픽카드가 보다 고속의 64bit/66MHz 등의 PCI를 사용하지 않고 AGP로 이행했는가를 의미한다. PCI는 아무리 64bit/66MHz라 하더라도 버스를 2~3개의 PCI 기기가 공유하며, 대단히 높은 대역폭을 필요로 하는 그래픽카드가 이를 사용하게 되면 주변기기의 성능저하에도 영향을 미치게 된다. 하지만, AGP는 그러한 문제점이 발생하지 않는다.


AGP 규격은 1996년 7월 인텔에 의해서 발표된 이후 지금까지 수차례의 변경이 가해졌다. 자세한 내용은 다음과 같다.



AGP 1X는 PCI와 마찬가지로 32bit의 버스를 가지지만, 동작클럭은 66MHz로 PCI의 2배이다. 그래서 266MB/s의 데이터 전송 대역폭을 가진다. AGP 2X에서는 DDR 기술이 적용되어 있다. 즉, 클럭 신호의 라이징 엣지(rising edge)와 폴링 엣지(falling edge)에서 모두 데이터 전송이 일어나기 때문에 단일 클럭에서 2회의 데이터 전송이 가능해진다.



AGP 4X는 내부적으로 사이드밴드(sideband)라는 클럭이 적용되어 있으며, 그래서 QDR(Quad Data Rate)이 적용되어 있다. 즉, 한번의 클럭에 4회의 데이터 전송이 가능하기 때문에 AGP 1X에 비해서 4배, 즉 1.06GB/s의 데이터 전송 대역폭을 갖는다.


 


위 일리스트는 32bit/33MHz PCI 슬롯과 AGP 슬롯을 비교한 것이다. AGP 슬롯은 3가지가 있다. 이러한 구분은 동작전압에 따른다. 초기에 발표된 AGP 1X의 경우, 그래픽카드는 3.3V의 전압만을 사용했다. 이들 그래픽카드가 사용하는 AGP 슬롯은 위 사진의 위에서 두번째에 있는 슬롯이다.


그리고 얼마 지나지 않아 4X AGP가 발표되었고, 그때부터는 유니버설 AGP 슬롯이 사용되었다. 유니버설 AGP 슬롯은 중간에 막혀있는 부분이 없어서 3.3V를 사용하는 그래픽카드나 1.5V를 사용하는 그래픽카드를 모두 사용할 수 있다.


그 이후, 보드의 설계 단순화와 보다 높은 클럭을 구현하기 위해서 그래픽 카드에서의 사용전압이 1.5V로 제한되며, 이 때 나오게 된 확장슬롯이 바로 가장 아래에 있는 1.5V 전용 2X/4X AGP 슬롯이다. 이것은 현재 인텔의 845/850 등에 적용되어 있다. 이들 칩셋을 사용한 메인보드는 3.3V용 그래픽카드를 더이상 사용할 수 없기 때문에 주의할 필요가 있다.



3.3V AGP를 사용하는 3D Labs의 GVX1 Pro.
1.5V 전용 AGP 슬롯을 사용하는 845/850 칩셋 기반 보드에는 장착이 불가능하다.
Copyright(c) by 3Dlabs


그 다음에 등장하는 것이 AGP Pro 슬롯이다. AGP Pro 슬롯은 전송속도의 향상이 아닌, 전원공급의 강화를 위해서 만들어진 규격이다. 일반적으로 AGP 슬롯을 통해서는 25W 정도의 전력을 공급하는 것이 가능하다. 그러나 그래픽 카드의 성능이 지속적으로 발전하면서 그래픽 코어 및 메모리의 클럭이 향상되었고, 이는 소모전력의 증가로 이어졌다.


그래서 AGP 슬롯만으로는 그래픽카드가 필요로 하는 전력을 공급해주기가 어려워지기 시작했고, 이를 해결하기 위해서 캐노푸스 등의 그래픽카드 제조사에서는 그래픽카드에 전원 커넥터를 달아서 외부로부터 전력을 끌어오는 방법을 택하기도 했다. 하지만, 이러한 방법은 불편하기도 할 뿐더러 웍스테이션용 그래픽카드들이 필요로 하는 높은 전력을 공급해 주기 위한 보다 근본적인 방법이 필요했다. 그래서 등장한 것이 AGP Pro이다. AGP Pro는 기존의 AGP 슬롯의 앞뒤로 약간씩 긴 모습을 가진다.



맨 위는 유니버설 AGP 슬롯, 가운데는 유니버설 AGP Pro 슬롯, 가장 아래쪽은 1.5V AGP Pro 슬롯


본래의 AGP에 비해서 앞쪽으로 20개의 핀이 추가되어서 이는 3.3V의 전력을 추가로 공급한다. 뒤쪽으로 추가된 28개의 핀은 12V의 전원을 공급해준다. 그래서 총계 110W까지의 전력을 공급할 수 있기 때문에 높은 전력을 소모하는 웍스테이션용 그래픽카드 등에서 외부전원을 끌어오지 않고 사용할 수 있다.


AGP Pro는 단지 슬롯만 길어진 것은 아니다. 보다 많은 열을 발생시키는 칩셋들의 효율적 방열을 위해서 높은 히트싱크를 사용할 수 있도록 하고 있는데, 그래서 AGP 슬롯 바로 옆의 슬롯 1개 혹은 2개를 같이 점유한다. 아래의 사진은 3D Labs의 전문가용 그래픽카드 Wildcat 6110의 사진이다. AGP Pro 슬롯과 2개의 위치를 점유하는 브라켓을 볼 수 있다.



3D Labs사의 Wildcat 6110 그래픽카드
Copyright(c) by 3Dlabs



2세대 I/O 버스의 진화 - 64bit PCI, PCI-X, AGP 8X

1. 64bit PCI


64bit PCI는 PCI에서 버스 폭이 64bit로 늘어난 것이다. 그래서 데이터 전송 대역폭 역시 그만큼 늘어나서 33MHz의 64bit PCI는 266MB/s를, 66MHz의 64bit PCI는 533MB/s의 데이터 전송 대역폭을 갖는다.



64bit PCI 슬롯의 모습. 맨 위쪽은 비교를 위한 32bit/33MHz PCI
가운데는 64bit/33MHz PCI, 맨 아래가 64bit/66MHz PCI


대개의 64bit PCI 카드는 66MHz/33MHz에서 모두 동작할 수 있도록 만들어져 있으나 일부 제품 중 33MHz로만 동작할 수 있게 만든것이 있다. 특히 SCSI 컨트롤러 등의 경우 컨트롤러 칩 자체가 66MHz 및 33MHz 동작용으로 구분되서 만들어지는 것이 있기 때문에 주의할 필요가 있다.(괴롭게도 필자가 33MHz로만 동작하는 64bit PCI 슬롯 방식의 SCSI 컨트롤러를 쓰고있다. -_-;;; 그래서 AMD760MPX 보드로 바꾸지를 못하고 있다는 슬픈 전설이...) 그래서 서버용 메인보드 중에서는 33MHz/64bit PCI 슬롯과 66MHz/64bit PCI 슬롯을 모두 갖추고 있는 제품이 존재한다.



Supermicro사의 펜티엄 III 듀얼보드, P3TDE6
Copyright(c) by
Supermicro


64bit PCI는 일반적으로 확장카드와 확장슬롯 모두 하위호환성을 유지하게 만들어진다. 다음의 사진을 보자.



넷기어사의 기가비트 이더넷 컨트롤러 GA620
Copyright(c) by
Netgear


이 제품은 33MHz 및 66MHz 환경에서 모두 사용할 수 있도록 만들어져 있다. 즉, PCI 슬롯 부분에서 홈이 파여 있는 부분이 앞뒤에 모두 있음을 알 수 있다. 그리고, 대개 이러한 제품의 경우 64bit PCI가 아닌, 일반적인 32bit PCI 슬롯에서도 정상적으로 동작한다. 32bit PCI 슬롯에 꼽으면 뒤쪽 부분이 남는데, 이 때 이 부분은 동작하지 않게 된다. 그래서 사용자는 기존의 환경에서 큰 변동이 없이 보다 고급 하드웨어로의 이행을 보다 쉽게 할 수 있다.


그러면, 64bit PCI의 시스템상의 토폴로지는 어떻게 구성될까? 간단히 생각할 수 있는 것은 64bit PCI가 가지는 높은 데이터 전송 대역폭으로 인해서 별도의 브릿지를 사용할 것이라는 점이다.



64bit PCI를 사용하는 경우에는 일반적으로 64bit PCI 컨트롤러를 별도로 장착한다.(예외적으로 칩셋 자체가 64bit PCI 컨트롤러를 내장한 AMD760 칩셋의 경우는 별도의 컨트롤러 칩이 없다) 또한, 이러한 구조 하에서 최대한의 성능을 확보하기 위해 하나의 64bit PCI 컨트롤러에는 3~4개 이상의 64bit PCI가 연결되는 경우가 거의 없으며, 대개의 경우 이러한 연결도 PCI 브릿지와 64bit PCI 버스 사이에는 P2P(point to point)로 구성된다. 물론, 64bit PCI 컨트롤러와 노스브릿지 사이에는 1GB/s 또는 2GB/s의 대역폭을 가지는 고속 버스로 구성되어 있어서 64bit PCI 디바이스의 성능을 최대한 발휘하도록 만들어진다.


그래서 64bit PCI가 적용된 메인보드의 경우 컴포넌트가 상당히 많아지고 복잡해지기 때문에 가격이 상당히 비싸진다. 그 결과, 주로 서버용 제품군에만 적용된다.

2. PCI-X


64bit PCI로도 발전하고 있는 다양한 대역폭을 소화해내기 여러운 것이 사실이다. 당장 Ultra320 SCSI만 하더라도 단일채널에서 320MB/s, 그리고 듀얼채널에서는 640MB/s의 데이터 전송속도를 가지게 되어서 64bit PCI가 가질 수 있는 최대 데이터 전송 대역폭인 533MB/s를 가볍게 넘겨버린다. 또한, Gigabit 이더넷 컨틀러의 경우도 듀얼채널(위에 나온 넷기어사의 GA620이 대표적 사례)만 되어도 약 250MB/s의 대역폭을 요구하기 때문에 33MHz의 64bit PCI가 가질 수 있는 최대 대역폭에 근접한다.
이러한 문제점을 해결하기 위해서 등장한 것이 바로 PCI-X이다. PCI-X는 지난 1999년 9월에 1.0 버전의 규격이 완성되었고, 2002년 4월에 PCI-X 2.0 규격이 등장하였다. 기본적으로 PCI-X는 64bit PCI를 그대로 계승하며, 완벽한 하위호환성을 가진다. 즉, 슬롯의 형태가 64bit PCI와 동일하다. 단, 여기에는 5V 동작은 규정되어 있지 않아서 3.3V 동작방식의 PCI만이 지원된다.


PCI-X 슬롯은 기존의 64bit/66MHz PCI와 동일하다.


PCI-X는 기존의 64bit/66MHz PCI에서 동작클럭을 100MHz, 133MHz로 향상시킨 것이라고 생각하면 거의 정확하다. 그래서 데이터 전송대역폭은 100MHz 동작에서 800MB/s, 그리고 133MHz 동작에서 1.06GB/s라는 방대한 규모를 자랑한다.



녹색 슬롯도 있는데?

그런데, 녹색의 슬롯은 무엇일까? 녹색의 PCI-X 슬롯을 사용하는 메인보드들을 살펴보면 모두 아답텍(Adaptec)사의 SCSI 컨트롤러를 탑재하고 있는 것을 알 수 있다. 이들 녹색 PCI-X 슬롯은 아답텍 SCSI 컨트롤러에 연계되는 제로채널 RAID 컨트롤러를 연결하기 위한 슬롯이다.



아답텍사의 제로채널 RAID 컨트롤러인 SCSI RAID 2000S(
관련정보보기)
Copyright(c) by
Adaptec


이들 메인보드에 온보드된 SCSI 컨트롤러는 녹색의 PCI-X 슬롯과 공유되어 있다. 그래서 여기에 위 사진에서 보이는 RAID 컨트롤러를 연결하면 바로 RAID를 적용할 수 있는 SCSI RAID 컨트롤러가 되는 것이다.



연결 토폴로지 역시 64bit PCI와 거의 유사하다. 아래의 사진을 보자.



Supermicro사의 XeonI 듀얼보드, P4DP8
Copyright(c) by
Supermicro 


이 사진 역시 슈퍼마이크로의 메인보드이다.(슈퍼마이크로사가 이런 엽기적인 제품을 주로 만든다. 이 회사는 오히려 일반 사용자용 메인보드에는 별 관심이 없다.) PCI-X 슬롯으로 도배가 되어 있는 것을 볼 수 있는데, 그 아래쪽으로 2개의 P64H2 PCI-X 컨트롤러가 2개 위치해 있다. 일반적인 메인보드라면 전체 PCI 슬롯이 하나의 컨트롤러의 제어를 받지만, 이 메인보드의 경우 PCI 슬롯이 총 여섯개임에도 2개의 컨트롤러에 의해서 제어되고 있다. 그 이유는 앞서 64bit PCI에서 설명했던 바와 같다.


PCI-X 2.0은 PCI-X 533으로 표현하기도 하며 원래의 PCI 보다 32배가 빠르다. PCI-X 266은 266MHz, PCI-X 533은 533MHz라는 높은 동작클럭을 통해 2GB/s, 4GB/s라는 방대한 데이터 전송 대역폭을 구현한다. 모두 백워드 호환성을 제공한다.

지금 존재하는 하드웨어로는 PCI-X 133의 데이터 전송 대역폭을 넘길 일이 없지만, 곧 등장할 10Gb 파이버채널, 10Gb 이더넷, 인피니밴드 등이 단일 채널에서 1~GB/s의 방대한 대역폭을 요구하게 된다. 따라서 이를 받쳐주기 위해서는 그보다 강력한 성능을 가지는 버스가 필요하며, 그러한 요구에 의해서 만들어진 것이 PCI-X 2.0이다.



데이터센터 기술의 변화로 10Gbit 네트워크 망이 보편화되면 PCI-X 2.0의 필요성은 더 증대할 것으로 보인다.
PCI-X 2.0은 기존의 PCI-X 및 64bit PCI와 완벽한 하위호환성을 유지하면서 높은 데이터 전송 대역폭을 구현하며, 데이터 신뢰도를 높이기 위한 ECC 기법 등이 적용된다.

3. AGP 8X
AGP 8X는 점점 강력해지는 그래픽카드들이 요구하는 방대한 대역폭을 지원하기 위해서 만들어진 규격이다. 기본 동작클럭은 AGP 1X와 동일하지만 ODR(Octa Data Rate) 기법을 적용하여 한번의 클럭에서 8개의 데이터를 전송하여 AGP 1X에 비해서 8배인 2.13GB/s의 데이터 전송 대역폭을 갖는다. 이 과정에서 새로운 전송방식을 사용하지만, 기존과 마찬가지로 0V~0.8V의 신호폭(swing)을 갖는다.
그래서 기존의 AGP 2.0 규격의 커넥터와 그대로 호환된다. 다만, AGP 4X까지는 1.5V, 3.3V의 동작이 모두 허용되었던 것에 반해서 AGP 8X는 1.5V의 동작만이 허용되기 때문에 AGP 8X 슬롯은 모두 현행의 845/850 칩셋 등에서 볼 수 있는 1.5V 전용 슬롯이 된다.
현재 VIA P4X400 등의 칩셋에 의해서 지원되기 시작하고 있으며, NVIDIA의 NV18/28 등의 그래픽 칩셋 역시 이 인터페이스를 지원할 예정이어서 내년 초가 되면 본격적으로 AGP 4X의 자리를 대체하게 될 것이다.

I/O 버스. 1세대 I/O 버스

1세대 I/O 버스 - ISA, MCA, EISA
1. ISA
ISA 버스의 등장은 지난 1981년 IBM PC/XT(오른쪽 사진)의 등장과 함께한다. 당시의 IBM PC/XT에 탑재된 ISA 버스는 8bit의 버스폭을 가지고 있었다. 그 후 1984년 IBM PC/AT가 등장하면서 ISA 버스는 16bit로 확장된다.
초기의 8bit ISA 버스는 4.77MHz로 동작했다. 당시에는 병목현상이라는 것이 있을 수가 없었다. 프로세서도 4.77MHz로 동작했으니까. -_- 그리고 16bit ISA가 등장하면서 프로세서 동작클럭이 6MHz로 되자 ISA의 동작클럭은 6MHz로 높아졌고 이후 8.33MHz까지 올라갔다. 프로세서의 속도는 그 이상으로도 올라갔지만, ISA 버스의 동작속도는 기존에 출시된 다른 관련제품들과의 호환성 및 안정성 등을 위해서 8.33MHz에서 더이상 빨라지지 않았다.
8bit ISA는 62개의 핀을 갖는다. 이 안에는 8개의 데이터 선과 20개의 주소 지정 선이 포함되어 있다. 그리고 16bit ISA는 8bit ISA 슬롯의 뒤쪽으로 36개의 핀이 더해진 형태를 취한다. 그 형태는 아래와 같다.


ISA 슬롯의 사진. 위쪽이 8bit ISA, 아래쪽이 16bit ISA(오른쪽이 메인보드의 뒤쪽(브라켓이 있는 쪽)이다.

16bit ISA 슬롯은 8bit ISA 슬롯과의 하위호환성을 갖는다. 위에서 보이다시피, 16bit ISA는 8bit ISA에서 확장된 형태를 취하고 있기 때문에 8bit ISA 방식의 카드를 꼽을 수 있다. 이러한 하위호환성의 보존으로 사용자들을 보호하기 위한 훌륭한 수단이었으며, 나름대로 적절한 성능을 보여줄 수 있었기 때문에 지금까지도 사용되고 있다.(1981년에 등장한 I/O 버스가 지금까지 사용된다는 것은 실로 놀라운 일이 아닐 수 없다.)
ISA 버스가 낼 수 있는 속도는 어느정도일까? 16bit ISA 버스를 기준으로 계산해보자.
이를 계산하기 위해서는 ISA 버스의 데이터 전송 특성에 대해서 간략히 언급할 필요가 있다. ISA 버스는 한번의 데이터 전송을 하기 위해서 최소한 2번, 많을 경우는 8번까지의 사이클을 필요로 한다. 즉, 아무리 빠르게 데이터를 전송한다 해도 최소한 2클럭에 1회의 전송만이 일어난다는 것이다. 그래서, 이를 바탕으로 데이터 전송률을 계산하면 다음과 같다.
8.33MHz × 2byte(=16bit) × 0.5 (데이터전송이 2클럭당 1번꼴로 일어난다고 가정할 경우) = 8.33MB/s

즉, '최대' 8.33MB/s이며, 최악의 경우라면 2.08MB/s 정도의 데이터 전송률만을 가진다. 데이터 전송은 평균적으로 이들 값의 중간값 정도가 되므로, 약 5MB/s 정도의 평균 데이터 전송률을 가진다고 보는 것이 가장 적절하다.
5MB/s의 속도라고는 하지만 당시로써는 상당히 빠른 속도였다. 처음 등장한 SCSI 제품군이 5MB/s의 속도를 가지고 있었다는 것을 생각해보면 이해가 갈 것이다. 물론 지금도 일부에서는 사용되고 있는 '전설의 I/O'가 바로 ISA이다.

ISA 버스가 아직도 쓰인다굽쇼?
상당히 의외이겠지만, 쓰이고 있다. 특히 전문적인 분야일수록 ISA의 의존도는 더욱 강하다. 초 고가를 자랑하는 방송장비 분야나 음악편집 분야에서 사용되는 장비들 중에는 ISA 타입 장비가 많은데, 이를 사용하는 사람들을 괴롭게 하는 것이, 이들 장비가 한두푼하는것도 아니고 대당 수백 정도 하는 것이기 때문에 이것을 새로 구입하느니 그냥 ISA가 달린 메인보드를 비싸게 주고 사오는 것이 유리하다는 것이다.
산업용으로도 ISA는 아직 유용하다. 대학이나 연구소 등의 실험실에서 외부 장비를 제어할 때에 대개 ISA버스를 사용하는데, 이것은 ISA 버스가 제어하기 쉽고 관련 장비를 만들기도 쉽기 때문이다.
그 결과 산업용 메인보드 제조사 중에는 아직도 ISA 버스를 가지는 메인보드를 생산하는 곳이 많다. 인텔은 800 계열 칩셋으로 접어들면서 ISA의 지원을 중단했지만, 일부 보드 제조사 중에서는 ISA를 별도의 ISA 브릿지를 통해서 지원한다. 이들 메인보드는 그 수요가 대단히 적기 때문에 가격이 일반 메인보드의 4~5배 정도로 높은 편이다. 그래도 ISA를 필요로 하는 분야가 워낙 전문적인 분야이며, 이러한 분야에서 사용되는 장비들의 가격이 상당히 비싸기 때문에 대당 60~80만원의 가격에도 불구하고 이를 사용하는 사용자가 존재한다.


1. ISA
최초로 등장한 32bit I/O 버스인 MCA(MircoChannel Architecture의 약자이다)는 기존의 ISA가 가지는 단점을 극복하기 위한, 새로운 I/O 버스 방식이었다. 이는 모든 면에서 ISA에 비해서 우월했으며, 당시로써는 획기적인 PnP(Plug and Play)를 지원하기까지 했다. 그러나 MCA는 IBM이 세번째로 저지른 실수라고 할 수 있다.

IBM이 저지른 실수
1. 1980년, IBM은 자사의 PC에 채택할 운영체제로써 PC-DOS를 개발하고 이를 채택한다. 이 운영체제의 개발이 바로 마이크로소프트에서 이루어졌다. 즉 마이크로소프트는 IBM에서 운영체제의 개발을 의뢰받은 소프트웨어 개발사였다. 그런데, 이후 IBM은 '소프트웨어'의 가치를 상당히 가소롭게 본 나머지 PC-DOS의 권리를 마이크로소프트사에 매각한다. 그리고 이것은 현재의 소프트웨어왕국 마이크로소프트와 울트라캡숑초절정 갑부인 빌게이츠를 만들어내는 시초이 되었다.
2. 이후 IBM은 IBM PC/XT를 만들면서 이에 관한 법적 권한을 모두 갖고있으되, 이를 행사하는 데에는 별로 관심을 기울이지 않았다. 그 결과 ISA라는 버스 방식은 본래 IBM이 개발하고 IBM이 모든 권리를 가지고 있음에도 불구하고 거의 모든 회사에서 공통적으로 사용하는 것이 되어버리고 만다. 그리고 이것은 이후 32bit 슬롯의 경쟁에서 MCA가 EISA에 밀리는 결정적 계기를 제공하였다.


분명 MCA는 I/O 버스방식 자체로 보았을 때 당시로써는 혁명적이고 획기적이었다. PnP를 지원함으로써, 확장 카드나 메인보드 상에는 어떠한 점퍼도 없었고, 사용자는 이를 소프트웨어를 통해서 설정하였다. 또한, 32bit 버스를 가지고 있어서 최대 33MB/s라는 대단히 빠른(당시로써는..) 속도를 보였고, 이는 32bit의 버스를 가지는 386 프로세서가 최대의 성능을 발휘하게 해 주었다.

ISA 버스와 MCA 버스와의 비교. 아래쪽이 MCA

하지만 IBM은 ISA의 전철을 밟고싶지 않았다. ISA는 본래 IBM의 소유였으나 IBM이 다른 회사들이 이를 사용하는 것을 관대하게 보고 넘어가자 거의 모든 회사가 이를 표준인양 사용하게 되었다. 물론 이것은 ISA가 업계에서 절대적인 표준으로 자리잡게 되는 계기가 되었지만, 한편으로는 IBM PC와 호환되는 IBM 호환기종을 여러 회사들에서 만들어냄으로써, 정작 개발의 중심이 된 IBM이 바깥으로 밀려나게 되는 원인이 되었다. 이러한 일을 막고자 IBM은 MCA 버스로 ISA를 대체하면서 '다른 회사들이 MCA 버스의 라이선스를 받아야지만 이를 사용할 수 있도록' 하였다. 물론 라이선스에는 로열티를 물어야 했다.
이미 널리 퍼질대로 퍼진 ISA를 사용하고 있던 수많은 회사들은 이 결정에 당연히 반발하고 나섰다. 지금까지는 확장슬롯의 사용에 아무런 로열티를 물지 않았는데, 난데없이 새로운 확장슬롯 방식이 등장하더니 로열티를 물어야 된다고 IBM이 주장하기 시작한 것이다. 그래서 이들 호환 PC 제조 회사들은 컨소시움을 구성하여 별도의 32bit 확장슬롯의 표준을 만들어버리고, IBM은 소위 '왕따'가 되어버린다. 이렇게 만들어진것이 바로 EISA이다.

3. EISA
EISA는 라이선스와 로열티 지불을 필요로 하는 MCA의 대안으로 만들어진 32bit I/O 버스이다. EISA의 개발은 컴팩에 의해서 이루어졌다. 컴팩은 EISA를 개발하면서, 만약 자신들도 여기에 라이선스와 로열티를 매긴다면 어떠한 회사도 자신들을 따라오지 않을 것이라는 것을 잘 알고 있었기에, 이를 업체에 무료로 제공하였다. 그러기 위해서 컴팩은 비영리 조직인 EISA 위윈회를 조직하고 이를 통해서 주요 PC 제조사들에게 EISA 기술을 제공하였다.

EISA 버스의 모습은 다음과 같다.

위쪽의 진회색이 16bit ISA, 아래쪽의 갈색이 EISA. 외형적으로는 거의 동일하다

EISA는 기본적으로 8bit/16bit ISA에 대해 완벽한 하위호환성을 갖는다. 위의 일러스트를 보면 이들이 외형적으로는 거의 동일하다는 것을 알 수 있다. 다만, EISA 쪽은 좀 더 촘촘한 형태를 가지고 있다. 그렇다고 해서 핀의 배열이 촘촘해진 것이 아니라, 마치 AGP 같은 2열 구조를 사용한다.

이러한 방법의 채택으로 기존의 ISA를 그대로 사용할 수 있으면서도 EISA 기기까지 사용할 수 있었다. EISA로 변하면서 90개의 핀이 추가되었으며 이것은 55개의 신호선과 35개의 접지선으로 구성되어 있다. 또한 MCA와 마찬가지로 PnP를 통해서 소프트웨어적으로 하드웨어의 설정사항을 변경해 줄 수 있는 기능 역시 탑재하고 이다.
EISA는 33MB/s의 데이터 전송속도를 가지고 있었지만, 커넥터와 관련 기기의 제조비용이 높은 편이었다. 그래서 주로 디스크 어레이나 고속의 네트웍 어댑터 등의 서버 관련 장비들만이 EISA로 제조되었다.
여러가지 장점을 가지고 있기는 했지만, 리거시 버스인 ISA 버스와 연계되어 있기 때문에 동작속도의 한계에 부딪혔고, 이후의 386 시스템이나 486에서부터는 로컬버스에게 자리를 넘겨주게 된다. 물론 서버용으로는 486, 펜티엄 때 까지도 사용되었다. 서버용 메인보드 중에서는 PCI슬롯과 EISA 슬롯을 갖춘 제품들이 존재했다.

I/O 버스. 과거와 현재의 I/O 버스

I/O 버스

이번화 강좌는 3회에 걸쳐서 과거와 현재의 I/O 버스들의 발전, 그리고 앞으로 나타날 I/O 버스의 종류 등에 대하여 이야기하고자 합니다. 여기에는 8bit ISA부터 시작해서 EISA, MCA 등을 비롯, 현재 사용되고 있는 PCI와 이제 점점 그 자리를 확고히 굳혀가는 64bit PCI, 그리고 앞으로 나타날 하이퍼트랜스포트/인피니밴드와 PCI Express라고 불리는 3GIO(3rd Generation I/O)가 포함될 것입니다. 이번회에서는 과거와 현재의 I/O 버스에 대해서 설명합니다.


과거부터 현재까지 사용되어온 확장슬롯의 종류
가장 오른쪽부터, 8bit ISA, 16bit ISA, EISA, 32bit/33MHz PCI, 32bit/66MHz PCI, 64bit/33MHz PCI, 64bit/66MHz PCI, 3.3V AGP, Universal AGP, 1.5V AGP, Universal AGP Pro, 1.5V AGP Pro

기본적으로 I/O 버스라고 하는 것은 데이터의 입출력(Input and Output)이 일어나는 모든 부분을 지칭한다. 고전적인 노스브릿지-사우스브릿지 구조에서, I/O 버스는 프로세서와 메모리, 노스브릿지 등을 이어주는 구조를 가진다. 아래의 일러스트에서 노란색-주황색-적색으로 이어지는 통로들이 바로 I/O 버스이다. (색상이 노란색에 가까울수록 보다 고속의 버스임을 의미한다)


현대의 시스템에서 사용되는 I/O 버스는 크게 3가지로 나뉘는데, 프로세서 버스와 메모리 버스, 그리고 주변기기들의 I/O 버스이다. 특히 일반적으로 I/O 버스라고 하면 이중에서 주변기기들 쪽의 I/O 버스, 즉 AGP나 PCI를 지칭한다. 이 글에서도 I/O 버스는 그러한 부분을 지칭하는데에 사용할 것이다.

I/O 버스는 각종 주변기기와 노스브릿지, 사우스브릿지 등을 연결해 주는데에 사용된다. 만약, 시스템의 기능을 확장하고자 한다면 바로 이 I/O 버스들이 메인보드 외부로 이어져야만 한다. 그래서 사용되는 것이 바로 확장슬롯이다. 즉, x86 PC 자체로써는 사용자들의 요구를 모두 만족시킬 수 없기 때문에 이 버스가 다른 기기들과 연결될 수 있는 수단이 있어야만 한다. 확장슬롯은 바로 이러한 역할을 제공한다. 확장슬롯을 갖춤으로써 시스템의 기능은 메인보드 바깥으로 확장될 수 있는 것이다.

일정한 규격을 갖춘 확장 슬롯의 제공으로 인해서 PC는 사용자가 원하는 대로 기능을 확장할 수 있게 되었으며 각 사용자의 요구에 따라서 거기에 맞는 기능들을 갖출 수 있게 되었다. 또한 프로세서와 시스템의 발전에 따라서 슬롯 역시 아래와 같은 세가지 요구를 충족시키기 위해 지속적으로 발전과 진화를 거듭해왔다.

o 보다 빠른 프로세서의 지원
o 증가하는 소프드웨어들의 데이터 요구량의 소화
o 대형 멀티미디어 데이터의 원활한 소화

위와 같은 요구사항들은 모두 최대한 빠른 속도를 가지는 버스를 요구한다. 그러나 놀랍게도 지금도 1984년에 처음 출시된 IBM PC/AT와 동일한 구조의 슬롯을 사용하는 부분이 있다. 그것은 바로 ISA로써 기존의 디바이스들에 대한 하위호환성을 유지하기 위해서 그다지 강력한 성능을 요구하지 않는 부분에 대해서 널리 사용되어 왔다. 하지만 강력한 성능을 요구하는 주변기기들에 대해서는 이후에 나온 PCI 등의 슬롯을 사용하고 있다.

I/O 버스의 세대구분
I/O 버스는 그 특징에 따라서 1세대, 2세대, 3세대로 구분할 수 있다.

1. 1세대 I/O - 리거시 버스(legacy bus)
PC개발 초기, 프로세서의 클럭이 느릴 때에는 I/O 버스 역시 느릴 수밖에 없었다. 당시 개발된 ISA 버스는 속도가 낮은 프로세서에 사용되기에는 충분했다. 이 때, 프로세서와 I/O 버스는 같은 속도의 버스를 사용하고 있었다.

그러나 프로세서의 속도는 점점 빨라져서 이들 ISA가 감당할 수 없게 되자 등장한 것이 16bit ISA이다. 그러나 그 이후, 프로세서의 외부 버스 크기가 32bit로 늘어나고 데이터 처리 요구량이 급격히 늘어나자 이들 버스로는 감당할 수 없게 되어서 등장한 것이 EISA와 MCA 버스이다. 하지만 이들 버스로도 역시 지속적으로 고속화되는 프로세서 버스를 감당해낼 수는 없었다.

그것은 이들 버스 방식이 기본적으로 초기 IBM PC에 사용되던 ISA에 기반하고 있기 때문이다. 즉, 클럭향상에 한계가 존재하며, 데이터의 전송방식에도 문제가 있었다.

이들 버스가 가지고 있는 리거시(legacy)라는 이름은 바로 이러한 특징에서 유래한다. 초창기의 IBM PC에서부터 계속 이어져 내려온 것이기 때문에 리거시(legacy : n. 유산, 유증(遺贈), 이어받은 것) 버스라고 불리게 되었다. 리거시 버스에는 ISA, EISA, MCA 등이 포함되며, 마찬가지 이유로 PS/2나 기존의 시리얼/패러럴 포트 등은 리거시 포트라고 불린다.

여하튼, 이러한 문제점으로 인해서 결국 1세대 I/O는 로컬버스로 대변되는 2세대 I/O에게 그 자리를 내주게 된다.

2. 2세대 I/O - 로컬버스(local bus)
VESA 및 PCI 버스가 사용되던 초기, 이들 버스에는 반드시 따라붙는 이름이 있었으니 바로 '로컬 버스'라는 것이다.

프로세서와 메모리의 속도가 점점 고속화되면서, 각종 주변기기 역시 고속화되었다. 특히, 윈도우즈(Windows)의 등장 이후, GUI의 중요성이 대단히 강조되었고, 이에 의해 그래픽카드가 필요로 하는 데이터 전송 대역폭은 계속 늘어났다. 또한, 하드디스크 드라이브를 위시한 저장매채들의 속도도 지속적으로 늘어나서 기존의 리거시 버스(legacy bus)로는 이러한 고속 기기를 제대로 지원할 수 없게 되었고, 고속의 버스가 필요해졌다.

그러나, 기존의 리거시 버스를 버릴 수는 없었다는 것이 바로 로컬 버스가 등장한 원인이다. 아무리 주변기기 속도가 빨라진다고 해도, 굳이 고속의 버스를 필요로 하지 않는 주변기기도 많았다. 모뎀 등이 그 대표적인 예로써, 모뎀은 현대의 ADSL 등을 쓴다고 해도 ISA로도 커버할 수 있다. 또한 당시 ISA 버스를 사용하는 주변기기는 대단히 많았다. 그리고, 사용자 인터페이스 중에서도 고속 인터페이스를 필요로 하지 않는 것이 많았다. 키보드와 마우스가 대표적인 사례이다. 아무리 키보드를 빨리 두드린다 하더라도 한글은 분당 800타에서 1,000타 정도가 된다. 아무리 잘해도 20kB/s의 속도를 넘길 수 없다. 마우스 역시 상황은 매일반이다. 결국 이러한 리거시 기기들 및 리거시 버스의 필요성이 지속적으로 잔존하고 있기 때문에 고속 버스로 모든것을 대체해 버릴 수는 없었다.

로컬 버스에서의 로컬(local)은 버스 중 일부분만을 고속 버스로 대체하고 있는 형태에서 유래되었다.


로컬 버스는 기존의 리거시 버스와는 별도로 존재하거나, 리거시 버스가 로컬버스에서의 특정 기기 아래쪽으로 연결되어 있기도 하다. 이러한 로컬버스의 도입으로 인해서 기존의 리거시 버스에서 사용하던 기기들이나 리거시 포트를 사용하던 기기들을 그대로 사용할 수 있음은 물론이며, 새로이 등장하는 고속의 I/O 컨트롤러나 그래픽 컨트롤러 등이 필요로 하는 빠른 속도를 지원해 줄 수 있게 되었다.

로컬 버스의 등장과 함께 칩셋의 역할은 점점 더 중요해지고, PCI의 등장에 이르러서는 노스브릿지-사우스브릿지로 이어지는 현재와 같은 칩셋의 토폴로지(topology)도 확립된다.


PCI 로컬버스가 도입된 초기의 칩셋 토폴로지

로컬버스가 도입되었던 초기, 프로세서는 L1 캐시만을 탑재하였고, L2캐시는 프로세서 외부에 존재했다. 프로세서와 캐시, 노스브릿지 사이는 프로세서 버스로, 그리고, 노스브릿지와 메모리 사이는 메모리 버스로 연결되었다.

노스브릿지 하위의 모든 주변기기들은 로컬버스 아래로 연결되었다. 그리고, 로컬버스의 하위에 다른 주변기기들을 연결하는 또하나의 브릿지가 존재했다. 전체적인 구조 상에서 노스브릿지는 위쪽에 있어서 노스(north)라는 이름이 붙었고, 사우스브릿지는 아래쪽에 있어서 사우스(south)라는 이름이 붙게 된다.(여기에 태클을 걸 독자도 있을 것이다. 북쪽의 브릿지, 남쪽의 브릿지를 제대로 쓴다면야 노던(northern) 브릿지, 서던(southern) 브릿지가 되야 할 터이다. 하지만, '관례'란게 있다. 지금까지 그렇게 불러왔고, 거의 고유명사화 되어버린 지금, 이걸 지적해서 고친들 무얼하겠는가. 어차피 지금까지 관례적으로 사우스브릿지라고 불러왔으므로 넘어가자.)

로컬버스는 처음에 VESA 버스가 탄생한 이후, PCI 방식으로 변경되었고, 그 이후 그래픽 카드가 연결되는 부분만을 별도로 분리한 AGP 버스가 등장한다.

3. 2세대 I/O의 진화 - Hub Architecture와 V-Link

프로세서의 속도가 보다 고속화되고, AGP 및 기타 주변기기의 속도 역시 지속적으로 빨라지면서, 위와 같은 노스브릿지-사우스브릿지의 구조는 한계에 부딪힌다. 그래서 3세대 칩셋들부터(주의 3세대 칩셋이 3세대 I/O를 사용하는 것은 아님)는 노스브릿지-사우스브릿지에 보다 고속의 인터페이스를 적용하고, 사우스브릿지가 PCI 컨트롤러가 되는 새로운 구조를 채택한다.

인텔이 이러한 구조를 처음 도입하면서 허브 아키텍쳐(hub architecture)라고 명명하였고, 노스브릿지와 사우스브릿지간을 잇는 고속의 버스는 인텔 허브 버스(Intel Hub Bus)라고 불린다. VIA 역시 유사한 구조를 채택하면서 V. Link(분명 VIA Link일테지..)라는 고속의 버스를 적용하였다.

이러한 새로운 구조가 채택되면서 64bit PCI 등의 고속 인터페이스가 적용되기 시작하였다. 64bit PCI는 노스브릿지에 직접 연결되는, 별도의 브릿지를 통해서 동작한다. 또한 최근의 서버용 보드에서는 64bit PCI를 넘어서, PCI-X가 사용되고 있다.

칩셋의 변경에 대한 상세한 설명은 이전에 올라왔던 칩셋에 대한 강좌를 참조하도록 하자.
관련강좌 : 칩셋 오딧세이 - 새로운 세대의 칩셋들

4. 3세대 I/O
3세대 I/O는 현재 많은 곳에서 개발에 참여하여, 앞으로 적용될 I/O 인터페이스이다. 이들의 개발목적은 보다 빠른 I/O를 제공함으로써 시스템에서의 병목현상을 해소하고, 보다 쉽게 시스템을 구축할 수 있도록 하는 것이다.



여기에는 하이퍼트랜스포트와 PCI Express(3GIO)가 있으며, 이에 대해서는 뒤에서 다시 설명될 것이다.

네트워크 입출력 처리 성능 향상 기술

네트워크 입출력 처리 성능 향상 기술 / 박경, 김성운│ IITA 기술정책정보단
인터넷의 보급과 웹 기반 서비스의 등장은 서버의 역할을 연산 및 자료 처리에서 TCP/IP 기반의 네트워크 서비스 제공으로 변화시켰다. 인터넷의 폭발적인 성장과 네트워크 전송 기술의 발전에 따라 서버의 네트워크 입출력 부하는 크게 증가하여 성능 한계점에 이르렀으며, 이로 인하여 다양한 방식의 네트워크 입출력 성능 개선 기술들이 개발되어 왔다. 10Gbps급 이더넷이 현실화되고 있는 지금 서버 시스템은 날로 증가하는 네트워크 입출력 부하를 처리하기 위하여 연산 능력 향상을 목적으로 추진하던 기술개발 방향을 입출력 처리 성능 향상 기술로 전환하고 있으며, 인텔의 II/OAT, 마이크로소프트의 Chimney 등이 이러한 방향을 주도하고 있다. 본 고에서는 서버의 네트워크 입출력 처리 성능 향상을 위하여 활용되는 기술들을 설명하고 아울러서 네트워크 입출력 처리 성능 개선을 목적으로 개발되는 TCP ing 시스템 기술에 대하여 기술한다.

I. 서 론
인터넷의 보급과 웹 기반 서비스의 등장은 웹 서버, 응용 서버, 데이터베이스 서버, 스토리지 서버 등으로 구성되는 다중 티어 방식의 인터넷 서버 구조를 탄생시켰다. 인터넷을 통한 웹 기반 서비스를 제공하는 인터넷 서버는 현재 단순 웹 서비스는 물론, 전자상거래, 전자정부, ERP(Enterprise Resource Planning), CRM(Customer Relation Management), SCM(Supply Chain Management) 등의 기업전산화 등 다양한 분야에 걸쳐서 사용자에게 서비스를 제공하는 수단으로 활용되고 있다[1].
초고속 인터넷의 보급 및 고도화와 더불어 다양한 웹 서비스의 지속적인 발굴, 웹 기반 기업전산 환경의 확산에 따라 인터넷을 통한 서비스 수요가 급증하고 있으며, 이에 따라 서비스 제공을 위한 서버의 성능 요구도 나날히 증가하고 있다. IDC의 발표에1) 따르면 2004년 기준으로 인터넷을 통한 일일 정보 유통량은 약 300테라바이트에 이르며, 2012년이 되면 약 10 페타바이트까지 증가할 것으로 예측하고 있다. 이러한 인터넷 트래픽의 증가는 인터넷을 통한 서비스 수요의 증가와 이에 따른 서버의 성능 향상에 대한 요구를 의미하며, 특히 서버의 네트워크 처리 성능은 서비스의 안정성과 품질을 결정짓는 주요한 요소로 작용하게 된다.
인터넷과 웹 기술 기반의 서비스를 제공하는 서버의 경우, 현재 네트워크 정합을 위하여 기가비트 이더넷(Gbe)을 사용하며 인터넷 트래픽 처리를 위하여 TCP/IP 프로토콜을 사용하고 있다. 이더넷 기술은 불과 몇 년전까지만 해도 100Mbps급을 사용하였으나, 인터넷의 폭발적인 성장에 따른 고속화 요구와 트래픽의 증가로 인하여 현재 1Gbps급을 주로 사용하고 있으며 10Gbps 규격이 제정된 이후로는 점차 10Gbps 환경으로 전환되고 있다[2].
이더넷 전송 기술의 급격한 발전에 따라 이더넷 정합을 통하여 인터넷 기반 웹 서비스를 제공하는 서버 시스템은 증가되는 네트워크 트래픽 만큼 TCP/IP 프로토콜 처리 성능도 이에 발맞추어 향상되어야만 이더넷 고속화에 따른 장점을 얻을 수 있다.

TCP/IP 프로토콜 스택은 전통적으로 운영체제의 일부로서 소프트웨어로 구현되어 왔으며, 디바이스 드라이버를 통하여 NIC(Network Interface Controller) 하드웨어와 정합하고 소켓 API(Application Program Interface)를 통하여 응용 프로그램과 정합된다. 운영체제의 일부로서 동작하는 TCP/IP 프로토콜 스택은 현재의 반도체 기술을 기준으로 1 비트의 데이터를 전송하기 위해서 1Hz의 프로세서 성능이 요구된다고 보고되고 있으며, 기가비트 이더넷을 통하여 1 기가비트 데이터를 전송하기 위해서는 1GHz의 프로세서 성능을 소비하게 된다[1],[3],[4]. 현재 표준화가 완료되어 제품 출시가 시작된 10 기가비트 이더넷을 서버에 장착한다면 현재의 반도체 기술로는 구현이 불가능한 10GHz급의 프로세서를 사용하거나 여러 개의 프로세서를 사용하는 다중처리형 서버만이 10Gbps 전송 능력을 보장할 수 있다.
본 고에서는 TCP/IP 프로토콜 처리에 의해서 발생하는 서버의 부하를 분석하고 이더넷 기술의 고속화에 따라 증가하는 TCP/IP 기반 네트워크 입출력 부하의 효과적인 처리를 위해서 개발되고 있는 서버의 네트워크 입출력 성능 향상 기술에 대해서 설명한다.

II. TCP/IP 프로토콜 부하 분석
TCP/IP 프로토콜 처리는 TCP 연결제어, 송ㆍ수신 등 크게 3가지의 일로 구분할 수 있다. TCP 연결제어는 통신을 위한 시스템(서버와 클라이언트)간의 연결 설정(Establishment) 및 연결 해제(Teardown) 기능을 처리한다. 통신을 위하여 연결 설정이 완료되면 데이터 전송 기능을 통해서 정보를 교환하게 되며, 데이터 전송이 완료되면 연결 해제를 수행하게 된다[1].
TCP/IP 프로토콜 처리에 있어서 발생하는 부하를 시스템의 기능별로 분류하면, 인터럽트 및 프로세스(혹은 쓰레드) 관리에서 발생하는 시스템 오버헤드, 프로토콜 처리를 위한 코드를 수행하는 프로토콜 처리 부하, 그리고 패이로드 처리를 위한 메모리 접근 부하로 구분할 수 있다. 패킷 사이즈가 작고 패킷의 개수가 증가할수록 시스템 오버헤드와 프로토콜 처리 부하가 증가하며, 패킷 사이즈가 클수록 패이로드 처리를 위한 메모리 접근 부하가 증가하게 된다[1],[5].

인터넷을 기반으로 하는 응용 서비스의 다양화에 따라 응용별로 네트워크 트래픽의 특성이 다르며, 다중 티어의 전단부에 위치한 시스템의 경우 많은 사용자로부터 빈번한 접속을 통하여 대량의 소형 패킷 수신을 통하여 서비스 접근 요청을 처리하며, 후단부에 위치한 시스템의 경우 소량의 연결을 지속적으로 유지하면서 대량의 데이터 전송 기능을 수행하는 것으로 분석된다. 따라서 전단부 시스템일수록 시스템 오버헤드와 프로토콜 처리 부하를 경감하거나 가속하는 기술이 요구되며, 후단부 시스템일수록 메모리 접근 부하를 경감하거나 데이터패스를 가속하는 기술이 요구되어진다[5],[6].



TCP/IP 프로토콜 처리에 있어서 발생하는 시스템 오버헤드는 TCP/IP 프로토콜 스택이 운영체제의 각종 커널 프로세스(또는 쓰레드)와 프로세서, 메모리, 입출력 장치 등의 시스템 자원을 공유함에 기인한다. 운영체제의 스케줄링, 자원 관리, 인터페이스 정책 등을 준수하여야 함에 따라 인터럽트, 시스템콜, 드라이버, 버퍼 관리 등의 기능과 연동하여 처리되어야 하며 이로 인하여 프로토콜 처리라는 본연의 부하 외에 오버헤드가 발생하게 된다[1],[7].
TCP/IP 프로토콜 처리에 의해서 발생하는 부하는 프로토콜 스택 코드를 수행하는 부하로서 연결관리, 헤더 정보 처리 등과 같은 원천적인 부하이다. TCP/IP 프로토콜 처리를 위한 코드 처리에 있어서 헤더 정보 및 패이로드 처리를 위한 빈번한 메모리 접근이 이루어지며, 이로 인하여 야기되는 부하를 메모리 접근 부하로 정의한다. 메모리 접근 부하는 메모리 접근 지연 문제와 데이터의 버퍼링 및 복제 문제로 구분된다[1],[7].
메모리 접근 지연 문제는 TCP/IP 프로토콜 처리를 위해서 사용되는 헤더 데이터와 패이로드 데이터 접근에 있어서 발생하는 캐시 미스에 의해서 발생한다. 수신되는 패킷의 프로토콜 처리에 있어서 필요한 헤더 데이터 및 패이로드 데이터는 시스템에 새로이 입력되는 데이터이므로 시스템의 데이터 영역에서 시간적 지역성을 상실하게 된다. 따라서 프로세서에 의해서 데이터 접근이 시도될 경우 캐시 미스를 야기하게 되며 이로 인하여 프로세서의 스톨 현상이 발생하게 되고 결과적으로 성능 저하의 원인이 된다[1],[7].
데이터 버퍼링 및 복제는 송신처리 보다는 수신처리에 있어서 심각성이 대두된다. 패킷이 수신되면 수신된 데이터는 응용 프로그램이 수신 동작을 수행하기 전까지는 커널의 버퍼 영역에 임시 저장된다. 응용 프로그램이 데이터 수신 처리를 시작하게 되면 커널 버퍼의 내용은 다시 응용 프로그램의 버퍼 영역으로 복제되어야 한다. 송신 시에는 응용 프로그램의 버퍼에서 NIC 하드웨어로 DMA를 통하여 데이터를 이동하는 무복제 전송기법이 활용되고 있어서 복제에 의한 부하를 경감하고 있으나, 이 역시 전통적인 BSD 소켓 인터페이스를 통해서는 구현이 불가능하다. 데이터에 대한 버퍼링 및 복제는 단순한 데이터의 이동을 위하여 프로세서가 과도한 로드와 스토어를 수행하게 되고, 이때 캐시 미스까지 발생됨에 따라 시스템의 성능 저하의 주요한 원인이 되며, 상용화가 시작된 10Gbps급 이더넷 정합에 있어서 병목 현상의 원인이 된다[1],[7].

III. 네트워크 입출력 처리 성능 향상 기술
TCP/IP 프로토콜 처리에 있어서 발생하는 부하를 경감하기 위한 기술들은 서버의 성능 향상은 물론 서비스의 품질 향상을 위해서 필연적으로 요구되어지는 기술이다. 이에 여러가지 방식의 TCP/IP 프로토콜 가속을 위한 기술들이 개발ㆍ연구되고 있다. 본 절에서는 TCP/IP 프로토콜 처리에 있어서 성능 향상을 위해서 NIC하드웨어 및 프로토콜 스택의 부분적인 변경을 통하여 구현되는 성능 향상 기술과 IP기반 스토리지 분야에서 활용이 증가하고 있는TOE (TCP offloading Engine) 기술에 대해서 설명한다.

1. NIC 하드웨어 기술 및 스택 구조 개선 기술
NIC 하드웨어의 기능 추가를 통한 TCP/IP 프로토콜 처리 성능 향상은 프로토콜 스택 및 운영체제의 변경을 최소화하여 성능을 향상시키고자 하는 기법들이다. TCP/IP 프로토콜 처리에 있어서 발생하는 시스템 오버헤드와 데이터 버퍼링 및 복제 부하를 경감하기 위한 부가기능들이 NIC 하드웨어에 포함되고 이를 지원하는 기능을 운영체제에 부가하는 형식을 취하고 있다.
현재 시장에 출시되는 대부분의 1Gbps급 고성능 NIC 하드웨어에 탑재되어 있는 기술로서 그 기능은 다음과 같다[1],[8].

가. 인터럽트 통합처리(Interrupt Coalescing)
패킷 수신에 있어서 발생하는 인터럽트 오버헤드를 경감하기 위한 기술로서 NIC 하드웨어가 수신되는 패킷들을 임시 저장하고, 여러 개의 패킷을 모아서 한번의 인터럽트로 운영체제에 전달하는 방법이다. 패킷이 수신할 때마다 발생하는 인터럽트를 일정 시간 단위 또는 도착한 패킷의 개수 단위로 모아서 인터럽트를 요청함으로서 시스템의 인터럽트를 줄이고 이로 인한 오버헤드를 경감한다.

나. 체크섬 오프로딩(Checksum Offloading)
TCP/IP 프로토콜은 전송 중에 발생하는 에러 탐지를 위하여 체크섬 방식을 사용한다. 체크섬 연산은 프로세서에서 의해 수행되는 누적 가산 연산으로 모든 패킷에 대해서 생성 및 검사가 이루어져야 한다. 체크섬 연산은 프로토콜 처리에 있어서 프로토콜 스택과 독립적으로 연산이 가능하며 또한 하드웨어 구현에 있어서 구현 비용이 적고 NIC 하드웨어의 성능 저하 없이 구현이 가능하다. 따라서 NIC 하드웨어가 패킷의 송신 및 수신에 있어서 체크섬의 생성 및 검사를 전담하여 프로세서가 수행하여야 하는 누적 가산 연산의 부담을 제거할 수 있다.

다. 대용량 세그먼트 지원(Large Segment Offloading)
데이터 전송에 있어서 큰 데이터를 작은 패킷으로 나누어 보내고, 또한 작은 패킷을 모아 하나의 큰 데이터를 재조립하는 작업은 소프트웨어 입장에서 여러 개의 TCP/IP 헤더를 처리하여야 하는 연산 부담을 유발한다. MSS(Maximun Segment Size)를 초과하는 크기의 데이터를 전송함에 있어서 연결 설정이 이루어진 양단간에 협상을 통하여 대형 패킷 전송이 가능한 경우 패킷 분할 및 재조립 절차없이 데이터를 전송하도록 하는 것으로 NIC 하드웨어의 대용량 버퍼 지원을 통하여 비교적 간단하게 구현된다.

라. 비동기 입출력 기능(Asynchronous I/O)
네트워크 응용 프로그램의 경우 소켓을 이용하여 프로그램이 개발되며, 소켓의 송수신 요청은 TCP/IP 프로토콜 스택에 의해서 패킷 전송으로 변환된다. 비동기 입출력 처리 기능은 소켓 계층의 전송 요청을 여러 개씩 한꺼번에 요청하고 추후에 처리 결과를 확인함으로서 순차적 처리에서 발생하는 대기 시간 및 프로세스(또는 쓰레드) 스위칭 오버헤드를 최소화한다.

마. 헤더 분리 처리(Header Splitting)
패킷 처리에 있어서 헤더와 패이로드 부분을 분할하고 각각을 시스템 내의 별도의 메모리 영역에 저장하여 처리하며, 경우에 따라서 별도의 쓰레드가 처리하는 기법이다. NIC 하드웨어는 수신된 패킷으로부터 헤더와 데이터를 분리하여 시스템 메모리의 지정된 영역에 전달하는 기능을 가져야 한다. 패킷 처리에 있어서 헤더와 데이터를 동시에 처리하는 병렬처리가 가능하고, 또한 헤더 처리에 있어서 메모리 접근에 대한 지역성을 보장할 수 있어서 선확보(Prefetch)와 같은 소프트웨어 성능 향상 기법을 동시에 활용할 수 있는 장점이 있다.

바. 수신 성능 확장 구조(Receive Side Scaling)
다중 프로세서 시스템에서 대량의 패킷 수신을 처리하기 위한 네트워크 입출력 처리 구조이다. NIC하드웨어는 여러 개의 패킷 버퍼를 내장하고 각각의 패킷 버퍼는 시스템의 각 프로세서에게 할당되어 수신된 패킷을 병렬로 처리한다. TCP 연결별 병렬처리를 가능하게 하여 시스템의 전체적인 성능 및 네트워크 응답시간 단축에도 효과가 크다. 하지만 NIC 하드웨어의 복잡도가 많이 증가하며, 특히 NIC 하드웨어 내부에 여러 개의 패킷 버퍼를 내장하여야 하므로 구현 비용이 상대적으로 높다. 현재 시장에 출시되는 NIC 하드웨어에서는 지원하지 않는 기술이지만, 하드웨어의 저가격화에 따라 조만간에 NIC 하드웨어의 필수 기능으로 자리잡을 것으로 예측된다.

2. TOE 기술
수 Gbps급 이상의 네트워크 입출력 처리 속도을 제공하기 위하여 산업계를 주축으로 시스템의 TCP/IP 프로토콜 처리 기능을 하나의 하드웨어 장치로 독립시키는 노력이 진행되어 왔으며, 그 결과 TOE (TCP Offloading Engine)라는 하드웨어 기술이 등장하였다[4],[9].
TOE는 (그림 4)와 같이 운영체제 내부에서 소프트웨어로 수행되는 TCP/IP 프로토콜 스택을 별도의 전용 하드웨어로 구현한 것으로 시스템과 분리된 하드웨어 프로토콜 스택으로 정의할 수 있으며, 시스템의 공유 자원과 분리되는 독립적인 메모리 공간을 사용한다[1],[9].

TOE 하드웨어는 TCP/IP 프로토콜 스택 처리에 사용되는 프로세서 부하를 시스템으로부터 제거할 수 있는 장점이 있지만 시스템의 전체적인 성능 및 기능면에서 여러 가지 단점을 내포하고 있다[1],[9]. TOE 하드웨어는SoC(System on a Chip) 형태로 구현되며 주로 32비트급 RISC(Reduce Instruction Set Computer) 프로세서를 내장한다. 시스템에서 사용되는 수 GHz급 고성능 프로세서에 비해 현저히 성능이 낮은 200~300MHz 프로세서가 사용됨에 따라 상대적으로 시스템에서 처리할 때보다 처리 속도가 늦어지며, 서버급 프로세서에 비해 메모리 접근을 위한 버스 속도가 느려서 메모리 접근 지연 시간을 발생시킨다. 따라서 패킷에 대한 처리 지연 시간면에서 장점을 가지지 못한다.
TOE 하드웨어는 기존의 운영체제에 존재하는 프로토콜 스택을 별도의 전용 하드웨어 스택으로 구현하는 것이므로 TOE를 위한 전용 인터페이스를 운영체제가 제공하여야 한다. 이로 인하여 기존의 네트워크 응용 소프트웨어 사용에 있어서 호환성 문제를 야기시키며, 이는 TOE 하드웨어의 범용성 및 유연성에 큰 약점으로 지적된다.
TOE 하드웨어를 이용한다 하여도 시스템은 TOE 하드웨어와 응용 프로그램간의 인터페이스를 제공하여야 하며 이러한 인터페이스를 통하여 연결 제어 및 전송 명령을 TOE 하드웨어로 전달한다. 시스템과 TOE 하드웨어간의 인터페이스 처리에 발생하는 부하는 제거가 불가능하며, 연결 설정 및 해제 그리고 송수신 동작의 빈도가 높을수록 인터페이스를 통한 메시지 전달량이 늘어난다. 따라서 짧은 연결을 통하여 이벤트와 같은 소형 패킷을 처리하는 일반적인 인터넷 응용 서비스에서는 성능 개선 효과가 낮은 단점이 있다.

IV. TCP/IP 온로딩 시스템 기술
이더넷의 고속화와 더블어 인터넷 기반 응용 서비스의 증가에 따른 네트워크 트래픽의 기하급수적 증가로 인하여 서버의 네트워크 입출력 처리 성능에 대한 요구가 나날히 증가하고 있으나, 시스템의 성능 향상은 네트워크 속도 향상에 비해서 현저히 느리게 발전하고 있다[1],[3]. 이로 인하여 현존하는 서버 시스템의 경우 수 Gbps 내지는 향후 시장의 주도품목인 10 Gbps급 NIC 하드웨어 정합을 지원하는데 있어서 성능 한계에 직면하게 되었다[1],[3],[4].
서버의 네트워크 입출력 처리 성능 개선을 위하여 인텔, 마이크로소프트 등 선진기업들은 네트워크 입출력 처리 구조를 개선하는 연구를 진행해 왔으며, 그 결과 인텔은 ETA(Embeded Transport Acceleration) 기술을 기반으로 하는 II/OAT(Intel I/O Acceleration Technologies) [5],[6],[8]를 발표하였으며, 마이크로소프트의 Chimney 구조를 기반으로 하는 새로운NDIS (Nerwork Driver Interface Specification)[10],[11] 발표하였다.
II/OAT 기술은 네트워크 프로토콜 처리에 있어서 발생하는 부하를 시스템 전반에 걸쳐서 구조와 기능을 개선하여 지원하는 이른바 ing 기술을 기반으로 하며. Chimney 기술은 TOE 하드웨어를 기반으로 윈도 플랫폼에서 프로토콜 스택을 변형하는 기술이다. 본 절에서는 ing 개념을 통하여 서버의 네트워크 입출력 처리 구조를 새롭게 구현하는 주요 기술에 대해서 설명한다.

1. CMP 프로세서와 ETA 구조
반도체 기술의 발전에 따라 하나의 프로세서 칩에 다수의 프로세서 코어를 내장하는 CMP (Chip MultiProcessor)가 등장하였다. 인텔은 차세대 프로세서 구조로 CMP를 제안하고 있으며, CMP를 사용하는 서버 시스템에서 CMP 내부의 프로세서 코어를 TCP/IP 프로토콜 처리 전용 프로세서로 할당하는 구조를 제안하고 있다[7].
CMP 프로세서를 기반으로 하는 ETA(Embeded Transport Acceleration) 구조는 프로세서에 내장된 여러 개의 코어중 하나 또는 그 이상을 TCP/IP 프로토콜을 전담 처리하는 PPE (Protocol Processing Engine)로 할당하고 나머지 코어는 일반 응용 프로그램을 수행하는 구조이다. 응용 프로그램을 수행하는 코어는 PPE 코어와 DTI(Direct Transport Interface)라는 큐 인터페이스를 통하여 정합된다. DTI는 과거의 VIA(Virtual Interface Architecture) 또는 InfiniBand 등과 같은 고성능 클러스터 연결망[2]에서 사용하는 큐기반 메시지 전송기법을 모태로 한다. DTI는 응용 프로그램을 수행하는 코어와 PPE 코어간에 공유하는 시스템 메모리에 구현되는 비동기 큐 모델로서 제어 큐, 데이터 큐, 동기화 큐로 구성되며 소켓 기반의 명령(Connect, listen, accept 등)을 TCP/IP 프로토콜로 처리하기 위한 전용 인터페이스를 제공한다. (그림 5)는 CMP 프로세서 구조와 이를 이용한 ETA 구조의 구성도이다[1],[7].


2. 메모리 접근 지연 시간 개선
TCP/IP 프로토콜 처리에 있어서 헤더 및 데이터 처리를 위해 반복적으로 발생하는 메모리 접근 및 데이터 복제 오버헤드 최소화를 위하여 MARS(Memory Aware Reference Stack)라는 기술을 사용한다. MARS는 TCP/IP 프로토콜 처리를 위해서 사용되는 데이터를 프로세서에서 가까운 하드웨어에 위치시키며 아울러서 메모리 접근 동작과 프로세서의 연산을 중첩시킬 수 있도록 메모리 사용 모델을 개선한 것이다.
MARS 기능 구현을 위해서 사용되는 기술은 경량 쓰레드(Lightweight Threading), DCA (Direct Cache Access), AMC(Asynchronous Memory Copy) 등이다.

가. 경량 쓰레드
메모리 접근 지연 시간에 의한 프로세서의 사이클 소비를 최소화하기 위해서 하나의 쓰레드를 더 작은 단위로 나눈 Strand라는 초경량 쓰레드를 사용한다. Strand는 운영체제의 커널 쓰레드와는 달리 프로세스와 독립적으로 동작하는 것으로 하나의 연결을 통하여 처리되는 패킷 처리와 같이 매우 작은 단위의 네트워크 입출력 처리 동작으로 볼 수 있다. 따라서 운영체제의 스케줄링 정책에 따라 움직이는 커널 쓰레드와는 달리 Strand는 하드웨어 상황에 따라 처리되는 소규모의 일련의 고정된 소프트웨어 코드라고 볼 수 있다.
Strand는 프로세서의 캐시 미스에 의해서 스위칭이 발생하는 미세한 단위의 초경량 쓰레드로서 스위칭 오버헤드가 매우 적으며, 메모리 접근 지연 시간과 패킷 처리를 중첩하여 프로세서의 사이클 소비를 최소화하고 아울러서 연결 단위 수준의 패킷 병렬 처리를 가능하게 한다. (그림 6)은 Starnd를 이용한 경량 쓰레드 파이프라인을 보여준다.


나. DCA
DCA는 프로세서와 NIC 하드웨어간의 데이터 전송을 가속하기 위한 기법으로 프로세서와 입출력 장치간의 연결을 지원하는 브릿지 칩셋의 기능 개선이 요구되는 기술이기도 하다. 일반적으로 패킷 수신이 이루어지면 NIC 하드웨어는 소켓에 대한 디스크립터와 헤더, 패이로드 등 패킷 처리에 필요한 모든 데이터를 메모리로 위치시킨 후에 프로세서로 패킷 도착을 알린다. 프로세서는 패킷 처리를 위하여 필요한 데이터를 내부로 읽어들이며 이때 캐시 미스를 야기하게 되어 메모리 읽기를 위한 접근 시간은 증가하게 된다. DCA는 네트워크 입출력 데이터 처리에 있어서 발생하는 캐시 미스 오버헤드를 제거하기 위한 기술로서, 프로세서로 패킷 도착을 알리기 전에 NIC 하드웨어에서 프로세서 캐시로 데이터를 미리 옮겨 놓는 기술이다. (그림 7)은 NIC 하드웨어에서 프로세서까지 DMA(Direct Memory Access)와 DCA를 사용할 때의 차이점을 도식화 한 것이다.


다. AMC
데이터 복제는 TCP/IP 프로토콜 처리에 있어서 발생하는 가장 큰 오버헤드로서 프로세서의 로드-스토어 명령에 의해서 수행될 경우 프로세서의 부하는 크게 증가하게 된다. AMC는 데이터 복제를 위하여 스케줄링 개념이 가미된 DMA 기능으로 정의될 수 있으며, 경량 쓰레드 파이프라인과 연동하여 Strand 수준의 병렬 처리를 지원하는 도구로 활용된다. 하나의 패킷을 처리하는 Strand가 데이터 복제가 필요하게 되면 AMC 하드웨어에 복제 명령을 전달하고 스위치 아웃된다. 그리고 다른 Strand가 프로세서에서 수행되며, AMC는 입력된 복제 명령을 수행하여 복제 명령을 발생한 Strand가 다시 스위치 인 될 때 지장없이 패킷을 처리할 수 있게 한다. (그림 8)은 프로세서에 의한 데이터 복제와 AMC를 이용한 데이터 복제를 비교하여 도식화한 그림이다.


V. 결 론
인터넷의 보급과 웹 기반 서비스의 등장은 서버의 역할을 연산 및 자료 처리에서 TCP/IP 기반의 네트워크 서비스 제공으로 변화시켰다. 인터넷의 폭발적인 성장과 네트워크 전송 기술의 발전에 따라 서버의 네트워크 입출력 부하는 크게 증가하여 성능 한계점에 이르렀으며, 이로 인하여 다양한 방식의 네트워크 입출력 성능 개선 기술들이 개발되어 왔다. 10Gbps급 이더넷이 현실화되고 있는 지금 서버 시스템은 날로 증가하는 네트워크 입출력 부하를 처리하기 위하여 연산 능력 향상을 목적으로 추진하던 기술개발 방향을 입출력 처리 성능 향상 기술로 전환하고 있으며, 인텔의 II/OAT, 마이크로소프트의 Chimney 등이 이러한 방향을 주도하고 있다.
인터넷의 확산 및 고도화와 더불어 서비스의 고품질화는 서버의 네트워크 입출력 부하를 더욱 가중시킬 것으로 예상되며, 이에 따라 고전적인 서버의 구조는 네트워크 입출력 처리에 특화된 기술을 수용함으로서 점차 네트워크 서버 형태로 발전할 것으로 예측된다.