콘텐츠로 바로가기

PCIe, DMA & IO Virtualization

고성능 주변 장치 간의 물리적 장벽을 허무는 PCIe 인터커넥트와, 가상화 환경에서도 하드웨어 자원에 직접 접근 가능케 하는 IOMMU 및 SR-IOV 기술을 다루는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

computer-architecture-embedded-systemscomputer-architectureembedded-systemshardware-software-interface-physicspciedmaio-virtualizationlearning10 min read

1. Overview

PCIe, DMA와 I/O 가상화(PCIe, DMA & IO Virtualization)는 그래픽카드(GPU)나 100Gbps 고속 랜카드(NIC) 같은 괴물 주변기기들이, CPU의 옹졸한 통제를 우회하여 메인보드의 거대한 척추(PCIe)를 타고 마더보드 램(RAM) 영역에 초당 기가바이트(GB/s) 단위의 데이터를 직행으로 때려 박는 서버급 하드웨어 파이프라인 역학입니다.

학습자는 병렬 버스의 한계를 찢고 핀 하나에 직렬로(Serial) 미친 듯한 클럭을 걸어 레인(Lane, x16)으로 묶어버리는 **PCI Express (PCIe)**의 물리 계층 스위칭 패킷 망을 뜯어보고, 디바이스가 CPU 멱살을 잡고 메모리를 털어가는 고급 DMA (Direct Memory Access) 메커니즘을 해부합니다. 나아가 클라우드 환경에서 가상머신(VM) 수십 개가 하나의 물리적 NIC 카드를 "마치 자기 혼자 독점하는 것처럼" 잘라 쓰게 맹글어주는 **SR-IOV (Single Root I/O Virtualization)**와 물리 방패망 IOMMU의 기하학을 통달하여 데이터센터급 시스템 버스 아키텍트 역량을 확보합니다.

2. Scope & Boundaries

In-Scope

  • PCI Express 뼈대 (PCIe Physics): 패킷 교환(Packet Switched) 토폴로지, 레인(Lanes, x1/x4/x16), 트랜잭션 계층 패킷(TLP, Transaction Layer Packet), 스위치/루트 콤플렉스(Root Complex).
  • 고도화된 메모리 직격 (Advanced DMA): 스캐터-개더(Scatter-Gather) DMA 디스크립터 링 버퍼, 버스 마스터링(Bus Mastering).
  • I/O 가상화 및 할당 (IO Virtualization): SR-IOV 물리 함수(PF)와 가상 함수(VF), 하이퍼바이저 바이패스(Passthrough).
  • 하드웨어 메모리 방패 (IOMMU): 인텔 VT-d / AMD-Vi, 디바이스 격리(Device Isolation), 가상 주소(IOVA) 매핑 물리.

Out-of-Scope

  • 운영체제 파일 시스템 I/O: 리눅스 VFS(Virtual File System) 계층이나 NVMe 블록 디바이스 드라이버 로직 \rightarrow 03-04-01. I/O Devices & File System Physics 영역.
  • SoC 내부 캐시 통신망: 단일 칩 내부 코어 간 통신망인 NoC(Network-on-Chip)나 AXI 버스 \rightarrow 02-05-02. System-on-Chip (SoC) Architecture 영역.

Boundaries

  • PCIe vs. Legacy Buses (02-05-04): I2C나 CAN(02-05-04)이 "선로 1개를 나눠 쓰며 서로 먼저 말하려고 눈치(Arbitration)를 보는 동네 무전기"라면, PCIe는 "각 장치마다 전용 고속도로를 깔고 패킷(우편물)을 스위치 허브로 던져서 기가바이트를 꽂아버리는 마더보드 스케일의 인터넷망"입니다.

3. Counterexample

  • VM I/O 에뮬레이션 병목 (Emulation Penalty Trap): 하이퍼바이저가 가상 랜카드(Virtual NIC)를 소프트웨어 코드로 에뮬레이션하여 10개의 VM에 붙여줬을 때의 끔찍함. VM에서 패킷 하나를 보낼 때마다 코드가 멈추고 하이퍼바이저 커널 모드로 스위칭(Context Switch)되어 소프트웨어 버퍼를 미친 듯이 카피(Copy)하다가 CPU 자원의 80%가 I/O 처리에 낭비됩니다. 이를 SR-IOV 하드웨어 바이패스(하드웨어 레벨의 가상화 찢기)로 뚫어내지 않으면 100Gbps 망은 물리적으로 불가능합니다.
  • DMA 주소 변환 무지 (Flat Memory DMA Crash): 리눅스 커널이 메모리를 가상 메모리(Virtual Address)로 관리하고 있는데, GPU에게 냅다 가상 주소 포인터를 던져주고 DMA(Direct Memory Access) 복사를 지시하는 멍청한 설계. 물리적 장치인 GPU 컨트롤러는 OS의 뇌내 망상인 가상 주소를 알 턱이 없으므로, 엉뚱한 램(물리 주소)을 덮어쓰다 커널 패닉(Kernel Panic)을 띄우고 시스템을 터트립니다. 반드시 커널을 거쳐 물리 주소로 맵핑해주거나 IOMMU 번역망을 세팅해야 합니다.

4. Prerequisites

  • 기본 DMA 역학 (Basic): DMA가 메모리를 하청 복사하는 기본 원리와 아비트레이션을 선행해야, 확장된 PCIe 스캐터-개더 DMA를 장악할 수 있습니다. (02-05-02 Direct Memory Access Mechanics)
  • 가상 메모리 변환 (Basic): CPU가 MMU로 주소를 변환하는 페이징(Paging)의 물리를 이해해야, 마더보드 판 MMU인 IOMMU의 통제력을 획득할 수 있습니다. (03-01-02 VMM)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 PCIe Topology 모두가 공유하던 낡은 버스를 버리고, 차선을 독점(x16)해 기가바이트 패킷을 쏘는 마더보드 인터넷망을 쥡니다. P1
2 Advanced DMA 기가비트 데이터가 파편화된 메모리 쪼가리들을 알아서 추적하며(Scatter-Gather) CPU 없이 램을 조립하는 물리를 뜯어봅니다. P5
3 IOMMU Defense 중국산 해킹 랜카드가 CPU를 쌩까고 커널을 훔쳐보지 못하도록, 마더보드 길목에 MMU 주소 검문소(IOMMU)를 칩니다. Industry
4 SR-IOV (I/O Virtualization) 가상머신(VM) 수십 개가 거추장스러운 OS 통역을 버리고, 칩(NIC)의 하드웨어를 직접 찢어 1<1로> 장악하는 마법을 해부합니다. Industry

6. Learning Topics

Basic

Core Topic 01: 병렬 버스의 멸종과 직렬 스위칭 망, PCIe (PCI Express Physics)

  • Why to Learn: 그래픽카드(GPU) 포트에 왜 금색 핀(레인)이 길게 늘어서 있는지, 마더보드 칩셋이 초당 기가바이트의 데이터를 랙 없이 어떻게 실어나르는지 거시적 하드웨어 골격을 꿰뚫기 위함입니다.
  • What to Learn:
    • Concepts: 차동 직렬(Differential Serial), 레인(Lanes, x1/x4/x8/x16), TLP(Transaction Layer Packet).
    • Skills: 루트 콤플렉스(Root Complex), 엔드포인트(Endpoint), 스위치 토폴로지.
    • Tools: PCIe 대역폭 계산 (Gen3, Gen4, Gen5).
    • Trade-offs: 옛날 PCI처럼 32가닥 선을 나란히(병렬) 깔면 타이밍 맞추기가 쉬울 줄 알았는데, 클럭이 높아지자 선끼리 전자기 간섭(Crosstalk)이 터지고 도착 시간이 엇갈려(Skew) 박살 나는 물리적 한계 vs 냅다 선 2가닥(TX/RX 직렬)만 남긴 채 주파수를 미친 듯이(수 GHz) 올려버리고, 속도가 더 필요하면 그 직렬 묶음을 레인(Lane) 단위로 복붙(x16)해버리는 현대 스위칭 아키텍처의 승리.
  • How to Learn:
    • 1단계: 마더보드에 깔린 PCIe 망은 단순한 전깃줄이 아니라 집 안의 공유기(Router)와 똑같이 생겼음을 인지하고, CPU(Root Complex)가 GPU(Endpoint)에게 데이터를 보낼 때 전압이 아닌 '패킷 덩어리(TLP)'로 싸서 던지는 스위칭 물리를 해부합니다.
    • 2단계: x16 그래픽카드 슬롯이 16차선 고속도로처럼 작용해, 각 레인(Lane)이 독립적으로 바이트(Byte) 조각을 동시에 쏴버리고 수신 측에서 다시 재조립(Deskew)하여 초당 32GB/s를 뿜어내는 기하학을 뜯어봅니다.
  • Implement: 4개의 레인(List)을 가진 가상 PCIe 송신기를 작성. 100바이트의 패킷을 4등분하여 각 레인의 큐(Queue)에 병렬로 밀어 넣고, 수신 측에서 Tick마다 4레인에서 1바이트씩 팝(Pop)하여 완벽한 원본 패킷으로 1/4시간 만에 조립해 내는 레인 분산(Striping) 시뮬레이션.

Core Topic 02: 기가비트 짐꾼, 스캐터-개더 DMA (Advanced DMA Mechanics)

  • Why to Learn: 100Gbps 네트워크 카드에서 쏟아지는 수백만 개의 패킷을 CPU가 일일이 램 번지를 지정해주며 카피하려면 시스템이 즉사하므로, 하드웨어 칩이 스스로 메모리 지도를 읽고 조립하는 오토파일럿을 장악하기 위해서입니다.
  • What to Learn:
    • Concepts: 스캐터-개더(Scatter-Gather), 버스 마스터(Bus Master), 디스크립터 링(Descriptor Ring).
    • Skills: 버퍼 파편화 극복, DMA 체이닝(Chaining), 꼬리 포인터(Tail Pointer) 업데이트.
    • Tools: NIC 링 버퍼 레지스터.
    • Trade-offs: 단일 덩어리 전송 모드(Simple DMA)는 빠르고 세팅이 쉽지만 가상 메모리 페이징 환경에서 4KB 조각들로 찢겨진 램을 활용 불가능한 함정 vs 디스크립터(지도)를 던져주어 흩뿌린(Scatter) 조각들을 하나로 모아(Gather) 하드웨어가 링크드 리스트를 추적하게 만들면 셋업 복잡도는 지옥이지만 파편화된 메모리 한계를 완벽히 부수는 궁극의 효율.
  • How to Learn:
    • 1단계: 운영체제 램(RAM)에 연속된 1MB 공간이 없어서 4KB짜리 256조각으로 파편화되어 있을 때, CPU가 4KB 복사 끝날 때마다 DMA 인터럽트를 받고 다시 주소를 세팅하는 끔찍한 오버헤드를 해부합니다.
    • 2단계: 이를 막기 위해 메모리 특정 구역에 [현재 버퍼 주소, 사이즈, 다음 디스크립터 주소]로 구성된 '지시서(Descriptor) 배열'을 원형 링(Ring)으로 깔아두면, 랜카드(NIC) 안의 DMA 컨트롤러가 그 지시서를 스스로 쫓아가며 CPU를 단 한 번도 안 깨우고 패킷을 256개 공간에 알아서 욱여넣는 기하학을 뜯어봅니다.
  • Implement: 파이썬으로 가상 RAM 배열과, 주소가 흩어진(Index 10, 50, 90) 메모리 조각들을 가리키는 Descriptor 링크드 리스트 객체 구축. NIC_Device 객체가 start_dma() 신호를 받으면 루프를 돌며 디스크립터의 next_ptr를 스스로 추적해 3조각 버퍼를 한 방에 가득 채워버리는 스캐터-개더 하드웨어 엔진 모사.

Practical

Core Topic 03: 하드웨어 메모리 검문소, IOMMU 방어선 (Device Isolation)

  • Why to Learn: 서버에 꽂힌 3만 원짜리 싸구려 랜카드나, 썬더볼트 단자에 해킹 USB를 꽂아 마더보드의 PCIe 레인을 타고 CPU 몰래 커널 메모리를 통째로 복사해 가는 악몽(DMA Attack)을 물리적으로 틀어막기 위함입니다.
  • What to Learn:
    • Concepts: IOMMU(Input-Output Memory Management Unit), Intel VT-d / AMD-Vi.
    • Skills: IOVA(I/O Virtual Address), 디바이스 도메인 격리(Device Domain Isolation), 페이지 테이블 번역.
    • Tools: 하이퍼바이저 패스스루(Passthrough).
    • Trade-offs: IOMMU를 켜면 모든 하드웨어 디바이스가 메모리에 접근(DMA)할 때마다 IOMMU 페이지 테이블 검문소를 거쳐야 하므로 수백 나노초의 레이턴시(랙)가 쌓여 초고속 랜카드 성능이 깎이는 단점 vs 이 검문소를 끄면 썬더볼트에 해킹 케이블을 꽂는 순간 서버 전체 램 데이터가 1초 만에 유출되는 끔찍한 리스크.
  • How to Learn:
    • 1단계: 옛날 방식(Flat Memory)에서는 DMA 컨트롤러가 시스템 버스 권한만 잡으면 물리 메모리 어디든 마음대로 찔러볼 수 있었던(No Boundaries) 무법천지 아키텍처를 해부합니다.
    • 2단계: 칩셋 루트 콤플렉스(Root Complex) 길목에 IOMMU라는 검문소를 세워, 디바이스가 던진 IOVA(가상 주소)를 물리 주소로 맵핑(번역)해 줌과 동시에, 그래픽카드가 감히 허가되지 않은 다른 영역(커널 암호 메모리)을 찌르면 즉각 PCIe 에러 패킷(Target Abort)을 쏘고 전기 접속을 차단하는 차단막 물리를 뜯어봅니다.
  • Implement: 마더보드의 IOMMU 역할을 하는 라우터 클래스 작성. 2개의 가상 디바이스(NIC, USB)가 각각 독립된 Device_Page_Table 딕셔너리 범위를 가짐. USB가 맵핑되지 않은 커널 영역(0x000000)에 DMA write()를 시도할 때 즉시 IOMMU_Violation_Fault를 뱉고 덤프(Drop)해버려 접근을 원천 봉쇄하는 시뮬레이션.

Advanced

Core Topic 04: 가상머신 직결 파이프라인, SR-IOV (Single Root I/O Virtualization)

  • Why to Learn: 클라우드(AWS, Azure) 서버 1대 안에서 가상머신(VM) 50개가 돌아가는데, 물리 랜카드(NIC) 1개를 서로 쓰겠다며 소프트웨어 하이퍼바이저를 쥐어짜다 CPU 자원이 통째로 증발해 버리는(I/O Bottleneck) 병크를 깨부수기 위해서입니다.
  • What to Learn:
    • Concepts: SR-IOV, PF(Physical Function), VF(Virtual Function).
    • Skills: 하이퍼바이저 바이패스(Bypass), 하드웨어 큐 분할(Hardware Queue Slicing).
    • Tools: PCI 스펙 명세, 클라우드 네트워킹 인프라.
    • Trade-offs: 하이퍼바이저 커널이 가상 랜카드(vNIC)를 코드로 만들어 스위칭(V-Switch)해주면 VM을 무한정 만들 수 있고 유연하지만 속도가 개판 침 vs 비싼 SR-IOV 칩을 사서 하드웨어 단에서 랜카드를 물리적으로 64조각(VF) 내버리면, 하이퍼바이저를 완전히 패스(Bypass)하고 VM이 랜카드에 직통 다이렉트 엑세스하여 0 딜레이를 얻지만 쪼갤 수 있는 개수(VF 한도)가 하드웨어 스펙에 묶이는 하드 코딩의 딜레마.
  • How to Learn:
    • 1단계: VM 1번이 패킷을 쏠 때, [VM 커널] \rightarrow [하이퍼바이저(KVM)] \rightarrow [가상 스위치] \rightarrow [물리 랜카드 드라이버]를 거치며 컨텍스트 스위칭이 3번이나 터져 CPU 점유율이 폭주하는 '소프트웨어 오버헤드의 지옥'을 해부합니다.
    • 2단계: SR-IOV 칩을 달면, 하드웨어 랜카드가 뇌(컨트롤러)를 64개의 복제본(Virtual Function, VF)으로 스스로 분열시키고, 하이퍼바이저는 이 분열된 칩 조각 1개를 VM 1번의 램 구역에 다이렉트 IOMMU 맵핑을 때려 박아버립니다. 그 결과 VM 1번이 패킷을 쏠 때 OS 개입 없이 냅다 하드웨어 전극(NIC 큐)으로 직행해 버리는 하드웨어 바이패스의 미친 속도를 뜯어봅니다.
  • Implement: 가상의 패킷 전송을 100번 반복할 때, 에뮬레이션 래퍼 함수 2개를 거치는 코드 모드와, 포인터 할당 후 하이퍼바이저 래퍼를 거치지 않고 직접 NIC_Hardware.queue_push()를 때리는 SR-IOV(Direct) 모드의 실행 콜 스택 뎁스(Call Stack Depth)와 경과 시간 차이를 비교 출력하는 아키텍처 벤치마크 모델.

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
PCIe 점대점(P2P) 직렬 통신 방식을 사용하여 주변 장치를 고속 결합하는 현대 시스템 확장 인터커넥트입니다. 기본 고속 연결 Lane / Root PCI '병렬 버스'가 아님 Industry core
IOMMU 장치의 가상 메모리 주소를 CPU의 물리 주소로 변환하고 보안 경계를 체크하는 하드웨어 유닛입니다. 추천 주소 보호 VT-d / AMD-Vi MMU 'CPU용 MMU'와 다름 P3:CyBOK core
SR-IOV 하나의 물리적 PCIe 장치를 여러 개의 독립된 가상 장치로 하드웨어적으로 쪼개어 보여주는 기술입니다. 실무 자원 공유 VF / PF Virtualization '소프트웨어 애뮬레이션' 아님 Industry core
Zero-copy CPU가 데이터를 직접 복사하지 않고, 장치와 메모리가 직접 소통하여 지연을 물리적으로 없애는 기술입니다. 심화 성능 극한 Passthrough Buffer copy '수학적 0'이 아닌 '물리적 0' Industry/Networking core

8. References

Primary

Secondary

  • [PCI Express Technology] MindShare — The definitive PCIe reference.
  • [VirtIO: Towards a De-Facto Standard For Virtual I/O] — Industry virtualization paper.

Industry

  • [Intel: Intel Virtualization Technology for Directed I/O (VT-d)] — Official IOMMU spec.
  • [AMD-Vi (IOMMU) Specification] — AMD's hardware implementation details.

9. Final Checklist

Primary

  • 'PCIe 4.0 x16' 슬롯에서 낼 수 있는 이론적 최대 전송 속도를 레인당 물리 대역폭 기반으로 수리적으로 도출할 수 있는 가? (P2)
  • 'IOMMU'가 꺼진 상태에서 장치의 '악의적인 DMA'가 어떻게 호스트 운영체제의 코드를 물리적으로 덮어쓸 수 있는지 위협 시나리오를 설명 가능한가? (P3)

Secondary

  • 'SR-IOV' 환경에서 Virtual Function (VF) 상호 간의 데이터 기밀성이 하드웨어적으로 어떻게 보장되는지 물리적 격리 근거를 소통 가능한가?
  • PCIe의 'Root Complex'가 왜 시스템 전체의 인터커넥트 허브 역할을 수행해야 하는지 물리학적 위상 구조 관점에서 증명할 수 있는 가?

Industry

  • AI 학습 서버 구축 시, GPU 간의 직접 통신을 위해 PCIe 스위치나 NVLink가 왜 IOMMU 설정을 정교하게 요구하는지 보안/성능 관점에서 제안할 수 있는 가? (SFIA)
  • 'Device Passthrough' 설정 후 특정 VM이 충돌했을 때, 해당 하드웨어 자원을 무력화(Reset)하여 호스트의 안전을 지키는 하드웨어 시퀀스를 기술할 수 있는 가?

Hardware-Software Interface Physics

5 / 6