ACS: Difference between revisions

From HPCWIKI
Jump to navigation Jump to search
(새 문서: PCI Access Control Services (ACS) used for IO virtualization (also known as, VT-d or IOMMU))
 
(Fix: remove --- horizontal lines (12 removed))
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
PCI Access Control Services (ACS) used for IO virtualization (also known as, VT-d or IOMMU)
{{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 사양은 엔드포인트 간 직접 데이터 전송(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 상태 확인 ===
 
<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
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 lspci -s 0000:18:00.0 -vvv | grep ACSCtl
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
</syntaxhighlight>
 
 
== 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]]
== Knowledge Graph ==
 
Related
 
→ [[Linux]]
→ [[Server]]
→ [[Hardware]]
→ [[Network]]
 
[[Category:Reference]]

Latest revision as of 11:26, 17 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

Knowledge Graph

Related

LinuxServerHardwareNetwork