ACS: Difference between revisions

From HPCWIKI
Jump to navigation Jump to search
(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 ===
The [[PCIe]] specification allows for peer-to-peer transactions. This means that it is possible and even desirable in some cases for one PCIe endpoint, to send data directly to another endpoint without having to go through the Root Complex.<ref>file:///Users/bpark/Downloads/pci-sig-sr-iov-primer-sr-iov-technology-paper.pdf</ref>
 
[[파일:PCIe P2P.png|가운데|섬네일]]
PCIe 사양은 엔드포인트 간 직접 데이터 전송(P2P)을 허용합니다. 이는 한 PCIe 엔드포인트가 Root Complex를 거치지 않고 다른 엔드포인트에 직접 데이터를 보낼 수 있음을 의미합니다.


=== Access Control Services (ACS) ===
=== Access Control Services (ACS) ===
ACS provides a mechanism by which a Peer-to-Peer PCIe transaction can be forced to go up through the PCIe Root Complex. ACS can be thought of as a kind of gate-keeper —preventing unauthorized transactions from occurring.


Without ACS, it is possible for a PCIe Endpoint to either accidentally or intentionally (maliciously) write to an invalid/illegal area on a peer endpoint, potentially causing problems.
ACS는 P2P 트랜잭션이 Root Complex를 통해 강제되도록 하는 메커니즘을 제공합니다. ACS는 게이트키퍼 역할을 하여 무단 트랜잭션을 방지합니다.
 
ACS 없이 PCIe 엔드포인트는 실수하거나 고의적으로 잘못된/불법 영역에 쓸 수 있으며, 이는 잠재적으로 문제를 일으킬 수 있습니다.
 
=== IO Virtualization과 ACS ===


Usually ACS used for IO virtualization (also known as, VT-d or IOMMU) which can be enable or disable in [[BIOS]] or Kernel level.
일반적으로 ACS는 IO 가상화(VT-d 또는 IOMMU)에 사용됩니다. IO 가상화는 BIOS 또는 커널 수준에서 활성화/비활성화할 수 있습니다.


=== PLX PCI Bridge ===
=== PLX PCI Bridge ===
You can check whether ACS is enabled on PCI bridges by running:


If lines show “'''ACSCtl: SrcValid+'''”, then ACS might be enabled. Looking at the full output of lspci, one can check if a PCI bridge has ACS enabled.
PLX PCI 브리지에서 ACS 활성화 여부를 확인하려면:
sudo lspci -vvv | grep ACSCtl
 
If PCI switches have ACS enabled, it needs to be disabled. On some systems this can be done from the BIOS by disabling IO virtualization or VT-d. For Broadcom PLX devices, it can be done from the OS but needs to be done again after each reboot.
* '''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의 성능을 크게 저하시키거나 심지어 멈출 수 있습니다.


Use the command below to find the PCI bus IDs of PLX PCI bridges:
PCIe에서 ACS가 비활성화되어 있는지 확인해야 합니다. '+' 값은 활성화, '-' 값은 비활성화를 의미합니다.


Next, use setpci to disable ACS with the command below, replacing 03:00.0 by the PCI bus ID of each PCI bridge.
---


run "setpci -s bus#:slot#.func# f2a.w=0000" to disable ACSCtl on the PLX switch.
== Configuration ==


run lspci -vvv to confirm ACSCtrl is disabled on PLX switch.
=== ACS 상태 확인 ===


sudo setpci -s 03:08.0 f2a.w=0000  #assume 03:08.0 is the PLX pcie switch*
<syntaxhighlight lang="bash">
sudo setpci -s 03:00.0 f2a.w=0000
# PLX PCI 브리지 ACS 상태 확인
$ sudo lspci -vvv | grep ACSCtl
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-


=== GPUDirect and ACS ===
# 특정 장치 ACS 상태 확인
IO virtualization (also known as, VT-d or IOMMU) can interfere with GPU Direct by redirecting all PCIe point-to-point traffic to the CPU root complex, causing a significant performance reduction or even a hang.  Make sure that ACS is disabled on the PCIe. A Value of <flag> with ‘+' means enabled, while '-’ means disabled.<syntaxhighlight lang="bash">
$ 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>


#In case it is enabled, use the following command to disable it (for the right PCIe address “-s”):
=== 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 CPU ===
---
disabling IOMMU in GRU
 
== 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]]


# sudo nano /etc/default/grub
---
# GRUB_CMDLINE_[[Linux|LINUX]]_DEFAULT="amd_iommu=soft"
# sudo update-grub
# reboot


== Reference ==
[[Category:Linux]]
[[Category:Linux]]
[[Category:Reference]]
[[Category:Reference]]

Revision as of 14:54, 15 July 2026

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

---