Sep 11, 2007

PCI Express(3GIO)

3GIO? PCI Express


이 강좌는 I/O 버스 관련 강좌 중 세번째 강좌입니다. 여기서는 하이퍼트랜스포트와 함께 차세대 I/O로 개발되고 있는 PCI Express에 대해서 이야기할 것입니다. I/O 버스관련 강좌 및 칩셋 오디세이 강좌, 특히 하이퍼트랜스포트 강좌를 먼저 읽어보시는 것이 이해에 도움이 될 것입니다.


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


PCI Express는 3GIO의 또 다른 이름이라고 보면 정확하다. 개발 초기에, 새로운 세대의 I/O를 개발한다는 의미에서 명명된 3GIO(3rd Generation Input/Output)이라는 이름은 현재 사용되고 있는 다른 I/O 버스들과 큰 연계성을 가지지 못하였다. 그래서 PCI-SIG는 2002년 4월 17일자로 보도자료를 통해서 3GIO의 공식 명칭으로써 PCI Express를 선택한다고 공표하였다. 이것은 PCI Express 버전 1.0의 개략안이 만들어진 직후였으며, 이후 6월에 열렸던 개발자 컨퍼런스에서 완전히 확정된 최종 버전이 공개되었다.


PCI Express로의 명명은 3GIO가 기존의 PCI를 그대로 계승하고 있다는 것을 나타내준다. 3GIO라는 명칭은 말 그대로 제 3세대의 I/O 버스라는 것을 직설적으로 보여주기는 하지만, PCI와의 연계성을 드러내주지 못한다는 맹점이 있다. 새로운 I/O 버스에서의 PCI 연계성은 기존의 하드웨어/소프트웨어와의 호환성을 유지하고 개발자들을 보호한다는 측면에서 매우 중요하다. 같은 맥락에서, 하이퍼트랜스포트에서도 PCI와의 호환성을 유지하고 있는 것을 볼 수 있었다.


좌우간, 그 결과 보다 고속의 PCI 규격이라는 의미에서 PCI Express라는 명칭이 붙었다. 즉, 기존의 PCI가 가지고 있던 하드웨어적/소프트웨어적 인프라를 그대로 사용함으로써 이들이 새로운 I/O로 부드럽게 전환될 수 있도록 한다는 것이다.


시스템은 PCI 이상의 인터페이스를 원한다


PCI Express의 개발은 근본적으로는 한계에 도달한 PCI를 대체하기 위함이다. PCI는 멀티드랍(multi-drop), 병렬 버스 방식, 동기식 데이터 전송을 구현한 인터페이스로써, 개발 당시인 십여년전에는 상당히 우수한 버스로 급격히 시장에 자리집게 되었다. 병렬 버스 방식을 사용했기 때문에 높은 데이터 전송률을 달성할 수 있었으며, 멀티드랍 방식으로 다수의 PCI 기기를 동시에 사용한다는 잇점을 가졌다.


하지만 이러한 장점들은 그 이면에 단점도 가지고 있다. 우선, 병렬 버스 방식이라는 것은 기본적으로 신호왜곡에 상당히 취약하다는 문제점을 가지고 있다. 이것은 이전의 RDRAM 및 시리얼 ATA, 하이퍼트랜스포트에서 누누히 언급된 내용이기도 하다. 또한, 다수의 기기가 동기화되어 동작해야 하기 때문에 클럭과 전압이라는 측면에서의 자유도가 대단히 떨어진다.


그 결과 PCI는 33MHz, 32bit, 5V 동작이라는 고정된 스펙만을 가지고 있었다.(3.3V 및 64bit PCI는 여기서는 논외로 한다.) 이러한 한계는 전송속도를 133MB/s로 제한하는 문제점을 만들어냈다. 물론, 133MB/s는 어지간한 기기들에는 충분하다. USB 1.1 컨트롤러나 사운드카드 및 랜카드 등에는 아무런 무리가 없었다. 그러나 주변기기들은 점점 고속화되어가고 PC는 더욱 다양한 주변기기들로 인해 보다 넓은 대역폭과 확장성을 필요로 하게 되었다. 다음은 PCI의 속도에 비해서 현재 사용되고 있는, 그리고 앞으로 등장할 각종 주변기기 인터페이스들의 속도가 얼마나 빠른 것인가를 직관적으로 보여준다.



IEEE1394나 USB 2.0의 경우도 그리 무시할만한게 되지 못한다. 대개의 경우 하나의 시스템에 2~3개의 포트가 있기 때문이다. ATA 역시 그러하다. 이러한 상황에서 PCI는 그 한계를 드러낼 수밖에 없고 시스템의 병목현상을 만드는 주범으로 전락해버린다.



현대의 PC는 수많은 각종 장치와 연결된다


이와 함께 단일화된 버스방식의 필요성 역시 크게 대두되고 있다. 과거의 PC는 순수하게 계산에 기반한 생산성만을 창출해내는 'Pruductivity PC'에 그쳤지만, 이러한 구도는 멀티미디어와 인터넷, 그리고 다양한 컴퓨터 주변기기와 더불어서 PC의 활용도에 새로운 영역을 부여하였고, 다양해지고 있는 인터네시스들을 간결화하고 시스템의 구성을 보다 쉽게 하기 위해서 인터페이스의 통일이 필요해졌다.






PCI Express의 필요성과 목적


PCI가 가진 한계의 돌파


PCI Express는 기본적으로 PCI가 가지는 한계점을 돌파하기 위해서 제안되었다. 이러한 한계점을 어떻게 돌파할 수 있는가를 생각해보자.


의외로 방법은 간단하다. 바로 직렬연결기술을 사용하는 것이다. 이미 필자의 많은 글에서도 보았듯, 고속의 데이터 전송이 필요한 곳에서 직렬연결기술은 그 입지를 지속적으로 넓혀가고 있다. I/O 버스에서도 마찬가지로 하이퍼트랜스포트와 같은 직렬연결기술이 등장하고 있는데, PCI Express도 예외는 아니다. 어떻게 보면 PCI Express는 하이퍼트랜스포트와 대단히 유사하다.


우선, PCI는 병렬 신호전송방식으로 인하여 신호왜곡에 대단히 취약하다. 이 때문에 클럭주파수를 향상시키기가 매우 까다롭다. 직렬연결기술은 이 문제를 간단히 해소한다. 직렬전송방식으로 바꾸면서 버스 폭을 줄이고 동작주파수를 높이는 것은 이미 RDRAM과 시리얼 ATA 등에서 보아온 방식이다.



이로 인해서 까다로운 라우팅 룰이 단순해지며, 이는 회로의 단순화로 이어진다. 물론, 이 뿐만 아니라 이전에 언급했던 직렬전송기술의 장점도 이어받을 수 있다.


제한된 대역폭의 다양화도 보다 쉽게 이루어진다. 이것은 하이퍼트랜스포트를 상기하면 쉽게 이해할 수 있다. PCI Express는 기본적으로는 하이퍼트랜스포트와 상당히 유사한 직렬전송방식이며, 최소 200MB/s에서 최대 6.4GB/s까지의 대역폭을 구현한다. 따라서 다양한 주변기기에 대응할 수 있게 된다.


PCI의 구조를 그대로 계승하면서 최대 6.4GB/s의 높은 대역폭을 구현할 수 있기 때문에 결과적으로 상당히 다양화되어 있는 많은 인터페이스 종류를 통합할 수 있게 된다. 예를 들어서 AGP의 경우 PCI가 가지는 한계로 인해서 독자적으로 그래픽 코어와 시스템의 메모리 브릿지간을 이어주는 일종의 고속 P2P 포트를 구성한 것인데, PCI Express는 높은 데이터 전송률과 함께, P2P 방식의 직렬연결로 구성되기 때문에 AGP를 대체할 수 있다.(물론, AGP는 그 외의 특징도 다수 가지고 있으며, 현재 PCI Express가 적용될 것이라는 확답도 나오지 않은 상태이기 때문에 AGP가 PCI Express로 대체될 가능성은 적다고 보아야 한다.)


PCI Express의 목표와 하이퍼트랜스포트와의 차이


PCI Express가 달성하고자 하는 목표 역시 하이퍼트랜스포트와 매우 유사하다. 하지만 상당부분에서 하이퍼트랜스포트와는 다른모습을 보인다. 다음의 내용을 보자.



  • 첫째, 저가격 대량생산을 지향한다. 즉, PCI Express가 특별한 고성능/고가의 시스템이 아닌, 일반 사용자용 시스템을 비롯한 모든 범위의 시스템에 적용되기 위해서 제안된 것임을 의미한다. 이는 PCI-X와 확연히 다른 부분이다. PCI-X가 고속의 인터페이스를 바탕으로 서버 등에서 사용되는 어플리케이션에 초점을 맞추고 있는 것과는 분명 틀리다.
  • 두번째, 데스크탑, 모바일 PC, 서버, 통신장비 등에서 사용되는 규격을 단일화한다. 즉, 첫번째 목표와 맥락을 같이하는 것이다. 이로써 다양한 장비와 분야에 사용되는 주변기기를 통일할 수 있어서 각종 주변기기의 제작을 더욱 용이하게 할 수 있다.
  • 세번째, PCI와의 소프트웨어 호환성을 유지한다. 병렬연결에서 직렬연결로 전환되었기 때문에 물리적 호환성을 유지하는 것은 불가능하다. 그러나 소프트웨어적인 호환성을 유지함으로써 기존의 운영체제나 설정/디바이스 드라이버 인터페이스를 그대로 보존할 수 있어서 PCI에서 PCI Express로의 이행을 보다 유연하게 한다.
  • 네번째, 전력관리 및 핫플러깅 등의 진보된 기능을 탑재한다. 특히 핫플러깅은 새로이 등장하는 I/O 버스들에는 필수적으로 따라붙는 것이며, 전력관리 기능은 모바일 시스템에서의 잇점을 고려한 것이라고 생각할 수 있다.
  • 다섯째, 다양한 성능을 제공함으로써 다종다양한 하드웨어에 적절히 대응한다. 이는 앞서 설명한 내용과 같다. 이와 더불어 핀(pin)당 대역폭을 증가시켜서 소수의 핀으로도 높은 대역폭을 구성할 수 있게 만들면서 적은 오버헤드 및 레이턴시만을 가지도록 하여서 최대한의 성능을 추구한다.
  • 칩간의 연결(chip to chip) 및 보드간 연결(board to board), 그리고 도킹 시스템을 통한 연결 등이 고려되고 있다.

마지막 항목을 제외하면 하이퍼트랜스포트와 매우 유사하다. 하이퍼트랜스포트는 칩간 연결을 위해서 만들어진 것이며 보드 외부로의 연결은 고려되고 있지 않다. 그러나 PCI Express는 보드간 연결을 비롯하여 도킹 시스템을 통한 연결까지도 가능하다. 또한, 다음과 같은 점에서 하이퍼트랜스포트와는 큰 차이점을 보여준다.



  • 프로세서를 위한 동시성 상호연결기술을 지원하지 않는다.
  • 메모리 연결용 버스로 사용되지 않는다.
  • 클러스터 시스템 구성을 위한 케이블 연결을 지원한다.

하이퍼트랜스포트와 연관지어 생각해보자. 하이퍼트랜스포트는 기본적으로 보드 내의 칩간연결만을 지원하는 고속의 직렬 버스 방식이다. 그 과정에서 프로세서와 메모리까지도 하이퍼트랜스포트로 연결되며, 특히 다수의 프로세서 사이에는 cHT로 연결되어서 프로세서의 캐시 동시성 문제를 해결하고 있다.



이것은 인텔이 프로세서 버스를 변경할 의사가 없음을 방증한다. 인텔이 주도적으로 밀고 있는 PCI Express는 프로세서와는 무관하게 각 브릿지부터 연결이 시작된다. 프로세서는 현재의 AGTL+ 버스의 연장선상에 있는 버스구조로 연결될 것이다.


한편, PCI Express에는 '클러스터링을 위한 케이블 연결'이 포함되어 있다. 이것은 인텔의 프로세서가 AGTL+ 버스구조를 고수함으로써 빚어지는 다수의 프로세싱 환경에서의 불리함을 극복하기 위한 것이다. AGTL+ 버스구조는 기본적으로 셰어드 버스이다. 그렇기 때문에 다수의 프로세서가 하나의 버스를 공유하며, 프로세서가 많아질수록 버스의 효율성은 저하된다. 이러한 이유로, 인텔 프로세서를 사용한 시스템은 단일 시스템에서 4개를 초과하는 프로세서를 사용하는 경우가 거의 없고 그 이상의 프로세서를 사용한 병렬처리를 위해서는 클러스터링이 필수적이다.



PCI Express는 클러스터링을 위한 '단거리의 고속 외부 케이블 연결'을 지원함으로써 대규모 시스템에 AMD의 하이퍼트랜스포트와는 다른 방법으로 대응하고 있다.