ACS: Difference between revisions
(Add categories: Linux, Reference) |
(Phase 6.1: LLM-Optimized Wiki Template 적용) |
||
| Line 1: | Line 1: | ||
{{Status | |||
|status=Draft | |||
|owner=Knowledge Agent | |||
|last_update=2026-07-15 | |||
|review=Pending | |||
}} | |||
{{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 == | |||
{| class="wikitable" | |||
! 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 제어 아키텍처: | |||
<syntaxhighlight lang="mermaid"> | |||
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] | |||
</syntaxhighlight> | |||
--- | |||
== Workflow == | |||
ACS 작동 흐름: | |||
# PCIe 엔드포인트 간 P2P 트랜잭션 요청 | |||
# ACS 활성화 시 — Root Complex를 통한 중재 | |||
# Root Complex가 트랜잭션 권한 확인 | |||
# 승인된 트랜잭션 — P2P 허용, 미승인 — 차단 | |||
# GPU Direct 사용 시 — ACS 비활성화로 성능 최적화 | |||
{| class="wikitable" | |||
! 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 Peer To Peer === | ||
PCIe 사양은 엔드포인트 간 직접 데이터 전송(P2P)을 허용합니다. 이는 한 PCIe 엔드포인트가 Root Complex를 거치지 않고 다른 엔드포인트에 직접 데이터를 보낼 수 있음을 의미합니다. | |||
=== Access Control Services (ACS) === | === 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 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 상태 확인 === | |||
<syntaxhighlight lang="bash"> | |||
# 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 | $ sudo lspci -s 0000:18:00.0 -vvv | grep ACSCtl | ||
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans- | ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans- | ||
</syntaxhighlight> | |||
# | === ACS 비활성화 (PLX 브리지) === | ||
<syntaxhighlight lang="bash"> | |||
# 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 | |||
</syntaxhighlight> | |||
=== AMD CPU IOMMU 비활성화 === | |||
<syntaxhighlight lang="bash"> | |||
# /etc/default/grub 수정 | |||
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=soft" | |||
# GRUB 업데이트 | |||
sudo update-grub | |||
sudo reboot | |||
</syntaxhighlight> | |||
--- | |||
== Examples == | |||
=== Example 1: ACS 상태 확인 === | |||
<syntaxhighlight lang="bash"> | |||
# 전체 PCI 디바이스 ACS 상태 확인 | |||
$ sudo lspci -vvv | grep ACSCtl | |||
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans- | |||
ACSCtl: SrcValid+ TransBlk+ ReqRedir+ CmpltRedir+ UpstreamFwd+ EgressCtrl+ DirectTrans+ | |||
</syntaxhighlight> | |||
=== Example 2: GPU Direct용 ACS 비활성화 === | |||
<syntaxhighlight lang="bash"> | |||
# GPU Direct를 위한 ACS 비활성화 | |||
$ sudo setpci -s 0000:18:00.0 f2a.w=0000 | $ 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- | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== AMD | --- | ||
== 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 == | |||
* https://www.plda.com/pcie-glossary/acs | |||
* https://askubuntu.com/questions/pcie-bus-error | |||
--- | |||
== Related Pages == | |||
* [[PCIe]] | |||
* [[GPU Direct]] | |||
* [[NVIDIA GPU]] | |||
* [[BIOS]] | |||
* [[PLX PCI Bridge]] | |||
* [[IOMMU]] | |||
* [[VT-d]] | |||
--- | |||
[[Category:Linux]] | [[Category:Linux]] | ||
[[Category:Reference]] | [[Category:Reference]] | ||
Revision as of 14:54, 15 July 2026
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
---