본문 바로가기
HW Knowledge

IOMMU and ACS 이해

by 스쳐가는인연 2022. 4. 7.

IOMMU and MMU

IOMMU를 검색하면 바로 나오는 Wiki에 있는 이미지...

 

MMU : CPU가 메모리에 접근할 때, 가상 주소(Virtual Address)를 사용하며, 물리 메모리(Physical Memory)의 주소를 Virtual Address로 매핑해주는 장치 (여러 프로그램이 구동될 때, 메모리가 항상 모든 용량이 모여서 할당되지 않기에, 서로 다른 위치에(중구난방?) 있는 메모리를 모아 하나의 영역 처럼 CPU가 고생하지 않도록(?) 해준단다)

 

IOMMU : IO 장치(일반적으로 PCI 장치)IO 동작을 위해 메인 메모리(Physical Memory)를 할당 받게 되는데, 이 때, 접근을 위해 갖는 주소(Address)는 가상 주소(Virtual Address)이다. 할당 받은 가상 주소와 실제 주소(Physical Address)를 변환/매핑해주는 역할을 하는 장치가 IOMMU. (대상(target) 장치가 CPU가 아닌 IO 장치라는 것만 다른 ...)

 

할당되지 않은 메모리 영역을 접근하지 못하도록 보호하는 역할도 가지고 있음.

- Virtualizing DMA address (Address Translation and Protection)

물리 메모리 주소를 알고 있음에(목적이 주소 매핑하는 녀석이니...) 가상화 환경에서, VM에 특정 I/O 장치를 직접 할당하여 관리(pass-thru)할 때, 유용.

> 가상화 환경에서는 IOMMU를 사용하지 않을 때, Hypervisor가 데이터를 전달(bypass)해주는 역할만 하여, VM이 IO를 직접 처리하게되어 불필요한 IO 처리 지연이 발생하게 되는데 이를 개선하게 됨.

- Virtualizing Interrupts (Interrupt Remapping and Virtualizing)

 

IOMMUPCI trafficCPU root port를 거치도록 하는데, 동일한 PCIe Switch에 연결된 PCI 장치들의 경우 최대 가용 성능(maximum achievable throughput)을 제약하게 됨.

 

> AMD I/O Virtualization Technology (여러 이름으로 불린듯 ... AMD-V / AMD-IOV / AMD-VD)

> Intel VT-d

> PCI 규격 일반에서(?) IOV / IO Virtualization

 

ACS(Access Control Services) : ACS 기능은 PCIe 장치간의 P2P(peer-to-peer) PCIe transactions을 비활성화하며, 강제적으로, PCIe Root Complex를 거치도록 한다. 또한 Gate keeper로서 승인되지 않은 다른 PCIe 장치의 정보를 접근할 수 없도록 함. 이로 인해 조건에 따라 상당한 성능 저하 또는 응답없음 현상을 경험할 수 있다.

ACS는 상황에 따라, 장치간 접근이 신뢰할 수 없는 상황, 예를 들어 가상화 환경의 서로 다른 VM이 운영되는 등의 상황에서는 안정 및 보안에 도움이 된다. 하지만, 매우 신뢰할 수 있는 상황, 예를 들어, GPU간 연산데이터 송수신과 같이 DMA(Direct Memory Access)가 필요하고 주요한 상황에서는 장치간 통신에 제약이 발생하게 될지도...

 

ATS(Address Translation Services) : 앞서 언급한 것과 같이 PCI 장치의 IO를 위해서는 Physical Address와 Virtual Address의 변환이 있어야 하는데, 기본적으로는 Root Complex의 TA(Translation Agent)가 그 역할을 한다.

하지만, 시스템의 장치가 여러개인 경우, TA가 많은 부하를 갖게될 수 있다.

하여, 각 PCI 장치에 ATC(Address Translation Cache)를 두고, 변환된 Physical Address를 캐싱하는 서비스.

캐싱된 주소가 없거나, 변경되어, 새로운 변환이 필요하면, TA 또는 IOMMU(사용중인경우)에 주소 변환을 요청하게 된다.

(개인적으로, wiki에 설명된 iommu와 동일 개념은 아닌 듯 ...)

 

ACS를 통해 ATS역시 제어/제약이 가능함.

 

 

참고문서:

MMU (Memory Management Unit) : http://recipes.egloos.com/5232056
IOMMU: http://emal.iptime.org/noriwiki/index.php/IOMMU
AMD에서는 IOMMU를 AMD-VD라고 부르며, 인텔은 Vt-d라고 공표하고 있다. PCI-SIG에서는 이러한 부분을 I/O가상화, IOV라고 부르고 있으며 다른 이름으로는 Address Translation Services (ATS)라고도 부른다.
IOMMU: https://ko.wikipedia.org/wiki/IOMMU

VIRTUALIZING IO THROUGH THE IO MEMORY MANAGEMENT UNIT (IOMMU): https://pages.cs.wisc.edu/~basu/isca_iommu_tutorial/IOMMU_TUTORIAL_ASPLOS_2016.pdf

PCI Express Access Control Services (ACS) : https://pdos.csail.mit.edu/~sbw/links/ECN_access_control_061011.pdf
https://pcisig.com/specifications/pciexpress/specifications/ECN_access_control_061011.pdf

Introduction to PCIe Access Control Services: http://liujunming.top/2019/11/24/Introduction-to-PCIe-Access-Control-Services/
PCIe access control service (ACS) : https://chowdera.com/2021/10/20211029101717262t.html
Can someone explain ACS to me? : https://www.reddit.com/r/VFIO/comments/5h9wyo/can_someone_explain_acs_to_me/
ACS : https://www.plda.com/pcie-glossary/acs

 

What Is PCI Express Address Translation Services?: https://www.design-reuse.com/video/view/281/what-is-pci-express-address-translation-services.html
https://developer.amd.com/wordpress/media/2012/10/488821.pdf
allows a PCI peripheral to request virtual-tophysical address translation from an IOMMU or TA.

 

NVIDIA GPUDirect Storage Best Practices Guide

https://docs.nvidia.com/gpudirect-storage/best-practices-guide/index.html

PCIe Access Control Services (ACS).

ACS forces peer-to-peer PCIe transactions to go up through the PCIe Root Complex, which does not enable GDS to bypass the CPU on paths between a network adaptor or NVMe and the GPU in systems that include a PCIe switch.
For the optimal GDS performance, disable ACS.

IOMMU
When the IOMMU setting is enabled, PCIe traffic has to be routed through the CPU root ports. This routing limits the maximum achievable throughput for configurations where the GPU and NIC are under the same PCIe switch.

 

NCCL Troubleshooting

https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/troubleshooting.html

PCI Access Control Services (ACS)
IO virtualization (also known as, VT-d or IOMMU) can interfere with GPU Direct by redirecting all PCI point-to-point traffic to the CPU root complex, causing a significant performance reduction or even a hang.

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.

 

 

 

 

 

 

반응형