PCIe: Difference between revisions

From HPCWIKI
Jump to navigation Jump to search
(Fix: remove --- horizontal lines (12 removed))
(Phase 0.4: Expand PCIe)
 
Line 484: Line 484:


[[Category:Reference]]
[[Category:Reference]]
== PCIe 6.0 ==
PCIe 6.0은 2022년 출시. 32 GT/s, 15 GB/s per lane.
{| class="wikitable"
|+PCIe 6.0 대역폭
! Lane ! x1 ! x4 ! x8 ! x16
|-
| 대역폭 | 15 GB/s | 60 GB/s | 120 GB/s | 240 GB/s
|}
* PAM4 변조 방식 (PCIe 5.0의 NRZ 대비 효율 2x)
* Forward Error Correction (FEC) 추가
* 8b/10b → 128b/132b 인코딩 (PCIe 5.0과 동일)
== PCIe 7.0 (계획) ==
PCIe 7.0은 2025년 계획. 64 GT/s, 30 GB/s per lane.
{| class="wikitable"
|+PCIe 7.0 예상 대역폭
! Lane ! x1 ! x4 ! x8 ! x16
|-
| 예상 대역폭 | 30 GB/s | 120 GB/s | 240 GB/s | 480 GB/s
|}
== CXL (Compute Express Link) ==
CXL은 CPU- 가속기 간 고속 연결. PCIe와 호환. 메모일리티(Memory Interconnect) 지원.
* CXL 2.0: 2021년 출시. 메모일리티 지원
* CXL 3.0: 2023년 출시. 동적 메모리 분할 지원
* CXL over PCIe 물리 레이어 사용
* CPU ↔ GPU, CPU ↔ FPGA, CPU ↔ 스토리지 간 연결
<syntaxhighlight lang="bash">
# CXL 장치 확인
lspci | grep -i cxl
# CXL 메모리 확인
cat /sys/bus/cxl/devices/*/*memory
</syntaxhighlight>

Latest revision as of 13:37, 17 July 2026

PCIe

Template:Status

Template:TOC

Overview

PCIe(Peripheral Component Interconnect Express)는 패킷 기반的高速 직렬 확장 버스 표준입니다. 기존 PCI/PCI-X의 병렬 버스 아키텍처를 개선하여, 스위치 기반의 전용 연결로 각 카드가 독립적인 세트를의 와이어로 연결됩니다.

Summary

  • 무엇인가? — 패킷 기반的高速 직렬 확장 버스 표준 (PCIe)
  • 왜 필요한가? — 높은 대역폭, 낮은 지연, 확장성, 후방 호환성
  • 언제 사용하는가? — GPU, NVMe SSD, 네트워크 카드, 확장 카드 등


Purpose

이 문서가 존재하는 이유

  • Goal: PCIe 아키텍처, 대역폭, 전원, 프로토콜 계층, 흐름 제어 등 핵심 개념 제공
  • Scope: PCIe 세대별 대역폭, 전원 공급, TLP/DLLP 계층, 흐름 제어, 가상 채널, 라우팅
  • Non-goals: PCIe 커널 드라이버 개발, FPGA PCIe IP 코어 설계는 별도 문서


Key Concepts

Concept Description Related
Lane PCIe 기본 전송 채널 (2쌍 데이터 + 1쌍 클록) PCIe
TLP Transaction Layer Packet — 상위 계층 패킷 PCIe
DLLP Data Link Layer Packet — 신뢰성 제어 패킷 PCIe
Root Complex PCIe 호스트 브리지 (CPU 내 또는 별도 칩셋) PCIe
Flow Control 수신 버퍼 여유 확인 후 전송 제어 PCIe
Virtual Channel TC(Traffic Class) 기반 독립 흐름 제어 PCIe
MSI Message Signaled Interrupts — 메모리 기반 인터럽트 PCIe
DMA Direct Memory Access — 버스 마스터링 PCIe


Architecture

PCIe는 3계층 아키텍처로 구성됩니다:

graph TD
    A[PCIe Stack] --> B[Transaction Layer]
    A --> C[Data Link Layer]
    A --> D[Physical Layer]
    B --> E[TLP - Transaction Layer Packet]
    C --> F[DLLP - Data Link Layer Packet]
    D --> G[Lane - Differential Pairs]
    B --> H[Root Complex / Switch]
    H --> I[Peripheral Device]


Workflow

Stage Input Output
Write (Posted) Memory Write TLP Fire-and-forget 전송
Read (Non-Posted) Read Request TLP → Completion TLP 데이터 수신
Flow Control Flow Control DLLP 전송 크레딧 관리
Interrupt MSI TLP (Posted Write) 인터럽트 발생


Detailed Explanation

PCIe 아키텍처

PCIe는 패킷 네트워크처럼 동작하는 직렬 버스입니다. 각 카드는 스위치 패브릭에 전용 연결로 연결되며, MAC 주소 대신 물리적 위치(버스/디바이스/함수)로 주소 지정됩니다.

최소 1x 연결은 4개의 와이어로 구성됩니다:

  • 2쌍: 각 방향 데이터 전송용
  • 1쌍: 참조 클록 공급용

PCIe 대역폭

Generation Release Year Data Rate BW x1 Lane BW x4 Lane BW x8 Lane BW x16 Lane
PCIe 1.0 2003 2.5 GT/s 250 MB/s 1 GB/s 2 GB/s 4 GB/s
PCIe 2.0 2007 5.0 GT/s 500 MB/s 2 GB/s 4 GB/s 8 GB/s
PCIe 3.0 2010 8.0 GT/s 1 GB/s 4 GB/s 8 GB/s 16 GB/s
PCIe 4.0 2017 16 GT/s 2 GB/s 8 GB/s 16 GB/s 32 GB/s
PCIe 5.0 2019 32 GT/s 4 GB/s 16 GB/s 32 GB/s 64 GB/s
PCIe 6.0 2022 64 GT/s 8 GB/s 32 GB/s 64 GB/s 128 GB/s
PCIe 7.0 2025 (예정) 128 GT/s 15 GB/s 60 GB/s 121 GB/s 242 GB/s

예시: GPU가 16 PCIe 레인 사용 시

  • PCIe 4.0: 16 × 16 GT/s = 256 GT/s
  • PCIe 5.0: 16 × 32 GT/s = 512 GT/s

※ PCIe 3.0/4.0 인코딩 오버헤드 약 1.54%

PCIe 전원

카드 타입 +3.3V +12V 총합
모든 PCIe 카드 최대 3A (9.9W)
x1 카드 최대 0.5A (6W) 10W 합계
x4 이상 카드 최대 2.1A (25W) 25W 합계
full-size x16 (그래픽) 최대 5.5A (66W) 75W 합계
6-pin 추가 커넥터 +75W 최대 150W
8-pin 추가 커넥터 +150W 최대 300W (2×75W + 1×150W)
1×75W + 2×150W 최대 375W

단순 버스 트랜잭션

PCIe Write (Posted)

1. Root Complex가 Memory Write TLP 생성 (헤더 3-4 DW + 데이터 1 DW) 2. TLP를 PCIe 포트에 전송 3. 대상 peripheral이 라우팅, 디코딩, 실행 4. Fire-and-forget — 응답 불필요

PCIe Read (Non-Posted)

1. CPU가 peripheral에 Read Request TLP 전송 2. peripheral이 Completion TLP로 데이터 응답 3. CPU는 Completion 수신까지 대기

PCIe 통신 계층

계층 역할 패킷
Transaction Layer TX/RX 패킷 정의 TLP (Transaction Layer Packet)
Data Link Layer TLP 무결성 보장, 재전송, 흐름 제어 DLLP (Data Link Layer Packet)
Physical Layer 실제 신호 전송 (와이어, 클록) Lane (차분 쌍)
    • DLLP 타입:**
  • Ack DLLP — 성공적 TLP 수신 확인
  • Nack DLLP — 손상된 TLP 재전송 요청
  • Flow Control DLLP — 크레딧 공지 (InitFC1, InitFC2, UpdateFC)
  • Power Management DLLP
    • TLP 크기:** 최대 128, 256, 또는 512 바이트

흐름 제어 (Flow Control)

Data Link Layer의 흐름 제어는 TLP가 link partner의 수신 버퍼 여유 확인 후 전송되도록 합니다.

    • 중요:** flow control은 최종 destination이 아닌 link partner에 대해 작동합니다. Switch를 경유할 경우 각 hop마다 독립적인 흐름 제어가 적용됩니다.
    • 6개 독립 계정:**

1. Posted Requests TLP headers 2. Posted Requests TLP data 3. Non-Posted Requests TLP headers 4. Non-Posted Requests TLP data 5. Completion TLP headers 6. Completion TLP data

가상 채널 (Virtual Channels)

TC(Traffic Class)는 TLP에서 가상 채널을 식별하는 데 사용됩니다. 각 가상 채널은 독립적인 흐름 제어 크레딧과 카운터를 가집니다. TC 0 외의 값을 선택하면 다른 채널의 트래픽이 차단되지 않습니다.

식별 및 라우팅

PCIe 스위치는 각 TLP를 어디로 보낼지 알아야 합니다. 3가지 라우팅 방법:

1. **주소 라우팅** — Memory/I/O Read/Write 요청 2. **암시적 라우팅** — Root Complex 브로드캐스트 및 응답 메시지 3. **ID 라우팅** — 나머지 모든 TLP (Bus:Device:Function 16-bit triplet)

Posted vs Non-Posted 연산

타입 연산 특징
Posted (Write) Memory Write Fire-and-forget — 전송 후 대기 불필요
Non-Posted (Read) Memory Read Requester가 Completion 수신까지 대기, CPU 버스 홀드 가능

Non-Posted Read는 버스 지연을 유발할 수 있으므로 최신 시스템에서는 최소화됩니다.

32 vs 64 비트 주소

  • 32비트 주소: 헤더 3 DW
  • 64비트 주소: 헤더 4 DW

PCIe spec: 4GB 미만 주소는 32비트 형식 사용 필수. 4GB 초과 주소(예: DMA 버퍼)는 64비트 형식 필요.

I/O 요청

PCIe는 후방 호환성을 위해 I/O 연산을 지원하지만 새 설계에서는 사용을 권장하지 않습니다. I/O Read/Write 모두 Non-Posted이므로 Write에서도 Completion 대기 필요. 또한 32비트 주소만 지원.

인터럽트

타입 설명 특징
INTx 레거시 레벨 트리거 인터럽트 공유 가능, 각 핸들러가 본인 확인 필요
MSI 메모리 기반 메시지 인터럽트 Posted Write TLP, OS가 직접 핸들러 호출, 클리어 불필요

MSI는 PCI 2.2에서 도입되었으며, 현대 OS(리눅스 포함)에서 널리 사용됩니다.

버스 마스터링 (DMA)

PCIe에서 모든 디바이스는 Root Complex처럼 Read/Write TLP를 전송할 수 있습니다. 이를 통해 peripheral이 CPU 메모리에 직접 접근(DMA)하거나 peer peripheral과 TLP를 교환할 수 있습니다.

    • DMA 설정:**

1. 표준 구성 레지스터에서 "Bus Master Enable" 비트 설정 2. 드라이버가 BAR 매핑 레지스터에 버퍼 물리 주소 쓰기

Reference


Configuration

# PCIe 디바이스 확인
lspci
lspci -v
lspci -vvv

# PCIe 레인 속도 확인
lspci -vvv | grep -i width
lspci -vvv | grep -i speed

# PCIe 링크 상태
lspci -vvv | grep -i LnkSta


Examples

Example 1: GPU 대역폭 계산

GPU Lanes PCIe 3.0 PCIe 4.0 PCIe 5.0
x1 1 GB/s 2 GB/s 4 GB/s
x4 4 GB/s 8 GB/s 16 GB/s
x8 8 GB/s 16 GB/s 32 GB/s
x16 16 GB/s 32 GB/s 64 GB/s

Example 2: PCIe 디바이스 정보 확인

# 모든 PCIe 디바이스 목록
$ lspci

# 상세 정보
$ lspci -v

# 매우 상세 정보 (링크 속도, 레인 수 등)
$ lspci -vvv

# 특정 디바이스 정보
$ lspci -s 01:00.0 -v


Best Practices

  • PCIe 4.0 이상 사용 권장 (대역폭 효율성)
  • GPU는 x16 레인 사용 (최대 대역폭)
  • NVMe SSD는 x4 레인 이상 사용
  • DMA 버퍼는 64비트 주소 지원 확인
  • MSI 인터럽트 사용 (INTx 대신)
  • 흐름 제어 크레딧 모니터링
  • TC(Traffic Class)를 활용한 QoS 설정


Limitations

  • PCIe 1.0/2.0: 대역폭 제한 (구형 시스템)
  • INTx: 인터럽트 공유 문제
  • I/O TLP: Non-Posted로 인한 지연
  • 32비트 주소: 4GB 초과 주소 사용 불가
  • 스위치 추가: 각 hop마다 흐름 제어 오버헤드


References


Related Pages

Knowledge Graph

Related

ACSBifurcationCPU featuresDual vs Single PCIe Root ConfigurationAER (Advanced Error Reporting)ASPMPCIe 5.0

PCIe 6.0

PCIe 6.0은 2022년 출시. 32 GT/s, 15 GB/s per lane.

PCIe 6.0 대역폭
Lane ! x1 ! x4 ! x8 ! x16
15 GB/s | 60 GB/s | 120 GB/s | 240 GB/s
  • PAM4 변조 방식 (PCIe 5.0의 NRZ 대비 효율 2x)
  • Forward Error Correction (FEC) 추가
  • 8b/10b → 128b/132b 인코딩 (PCIe 5.0과 동일)

PCIe 7.0 (계획)

PCIe 7.0은 2025년 계획. 64 GT/s, 30 GB/s per lane.

PCIe 7.0 예상 대역폭
Lane ! x1 ! x4 ! x8 ! x16
30 GB/s | 120 GB/s | 240 GB/s | 480 GB/s

CXL (Compute Express Link)

CXL은 CPU- 가속기 간 고속 연결. PCIe와 호환. 메모일리티(Memory Interconnect) 지원.

  • CXL 2.0: 2021년 출시. 메모일리티 지원
  • CXL 3.0: 2023년 출시. 동적 메모리 분할 지원
  • CXL over PCIe 물리 레이어 사용
  • CPU ↔ GPU, CPU ↔ FPGA, CPU ↔ 스토리지 간 연결
# CXL 장치 확인
lspci | grep -i cxl

# CXL 메모리 확인
cat /sys/bus/cxl/devices/*/*memory