ACS

From HPCWIKI
Revision as of 14:54, 15 July 2026 by Clara (talk | contribs) (Phase 6.1: LLM-Optimized Wiki Template 적용)
Jump to navigation Jump to search

Template:Status

Template:TOC

Overview

ACS(Access Control Services)는 PCIe(Peripheral Component Interconnect Express) 사양에서 정의된 보안 메커니즘으로, PCIe 엔드포인트 간 직접 통신(P2P)을 제어하여 무단 트랜잭션을 방지합니다.

Summary

  • 무엇인가? PCIe P2P 트랜잭션 제어 메커니즘 — Root Complex를 통한 중재 강제
  • 왜 필요한가? IO 가상화(VT-d/IOMMU) 보안, GPU Direct 성능 최적화, 무단 P2P 접근 방지
  • 언제 사용하는가? 다중 GPU 시스템, IO 가상화 환경, PLX PCI 브리지 구성

---

Purpose

이 문서가 존재하는 이유

  • Goal: ACS의 작동 원리, P2P 통신, IO 가상화와의 관계, PLX 브리지 설정 방법 설명
  • Scope: ACS 활성화/비활성화 확인 및 설정, GPU Direct와의 관계, AMD CPU IOMMU 설정
  • Non-goals: PCIe 프로토콜 상세, 다른 PCIe 보안 메커니즘

---

Key Concepts

Concept Description Related
ACS Access Control Services — PCIe P2P 트랜잭션 제어 PCIe
P2P (Peer-to-Peer) PCIe 엔드포인트 간 직접 데이터 전송 — Root Complex 우회 PCIe
Root Complex PCIe 버스 컨트롤러 — 모든 PCIe 트랜잭션의 중심점 PCIe
IO Virtualization VT-d/IOMMU — 하드웨어 기반 IO 장치 가상화 BIOS
GPU Direct GPU 간 직접 데이터 전송 — ACS 비활성화 필요 NVIDIA GPU
PLX PCI Bridge PCIe 스위치/브리지 — ACS 활성화 시 GPU Direct 성능 저하 PCIe

---

Architecture

ACS의 P2P 제어 아키텍처:

graph TD
    A[PCIe Endpoint 1] --> B{P2P Request?}
    B -->|No ACS| C[Direct P2P Transfer]
    B -->|With ACS| D[Root Complex]
    D --> E{ACS Check}
    E -->|Authorized| F[P2P Transfer Allowed]
    E -->|Unauthorized| G[Transaction Blocked]
    C --> H[Performance Risk]
    H --> I[Invalid Write Possible]
    F --> J[Secure P2P]

---

Workflow

ACS 작동 흐름:

  1. PCIe 엔드포인트 간 P2P 트랜잭션 요청
  2. ACS 활성화 시 — Root Complex를 통한 중재
  3. Root Complex가 트랜잭션 권한 확인
  4. 승인된 트랜잭션 — P2P 허용, 미승인 — 차단
  5. GPU Direct 사용 시 — ACS 비활성화로 성능 최적화
Stage Input Output
P2P Request PCIe 엔드포인트 간 데이터 전송 요청 ACS 상태 확인
ACS Check Root Complex에서 트랜잭션 검증 승인/차단 결정
GPU Direct GPU 간 직접 전송 ACS 비활성화 필요
PLX Bridge PLX PCI 브리지 ACS 상태 ACSCtl 확인 및 설정

---

Detailed Explanation

PCIe Peer To Peer

PCIe 사양은 엔드포인트 간 직접 데이터 전송(P2P)을 허용합니다. 이는 한 PCIe 엔드포인트가 Root Complex를 거치지 않고 다른 엔드포인트에 직접 데이터를 보낼 수 있음을 의미합니다.

Access Control Services (ACS)

ACS는 P2P 트랜잭션이 Root Complex를 통해 강제되도록 하는 메커니즘을 제공합니다. ACS는 게이트키퍼 역할을 하여 무단 트랜잭션을 방지합니다.

ACS 없이 PCIe 엔드포인트는 실수하거나 고의적으로 잘못된/불법 영역에 쓸 수 있으며, 이는 잠재적으로 문제를 일으킬 수 있습니다.

IO Virtualization과 ACS

일반적으로 ACS는 IO 가상화(VT-d 또는 IOMMU)에 사용됩니다. IO 가상화는 BIOS 또는 커널 수준에서 활성화/비활성화할 수 있습니다.

PLX PCI Bridge

PLX PCI 브리지에서 ACS 활성화 여부를 확인하려면:

  • ACSCtl: SrcValid+ 표시 — ACS 활성화됨
  • PCI 스위치가 ACS를 활성화하면 비활성화해야 함
  • 일부 시스템에서는 BIOS에서 IO 가상화 또는 VT-d를 비활성화하여 설정
  • Broadcom PLX 장치의 경우 OS에서 설정하지만 재부팅 후 다시 적용 필요

GPU Direct와 ACS

IO 가상화(VT-d/IOMMU)는 모든 PCIe P2P 트래픽을 CPU Root Complex로 리디렉션하여 GPU Direct의 성능을 크게 저하시키거나 심지어 멈출 수 있습니다.

PCIe에서 ACS가 비활성화되어 있는지 확인해야 합니다. '+' 값은 활성화, '-' 값은 비활성화를 의미합니다.

---

Configuration

ACS 상태 확인

# PLX PCI 브리지 ACS 상태 확인
$ sudo lspci -vvv | grep ACSCtl
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

# 특정 장치 ACS 상태 확인
$ sudo lspci -s 0000:18:00.0 -vvv | grep ACSCtl
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

ACS 비활성화 (PLX 브리지)

# PLX PCI 브리지 ACS 비활성화
$ sudo setpci -s 03:08.0 f2a.w=0000   # 03:08.0은 PLX PCIe 스위치 예시
$ sudo setpci -s 03:00.0 f2a.w=0000

# ACS 비활성화 확인
$ sudo lspci -vvv | grep ACSCtl

# GPU Direct용 ACS 비활성화
$ sudo setpci -s 0000:18:00.0 f2a.w=0000

AMD CPU IOMMU 비활성화

# /etc/default/grub 수정
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=soft"

# GRUB 업데이트
sudo update-grub
sudo reboot

---

Examples

Example 1: ACS 상태 확인

# 전체 PCI 디바이스 ACS 상태 확인
$ sudo lspci -vvv | grep ACSCtl
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
ACSCtl: SrcValid+ TransBlk+ ReqRedir+ CmpltRedir+ UpstreamFwd+ EgressCtrl+ DirectTrans+

Example 2: GPU Direct용 ACS 비활성화

# GPU Direct를 위한 ACS 비활성화
$ sudo setpci -s 0000:18:00.0 f2a.w=0000

# 확인
$ sudo lspci -s 0000:18:00.0 -vvv | grep ACSCtl
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

---

Best Practices

  • GPU Direct 사용 시 — 모든 PCIe 브리지에서 ACS 비활성화 필수
  • IO 가상화 보안 필요 시 — ACS 활성화 유지
  • PLX 브리지 사용 시 — 재부팅 후 ACS 설정 재적용 필요
  • AMD EPYC 시스템 — amd_iommu=soft로 IOMMU 설정
  • BIOS에서 IO 가상화/VT-d 비활성화가 가장 안정적인 ACS 비활성화 방법

---

Limitations

  • ACS 비활성화 시 P2P 보안 약화 — 무단 접근 가능
  • PLX 브리지 OS 설정 — 재부팅 시 초기화
  • 일부 시스템에서 BIOS ACS 설정 옵션 부재
  • GPU Direct와 IO 가상화 간 트레이드오프 존재

---

References

---

Related Pages

---