인텔 퀵패스 인터커넥트

**인텔 퀵패스 인터커넥트**(Intel QuickPath Interconnect, **QPI**)는 인텔이 개발한 확장 가능한 마이크로프로세서 프로세서 인터커넥트로, 2008년부터 제온, 아이테니엄 및 특정 데스크톱 플랫폼에서 프론트 사이드 버스(FSB)를 대체했다. 이는 확장성과 가용 대역폭을 증가시켰다. 명칭 발표 전까지 인텔은 이를 **공통 시스템 인터페이스**(**Common System Interface**, **CSI**)라고 불렀다. 초기 초기 판은 Yet Another Protocol (YAP) 및 YAP+로 알려져 있었다.

QPI 1.1은 샌디브리지-EP(롬리 플랫폼)와 함께 도입된 대폭 개량된 버전이다.

QPI는 LGA 3647 소켓 기반의 스카이레이크-SP 제온 프로세서에서 인텔 울트라 패스 인터커넥트(UPI)로 대체되었다.

## 배경
때때로 "버스"라고 불리기도 하지만, QPI는 동적 라우팅 기능을 갖춘 확장 가능한 인터커넥트 패브릭이다. 이는 2003년경부터 Advanced Micro Devices(AMD)가 사용해 온 하이퍼트랜스포트와 경쟁하기 위해 설계되었다. 인텔은 매사추세츠 마이크로프로세서 디자인 센터(MMDC)에서 과거 알파 개발 그룹의 일원이었던 인원들을 통해 QPI를 개발했다. 이 그룹은 인텔이 컴팩과 HP로부터 인수했으며, 원래는 디지털 이큅먼트 코퍼레이션(DEC) 소속이었다.
그 개발 소식은 일찍이 2004년에 보고된 바 있다.

인텔은 2008년 11월 인텔 코어 i7-9xx 및 X58 칩셋을 통해 데스크톱 프로세서용으로 처음 인도했다.
이후 2009년 3월에 코드명 네할렘 제온 프로세서로, 2010년 2월에 코드명 투퀼라(Tukwila) 아이테니엄 프로세서로 출시되었다.

2017년 제온 스카이레이크-SP 플랫폼부터 인텔 울트라 패스 인터커넥트에 의해 대체되었다.

## 구현
[섬네일|right|upright=2.2|QPI는 인텔의 [네할렘 (마이크로아키텍처)|네할렘 마이크로아키텍처의 언코어 구성 요소이다.]]

QPI는 인텔이 퀵패스 기술을 구현하기 위해 부르는 퀵패스 아키텍처라는 시스템 아키텍처의 요소이다. 단일 프로세서 메인보드의 가장 단순한 형태에서, 단일 QPI는 프로세서를 IO 허브에 연결하는 데 사용된다(예: 인텔 코어 i7을 X58에 연결). 아키텍처의 더 복잡한 사례에서는 별도의 QPI 링크 쌍이 메인보드 네트워크의 하나 이상의 프로세서와 하나 이상의 IO 허브 또는 라우팅 허브를 연결하여, 모든 구성 요소가 네트워크를 통해 다른 구성 요소에 액세스할 수 있도록 한다. 하이퍼트랜스포트와 마찬가지로 퀵패스 아키텍처는 프로세서가 통합 메모리 컨트롤러를 가질 것을 전제로 하며, 불균일 기억 장치 접근(NUMA) 아키텍처를 가능하게 한다.

각 QPI는 두 개의 20레인 점대점(point-to-point) 데이터 링크로 구성되며, 각 방향으로 하나씩(전이중), 각 방향당 별도의 클록 쌍을 포함하여 총 42개의 신호로 이루어진다. 각 신호는 차동 신호 쌍이므로 총 핀 수는 84개이다. 20개의 데이터 레인은 각각 5개 레인씩 4개의 "쿼드런트(quadrants)"로 나뉜다. 전송의 기본 단위는 80비트 플릿(flit)으로, 오류 검출용 8비트, "링크 계층 헤더"용 8비트, 데이터용 64비트로 구성된다. 하나의 80비트 플릿은 두 클록 사이클(클록 틱당 두 번의 20비트 전송, 총 4회)에 걸쳐 전송된다. QPI 대역폭은 각 방향으로 매 두 클록 사이클마다 64비트(8바이트)의 데이터를 전송하는 것으로 계산하여 홍보된다.

초기 구현에서는 단일 4쿼드런트 링크를 사용하지만, QPI 사양은 다른 구현도 허용한다. 각 쿼드런트는 독립적으로 사용될 수 있다. 고신뢰성 서버에서 QPI 링크는 성능 저하 모드로 작동할 수 있다. 20+1개 신호 중 하나 이상이 실패하면, 인터페이스는 남은 10+1개 또는 심지어 5+1개 신호를 사용하여 작동하며, 클록이 실패할 경우 클록을 데이터 신호로 재할당하기도 한다. 초기 네할렘 구현은 전체 4쿼드런트 인터페이스를 사용하여 25.6 GB/s(6.4GT/s × 1바이트 × 4)를 달성했으며, 이는 X48 칩셋에서 사용된 인텔의 1600 MHz FSB의 이론적 대역폭의 정확히 두 배를 제공한다.

일부 하이엔드 코어 i7 프로세서는 QPI를 외부로 노출하지만, 단일 소켓 보드용으로 설계된 다른 "메인스트림" 네할렘 데스크톱 및 모바일 프로세서(LGA 1156 코어 i3, 코어 i5 및 린필드/클락스필드 및 후속 제품군의 기타 코어 i7 프로세서 등)는 멀티 소켓 시스템용이 아니기 때문에 QPI를 외부로 노출하지 않는다.

그러나 이러한 칩 내부에서 QPI는 메모리 컨트롤러, CPU 쪽 PCI 익스프레스 및 GPU(존재하는 경우)를 포함하는 칩 부분인 "언코어"와 통신하는 데 사용된다. 언코어는 CPU 코어와 동일한 다이에 있을 수도 있고 아닐 수도 있는데, 예를 들어 웨스트미어 기반 클락데일/애런데일에서는 별도의 다이에 위치한다.

린필드, 클락스필드, 클락데일 및 애런데일을 시작으로 한 2009년 이후의 단일 소켓 칩에서는 전통적인 노스브리지 기능이 이러한 프로세서에 통합되었으며, 따라서 더 느린 다이렉트 미디어 인터페이스(DMI) 및 PCI 익스프레스 인터페이스를 통해 외부와 통신한다.

따라서 프로세서 소켓을 통해 (과거의) 프론트 사이드 버스 인터페이스를 노출하는 비용을 들일 필요가 없다.

비록 데스크톱 및 모바일 샌디브리지 프로세서에는 (예를 들어 클락데일에 있었던 것과 같은) 코어-언코어 QPI 링크가 존재하지 않지만, 다이 내부 코어 간의 내부 링 인터커넥트 또한 적어도 캐시 일관성에 관한 한 QPI 이면의 원칙에 기반하고 있다.

## 주파수 사양
동기 회로인 QPI는 2.4 GHz, 2.93 GHz, 3.2 GHz, 3.6 GHz, 4.0 GHz 또는 4.8 GHz의 클록 속도로 작동한다(3.6 GHz와 4.0 GHz 주파수는 샌디브리지-E/EP 플랫폼에서, 4.8 GHz는 하스웰-E/EP 플랫폼에서 도입되었다). 특정 링크의 클록 속도는 링크 양 끝에 있는 구성 요소의 성능과 인쇄 회로 기판상의 신호 경로 특성에 따라 달라진다. 비 익스트림 코어 i7 9xx 프로세서는 순정 기준 클록에서 2.4 GHz 주파수로 제한된다.

비트 전송은 클록의 상승 및 하강 에지 모두에서 발생하므로 전송 속도는 클록 속도의 두 배이다.

인텔은 각 80비트 플릿에서 64비트 데이터 페이로드만 계산하여 데이터 처리량(GB/s 단위)을 설명한다. 그러나 단방향 송신 및 수신 링크 쌍이 동시에 활성화될 수 있으므로 결과값을 두 배로 계산한다. 따라서 인텔은 3.2 GHz 클록을 가진 20레인 QPI 링크 쌍(송신 및 수신)의 데이터 속도가 25.6 GB/s라고 설명한다. 2.4 GHz 클록 속도는 19.2 GB/s의 데이터 속도를 낸다. 더 일반적으로 이 정의에 따르면 2개 링크의 20레인 QPI는 각 방향으로 4개씩, 클록 사이클당 8바이트를 전송한다.

속도는 다음과 같이 계산된다.
:3.2 GHz
:× 2 비트/Hz (더블 데이터 레이트)
:× 16(20) (데이터 비트/QPI 링크 너비)
:× 2 (동시에 작동하는 단방향 송신 및 수신)
:÷ 8 (비트/바이트)
:= 25.6 GB/s

## 프로토콜 계층
QPI는 물리, 링크, 라우팅, 전송 및 프로토콜 계층이 분리된 5계층 아키텍처로 규정되어 있다. 코어 i7-9xx 및 제온 DP 프로세서와 같이 전달(forwarding) 기능 없이 점대점 QPI 사용만을 목적으로 하는 장치에서는 전송 계층이 존재하지 않으며 라우팅 계층은 최소화되어 있다.
; 물리 계층 (Physical layer)
: 물리 계층은 실제 배선과 차동 송수신기, 그리고 물리 계층 단위를 송수신하는 최하위 논리로 구성된다. 물리 계층 단위는 20비트 "피트(phit)"이다. 물리 계층은 20개 레인이 모두 가용할 때는 20개 레인에서, 오류로 인해 QPI가 재구성된 경우에는 10개 또는 5개 레인에서 단일 클록 에지를 사용하여 20비트 "피트"를 전송한다. 데이터 신호 외에도 클록 신호가 송신기에서 수신기로 전달된다(이는 추가 핀을 대가로 클록 복구를 단순화한다).
; 링크 계층 (Link layer)
: 링크 계층은 80비트 플릿의 송수신을 담당한다. 각 플릿은 물리 계층에 4개의 20비트 피트로 보내진다. 각 플릿은 링크 계층 송신기에서 생성된 8비트 CRC와 72비트 페이로드를 포함한다. 링크 계층 수신기가 CRC 오류를 감지하면, 수신기는 쌍을 이루는 반환 링크의 플릿을 통해 송신기에게 알리고 송신기는 플릿을 재전송한다. 링크 계층은 수신기의 버퍼가 넘치는 것을 방지하기 위해 크레딧/데빗 방식을 사용하는 흐름 제어를 구현한다. 링크 계층은 상위 계층이 주로 캐시 일관성 유지를 위해 데이터 플릿과 비데이터 메시지를 구별할 수 있도록 6가지 클래스의 메시지를 지원한다. 퀵패스 아키텍처의 복잡한 구현에서 링크 계층은 서로 다른 클래스에 대해 별도의 흐름 및 흐름 제어를 유지하도록 구성될 수 있다. 단일 프로세서 및 듀얼 프로세서 구현에서 이것이 필요하거나 구현되었는지는 명확하지 않다.
; 라우팅 계층 (Routing layer)
: 라우팅 계층은 8비트 헤더와 64비트 페이로드로 구성된 72비트 단위를 전송한다. 헤더에는 목적지와 메시지 유형이 포함된다. 라우팅 계층이 단위를 수신하면 라우팅 테이블을 조사하여 해당 단위가 목적지에 도달했는지 확인한다. 도달했다면 다음 상위 계층으로 전달된다. 그렇지 않으면 올바른 아웃바운드 QPI로 보내진다. QPI가 하나뿐인 장치에서 라우팅 계층은 최소화된다. 더 복잡한 구현의 경우 라우팅 계층의 라우팅 테이블은 더 복잡하며, 실패한 QPI 링크를 피하기 위해 동적으로 수정된다.
; 전송 계층 (Transport layer)
: 전송 계층은 점대점 연결만을 목적으로 하는 장치에는 필요하지 않으며 존재하지 않는다. 여기에는 코어 i7이 포함된다. 전송 계층은 직접 연결되지 않았을 수 있는 다른 장치의 피어로부터 QPI 네트워크를 통해 데이터를 송수신한다(즉, 데이터가 중간 장치를 통해 라우팅되었을 수 있음). 전송 계층은 데이터가 완전한지 확인하고, 그렇지 않으면 피어에게 재전송을 요청한다.
; 프로토콜 계층 (Protocol layer)
: 프로토콜 계층은 장치를 대신하여 패킷을 송수신한다. 일반적인 패킷은 메모리 캐시 행(row)이다. 프로토콜 계층은 관련 메시지를 송수신함으로써 캐시 일관성 유지에도 참여한다.

## 같이 보기
* 네할렘 마이크로아키텍처
* FSB
* 하이퍼트랜스포트

## 각주

분류:컴퓨터 버스
분류:인텔
분류:직렬 버스