pcie 버스의 non-transparent bridge 기술 동향 · 2018. 10. 11. · vender identification,...

62
PCIe 버스의 Non-Transparent Bridge 기술 동향 2016. 11 슈퍼컴퓨팅본부 슈퍼컴퓨터시스템개발실 기술동향보고서

Upload: others

Post on 03-Jun-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

PCIe 버스의 Non-Transparent Bridge 기술 동향

2016. 11

슈퍼컴퓨팅본부

슈퍼컴퓨터시스템개발실

기술동향보고서

Page 2: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

PCIe 버스의 Non-Transparent Bridge 기술 동향

일 자: 2016. 11. 1.부 서: 슈퍼컴퓨터시스템개발실작성자: 차광호, 조혜영, 최민(충북대)

Page 3: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 3 -

목 차

1. Background ······································································································································· 4

2. NTB (Non-transparent Bridging) 개념 소개 ··········································································· 10가. NTB 정의 ······································································································································ 10나. Transparent Bridge 와 Non-Transparent Bridge(NTB)의 차이점 ····························· 11다. NTB 성능 ······································································································································ 12

3. Intel PCIe NTB 기술 소개 ············································································································· 19가. NTB 사용하는 경우와 사용하지 않는 경우에 대한 Intel 시스템 구조 ···························· 19나. NTB 시스템 연결 및 관련 레지스터 ······················································································· 23다. NTB Primary ······························································································································ 24

1) primary side의 PCI configuration space ······································································· 242) PBAR01- Primary side의 PCIe Base Address Register 0 - 1 ································ 273) PBAR23/PBAR45 ······················································································································ 31

라. NTB Secondary ························································································································· 311) secondary side의 PCI Configuration Space ·································································· 312) SBAR23/SBAR45 ······················································································································ 34

4. PCIe Swiching 적용 사례 ·············································································································· 35가. Dolphin Interconnect Solutions ·························································································· 35나. Native PCI Express Back-end Interconnect in FlashArray//m ······························ 39

5. IDT PCIe NTB 기술 소개 ··············································································································· 42가. Enumeration and Initialization ···························································································· 43나. NTB in the PES32NT24G2 ····································································································· 46다. 시스템 아키텍쳐 ························································································································· 49

6. 소프트웨어 통신 메커니즘 ··············································································································· 53가. 통신 메커니즘에 대한 세가지 분류 ·························································································· 53나. 데이터 버퍼 구조와 데이터 전송 프로토콜 (Data buffer Structure and Data Transfer Protocol) ··························································································································· 54다. PCIe Switching을 위한 일반적인 소프트웨어 구조 ···························································· 56라. 주소 변환(Address Translation) ···························································································· 57마. 소켓 다이렉트 프로토콜(Socket Direct Protocol) ······························································ 58

7. Concluding Remarks ····················································································································· 61

8. 참고문헌 ············································································································································ 63

Page 4: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 4 -

1. Background

그림 1은 PCI Express 인터페이스의 기본 구조를 보여준다. PCI Express Physical Layer에

서 PCI 접촉단자 전체를 Link라 할 때, 직렬 신호를 송수신하는 기본 단위을 Lane으로 명명

한다. PCI Express x1, x4, x8, x16을 구분하는 척도가 바로 Lane의 수가 몇 개인지에 따라

결정된다. 또한, 하나의 Lane 내에서 존재하는 물리적 회선을 wire로 표기한다. 그리고 이

wire 상에서 흐르는 신호를 signal로 부른다.

그림 1 PCI Express Basics, (출처 - Ravi Budruk, PCI-SIG)

PCI Express x1 card는 pin 18 (Lane 0)에서 끝나며, PCI Express x4 card는 pin 32

(Lane 0~3)에서 끝나며, PCI Express x8 card는 pin 49 (Lane 0~7) 끝나며, PCI Express

x16 card는 pin 82(Lane 0~15)에서 끝난다. (그림2 참조)

그림 2 PCI Express Interface x1, x4, x8, x16 (출처 - Hardware Secrets)

Page 5: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 5 -

이에 따라, PCI Express x1, x4, x8, x16에 따라 Physical connector의 크기에 차이가 있

으며, 다음 그림 3과 같이 connector pinout과 연관된다.

그림 3 PCI Express Connector Pinout (출처 - Wikipedia,

https://en.wikipedia.org/wiki/PCI_Express)

PCI(Peripheral Component Interconnect) 는 시스템에서 주변장치 컴포넌트들을 구조화되

고 제어가능한 방법으로 어떻게 연결할 것인지를 결정하는 표준이다. 이러한 표준은 시스템

컴포넌트가 전기적으로 연결되고, 동작하는 방법에 대한 것이다. chapter 2에서는 본격적으로

PCIe swiching을 기술하기에 앞서 background knowledge를 우선 살펴보고자 한다.

Page 6: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 6 -

그림 4 예제 PCI 기반 시스템 (출처 : http://www.tldp.org/LDP/tlk/dd/pci.html)

위 그림 4는 예제 PCI 기반 시스템의 논리적 구조도이다. PCI 버스와 PCI-PCI bridge 는 시

스템 컴포넌트들을 상호 연결한다. CPU는 PCI bus 0과 연결되며, primary PCI 버스는

video 장치와 연결되어 있다. 또한, 특별한 형태의 PCI 장치로서, PCI-PCI bridge는

primary bus를 secondary PCI bus (PCI bus 1)와 연결하는 역할을 한다. PCI 스펙에서는

PCI bus 1은 PCI-PCI bridge의 downstream으로 기술하며, PCI bus 0은 PCI-PCI bridge

의 upstream으로 기술한다. 위 그림 4에서 secondary PCI bus에 연결되는 장치는 SCSI 디

스크와 이더넷 네트워크 장치이다. 물리적으로 브리지(bridge)는 secondary PCI bus와 두

개의 장치(SCIC와 이더넷)은 모두 같은 PCI card combination에 해당한다.

PCI-ISA bridge는 과거 구시대에 사용하더 ISA 디바이스를 지원하기 위한 용도로 사용하며,

Super I/O controller라고 표시된 것은 과거 키보드와 마우스 플로피 디스크 드라이브 등을

제어하는 장치이다.

Video memory address-range 0xA0000-0xBFFFF Programmable timer i/o-ports 0x40-0x43Keyboard and mouse i/o-ports 0x60-0x64Real-Time Clock’s i/o-ports 0x70-0x71Hard Disk controller’s i/o-ports 0x01F0-01F7Graphics controller’s i/o-ports 0x03C0-0x3CFSerial-port controller’s i/o-ports 0x03F8-0x03FFParallel-port controller’s i/o-ports 0x0378-0x037A

Page 7: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 7 -

1) PCI 주소공간 (Address Space)

CPU와 PCI 장치는 메모리(서로 공유하는 경우에)를 접근할 필요가 있다. 이러한 메모리는

PCI 장치를 제어하기 위해서 디바이스 드라이버에 의해서 사용되며, 메모리와 PCI 장치간에

서 상호 정보를 전달하는데 사용된다. 일반적으로 공유 메모리(shared memory)는 해당 장치

에 대한 제어 및 상태 레지스터를 포함한다. 이들 레지스터들은 장치를 제어하고 그 상태를

읽어들이는 목적으로 사용된다. 예를들어, PCI SCSI 디바이스 드라이버는 그 SCSI 장치가

SCSI 디스크에 데이터를 쓸 준비가 되어있는지 확인하기 위해서 상태 레지스터 값을 읽어볼

필요가 있을 것이다. 또는 SCSI 디스크의 전원이 켜진 후 장치의 동작/실행을 시작시키기 위

해서 제어 레지스터에 데이터를 쓸 필요가 있을 것이기 때문이다.

CPU의 시스템 메모리는 이러한 공유메모리로 사용될 수는 반면, 만약 PCI device가 접근하

는 경우에는 CPU는 PCI 장치가 동작을 마칠때까지 stall 할 수 밖에 없을 것이다. 따라서, 시

스템의 주변 장치에게 메인 메모리를 이와 같이 무분별하게 사용할 수 있도록 허용하는 것은

좋은 방법은 아니며, 때로는 악의적인 또는 잘못 제작된 장치들이 시스템을 불안정하게 만들

수 있다.

주변장치(peripheral device)는 그 자신의 메모리 공간을 가진다. CPU는 이러한 공간을 접근

할 수 있으나, 반대로 주변장치가 시스템 메모리를 접근하는 것은 DMA 채널을 통해서 매우

엄격하게 제어된다. ISA 장치들은 두가지 주소공간(ISA I/O, ISA 메모리)을 가지는 반면, PCI

는 세가지 주소공간(PCI I/O, PCI 메모리, PCI Configuration Space)을 가진다. 이들 모든

주소공간들은 또한 CPU에 의해서 접근가능하며, PCI I/O와 PCI 메모리 주소 공간은 디바이

스 드라이버에 의해서 접근가능하고 PCI Configuration Space는 운영체제의 PCI 초기화 프

로그램에 의해서 접근가능하다.

2) PCI 설정 헤더(Configuration Header)

모든 PCI 슬롯(slot)이 그 PCI configuration header를 가지며, 그 offset은 해당 PCI board

의 슬롯 번호와 연관되어진다. 따라서, 보드상의 첫 번째 슬롯에 꽂힌 PCI 카드의 경우 PCI

configuration offset 0을 할당받고, 두 번째 슬롯에 꽂힌 PCI 카드의 경우 offset 256 (모든

PCI configuration header의 길이는 256 바이트의 동일한 길이를 갖는다)을 할당받는다.

PCI configuration header와 body의 구조는 다음 그림 5에 도시하였다.

Page 8: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 8 -

그림 5 PCI Configuration Space (출처 : Allan B. Cruse, Dept. of Computer Science,

University of San Francisco)

따라서, 시스템 초기화시에 사전에 정해진 하드웨어 메카니즘에 의해서 모든 사용가능한 PCI

configuration header들을 조사하는 code가 실행되어, header의 필드 중 한 부분(일반적으

로 Vendor Identification field)를 읽어봄으로써 올바른 PCI 카드가 장착되어 있는지 여부를

확인할 수 있다. 만약, 비어있는 슬롯인 경우에는 Vendor Identification field와 Device

Identification field 부분에 0xFFFFFFFF 값을 반한다.

그림 6 PCI Configuration Header (출처 : http://www.tldp.org/LDP/tlk/dd/pci.html,

Allan B. Cruse, Dept. of Computer Science, University of San Francisco)

위 그림 6은 PCI configuration header의 256 byte layout을 보여주고 있다. 여기에는

Page 9: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 9 -

Vender Identification, Device Identification, Status, Command, Class Code, Base

Address Register, Interrupt Pin, Interrupt Line을 포함한다.

3) PCI I/O 와 PCI Memory Address

이들 두 개의 주소공간은 장치가가 운영체제에서 수행되는 디바이스 드라이버와 통신하기 위

해서 사용된다. 예를들어, DECship 21141 Ethernet NIC 장치는 그 내부 레지스터들을 PCI

I/O 공간에 매핑한다. 그러면, 디바이스 드라이버는 이 Ethernet NIC를 제어하기 위해서 이

러한 레지스터에 데이터를 읽고 씀으로써 장치를 제어할 수 있다. 비디오 드라이버는 일반적

으로 PCI memory address space의 상당 부분을 활용하여 비디오 정보를 보관한다.

그림 7 PCI x1, PCI x16, PCI를 지원하는 Main Board (출처 : Hardware secrets)

그림 8 위쪽에서부터 PCIe x4, PCIe x16, PCIe x1, PCIe x16 (wikipedia,

https://en.wikipedia.org/wiki/PCI_Express)

Page 10: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 10 -

2. NTB (Non-transparent Bridging) 개념 소개

제조사별 NTB 기술 소개에 앞서, non-transparent bridge (이하 NTB)의 기본개념을 소개

한다.

가. NTB 정의

NTB 는 PCI system에서 인텔리전트 어댑터(intelligent adapter)를 지원하기 위한 것이다.

여기서 인텔리전스(intelligence)란, AI수준의 지능이 아닌, 수동적인 일반 PCI 주변장치(네트

워크 NIC 카드, 사운드 카드 등)가 아니라, CPU가 장착되어 있는 수준의 독립적으로 연산 및

장치제어가 가능한 system을 의미한다. 따라서, 멀티 프로세서/클러스터 컴퓨팅를 구현하거

나 할 때 유용하다.

그림 9 Type 0와 Type 1의 CSR header 예시

NTB는 PCI enumeration시 사용되는 탐색 소프트웨어(discovery software)에게 자신이 마

치 PCI 버스상의 endpoint인 것처럼 흉내(masquerading)냄으로써 인텔리전트(intelligent)

서브시스템을 서로 격리시키는 효과가 있다. 즉, 해당 bridge를 넘어가는 transaction에 대해

서는 양측에 Type 0 CSR header를 보여줌(expose)으로써 PCI 장치 discrovery 및

forward를 중단시킴과 동시에 주소변환을 통해 결과적으로 프로세서 상호간 통신

(interprocessor communication)이 가능하도록 한다.

참고로, CSR Type 1 header에는 bus number와 device number를 명시할 수 있는 field

가 있는데, 이는 즉 bridge 건너 다른 PCI bus 의 bus number를 명시함으로써 bridge 넘

어에 존재하는 특정 device에 데이터를 보낼 수 있다는 의미이다. 반면, CSR Type 0

header는 이러한 field가 없으므로, 해당 bus segment 내부에서만 데이터를 주고 받는 것을

Page 11: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 11 -

의미한다. transparent bridge는 Type 1 CSR header를 사용하며, NTB(non-transparent

bridge)는 Type 0 CSR header를 사용한다. 참고로, 그림 9는 이러한 CSR header를 도시

한다.

그림 10 NTB 와 NTB 연결을 갖는 시스템 토폴로지 (출처 : IDT

AN-724_APN_20090930.PDF)

그림 10 에서와 같이, NTB는 특정 서브시스템에서 PCI 버스상의 endpoint처럼 동작함으로

써, 다른 편에 위치한 서브시스템을 상호 격리시키는 효과가 발생한다. 그럼에도 불구하고,

NTB는 주소변환(address translation)을 통해 상호간 interprocessor communication을 가

능하게 함으로써 필요시 통신할 수 있다.

나. Transparent Bridge 와 Non-Transparent Bridge(NTB)의 차이점

NTB는 transparent bridge와 공통적으로 독립적인 PCI bus(PCI 또는 PCI Express bus)에

대해서 데이터 전송 경로(path)를 제공한다는 점에서 기능적으로 유사하다. 그러나, NTB와

transparent bridge 간의 가장 큰 차이점은 NTB가 사용될 경우에 bridge의 하향부분

(downstream side)에 위치한 장치들은 상향부분(upstream side)에서는 보이지 않는다는 점

이다. 이는 bridge의 하향부분(downstream side)에 위치한 인텔리전트(intelligent)한 제어기

(예를들면 CPU를 포함하는 컴퓨터)가 자신의 downstream side에 위치하는 서브시스템 내

각종 장치들을 독립적으로 관리할 수 있다는 점이다. 따라서, PCIe 버스로 연결된 환경에서도

Page 12: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 12 -

특정 시스템 호스트에 대한 관리를 multi controller 가 아닌 single controller에서 처리할

수 있다는 장점이 발생한다. 두 버스 사이의 데이터 전송 경로는 bridge의 하향부분

(downstream side)에 위치한 장치들이 버스의 상향부분(upstream side)를 향하여 데이터를

직접(directly), 인텔리전트 컨트롤러(예를들면 CPU)의 관여 없이, 전송할 수 있도록 지원한

다. 이러한 트랜잭션(transaction)은 P2P bridge를 통해 서로 다른 PCI bus 버스를 통과하는

데 있어 규제받지 않고 forwarding 가능하다.

NTB는 또한 첫 번째 호스트(primary host)의 PCI bus로 구성된 서브시스템(subsystem) 계

층구조(hierarchy)에 두 번째 호스트(secondary host)를 연결하는 데 사용될 수 있다. 이는

두 시스템간 통신을 가능하도록 하는 반면, 두 시스템을 서로 격리시키는 효과도 발생한다.

즉, NTB는 일반적으로 도어벨(doorbell)을 통해서 bridge의 다른 편에 위치한 장치에 대해서

인터럽트를 보낼 수 있으며, 또한, scratchpad 레지스터를 보유하고 있어 bridge의 양측에서

데이터를 상호 공유함으로써 interprocessor communication 할 수 있다. 혹시라도

primary host에 failure 가 발생하면, NTB는 secondary host에 의해서 시스템을 재설정하

고 primary host의 역할을 위임할 수 있도록 허용한다.

다. NTB 성능

PCIe는 원래 기존의 32bit PCI 33MHz, PCI 병렬 버스를 대체하기 위해서 개발되었다. 기존

의 PCI버스는 최대 대역폭이 이론적으로 초당 132MB/s이다. 2003년도에 PCI-SIG에서는 직

렬 버스인 PCIe Gen1을 처음 제안하였고, PCIe는 shared switch를 사용해서 기존의 공유버

스(shared bus)를 대체하였고, Data가 레인(Lane)이라 불리우는 물리적 회선을 통해 신호를

송수신하는 데 있어 패킷 단위로 직렬방식으로 전달한다. 각 레인(lane)은 전송 데이터 속도를

최대 2Gbps까지 지원한다.

2007년에는 Gen 2 PCIe가 발표되었고, 이는 각 레인(lane)의 전송 속도가 4Gbps로서 두배

로 증가하였다. 2010년 11월에는 Gen 3 스펙이 발표되었고, 각 레인(lane)당 전송 속도가

8Gbps까지 향상되었다. 16 레인(x16)을 사용할 경우, 전송속도가 120Gbps, cut-through

latency 120ns 에 이른다.

PCI Gen 1과 Gen 2는 8b/10b 엔코딩을 사용한다. 이는 실제 데이터 전송 대역폭을

2Gbps로 감소하는 효과가 발생하였다. 따라서, Gen 3 에서는 8b/10b 엔코딩 대신에

scrambling scheme을 사용함으로써 대역폭을 향상하였다.

또한, PCIe 는 credit-based 흐름제어 방식을 사용하는데, 이 방식에서는 transmitter가

트랜잭션 레이어 패킷을 포워딩하기 위해서는 credit을 보유하여야 한다. 이 메커니즘은

Page 13: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 13 -

transmitter가 데이터를 발송하도록 하기 이전에 수신자가 패킷을 받을 공간을 확보하여야만

하는 것으로서, 회선 상대방의 혼잡(congestion) 특성을 고려할 수 있는 흐름제어 방식이다.

그림 11 시스템 인터커넥션 토폴로지 (system interconnection topology) (출처 -

Performance of System Interconnect using PCI Express Switchies, Application Note

AN-547, IDT white paper)

시스템 성능을 평가하기 위한 시스템 구성은 그림 11와 같다. multi-peer 시스템 토폴로지로

서 상호연결을 위해서 x4 PCIe 인터페이스를 사용하여 각 Root complex 프로세서와

Endpoint 프로세서를 연결하였으며, PES64H16 시스템 PCIe 스위치를 통해 연결되었다.

시스템 인터커넥트 소프트웨어가 PCIe 인터페이스 상에서 가상의 이더넷(virtual Ethernet

over PCIe interface)을 제공한다. 따라서, 리눅스 운영체제는 네트워크 인터페이스를 발견하

고 일반적인 이더넷 인터페이스와 동일하게 인지한다. PCIe interface는 데이터 전송과 관한

한 리눅스 운영체제로부터 감추어지며, TCP/IP와 같은 모든 네트워킹 프로토콜 스택과 사용

자 애플리케이션은 모두 기존의 TCP/IP 스택에 아무런 변화를 가하지 않고 그대로 수행된다.

Page 14: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 14 -

그림 12 각 Root complext 프로세서와 각 Endpoint 프로세서의 구체적인 하드웨어 구성 및

설정 (출처 - Performance of System Interconnect using PCI Express Switchies,

Application Note AN-547, IDT white paper)

그림 12는 평가에 활용되는 각 서버 시스템의 스펙을 도시한다. 여기서 Bensley (Endpoint

1)와 Stoakley (Endpoint 2) 서버는 DMA 엔진(IOAT 기술이라 불리우는)을 지원한다.

(Northbridge에서 로컬 메모리간 데이터 전송 및 로컬 메모리에서 PCIe MMIO 주소 공간에

데이터를 전송하는 데 IOAT 지원) 즉, 로컬 메모리에서 MMIO 주소 공간에 데이터 전송할

DMA 엔진을 활용하며, 또한 패킷을 수신할 때에도 로컬 메모리로부터 로컬 메모리로 전송할

때 역시 DMA 엔진을 사용한다.

그런데, AMD 시스템 (Endpoint 3)은 DMA 엔진을 지원하지 않는다. 반면, Write

Combining 기능을 enable하였기 때문에 데이터를 로컬메모리에서 MMIO 주소 공간으로 전

송할 때 여러번의 write 가 발생할 경우, PCIe interface의 write combining buffer에서 캐

싱한 뒤 데이터가 64 byte 단위로 accumulation하여 multiple small write 데이터를 한꺼번

에 PCIe 인터페이스에 single PCIe packet으로 전송한다. 이러한 방법을 통해 PCIe 인터페이

스의 write performance를 향상시킨다.

성능평가를 위해 사용된 벤치마킹 소프트웨어는 Netperf (version 2.4.3)이다. Netperf 는

Page 15: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 15 -

데이터 전송 성능을 측정하는 도구로서 매우 널리 활용되며, freely available한 소프트웨어이

며, 사용자 수준 응용프로그램으로 동작하는 반면 전형적인 사용자 응용프로그램에 대한 실제

적인 시스템 성능을 파악하는 매우 유용한 벤치마크 프로그램이다. Netperf는 client-server

모델로 동작하기 때문에 두 개의 프로그램이 있는데 netperf와 netserver가 그것이다.

Netserver는 계속적으로 동작하면서 netperf 클라이언트로부터 incoming request가 들어오

기를 기다린다. 그러다가, TCP connection 이 established되면, netperf는 netserver에게

data lost 없이 데이터를 보낸다.

그림 13 Netperf 루프백(loopback) 성능 (출처 - Performance of System Interconnect

using PCI Express Switchies, Application Note AN-547, IDT white paper)

그림 13는 loopback 데이터 전송 성능이다. 그림에서 Stoakely와 Bensley는 유사한 CPU를

사용한 관계로 성능이 비슷하게 나타나고 있다. 최대 성능은 가장 큰 데이터 크기를 전송할

때 나타나는데, 그 이유는 TCP/IP 스택을 수행하는데 소요되는 오버헤드가 상대적으로 감소

하기 때문이다. 예를들어, single TCP/IP 패킷은 16K Bytes가 데이터를 보낼 때, 데이터 크

기가 16Bytes인 하나의 패킷을 보내는 반면, 8K Bytes 크기의 데이터를 보낼때에는 두 번의

TCP/IP 패킷을 보내야 하는 것과 유사하다. loop back test에서는 PCIe 인터페이스로 데이

터를 보내지 않기 때문에 DMA 엔진은 사용되지 않았다. 또한, Stoakley와 Bensley 시스템은

4개 코어가 사용되기 때문에 netperf와 netserver 애플리케이션이 각기 다른 코어에서 수행

될 것이므로 최고의 성능이 나타난다.

큰 데이터 크기(large data size)의 데이터 전송에 대해서는 Stoakley와 Bensley 시스템에

Page 16: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 16 -

비해서 AMD 시스템의 성능이 절반 정도로 낮다. 이는 AMD 시스템이 single core 시스템인

이유가 가장 주된 원인이며, single core에서 netperf 와 netserver 프로그램을 모두 처리해

야 하기 때문이다. 따라서, AMD 시스템의 경우 netperf와 netserver를 두 개의 separated

AMD 시스템에서 수행할 경우 성능은 두배로 증가할 것이다.

그림 14 Netperf 10G Ethernet Performance (출처 - Performance of System

Interconnect using PCI Express Switchies, Application Note AN-547, IDT white

paper)

우선, Reference 목적으로 10G Ethernet 성능을 체크해 보기로 한다. 두 개의 Chelsio

N310E 10GE NIC를 활용하여 데이터 전송 성능을 평가하였다. 서버 프로그램 Netserver는

Stoakley에서 수행하고 client 프로그램 netperf 는 Bensley에서 수행한다. 데이터 전송 성

능은 그림 14에 도시한다.

데이터 전송 성능이 대략 16KB, 8KB, 4KB 그리고 2KB 데이터에 대해서 대약 5 ~ 5.5

Gbps 수준의 성능을 보였다. 반면, 1KB와 512bytes 데이터에 대해서는 데이터 전송 성능이

2Gbps 이하로 급격하게 떨어졌다.

Page 17: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 17 -

그림 15 PCIe System Interconnect Performance (출처 - Performance of System

Interconnect using PCI Express Switchies, Application Note AN-547, IDT white

paper)

x4 Gen1 PCIe 링크를 사용하여 Endpoint 프로세서에서 PCIe 스위치까지 연결하였다. x4

Gen 1 PCIe 는 8GB의 raw bandwidth를 제공한다. x86 기반 CPU 시스템은 캐시 라인 크

기보다 큰 크기를 갖는 패킷을 PCIe 패킷으로 전송하지 않는다. cache line 크기가 64byte이

기 때문에, x86 based CPU 시스템을 Root complex 프로세서로 채택한 경우에는 최대 패킷

크기가 64를 초과하지 못한다. 즉, 패킷 크기가 64byte인 환경에서는 effective user data

bandwidth는 6.1Gbps가 최대이다. 따라서, 그림 15에 표기한 빨강색 라인은 최대 effective

user data bandwidth를 나타낸다.

성능이 가장 나쁘게 나타난 경우는 AMD 서버에서 netserver 애플리케이션을 수행하는 경우

(Bensley -> AMD로 접속하는 경우)이다. 왜냐하면, Bensley와 Stoakley에서는 모두 DMA

엔진을 사용하는 데 반해서, AMD에서는 DMA엔진을 지원하지 않기 때문이다.

데이터 크기가 16KB, 8KB, 4KB인 경우에, Bensley/Stoakley 시스템은 5Gbps를 초과하는

성능을 보인다. 이는 x4 PCIe 링크의 최대 성능의 80%에 준하는 성능이다. 반면, 512bytes

크기의 데이터를 전송할 때에는 3Gbps 수준으로 떨어진다.

Page 18: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 18 -

AMD에서 netserver를 수행할 때에는 성능은 512bytes를 제외한 모든 데이터 크기에 대해서

거의 3Gbps수준을 나타낸다. 즉, 최대 성능의 50%를 약간 못미치는 수준의 성능이다. 여기서

성능은 CPU bound 특성을 갖는 것은 아니며, 데이터 크기가 작을 때 훨씬 더 성능에 큰 영

향을 미치기 때문이다.

그림 16 Netperf 성능 비교 (출처 - Performance of System Interconnect using PCI

Express Switchies, Application Note AN-547, IDT white paper)

그림 16는 다양한 설정에서 데이터 전송 성능을 보여준다. Bensley에서 PCIe 시스템

Interconnect의 성능은 Chelsio 10G Ethernet에서 16K, 8K, 4K, 2K에 대해서 거의 비슷한

수준을 보여준다. 또한, 1K 와 512 bytes 데이터 크기에 대해서는 PCIe 시스템

Interconnect의 성능이 Chelsio 10G Ethernet에 비하여 2배 가까이 높다. 그리고, l;oop

back test 에 대해서는 데이터 크기 16K, 8K, 4K, 2K에 대해서 PCIe 시스템 Interconnect

의 성능이 각각 50%, 75%, 90%, 90% 만큼 월등히 우수하다.1)

1) 참고로 이 실험에서 사용된 x4 Gen1 PCI Express는 현재 PCI Express 버전 중 최신의/최고성능 링크는 아니다. 따라서, 최근 판매되는 버전을 사용할 경우 PCI Express 성능은 당연히 위 결과보다 높게 나타날 것이다.

Page 19: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 19 -

3. Intel PCIe NTB 기술 소개

가. NTB 사용하는 경우와 사용하지 않는 경우에 대한 Intel 시스템 구조

그림 17은 Intel Xeon Processor 기반 서버 시스템에서 NTB를 사용하지 않는 경우 설정이

다. 3개의 포트(RP, root port)를 갖고 있고, 2개의 PCIe device가 연결되어 있음. 3번째 RP

포트는 PCIe switch에 연결되어 있으며, 스위치를 통해 다시 3개의 추가적인 PCIe device와

연결되어 있음.

그림 17 (출처 : Intel Xeon Processor C5500/C3500 Series Non-Transparent Bridge,

White Paper)

그림 18 (출처 : Intel Xeon Processor C5500/C3500 Series Non-Transparent Bridge,

White Paper)

Page 20: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 20 -

그림 18는 위와 동일한 시스템(Intel Xeon Processor-Based System)에서 NTB를 사용하는

경우를 보여준다. 첫 번째 RP(root port)가 NTB로 대체된 점이 위 그림 17와 다르다. 이와같

은 NTB 사용 설정은 BIOS에서 port configuration space의 레지스터(register) 값 설정을

통해 가능하다.

PCI Configuration space 란?

PCI 장치는 “configuration space”라 불리우는 “레지스터 세트(register set)”를 가진다.

또한, PCIe에서도 역시 각 장치를 위한 “extended configuration space"를 가지며, 이러

한 configuration space 레지스터 들은 memory location 에 mapping된다. (MMIO)

0~256 바이트는 기존 PCI 와 Compatible한 영역임.

Page 21: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 21 -

NTB는 PCI bus 0에 있는 integrated device이다. 이는 2개 장치로 구성되는 데, 하나는

Primary device이고, 다른 하나는 Secondary device이다. 이러한 두 device는 자신의 고유

의 PCI configuration space를 갖고 있음. (참고로, PCI configuration space는 다음 그림

19와 같음)

그림 19 PCIe Configuration space (출처 :

https://en.wikipedia.org/wiki/PCI_configuration_space)

Primary device는 서버, 노드 #1인 Intel Xeon Processor based system의 PCI tree에서

보여지는 device임. 프로세서에서는 NTB를 Bus 0에 연결된(hardwired된) device 3

function 0으로 바라볼 뿐이다. 반면, NTB의 Secondary side는 두 번째 시스템(서버, 노드

#2)에 대한 PCIe tree상에 연결되는 PCIe link를 제공(expose)한다. 다음 그림 20 는 NTB가

적용된 사례를 보여준다.

Page 22: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 22 -

그림 20 (출처 : Intel Xeon Processor C5500/C3500 Series Non-Transparent Bridge,

White Paper)

그림 20에서 보는 바와 같이 link 는 PCIe port 로 연결되어, root port 와 second system

(서버 ,노드 #2)의 switch port를 상호 연결한다. 그림 xx에서, Intel Xeon

Processor-Based system(서버, 노드 #1)은 NTB의 primary side를 Bus 0, Device 3,

Function 0로 찾을 것이다. NTB configuration space는 primary configuration space로

서 3가지 Base Address Register(BAR)을 정의한다. 이 때, BAR 레지스터는 모두 64bit로

어드레싱 가능하며, Intel Xeon processor에서 사용하는 40-bit 주소공간 중 어느곳에나 위

치할 수 있다. NTB의 secondary side에 의해서 노출되는 PCIe 링크는 두 번째 시스템(서버,

노드 #2)의 PCI 토폴로지에서 발견된다. 그림에서 이 링크는 Bus 7, Device 0, Function 0

에 해당한다.

나. NTB 시스템 연결 및 관련 레지스터

다음 그림 21는 NTB resource를 확대하여 도시한 것이다. 여기서 칼라로 표시된 부분은 다

른 시스템으로부터 어떤 한 시스템에 대한 resource를 access하는 데 사용되는 data path를

표시한 것이다. 예를들어, 녹색으로 표시된 부분은 PCI Express System (서버, 노드 #2)에서

Intel Xeon Processor - based system (서버, 노드 #1)의 resource를 access하기 위해서

사용되는 data path 인 것이다. (예를들어, 이 경우에는 PBAR23, PBAR45, PBAR2XLAT,

PBAR4XLAT 등의 레지스터가 사용된다)

Page 23: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 23 -

그림 21 (출처 : Intel Xeon Processor C5500/C3500 Series Non-Transparent Bridge,

White Paper)

그림 21에서 Intel Xeon Processor-based system (서버, 노드 #1)은 PBAR23 레지스터와

PBAR45 레지스터를 읽고 쓴다. 여기서 PBAR의 P는 Primary를 뜻하며, BAR는 Base

Address Register이다. NTB는 버스상에서 읽기 패킷(read packet)과 쓰기 패킷(write

packet)을 잡아채어(cpature) PCI Express system 시스템(서버, 노드#2)에서 인지할 수 있

도록 전달하는 역할을 수행함. 이 때, NTB는 PBAR2XLAT 레지스터 및 PBAR4XLAT 레지스

터를 활용하여, 주소 변환함으로써 PCI Express system 시스템(서버, 노드#2)의 메모리 맵

(memory map)에 적용가능한 새로운 address로 변환 제공함.

다. NTB Primary

NTB의 primary side에서 프로세서로부터 NTB에 대한 시각(view)는 PCI configuration

space와 3개의 BAR (PBAR01, PBAR23, PBAR45) 이다. PBAR01은 NTB 내부 레지스터의

MMIO base address를 포함하고, PBAR23과 PBAR45는 NTB의 secondary side에 연결된

시스템의 memory map에 대한 접근권한을 얻기 위해서 사용된다.

1) primary side의 PCI configuration space

NTB의 primary side는 Vendor ID, Device ID, Base address register(BAR) 등의

PCI-required register를 포함하여 PCI Type 0 configuration space를 노출한다.

PCI type 0 configuration 이란?

Page 24: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 24 -

PCI configuration cycle에서 cycle은 PCI bus상에 나타나는 하나의 주소임. PCI 스펙은

그러한 PCI configuration address에 대해서 두가지 type을 지정함

PCI Local Bus Specification 에서는 두가지 종류의 configuration transaction type

(Type 0과 Type 1)을 정의한다.

이러한 두 가지 configuration address format은 우선 address bit AD[1::0]비트에서

구분(00인 경우 Type 0 configuration, 01인 경우 type 1 configuration)되며, Type 0

configuration transaction은 현재의 bus segment에 위치한 device를 access할 때 사

용된다. (Bridge로 연결되지 않는 현재 bus segment) 반면, Type 1 Configuration은

bridge를 넘어 존재하는 다른 segment 상의 device에 접근하고자 할 때 사용한다.

(device that resides behind a bridge)

따라서, Type 0 configuration cycle에는 bus number를 지정하는 field가 없으며 (아래

type 0, type 1 configuration 그림 참조), 해당 bus segment 상에 존재하는 모든

device들은 모두 이러한 type 0 configuration cycle을 인식할 수 있다.

Page 25: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 25 -

Type 0 cycle의 실제 활용 예를 살펴본다. 예를들어, PCI configuration data를 실제로

읽어보기로 한다. Type 0 즉, 현재의 bus segment 에 물려있는 PCI device에 대해서

PCI configuration data 항목 중 3번 doubleworld에 위치한 Header Type field를 읽어

보는 예제를 살펴본다.

이를 위해서는 다음과 같이 0x0Cf8 번지의 PCI configuration space address port

0x8000000C값을 설정하여야 한다. (여기서, 해당 PCI device는 bus=0, device=0,

function=0로 가정)즉, 31번 비트에 해당하는 "EN"able configuration space mapping

필드를 1로 설정하면서, 가장 마지막 8비트를 00001100으로 설정하는 것이다. 결과적으로

PCI Type 0과 Type1 configuration을 결정하는 하위 2비트를 00으로 설정하였으므로,

이는 Type 0 configuration에 해당한다.

또한, doubleword값으로 사용하는 6비트를 000011로 설정하였으므로, PCI

configuration header 중 3번 doubleword 부분을 가져오겠다는 의미이다.

이후 약간의 시프트연산 거치면 PCI configuration header의 Header Type field의 값을

가져올 수 있다.

Page 26: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 26 -

configuration space는 또한 MSI, MSI-x 등을 포함하는 여러 PCI capability structure를

포함한다.

PCI defined register에 추가적으로, configuration space는 또한 포트의 functionality를

정의하는 다섯 개의 register를 포함한다. 이들 레지스터의 값은 user-configurable하며, 보

통 non-volatile 저장공간(플래쉬 메모리와 같은)에 저장되어 있다.

이러한 레지스터 중에 하나인 PPD는 port 의 behavior를 정의하는데, 이러한 behavior에는

다음과 같이 3가지 중의 하나를 선택할 수 있다.

1) PCI Express Root Port로서 동작

2) secondary system의 PCIe 포트에 연결되는 NTB

3) second platform에서 또 다른 NTB와 back-to-back으로 연결되는 NTB

이 레지스터는 BIOS 소프트웨어에 의해서 프로그램되며, 어떠한 PCI enumeration software

전체 소스코드는 위와 같다. 0x80000000C 값을 %eax 레지스터에 설정한 다음(1번째 줄),

0x0Cf8번지에 해당하는 PCI configuration space port address를 %dx 레지스터에 설

정한다(2번째 줄). 그러면 inl/outl 명령어(PC에서 4G로 addressing되는 momory space

와 별도로 in/out 명령어로 접근하는 I/O space 영역을 위한 명령어) 중 outl 명령어를

사용하여 %eax 값을 %dx 번지에 출력한다. (3번째 줄)

그러면 PCI configuration space data port인 0x0CFC를 통해서 결과(데이터)를 받아

(input)낼 수 있다. 따라서, 0x0CFC port address를 %dx 레지스터에 넣은 다음(4번째

줄), inl 명령어를 사용하여 이 포트 레지스터의 값을 %eax 레지스터로 받는다(input). (5

번째 줄) 그런다음, %eax레지스터의 상위 16비트 절반을 하위 16비트로 시프트시키고(6번

째 줄), 마지막으로 %eax레지스터의 하위 16비트의 다시 하위 절반을 header_type 변수

로 저장하기 위해서 %al 레지스터값을 리턴하면 된다.(7번째 줄)

Page 27: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 27 -

가 실행되기 이전에 프로그램되어야 한다. 이러한 레지스터를 프로그래밍 하는 것은 NTB 하

드웨어를 enumeration software의 적절한 configuration space에 노출되도록 하기 위한 것

이다.

다른 4개 레지스터(PBAR23SZ, PBAR45SZ, SBAR23SZ, SBAR45SZ)는 attached system에

대한 접근을 획득하기 위해 사용되는 BAR의 크기를 정의한다.

PBAR23SZ와 PBAR45SZ 레지스터는 NTB의 primary side (서버, 노드 #1 측)에 위치하며,

SBAR23SZ, SBAR45SZ 레지스터는 NTB의 secondary side (서버, 노드 #2 측)에 위치한다.

이들 레지스터는 또한 NTB의 양측에서 실행되는 PCI enumeration software가 프로그램되

기에 앞서 우선하여 프로그램 되어야 한다.

2) PBAR01- Primary side의 PCIe Base Address Register 0 - 1

첫 번째 BAR 레지스터인 PBAR01은 IPC(interprocess communication) 뿐만 아니라 NTB의

동작을 제어하는 데 활용된다. 이 BAR 레지스터는 memory-mapped I/O (MMIO) 레지스터

이며, MMIO 영역의 크기는 64KB의 고정 사이즈이다. 다음은 MMIO space에는 다음과 같은

레지스터들이 포함됨.

ü PBAR2LMT & PBAR4LMT 레지스터 - Primary BAR의 크기를 제한하는 Register

PCI 스펙에서는 BAR 크기를 2의 승수(power of 2) 크기로 정의한다. 따라서, 이러한 레지스

터는 추후 설명할 NTB의 primary side에 위치하는 BAR23 레지스터 및 BAR45 레지스터의

메모리 한계를 지정하는데 사용된다. 예를들어, 3GB BAR 크기를 설정하고자 한다면,

PBARnSZ 레지스터를 32로(2 to the 32 = 4GB) 설정한 후, PBARnLMT 레지스터를 적절한

값으로 설정함으로써 실제 사용가능한 BAR address space를 3GB로 제한할 수 있다. 결과적

으로 3GB부터 4GB까지의 주소영역을 접근하려는 시도는 거부된다. 참고로, PBARnLMT 레지

스터는 NTB의 secondary side로부터는 수정 불가능 하다.

ü SBAR2LMT & SBAR4LMT 레지스터 – Secondary BAR 크기를 제한하는 Register

이 레지스터는 PBARnLMT 레지스터와 동일한 기능을 수행하나, 단지 이 레지스터는 NTB의

secondary side에 위치한 BAR에만 영향을 미친다는 점에서 다르다. 앞서 PBARnLMT 레지

스터는 NTB의 secondary side에서는 변경 불가한 반면, 이들 레지스터는 NTB의 양측

Page 28: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 28 -

(primary side 뿐만아니라 secondary side에서도)에서 모두 변경 가능하다.

ü PBAR2XLAT & PBAR4XLAT – primary 주소 변환 레지스터

이 레지스터들은 NTB의 secondary side 시스템의 메모리 맵에 결합된다. 이 레지스터는

NTB의 primary side에 위치한 BAR 레지스터에 대한 접근을 위해 사용된다. 예를들어 다음

그림 22와 같이 PBAR23 레지스터가 0x40000 값을 가지고 있고 그 크기는 64KB(즉,

0x40000부터 0x4FFFF까지)이라 할 때, PBAR2XLAT 레지스터는 0x500000 값으로 초기화

되었다고 가정하자. 이러한 경우, primary side 시스템(Intel Xeon Processor)에서의 이 메

모리 영역(0x40000부터 0x4FFFF)에 대한 접근은 NTB에 의해 발견되고 secondary side 시

스템 (PCI Express System)의 메모리 영역 0x500000부터 0x50FFFF까지의 메모리 접근으로

변환된다.

그림 22 주소변환 사례, (출처 – Intel Xeon Processor C5500/C3500 Series NTB

Hardware)

ü SBAR2XLAT, SBAR4XLAT, - secondary 주소 변환 레지스터

이 레지스터는 PBARnXLAT 레지스터와 유사하다. 그러나, secondary side 시스템(PCI

Express System)에서 primary side 시스템 (Intel Xeon Processor-based system)으로의

주소를 변환하는데 사용된다. 이들 레지스터들은 오직 primary side로부터만 수정 가능하다.

ü SBAR0BASE, SBAR2BASE, SBAR4BASE –

이 레지스터들은 NTB의 secondary side의 configuration space에 위치하는 3개 BAR 레지

스터이다. 이 레지스터는 NTB의 primary side에서 실행되는 소프트웨어가 NTB의

secondary side에 있는 physical BAR 레지스터를 수정하도록 허용한다. 이들 레지스터는

NTB configuration과 같은 PCI enumeration을 수행할 수 있는 NTB의 secondary side에

아무런 agent가 없는 상황에서 특정한 사용 모델(usage model)을 가능하도록 하기 위해서

포함된다.

ü NTBCNTL – NTB 제어 레지스터

Page 29: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 29 -

NTB는 system memory를 향하는 data packet에 대한 CPU snooping을 enable/disable

할 수 있는 기능을 제공한다. 이러한 feature는 각 BAR 레지스터 단위로 NTBCNTL 레지스

터에서 제어 가능하다. 또한, NTBCNTL 레지스터는 PCIe link 자체를 disable/enable 할 수

있는 기능도 제공한다. 이러한 기능은 NTB의 장치에서 enumeration이 실행되기에 앞서

NTB의 secondary side 에 있는 레지스터들이 먼저 설정되어야 하기 때문에 중요하다. NTB

의 secondary side에 연결된 시스템의 파워가 들어왔을 때, PCIe link를 disable하는 것은

enumeration 소프트웨어가 NTB를 발견하지 못하게 한다. 이 때, PCI link가 enable 되면,

hot plug 컨트롤러가 CPU에게 장치가 발견/추가되었음을 알린다. NTBCNTL 레지스터에는

NTB의 secondary side에 위치한 CPU에서 configuration space에 쓰기를 방지하는 비트

또한 포함되어 있다. 이러한 기능은 NTB의 primary side에서 소프트웨어가 NTB에 대한 완

벽한 제어를 갖도록 하는 것이다.

ü PDOORBELL, SDOORBELL – Primary and Secondary 도어벨 레지스터

PDOORBELL 레지스터는 NTB의 Secondary side에 위치한 CPU에서 NTB의 primary side

에 위치한 CPU로 인터럽트를 발생시키고자 할 때 NTB의 Secondary side에 위치한 CPU에

의해서 쓰여진다. 레지스터의 오직 13:0 비트에 해당하는 레지스터들만이 인터럽트 발생을 위

해서 사용가능하다. 레지스터의 14번 비트는 cache flush 동작의 완료를 알리는 데 사용된

다. cache flush 메커니즘과 레지스터의 15번 비트는 PCIe 링크에서 링크 상태가 바뀔때마타

인터럽트를 발생한다. SDOORBELL 레지스터는 NTB의 primary side에 위치한 CPU가 NTB

의 secondary side에 위치한 CPU에게 인터럽트를 발생시키고자 할 때 NTB의 primary

side에 위치한 CPU에 의해 사용된다. 두 레지스터 모두에 대해서, 1을 쓰는 것은 인터럽트가

발생된다. 인터럽트를 받은 CPU는 레지스터에 1을 씀으로써 비트를 클리어(clear)한다.

ü PDBMASK & SDBMASK 레지스터

이들 레지스터는 인터럽트 발생을 방지하도록 한다. 이 레지스터의 특정 비트를 마스킹

(masking)하는 것은 도어벨 레지스터에서 이에 상응하는 비트를 1로 설정함으로써 인터럽트

가 발생되는 것을 disable할 것이다.

ü SPADnn (스크래치패드 레지스터)

NTB는 16개의 공유된 32bit scratchpad 레지스터를 갖는다. 이 scratchpad 레지스터는

interprocessor communication을 위해 양측(primary side 와 secondary side) 모두의

CPU에서 사용가능한 레지스터이다.

Page 30: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 30 -

ü SPADSEMA4 (스크래치패드 세마포어 레지스터)

이 레지스터는 SPADnn 레지스터에 접근하는 시도를 동기화하기 위해서 사용되는 세마포어

레지스터로서, NTB의 양측(primary side와 secondary side) 모두의 CPU에서 실행하는 소

프트웨어에 의해서 사용될 수 있다. 소프트웨어는 이 레지스터로부터 0의 값을 읽을 때, 세마

포어의 ownership을 얻을 수 있으며, 만약 이 레지스터로부터 1의 값을 읽는다면, 세마포어

는 이미 소유가 되어 있는 것이다. 따라서, 소유자가 먼저 세마포어를 놓아(release)야만,

SPADnn 레지스터에 대한 접근을 얻을 수 있다.

PBAR01의 MMIO space 는 secondary side의 PCI configuration space를 접근하는 통로

를 포함한다. 이 영역은 offset 0x500부터 시작해서 4K의 configuration space를 포함한다.

이를 통해, NTB의 primary side에서 동작하는 device driver가 secondary side의 동작을

제어할 수 있도록 한다.

3) PBAR23/PBAR45

PBAR23과 PBAR45 레지스터는 서버, 노드#1(Intel Xeon Processor-based system)으로부

터 NTB의 secondary side(PCI Express System)에 연결된 system (서버, 노드#2)의

memory map에 대한 접근 권한을 획득하는 데 사용된다. 이 BAR 레지스터 각각은 2의 승

수형태로서 4KB(2 to the 12)부터 512GB(2 to the 39) 까지 설정될 수 있다.

Intel Xeon Processor-Based System으로부터 PCI Express System에 대한 접근 방법은

다음과 같다.

① 서버, 노드#1은 PBAR23 또는 PBAR45 레지스터에 읽거나 쓴다.

② NTB 하드웨어는 이러한 읽기/쓰기 패킷을 발견(capture)하고, 이를 서버, 노드#2에 대한

읽기/쓰기로 변경(convert)한다. 이 때 사용된 PBAR23 또는 PBAR45 레지스터에 따라서, 다

음과 같이 각각 PXLAT23 또는 PXLAT45 레지스터를 통한 주소변환(tranlation)이 수행된다.

③ 읽기/쓰기 패킷은 서버, 노드#2의 시스템 메모리를 향할(target) 수도 있고, 또는 만약 서

버, 노드#2가 peer-to-peer 모드를 지원한다면, 패킷은 또 다른 PCIe device를 향할 수도

있을 것이다.

PXLATnn + (InputAddress - PBARnn)

offset 계산하는 부분

Page 31: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 31 -

④ 서버, 노드#2는 PXLAT23 과 PXLAT45 레지스터를 소유하며, 따라서, 서버, 노드#2에서

수행되는 소프트웨어는 해당 접근을 적절한 위치로 directing할 필요가 있음.

라. NTB Secondary

1) secondary side의 PCI Configuration Space

NTB의 secondary side는 PCI에서 요구되는 레지스터(vendor ID, device ID, base

address register 들을 포함하는)를 비롯한 PCI type 1 configuration space를 노출한다.

이러한 type 1 configuration space는 또한 MSI, MSI-x를 비롯한 여러 PCI capability

structure를 포함한다.

첫 번째 BAR인 SBAR01은 interprocessor communication을 비롯하여 NTB의 behavior를

컨트롤하는 데 사용됨. 이 BAR는 고정 크기 32KB를 갖는 memory mapped I/O(MMIO)를

제공함

이 MMIO 공간에 포함되는 레지스터들은 다음과 같다.

ü PBAR2LMT & PBAR4LMT 레지스터 - Primary BAR의 크기를 제한하는 Register

PCI 스펙에서는 BAR 크기를 2의 승수(power of 2) 크기로 정의한다. 따라서, 이러한 레지스

터는 추후 설명할 NTB의 primary side에 위치하는 BAR23 레지스터 및 BAR45 레지스터의

메모리 한계를 지정하는데 사용된다. 예를들어, 3GB BAR 크기를 설정하고자 한다면,

PBARnSZ 레지스터를 32로(2 to the 32 = 4GB) 설정한 후, PBARnLMT 레지스터를 적절한

값으로 설정함으로써 실제 사용가능한 BAR address space를 3GB로 제한할 수 있다. 결과적

으로 3GB부터 4GB까지의 주소영역을 접근하려는 시도는 거부된다. 참고로, PBARnLMT 레지

스터는 NTB의 secondary side로부터는 수정 불가능 하다.

ü SBAR2LMT & SBAR4LMT 레지스터 – Secondary BAR 크기를 제한하는 Register

이 레지스터는 PBARnLMT 레지스터와 동일한 기능을 수행하나, 단지 이 레지스터는 NTB의

secondary side에 위치한 BAR에만 영향을 미친다는 점에서 다르다. 앞서 PBARnLMT 레지

스터는 NTB의 secondary side에서는 변경 불가한 반면, 이들 레지스터는 NTB의 양측

Page 32: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 32 -

(primary side 뿐만아니라 secondary side에서도)에서 모두 변경 가능하다.

ü PBAR2XLAT & PBAR4XLAT – primary 주소 변환 레지스터

이 레지스터들은 NTB의 secondary side 시스템의 메모리 맵에 결합된다. 이 레지스터는

NTB의 primary side에 위치한 BAR 레지스터에 대한 접근을 위해 사용된다. 예를들어 다음

그림 xx와 같이 PBAR23 레지스터가 0x40000 값을 가지고 있고 그 크기는 64KB(즉,

0x40000부터 0x4FFFF까지)이라 할 때, PBAR2XLAT 레지스터는 0x500000 값으로 초기화

되었다고 가정하자. 이러한 경우, primary side 시스템(Intel Xeon Processor)에서의 이 메

모리 영역(0x40000부터 0x4FFFF)에 대한 접근은 NTB에 의해 발견되고 secondary side 시

스템 (PCI Express System)의 메모리 영역 0x500000부터 0x50FFFF까지의 메모리 접근으로

변환된다.

ü SBAR2XLAT, SBAR4XLAT, - secondary 주소 변환 레지스터

이 레지스터는 PBARnXLAT 레지스터와 유사하다. 그러나, secondary side 시스템(PCI

Express System)에서 primary side 시스템 (Intel Xeon Processor-based system)으로의

주소를 변환하는데 사용된다. 이들 레지스터들은 오직 primary side로부터만 수정 가능하다.

ü SBAR0BASE, SBAR2BASE, SBAR4BASE

이 레지스터들은 NTB의 secondary side의 configuration space에 위치하는 3개 BAR 레지

스터이다. 이 레지스터는 NTB의 primary side에서 실행되는 소프트웨어가 NTB의

secondary side에 있는 physical BAR 레지스터를 수정하도록 허용한다. 이들 레지스터는

NTB configuration과 같은 PCI enumeration을 수행할 수 있는 NTB의 secondary side에

아무런 agent가 없는 상황에서 특정한 사용 모델(usage model)을 가능하도록 하기 위해서

포함된다.

ü NTBCNTL – NTB 제어 레지스터

NTB는 system memory를 향하는 data packet에 대한 CPU snooping을 enable/disable

할 수 있는 기능을 제공한다. 이러한 feature는 각 BAR 레지스터 단위로 NTBCNTL 레지스

터에서 제어 가능하다. 또한, NTBCNTL 레지스터는 PCIe link 자체를 disable/enable 할 수

있는 기능도 제공한다. 이러한 기능은 NTB의 장치에서 enumeration이 실행되기에 앞서

NTB의 secondary side 에 있는 레지스터들이 먼저 설정되어야 하기 때문에 중요하다. NTB

의 secondary side에 연결된 시스템의 파워가 들어왔을 때, PCIe link를 disable하는 것은

enumeration 소프트웨어가 NTB를 발견하지 못하게 한다. 이 때, PCI link가 enable 되면,

Page 33: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 33 -

hot plug 컨트롤러가 CPU에게 장치가 발견/추가되었음을 알린다. NTBCNTL 레지스터에는

NTB의 secondary side에 위치한 CPU에서 configuration space에 쓰기를 방지하는 비트

또한 포함되어 있다. 이러한 기능은 NTB의 primary side에서 소프트웨어가 NTB에 대한 완

벽한 제어를 갖도록 하는 것이다.

ü PDOORBELL, SDOORBELL – Primary and Secondary 도어벨 레지스터

PDOORBELL 레지스터는 NTB의 Secondary side에 위치한 CPU에서 NTB의 primary side

에 위치한 CPU로 인터럽트를 발생시키고자 할 때 NTB의 Secondary side에 위치한 CPU에

의해서 쓰여진다. 레지스터의 오직 13:0 비트에 해당하는 레지스터들만이 인터럽트 발생을 위

해서 사용가능하다. 레지스터의 14번 비트는 cache flush 동작의 완료를 알리는 데 사용된

다. cache flush 메커니즘과 레지스터의 15번 비트는 PCIe 링크에서 링크 상태가 바뀔때마타

인터럽트를 발생한다. SDOORBELL 레지스터는 NTB의 primary side에 위치한 CPU가 NTB

의 secondary side에 위치한 CPU에게 인터럽트를 발생시키고자 할 때 NTB의 primary

side에 위치한 CPU에 의해 사용된다. 두 레지스터 모두에 대해서, 1을 쓰는 것은 인터럽트가

발생된다. 인터럽트를 받은 CPU는 레지스터에 1을 씀으로써 비트를 클리어(clear)한다.

ü PDBMASK & SDBMASK 레지스터

이들 레지스터는 인터럽트 발생을 방지하도록 한다. 이 레지스터의 특정 비트를 마스킹

(masking)하는 것은 도어벨 레지스터에서 이에 상응하는 비트를 1로 설정함으로써 인터럽트

가 발생되는 것을 disable할 것이다.

ü SPADnn (스크래치패드 레지스터)

NTB는 16개의 공유된 32bit scratchpad 레지스터를 갖는다. 이 scratchpad 레지스터는

interprocessor communication을 위해 양측(primary side 와 secondary side) 모두의

CPU에서 사용가능한 레지스터이다.

ü SPADSEMA4 (스크래치패드 세마포어 레지스터)

이 레지스터는 SPADnn 레지스터에 접근하는 시도를 동기화하기 위해서 사용되는 세마포어

레지스터로서, NTB의 양측(primary side와 secondary side) 모두의 CPU에서 실행하는 소

프트웨어에 의해서 사용될 수 있다. 소프트웨어는 이 레지스터로부터 0의 값을 읽을 때, 세마

포어의 ownership을 얻을 수 있으며, 만약 이 레지스터로부터 1의 값을 읽는다면, 세마포어

는 이미 소유가 되어 있는 것이다. 따라서, 소유자가 먼저 세마포어를 놓아(release)야만,

SPADnn 레지스터에 대한 접근을 얻을 수 있다.

Page 34: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 34 -

PBAR01의 MMIO space 는 secondary side의 PCI configuration space를 접근하는 통로

를 포함한다. 이 영역은 offset 0x500부터 시작해서 4K의 configuration space를 포함한다.

이를 통해, NTB의 primary side에서 동작하는 device driver가 secondary side의 동작을

제어할 수 있도록 한다.

2) SBAR23/SBAR45

SBAR23과 SBAR45 레지스터는 시스템의 메모리 맵에 대한 접근 권한을 획득하는데 사용된

다. 레지스터는 서버, 노드#2(PCI Express System)으로부터 서버, 노드#1인 NTB의

primary side(Intel Xeon Processor-based system)에 연결된 system 의 memory map에

대한 접근 권한을 획득하는 데 사용된다. 이 BAR 레지스터 각각은 2의 승수형태로서 4KB(2

to the 12)부터 512GB(2 to the 39) 까지 설정될 수 있다.

PCI Express System로부터 Intel Xeon Processor-Based System에 대한 접근 방법은 다

음과 같다.

① 서버, 노드#2, 즉 PCI Express System 은 SBAR23 또는 SBAR45 레지스터를 읽거나 쓴

다.

② NTB 하드웨어는 이러한 읽기/쓰기 패킷을 발견(capture)하고, 이를 서버, 노드#2에 대한

읽기/쓰기로 변경(convert)한다. 이 때 사용된 SBAR23 또는 SBAR45 레지스터에 따라서, 다

음과 같이 각각 SXLAT23 또는 SXLAT45 레지스터를 통해 주소변환(tranlation)이 수행된다.

③ 읽기/쓰기 패킷은 서버 노드#1, 즉 Intel Xeon Processor-based system의 시스템 메모

리를 대상으로 (target) 할 수도 있고, 또는 peer-to-peer 모드를 지원하는 경우, 패킷은 또

다른 PCIe device를 향할 수도 있음.

④ 서버, 노드#1, Intel Xeon Processor-based system은 SXLAT23 과 SXLAT45 레지스터

를 소유하며, 따라서, 서버, 노드#1에서 수행되는 소프트웨어는 해당 접근을 적절한 위치로

directing할 필요가 있음.

SXLATnn + (InputAddress - SBARnn)

offset 계산하는 부분

Page 35: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 35 -

4. PCIe Swiching 적용 사례

가. Dolphin Interconnect Solutions

Dolphinics는 PCI Express의 성능상의 우수성을 활용하여 local network을 생성하는 솔루

션을 제공한다. PCI Express의 high throughput과 low latency 장점을 활용하여 storage

파일 및 데이터의 빠른 데이터 전송을 가능하도록 하며, system offload를 실현한다.

Dolphinics에서는 PCI Express Switch인 IXS600 Gen3 switch와 PCI Express Adpater

card인 PXH812 PCI Express Gen3 Host and Target Adapter를 판매하고 있어, 이를 살

펴본다.

IXS600 Gen3 Switch

그림 23 IXS600 Gen3 Switchi, 출처 - http://www.dolphinics.com

PCI Express는 고성능 애플리케이션을 위한 low latency 및 highly efficient switching을

제공한다. Dolphin에서는 PCI Express 기술을 활용하여 high speed inter-system

switching 솔루션을 구현하였음. IXS600 PCI Express switch는 powerful, flexible, Gen2

switching 솔루션을 제공하며, IDT사의 transparent and NTB  (non-transparent

bridging)기술을 활용하여 Dolphin의 소프트웨어 기술을 접목함으로써 I/O scaling과

inter-processor communication을 통한 clustering technology를 실현하였다. IXS600을

활용하면 다수의 PCI Express 장치들을 통해 고성능의 컴퓨팅 클러스터를 구축할 수 있다.

Page 36: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 36 -

IXS600은 Dolphin의 IX 제품 라인업 중 스위칭 장치로서, 8 port, 1U cluster siwtch로서

포트당 40Gbps의 non-blocking bandwidth를 ultra low latency로 제공한다. 각 x8 PCI

Express port 는 Gen1 I/O에 대한 backward compatibility를 제공함과 동시에 각 디바이

스당 최대 bandwidth를 제공한다. IXS600 스위치는 동축(copper) 또는 fiber-optic(광섬유)

를 사용할 수 있으며 표준 iPass 커넥터를 사용한다.

iPass Connectors

표 3 활용가능한 iPass 동축케이블 (출처 : www.dolphinics.com)

표 4 활용가능한 iPass 동축케이블 (출처 : www.dolphinics.com)

Inter-Processor Switching

IXS600 는 Dolphin의 Gen2 inter-processor connectivity strategy의 핵심 구성요소이다.

IXS600은 산업/군사/엔터프라이즈 시장에서 매우 다양한 멀티프로세싱 환경에서 활용될 수

있다. IXH610 호스트 어댑터(host adapter)와 IXH620 XMC adapter는 다른 컴퓨터 노드에

연결하는 데 사용된다. 다음 그림 24는 이 IXS600을 활용하여 Inter-Processor Switching

용도로 configuration 한 사례를 보여준다.

10 meter iPass x4 Fiber Cable

10 meter IXFC10M

50 - 300 meter iPass x4 Fiber Cable (x8 connector)

50 - 300 meter Contact Dolphin

10 - 300 meter x8 iPass Fiber Cable

10- 300 meter Contact Dolphin

0.5 meter iPass x8 Copper Cable

0.5 meter IXC0M

1 meter iPass x8 Copper Cable

1 meter IXC1M

2 meter iPass x8 Copper Cable

2 meter IXC2M

5 meter iPass x8 Copper Cable

5 meter IXC5M

2 meter x8 to x4 PCIe Transition Copper Cable

2 meter IXC448-2M

Page 37: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 37 -

그림 24 Inter-Processor Switching (출처 - dolphinics IXS600 PCI Express Gen2

switchi white paper)

I/O Expansion InterconnectIXS600 스위치를 반드시 컴퓨터와 연결하는 대신, IXS600 스위치와 PCI Express I/O

expansion box를 활용하여 I/O component의 수를 늘리는데 활용할 수 있다. 그림 25는

IXS600과 7개의 추가적인 I/O expansion box를 연결한 것으로서, 이들 박스들은 센서/그래

픽카드/코프로세서/비디오캡쳐카드 등 다양한 I/O 장치들을 장착할 수 있다.

그림 25 I/O Expansion Interconnect (출처 - dolphinics IXS600 PCI Express Gen2

switchi white paper)

Page 38: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 38 -

그림 26 PXH812 PCI Express Gen3 Host and Target Adapter (출처 - dolphinics

IXS600 PCI Express Gen2 switchi white paper)

나. Native PCI Express Back-end Interconnect in FlashArray//m

여기서는 InfiniBand 어댑터를 사용하지 않고 대신 PCI Express의 NTB(non-transparent

bridging) 기능을 활용하여 FlashArray 모듈을 구현하였다. NTB는 격리된 각 서브시스템의

컨트롤러가 다른 컨트롤러에게 자신의 메모리 주소 공간을 효율적으로 접근할 수 있는 방법을

제공한다.

이러한 interconnection 하드웨어는 매우 간단하고, 다음과 같은 3가지 key 특성이 있다.

① 매우 빠르다 : 컨트롤러간 데이터 전송 경로는 PCI Express의 gen 3, x8 링크를 사용한

다. 초당 64Gbit/sec의 속도로 데이터를 송수신하며, 이는 PCI to InfiniBand adapter

FA-400의 속도와 같으나, PCI to InfiniBand 변환에 소요되는 bottleneck을 유발하지 않는

장점이 있다. 실제로 latency는 거의 무시할 만 하고, 데이터는 오로지 PCI 링크만 통과하므

로, PCI에서 InfiniBand로, 그리고 다시 InfiniBand에서 PCI로 프로토콜 변환하는 오버헤드가

없다.

② CPU 가 data copy 하는데 시간을 소모할 필요가 없다. 프로세서는 Intel I/O

Acceleration Technology를 사용함으로써 data movement를 offloading하는 장점 채택

③ 소프트웨어 스택이 lightweight 함 : 디바이스 드라이버 소프트웨어에서 PCI Express

NTB와 DMA엔진 하드웨어 레지스터를 직접 접근하기 하므로 lightweight 해진다.

Page 39: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 39 -

그림 27 인피니밴드(InfiniBand) HCA 활용한 구성 vs. PCI Express NTB 활용한 구성

3) PLX Technology - Enabling Multi-Host System Designs with PCI Express

Technology

그림 28은 4대의 블레이드 서버(blade server)로 구성된 멀티컴퓨팅 서버 구축사례이다. 이

중 3대는 인텔리전스(Intelligence)를 보유(CPU가 포함되어 있는)한 시스템으로 NTB 인터페

이스를 통해 연결되어 있다.

1번 블레이드 서버(Intelligent Blade-1)로부터 트랜잭션(transaction) 요청(request)이 2번

블레이드 서버(Intelligent Blade-2)로 보내지면, PCI swich fabric을 통해서 NTB 장치를 통

과하여 전달되고, 그에 대한 응답이 다시 반환된다.

그림 28 PCI Express NTB 활용 4 node 블레이드 서버 구축 사례 (출처 - Enabling

Multi-Host System Designs with PCI Express Technology, PLX Technology)

Page 40: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 40 -

이러한 과정에서, 다음과 그림 29와 같은 4가지 단계를 거친다. NTB port 1을 통과해서

outgoing requet가 나갈 때 발생하는 주소 변환(address translation), NTB port 2를 통해

서 incoming request가 통과할 때 발생하는 주소 변환(address translation), NTB port 2

를 통해서 outgoing 응답에 대한 주소 역변환(inverse translation), NTB port 1을 통해서

들어가는 incoming 응답에 대한 주소 변환.

그림 29 The four steps of routing devices through requester ID (출처 - Enabling

Multi-Host System Designs with PCI Express Technology, PLX Technology)

두 번째 NTB 장치에서 incoming request는 32 entry CAM을 사용하여 변환된다. 만약,

Page 41: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 41 -

incoming bus/device number가 CAM entry내 있다면, 5bit의 receive index 가 device

field에 대체된다. 그렇지 않으면 unsupported request completion 이 반환된다. bus

number는 두 번째 NTB 장치의 upstream bus number로 교체되고, 해당 패킷은 목적지

노드(destination node)로 포워딩된다. 함수 번호(function number) field는 transmit

index 값을 계속 보유한다. NTB 장치에서는 오직 32 entr가 요구되며, bus number는 알려

져 있으며, 오직 5bit의 장치 field만 변경가능하다. 이러한 제약사항은 NTB 장치들의 수는

peer-to-peer 전송을 하는 경우 32개 까지 사용가능하기 때문이다.

Page 42: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 42 -

5. IDT PCIe NTB 기술 소개

IDT사는 그림 30과 같이 PCI Express network (switch, bridge, signal integrity, timing

솔루션 등)을 구축하기 위한 extensive product portforlio를 보유하고 있다.

그림 30 IDT PCI Express 네트워크 제품 포트폴리오 (http://www.idt.com)

ü 신호 무결성 제품(Signal Integrity Product) - 예: Retimer, Repeater

ü 스위치(Switch) - 최대 64Lane, 24 port 까지 지원하는 device, 자유로운 port

configuration 가능 제품, 최대 8가지 NTB function을 바탕으로 한 multi-root

application 예: I/O 확장용 스위치, 시스템 상호연결용 스위치

ü 브리지(Bridges) - 예 : PCIe to PCI/PCI-X Bridge, PCI-X to PCI-X Bridge, PCI to

PCI Bridge,

ü 타이밍 (Timing) 관련 부품 - 예 : clock synthesizer, spread spectrum clock

generator, PLL zero-delay buffer, Jitter attenuators

가. Enumeration and Initialization

PCI Express system에서 사용되는 3가지 종류의 장치로는, Root complex, PCIe 스위치,

PCI endpoint가 있다(PCI Express 토폴로지는 Root complex, switch 또는 bridge, 그리고

endpoint device이다). 일반적으로 하나의 Root complex는 CPU를 포함하는 하나의 서브시

스템으로서, 하나의 PCIe 포트(port), 하나 또는 그 이상의 CPU, RAM, 메모리 컨트롤러, 그

Page 43: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 43 -

리고 그 외 interconnect and/or bridging function들을 갖는다.

PCI Express 상호연결시스템에서 패킷의 라우팅은 메모리 주소 또는 ID에 기반하는데, 따라

서 각 PCI Express tree에서 모든 장치 (또는 장치내 function)은 유일하게 식별가능한 ID

값을 갖는다. 이러한 이유로 인해서 시스템 초기화시에 enumeration이라 불리는 절차를 통

해 각 장치들이 그림 31과 같이 고유의 ID를 부여받는다.

그림 31 Enumeration 및 Initialization 이후, PCIe 스위치 설정 (출처 : IDT white paper,

multi-peer-support MSC 20060127.pdf)

그림 32 시스템 도메인 주소 맵 (출처 : IDT white paper, multi-peer-support MSC

20060127.pdf)

시스템 초기화 단계에서, Root complex는 enumeration을 시행함으로써, 시스템 내 각 버스

상에 붙어있는 장치들을 스캔함과 동시에 각 장치의 레지스터 및 메모리에 대한 주소공간을

결정한다. Root complex는 해당 서브시스템상에 존재하는 각 PCI bus 마다 버스 번호를 할

당하며, 해당 버스 번호를 PCIe 스위치에 의해서 사용되도록 설정한다.

Page 44: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 44 -

시스템 초기화 시에 Root complex 프로세서는 PCIe 장치들을 스캔하고, 모든 PCIe 링크들

에 대해서 각각 유일한 버스 번호를 부여한다. 이와 같이 PCIe 트리 토폴로지, 디바이스 등을

발견하고 번호 및 주소공간을 부여하는 작업을 enumeration process라 한다. enumeration

process가 끝나면, Root complex 프로세서는 각 endpoint device들에게 메모리 주소 공간

을 할당하며, 절대적 메모리 주소 영역은 EP processor가 어느 PCIe 슬롯에 장착되어 있는

지에 따라 할당된다. (그림 32 시스템 도메인 주소 맵 참조)

enumberation 및 initialization 단계 이후 PCIe 스위치 내 각 PCI-PCI bridge들의 설정값

이 그림 31 (Enumeration 및 Initialization 이후, PCIe 스위치 설정)에 나타나 있다. Pri는

Primary Bus number, Sec는 Secondary Bus number, Sub는 Subordinate Bus

number 이고, 특정 슬롯(또는 포트)에 대해서 주소영역이 나타나 있다. 즉, slot2에 대해서

0x80100000부터 0x801FFFFF 까지로 할당되고, slot3에 대해서 0x80200000부터

0x802FFFFF까지로 할당된다. 이러한 enumeration 및 initialization 절차가 종료된 이후에

는, PCIe 스위치는 이와 같이 할당된 주소에 기반하여 Endpoint 프로세서를 향하는 메모리

요청을 적절히 포워딩 한다.

또한, 각 Endpoint 프로세서는 자신의 로컬 도메인에 대해서는 이러한 enumeration 및

initialization 프로세스를 각각 수행한다. 즉, Endpoint 프로세서 내의 서브 시스템에 대해서

는 Root complex는 관여하지 않고 isolation 된다. 따라서, 로컬 영역 과 시스템 영역

enumeration 및 initialization 프로세스가 상호 독립적으로 병렬로 수행될 수 있다.

Endpoint는 시스템 도메인으로 연결되는(향하는) PCIe 인터페이스를 단지 자신의 PCIe

endpoint(로칼 PCIe bus에 붙어있는 일반적인 하나의 장치) 로 취급한다.

Root complex 프로세서는 또한, 시스템 도메인 내 장치들에 대한 핫-플러그 인/아웃

(hot-plug)이벤트에 대해서도 관할한다. PCIe 스위치에서 각 슬롯에 대해서 버스 번호(bus

number)와 메모리 주소 영역이 사전에 예약(reserve)되어 있기 때문에, 특정 Endpoint 프로

세서가 삽입되는 경우, 이 프로세서는 미리 할당되어 있는 버스 번호(bus number)를 사용할

수 있다. 예를들어, 위 그림 xx(Enumeration 및 Initialization 이후, PCIe 스위치 설정)에서

슬롯 3번에 새로운 Endpoint 프로세서가 삽입되었을 경우, bus number 4번과 메모리 주소

0x8020000이 이미 예약되어 비어있으므로, Endpoint 프로세서의 BAR에 이 값을 프로그램하

고 사용한다. 이와 같이 Endpoint 프로세서의 초기화 작업이 끝나면 Root complex 프로세

서는 모든 다른 Endpoint 프로세서들에게 슬롯 3번에 새로운 Endpoint 프로세서가 삽입되었

Page 45: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 45 -

다는 사실을 알린다.

반대로, 슬롯 3에서 Endpoint 프로세서가 제거되는 경우, Root complex 프로세서는 이와

같이 슬롯 3에서 Endpoint 프로세서가 제거되었다는 사실을 모든 Endpoint 프로세서들에게

알림으로써, 제거된 Endpoint 프로세서에 대한 관련된 자원을 제거/클린업 할 수 있도록 한

다.

결과적으로, PCIe 스위치는 다음 그림 33의 좌측 상단 그림과 같이 마치 여러개의 PCI-PCI

bridge가 있는 것처럼 동작하도록 한다.

그림 33 PCIe 트리 Topology (출처 : IDT AN-724_APN_20090930.PDF)

이러한 enumeration의 결과로 인해, Root complex는 각 PCIe 스위치와 Endpoint 장치들

에 대해서 메모리와 I/O 주소 공간을 할당/설정한다.

나. NTB in the PES32NT24G2

NTB의 블록다이어그램이 그림 34에 나타나 있다. NTB는 NT function으로서 구현되어 있으

며, NT function을 갖는 upstream 스위치 포트로 사용되거나(그림 34 상단 PCI-PCI

Bridge의 upstream 포트와 NTB가 함께 그려진 부분) 또는 단독으로 NT function 포트

Page 46: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 46 -

(NTB 포트)로 사용될 수 있다. (그림 34 오른쪽 하단 NTB 단독으로 그려진 부분)

그림 34 PES32NT24G2에서 NTB 아키텍쳐 (출처 : IDT AN-724_APN_20090930.PDF)

각 NT function은 PCIe endpoint로서 나타난다. 또한, 해당 NT function들간에

communication을 가능하도록 하는 가상의 NT interconnect가 존재하는데, 이 NT

interconnect는 PCIe hierarchy 상에서는 보이지 않는 부분이다.

PES32NT24G2는 8개 까지의 NT function을 지원하는데, 그림 xx은 이러한 실현 가능한

NTB configuration 사례를 보여준다. 여기서는, 4개의 NT function이 모두 가상의 NT

Interconnect를 통해 inter-domain communication을 목적으로 사용되었다.

Page 47: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 47 -

그림 35 NT function의 가능한 configuration 사례 1 (출처 : IDT

AN-724_APN_20090930.PDF)

그림 35는 4개의 파티션 그리고 4개 NT function을 갖는 NTB configuration의 사례이다.

여기서 2개 파티션은 독립적인 3 port transparent PCIe 스위치 2개로 구성되어 있고, 이때

이들 파티션의 upstream port는 NT function을 갖는 포트로 동작하도록 설정되어 있다. 다

른 2개의 partition은 2개의 NT endpoint로서, 각각 NTB port로 동작하도록 설정되어 있다.

또 다른 가능한 configuration은 다음 그림 36에 나타나 있는데, 여기서는 8개 파티션이

생성되어 있고 NT function은 NTB port로 동작하도록 설정되어 있다.

Page 48: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 48 -

그림 36 NT function의 가능한 configuration 사례 2 (출처 : IDT

AN-724_APN_20090930.PDF)

다. 시스템 아키텍쳐

여기서는 NTB를 사용해서 다수의 Root Complex를 연결하는 시스템 토폴로지 사례를 제시하

고자 한다. 이러한 토폴로지의 usage model은 다수의 Root complex가 PCIe 인터페이스를

사용하여 NTB를 통해 데이터를 교환하도록 하기 위한 것이다. 즉, 여러대의 클러스터에서 개

별 PC 들이 상호 통신하는 상황을 가정할 수도 있다.

단일 PES32NT24G2 칩셋을 사용한 사례를 우선 살펴본다. 여기서는 두 번째 Root complex

(CPU 2)가 PES32NT24G2의 NTB 포트에 연결되어 있다. 이 때 2개 주소 도메인(address

domain)이 생성된다. 하나는 CPU 1 주소 도메인이고 하나는 CPU 2의 주소 도메인이다.

CPU1 과 CPU 2는 서로 NTB port를 통해서 데이터를 교환할 수 있고, CPU 1 서브시스템상

의 어떠한 endpoint라도 CPU2와 데이터를 상호 교환할 수 있다.

그림 37 2개 서브시스템을 NTB로 연결한 시스템 토폴로지 (출처 : IDT

AN-724_APN_20090930.PDF)

Page 49: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 49 -

3 NT function을 갖는 system의 유사한 사례가 그림 38에 나타나 있다. 여기서 3번째 root

complex (CPU 3)이 IDT 칩셋인 PES32NT24G2의 또다른 NTB 포트에 연결되어 있다.

따라서, 전체적으로 CPU1, CPU2, CPU3의 3개 주소 도메인(address domain)이 생성되었다.

이러한 각 CPU1, CPU2, CPU3은 서로 NT function을 통해서 데이터를 교환할 수 있다.

IDT PES32NT24G2 칩셋은 최대 8개까지의 NT function을 지원하며, 따라서, IDT

PES32NT24G2 칩셋 하나를 통해 최대 8개까지의 root complex (CPU)를 지원할 수 있다.

그림 38 3개 Root Complex를 갖는 시스템 토폴로지 (출처 : IDT

AN-724_APN_20090930.PDF)

그림 39는 PES32NT24G2 칩셋을 2개 사용하여 구축한 사례로서, Root complex CPU1 서브

시스템과 Root complex CPU2 서브 시스템의 구조가 동일하다. 이와 같이 2개의 Root

complex가 두 개의 NTB 포트를 사용하여 각각 서로 연결된 형태다. 이러한 경우, CPU 1 주

소공간, CPU2 주소 공간, 그리고 NTB port 주소 공간(아래 그림 xx의 NTB port address

Page 50: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 50 -

domain)의 3개 주소 도메인이 생성된다.

그림 39 NTB 와 NTB 연결을 갖는 시스템 토폴로지 (출처 : IDT

AN-724_APN_20090930.PDF)

그림 40 2개의 Root complex를 갖는 시스템 토폴로지(출처 : IDT

AN-724_APN_20090930.PDF)

Page 51: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 51 -

그림 39의 시스템은 PES32NT24G2 칩셋을 추가로 사용하지 않고 단지 NTB 포트에 연결하

는 아래 그림 40의 형태와 유사하다. CPU1과 CPU2는 서로 NTB 포트를 통해 데이터를 교환

활 수 있고, CPU1 address domain의 어떠한 endpoint든 CPU 2와 데이터를 교환할 수 있

으며, CPU2의 endpoint의 경우도 CPU1과 데이터 교환가능하다.

Page 52: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 52 -

6. 소프트웨어 통신 메커니즘

PCIe 스위치 내 피어간 통신을 하기 위한 interprocessor communication 프로토콜을 살펴

본다. 특정 Endpoint에서 다른 곳(Endpoint 또는 Root complex)으로 데이터를 전송하고자

할 때, 피어간 사용하여야 하는 프로토콜의 내용을 소개하고자 한다.

가. 통신 메커니즘에 대한 세가지 분류

1) 소량의 데이터를 Endpoint와 Root complex 사이에 통신하는 경우

2) 소량의 데이터를 Endpoint 프로세서간에 통신하는 경우

3) 대량의 데이터를 Endpoint 프로세서 또는 Root complex와 통신하는 경우

우선, 1) 소량의 데이터를 Endpoint와 Root complex 프로세서 사이에 통신하는 경우, 스크

래치패드(scratchpad) 레지스터를 이용한다. 이 레지스터는 대체적으로 Endpoint 프로세서에

의해서 구현되고 사용된다. Endpoint 프로세서든 Root complex 프로세서든 어느쪽에서든

스크래치패드 레지스터를 읽고/쓸수 있다. Endpoint 프로세서는 일반적으로 다수(8개~16개)

의 스크래치패드 레지스터를 구현한다. 도어벨(doorbell) 레지스터 역시 양쪽(Endpoint 프로

세서 또는 Root complex 프로세서에 의해서)에 의해서 상호간 인터럽트를 보내고자 할 경우

사용된다. 예를들어, Root complex 프로세서가 Endpoint 프로세서에 어떤 데이터를 보내고

자 하는 경우, Root complex 프로세서는 우선 데이터를 스크래치패드 레지스터에 쓴 다음,

도어벨 레지스터를 통해 Endpoint 프로세서에 인터럽트를 발생하도록 하여 Endpoint 프로세

서로 하여금 스크래치패드 레지스터에 존재하는 메시지를 읽어가도록 알린다. 반대로

Endpoint 프로세서가 Root complex 프로세서에 데이터를 보내고자 할 경우에도 이와 유사

한 방법을 사용한다.

2) 소량의 데이터를 Endpoint 프로세서간에 통신하는 경우는, 스크래치패드 레지스터와 도어

벨 레지스터가 사용된다. 추가적으로 lock/unlock 메커니즘을 갖는 세마포머(semaphore) 레

지스터를 통해 스크래치패드 레지스터의 사용권한을 제어하는데 활용된다(왜냐하면, 스크래치

패드 레지스터는 모든 Endpoint 프로세서들간에 공유되어 있는 자원이기 때문) 따라서, 어떤

Endpoint 프로세서가 스크래치패드 레지스터를 사용하기 위해서는, 우선적으로 세마포어 레

지스터를 활용하여 해당 스크래치패드 레지스터 사용을 위한 ownership을 우선 획득하여야

한다. 일단 세마포어를 획득하면, 해당 Endpoint 프로세서는 스크래치패드 레지스터를 사용할

Page 53: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 53 -

수 있다. 그리고 데이터를 수신하는 Endpoint 측에서 데이터를 모두 수신한 경우에는, 세마

포어를 해제함으로써 다른 Endpoint가 스크래치패드 레지스터를 활용할 수 있도록 한다.

3) 대량의 데이터를 Endpoint 프로세서 또는 Root complex와 통신하는 경우에 대해서는

advanced queueing(사전 큐잉)이 요구된다. 사용하는 큐잉 구조는 Intelligent I/O

Architecture로서, 여기서는 인바운드 큐(inbound queue) 구조와 아웃바운드 큐(outbound

queue) 구조의 데이터 메시지를 위한 두가지 경로를 제공한다. 인바운드 큐 구조는

Endpoint 또는 시스템 도메인 내 Root complex 프로세서로부터 데이터 메시지를 받는데 사

용되며, 아웃바운드 큐 구조는 RC 프로세서에서 데이터를 보낼때에만 사용한다. 이러한 제약

사항은 Endpoint 프로세서들은 항상 인바운드 및 아웃바운드 큐 구조를 구현하여야 하고,

Root complex 프로세서는 어떠한 인바운드 및 아웃바운드 규 구조도 구현하지 않는다는 사

실을 유발한다.

Endpoint 프로세서가 데이터 메시지를 다른 프로세서에게 보내고자 할 때, 로컬 Endpoint

프로세서는 해당 원격지 Endpoint 프로세서의 인바운드 큐 구조를 사용한다. 반면, Endpoint

프로세서가 Root complex 프로세서에게 데이터 메시지를 보내고자 하는 경우, 로컬

Endpoint 프로세서는 자신의 로컬 아웃바운드 큐 구조를 사용한다. 이러한 큐 구조는 FIFO

방식 큐 쌍(pair)으로서 FreeQ와 PostQ 포인터를 갖는다. FIFO 큐로부터 읽기는 큐에서 첫

번째 엔트리를 제거하고, FIFO 큐에 쓰기는 큐의 끝부분에 데이터를 추가한다. FreeQ 포인터

는 해당 큐에서 데이터를 추가할 수 있는 비어있는 버퍼의 위치를 가리키는 포인터이고,

PostQ는 해당 큐에서 데이터가 쓰여져 있는 위치를 가리킨다.

나. 데이터 버퍼 구조와 데이터 전송 프로토콜 (Data buffer Structure and Data Transfer Protocol)

로컬 인바운드 큐가 원격지 Endpoint 프로세서로부터 데이터를 받기 위해서 사용된다. 인바

운드 큐와 데이터 버퍼 사용법이 그림 41 에 나타나 있다. 이 예제에서 큐 데이터 공간은

128개의 동일한 사이즈 버퍼로 분할되어 있다. 버퍼 크기는 시스템에 따라 다르나, 일반적으

로 4KByte로 된 경우가 많다. 로컬 Endpoint 프로세서는 데이터 버퍼 주소를 FreeQ에 추가

함으로써 추후 사용할 수 있도록 한다. (데이터 버퍼 주소를 FreeQ에 추가하는 순서는 상관

없다) 원격지 Endpoint 프로세서가 이 로컬 Endpoint 프로세서로 데이터를 전송하고자 할

때, 원격지 Endpoint 프로세서는 FreeQ의 첫 번째 엔트리로부터 데이터 버퍼를 얻어낸다. 그

리하여 데이터를 해당 엔트리에 전송하며, 해당 데이터 버퍼를 해당 로컬 Endpoint 프로세서

의 PostQ에 추가한다. 그러면, 해당 로컬 Endpoint 프로세서가 PostQ로부터 그 데이터 버퍼

Page 54: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 54 -

를 읽고 데이터를 수신할 수 있다. 로컬 Endpoint 프로세서는 PostQ 큐를 주기적으로 체크

함으로써 데이터가 수신되었는지 확인할 수도 있으며, 또는 도어벨(doorbell)을 지원한다면 원

격지 Endpoint 프로세서가 PostQ의 엔트리를 추가한 뒤 도어벨을 설정함으로써 로컬

Endpoint 프로세서가 이벤트를 인지하도록 할 수도 있다.

그림 41 인바운드 큐 와 데이터 버퍼 사용방법 (출처 - IDT

Multi-peer-spport_MSC_20060127.PDF)

그림 42 데이터 전송 프로토콜 (출처 - IDT Multi-peer-spport_MSC_20060127.PDF)

Page 55: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 55 -

데이터 전송 프로토콜은 다음 그림 42와 같이 정리될 수 있다. 슬롯 3에 있는 Endpoint 프로

세서가 슬롯 2에 있는 Endpoint 프로세서에게 데이터 블록을 전송하는 경우, EPP 3은 우선

EPP 2의 FreeQ로부터 사용되지 않은 데이터 버퍼를 얻는다. EPP 3은 데이터를 해당 버퍼에

쓴 뒤, 그 버퍼의 주소를 EPP 2의 PostQ에 넣는다. 그러면, EPP 2는 자신의 PostQ 로부터

해당 버퍼 주소를 받게 되고, 그리하여 EPP 2는 데이터 버퍼 안에 있는 데이터를 수신하게

된다. 그런 다음, 해당 버퍼는 다시 FreeQ로 리턴되어 추후 다시 사용될 수 있도록 한다.

다. PCIe Switching을 위한 일반적인 소프트웨어 구조

Root complex 프로세서 소프트웨어 아키텍쳐는 그림 43과 같다. 함수 서비스 계층

(Function Service Layer)는 운영체제에 대한 디바이스 드라이버 함수를 제공한다. 네 가지

함수 서비스가 제공 가능한데, Raw Data Function Service는 Endpoint 프로세서와 Root

Complex 프로세서간 raw data를 교환하기 위한 서비스다. Ethernet Function Service는

가상의 Ethernet 인터페이스 함수를 제공한다. Disk Function Service는 가상의 디스크 인

터페이스를 제공한다. Configuration Function Service는 시스템 관리 목적의 함수를 제공

한다.

그림 43 Root complex 프로세서 소프트웨어 아키텍쳐 (출처 -

IDT_AN_571_APN_20080925.pdf)

메시지 프레임 서비스 계층(Message Frame Service Layer)는 전송과정에서 공통적인 메시

지 프레임을 관리하고 encapsulation/decapsulation을 담당한다. 일단 메시지 프레임이 적

절하게 포맷팅되면, 전송 서비스 계층(Transport Service Layer)에 전달한다. 전송서비스계

층은 로컬 Root complex 프로세서와 원격지 Endpoint 프로세서간 데이터 전송을 제공한다.

로컬 아키텍쳐 서비스(Local Architecture Service)는 하드웨어 추상화 서비스로서, 메시지

프레임 서비스 계층 및 전송 서비스 계층에 대해서 하드웨어 독립적인 서비스를 제공한다. 예

Page 56: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 56 -

를들어, 가상 주소에서 물리주소로의 변환 또는 로컬 주소와 시스템 도메인 주소간 변환 등이

이에 해당한다.

다음 그림 44는 Endpoint 소프트웨어 아키텍쳐인데, Root complex 프로세서 소프트웨어 아

키텍쳐와 유사하다. 함수 서비스 계층과 메시지 프레임 서비스 계층은 Root complex 프로세

서의 것과 동일하다. Endpoint 소프트웨어 아키텍쳐는 몇몇 Endpoint 하드웨어에 specific한

컴포넌트가 존재한다. 예를들면 로컬 Endpoint 인바운드 전송 서비스와 로컬 Endpoint 프로

세서로부터 Root complex 프로세서에 대한(local EP to RP) 전송 서비스와 같은 것이 그 예

이다.

그림 44 Endpoint 프로세서 소프트웨어 아키텍쳐 (출처 - IDT_AN_571_APN_20080925.pdf)

로컬 Endpoint 인바운드 전송 서비스는 인바운드 메시지 인터럽트 서비스 루틴을 구현하며,

Root complex 프로세서로부터 들어오는 모든 인바운드 트래픽에 대해서 메시지 프레임 서비

스에 알리는 역할을 한다. 로컬 Endpoint 프로세서로부터 Root complex 프로세서에 대한

(local EP to RP) 전송 서비스는 특정(specific) EP에서의 Root complex 프로세서에 대한

아웃바운드(outbound) 전송 서비스를 구현한다. 예를들어, x86 전송 서비스는 x86 Endpoint

에서의 아웃바운드 전송 서비스를 구현한다.

라. 주소 변환(Address Translation)

PCIe System 버스에 다수의 Peer가 연결된 시스템에는 두 개 주소 도메인이 있다. 시스템

도메인은 Root complex 프로세서에 의해서 보여지는 주소 도메인인 반면, 로컬 도메인은 각

각의 로컬 Endpoint 프로세서에 의해서만 보여진다. 따라서, 이들 두 도메인은 서로 독립적

이다. Root complex 프로세서가 시스템 도메인의 주소 공간을 자유롭게 할 당할 수 있는 것

처럼, 로컬 Endpoint 프로세서는 자신의 로컬 도메인의 주소공간을 자유롭게 할당할 수 있

Page 57: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 57 -

다. 이와 같이 시스템 도메인과 로컬 도메인 사이에 주소 공간을 연결(bridge)하기 위해서,

Endpoint 프로세서는 이들 도메인간 주소변환을 지원하여야 한다. 주소 변환은 IDT

PES24NT3 장치의 NTB 포트상에 구현된 하드웨어 기능에 의해서 수행된다.

Client는 Client Driver와 함께 Client Applicatio으로 구성될 수 있다. 플랫폼간 통신을 위해

서 사용되는 프로토콜은 클라이언트에 의해서 구현된다. 클라이언트는 NTB 드라이버를 사용

하여 NTB 하드웨어를 설정하고, 도어벨(doorbell) 인터럽트 등의 방법으로 메시지 전송을 알

릴(notification) 수 있다. 또는 운영체제로부터 발생하는 상태 변화

마. 소켓 다이렉트 프로토콜(Socket Direct Protocol)

전통적인 TCP/IP 구현은 인피니밴드(InfiniBand), PCI Express 등의 고성능 상호연결 네트워

크(high performance interconnection network)에서는 적합하지 않다. 기존 TCP/IP 구현

에서는 메시지를 처리하는 critical path에 있어 커널에서 수차례의 데이터 카피(copy)를 유

발하며, 수차례의 컨텍스트 전환을 요구하기 때문이다. 또한, TCP는 데이터를 전송하는 데 있

어, 양측 end-to-end 사이의 physical interconnect가 신뢰성 높은(realiable) 경우 불필요

한 transport-level functionality를 갖는다. 그럼에도 불구하고, 많은 응용프로그램은

socket 인터페이스를 사용하여 개발되기 때문에, socket 인터페이스를 인피니밴드, PCI

Express 등의 고성능 interconnection network에서 사용할 수 있도록 변경할 필요가 있다.

이에 따라, Socket Direct Protocol (SDP)는 원래 인피니밴드 Trade Association에 의해

서 인피니밴드 구조에 특화되어 정의된 바 있다. SDP는 RDMA 컨소시엄에 의해서 현재

RDMA (Remote Direct Memory Access) 네트워크 fabric을 위해 사용되는 프로토콜이다.

SDP 스펙에 따르면, SDP는 2가지 목적을 염두에 두고 개발되었다. 첫째는, 기존의 socket

기반 응용프로그램들이 아무런 코드의 변경/재컴파일 없이도 SDP 프로토콜을 사용할 수 있도

록 하는 것이고, 둘째는 SDP가 메시지 전달(message passing) 프로토콜상에서 kernel

bypass 데이터 전송과 zero-copy 데이터 전송을 포함하는 byte-streaming을 지원하도록 하

는 것이다.

현재의 SDP over 인피니밴드(InfiniBand) 구현은 이러한 buffer copying(bcopy)과

zero-copying(zcopy)의 두가지 데이터 전송모드를 지원한다. 이들 두가지 모드는 인피니밴드

어댑터에 포함된 더욱 진보된 테크닉(예를들면, 보다 정교한 DMA 엔진, transport 엔진, 관

리 기능 등)을 활용할 수 있도록 한다.

Page 58: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 58 -

그림 45 bcopy data flow (출처 - D. Goldenberg et el, Transparently Achieving

Superior Socket Performance Using Zero Copy Socket Direct Protocol over 20Gb/s

InniBand Links. In Proc. of the IEEE International Conference on Cluster

Computing, Burlington, MA, USA, September 2005.)

Page 59: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 59 -

그림 46 Zero data flow (출처 - D. Goldenberg et el, Transparently Achieving

Superior Socket Performance Using Zero Copy Socket Direct Protocol over 20Gb/s

InniBand Links. In Proc. of the IEEE International Conference on Cluster

Computing, Burlington, MA, USA, September 2005.)

그림 45의 bcopy mode는 응용프로그램의 버퍼(buffer)로부터 NIC의 private 버퍼(buffer)로

데이터를 복사한다. 이후, 인피니밴드의 하드웨어-오프로딩(hardware-offloaded) 프로토콜

스택을 활용하여 데이터를 다른 호스트로 전송한다. bcopy 는 전송 wire상에서 파이프라인

(pipelined)화된 전송도 가능하다. 송신측에서 호출하는 send() 함수는 호출시 데이터를

private 버퍼에 복사하자마자 비동기적(asynchronously)으로 리턴한다. 그렇기 때문에, 송신

측에서는 send() 함수가 리턴되자 마자 계속적으로 send()함수를 호출함으로써 링크 활용률

(utilization)을 향상시키고 대역폭을 최대한 활용할 수 있다. 그러나, 이러한 bcopy 는 local

data copy 오버헤드를 및 성능 bottleneck을 유발하는 단점이 있다.

그림 46의 zcopy 전송은 DMA 엔진을 활용하여 송신측 애플리케이션 버퍼로부터 RDMA

동작을 통해서 수신측 애플리케이션 버퍼로 데이터를 직접 전달한다. 이러한 동작을 위해서는

관련된 메모리 페이지가 non-pageable하여야 하며, 버퍼가 pinned-down 되어야 한다. 이러

한 방식은 전송하려는 데이터 블록의 크기가 큰 경우에 특히 대역폭을 최대로 발휘할 수 있는

특성이 있으며, 데이터 copy를 필요로하지 않기 때문에 CPU utilization을 최소화 한다. 그럼

에도 불구하고, zcopy는 애플리케이션 버퍼를 locking하는 오버헤드는 유발하며, 이를 인피니

밴드 어댑터(adapter)에 등록하고, buffer를 advertisement 하는 overhead를 발생한다. 따

라서, zcopy는 크기가 작은 데이터를 전송하는데는 적절하지 않다. 따라서, 이러한 bcopy와

zcopy 두 개 동작 모드를 적절한 threshold에 따라서 선택적으로 사용할 필요가 있다.

인피니밴드 adapter와는 다르게, PCI adapter는 더욱 simple하고 인피니밴드에서 제공하

는 진보된 특징들을 사용하기 어렵기 때문에, SDP over PCIe 가 별도로 제공되어야 한다.

Page 60: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 60 -

7. Concluding Remarks

NTB는 transparent bridge와 공통적으로 독립적인 PCI bus(PCI 또는 PCI Express bus)에

대해서 데이터 전송 경로(path)를 제공한다는 점에서 기능적으로 유사하다. 그러나, NTB와

transparent bridge 간의 가장 큰 차이점은 NTB가 사용될 경우에 bridge의 하향부분

(downstream side)에 위치한 장치들은 상향부분(upstream side)에서는 보이지 않는다는 점

이다. 이는 bridge의 하향부분(downstream side)에 위치한 인텔리전트(intelligent)한 제어기

(예를들면 CPU를 포함하는 컴퓨터)가 자신의 downstream side에 위치하는 서브시스템 내

각종 장치들을 독립적으로 관리할 수 있다는 점이다.

NTB는 또한 첫 번째 호스트(primary host)의 PCI bus로 구성된 서브시스템(subsystem)

계층구조(hierarchy)에 두 번째 호스트(secondary host)를 연결하는 데 사용될 수 있다. 이

는 두 시스템간 통신을 가능하도록 하는 반면, 두 시스템을 서로 격리시키는 효과도 발생한

다. 즉, NTB는 일반적으로 도어벨(doorbell)을 통해서 bridge의 다른 편에 위치한 장치에 대

해서 인터럽트를 보낼 수 있으며, 또한, scratchpad 레지스터를 보유하고 있어 bridge의 양

측에서 데이터를 상호 공유함으로써 interprocessor communication 할 수 있다.

NTB(Non-Transparent Bridge)는 PCI-Express bridge chip에서 지원하는 모드 중 하나

로서, 2 대 이상의 컴퓨터의 서로 분리된 메모리 시스템을 같은 PCI-Express fabric 으로 연

결시키는 기술로서, NTB는 이미 significant 한 성능 개선을 보여주고 있음.

PCIe Interconnection network, NTB는 이더넷/인피니밴드 등의 초고속 인터커넥션 네트

워크의 대안으로서 충분히 평가될 만큼 높은 대역폭(high throughput)과 낮은 지연시간(low

latency)를 제공하는 차세대 네트워크임과 동시에 데이터 이동에 있어 CPU의 부담을 최소화

하기 위한 offloading을 가능하게 한다. 뿐만 아니라, 불필요한 데이터 복사를 지양하며 운영

체제 커널(kernel) bypass를 통해서 성능향상을 실현한다.

일반적으로 프로토콜 encapsulation 오버헤드는 effective 대역폭을 감소시킨다고 알려져

있으나, PCI Epxress NTB에서는 큰 데이터 크기(large data size)의 패킷에 대해서는 프로토

콜 encapsulation 오버헤드로 인한 대역폭 손해가 1~2%에 불과하여 무시할 수 있는 수준으

로 분석되었다.

그러나, 고성능 interconnection network 데이터 전송에 있어 TCP/IP 프로토콜 스택의

제거는 상당한 CPU cycle reduction 효과를 유발하고, 결과적으로 CPU가 더 많은 데이터

전송 처리를 수행할 수 있도록 기회를 부여하는 것으로 판단된다.

결과적으로, PCIe Interconnection network의 성능은 InfiniBand(IB)와 최소한 동등하거나

Page 61: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 61 -

일반적으로 IB보다 성능을 초과하는 것으로 평가된다.

물론, 아직 대다수의 응용프로그램에서 TCP/IP 기반 socket 인터페이스를 사용하기 때문

에, RDMA 스택을 아직 fully 활용가능하지 않은 제약이 있다. 따라서, 이러한 제약사항을 해

결하는 virtual ethernet 인터페이스 혹은 socket direct protocol 등의 연구를 통해 사용

편의성을 제고할 필요가 있다.

Page 62: PCIe 버스의 Non-Transparent Bridge 기술 동향 · 2018. 10. 11. · Vender Identification, Device Identification, Status, Command, Class Code, Base Address Register, Interrupt

- 62 -

8. 참고문헌

[1] Ravi Budruk, PCI Express Basics, PCI-SIG

[2] Wikipedia, https://en.wikipedia.org/wiki/PCI_Express

[3] http://www.tldp.org/LDP/tlk/dd/pci.html

[4] Mark J. Sullivan, Intel Xeon Processor C5500/C3500 Series Non-transparent

Bridge, Intel white paper

[5] Jack Regula, Using Non-transparent Bridging in PCI Express Systems, PLX

Technology, Inc.

[6] Non-transparent Bridging with IDT 89HPES32NT24G2 PCI Express NTB Switch,

Application Note AN-724, IDT

[7] Kwok Kong and Ale Chang, PCI express System Interconnect Software

Architecture for x86-based Systems, Application Note AN-571, IDT

[8] Kwok Kong, Enabling Multi-peer Support with a Standard-Based PCI Express

Multi-ported Switch, white paper, IDT

[9] IXS600 PCI Express Gen 2 Switch, http://www.dolphinics.com

[10] PXH810 PCI Express Gen 3 Host Adapter, http://www.dolphinics.com

[11] Akber Kazmi, PCI Express Basics & Applications in Communication Systems,

PLX Technology

[19] Kwok Kong, Performance of System Interconnect using PCI Express® Switches,

Application Note AN-547, IDT