ACS
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 작동 흐름:
- PCIe 엔드포인트 간 P2P 트랜잭션 요청
- ACS 활성화 시 — Root Complex를 통한 중재
- Root Complex가 트랜잭션 권한 확인
- 승인된 트랜잭션 — P2P 허용, 미승인 — 차단
- 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
Knowledge Graph
Related