강좌 & 팁
커널 3.4 에 릴리즈된 주요 내용중 아키텍쳐에 종속적인 변경이 있습니다.
이번주에는 그 중에서 두번째로 살펴볼 내용은 tegra 에서 IOMMU 지원 드라이버의 패치입니다.
IOMMU: Tegra20: Add iommu_ops for GART driver (commit), tegra30: Add iommu_ops for SMMU driver (commit)
테그라에서 IOMMU 드라이버를 지원한다는 내용인데요, 여기에도 재미있는 내용이 많이 있습니다.
먼저 gart driver 와 smmu drive 에 대한 두가지 입니다.
테그라에서 지원되는 두가지 패치는 상당히 의미있어 보입니다.
먼저 GART(Graphic Address Remapping Table) 지원과 SMMU(system mmu) 지원은
ARM-v7-A 아키텍쳐에서 지원되는 가상화 관련된 기술에서 부터 시작됩니다.
IOMMU는 기존에 MMU 시스템에서 사용되는 것과 별도로 IO를 위한 MMU 테이블입니다.
SMMU 는 디바이스나 GPU 등이 MMU 를 거치지 않고 메모리에 접근할수 있도록 해 줍니다.
이런 것들을 통해서 어떤 것이 가능해지는가 하면, 단적으로 기존의 그래픽 드라이버등은
대용량의 물리적으로 연속된 메모리가 필요한 경우 고정된 메모리를 확보하기 위해서
시스템의 메모리를 예약하거나 하는 등의 일들이 필요했습니다.
왜냐하면 DMA 동작시에 MMU를 거치지 않고 물리적 공간으로 직접 접근하기 때문이죠.
하지만 SMMU를 사용하게 되면 연속적이지 않은 메모리라 하더라도 SMMU 를 통해
연속적인 공간인 것처럼 해주는 것이 가능하게 됩니다.
더 효율적인 사용이 가능하게 된다는 의미외에도 여기에서 나오는 장점은 더 있습니다.
입출력 장치의 가상화에도 적용할수 있습니다. 이런 목적으로 만들어진 것이 SMMU 입니다.
이러한 기능을 지원하기 위한 IOMMU 드라이버가 ARM 에서는 아키텍쳐의 요구사항에 의해
별도로 구현된 것들이 있습니다.
리눅스에서 사용하는 DMA 에 통합되지 않았는데 앞으로는 리눅스 시스템에서 구현되어 있는
core DMA 에 통합되어 가는 추세라고 합니다.
실제로 ARM DMA 아키텍쳐에 존재하는 write combining 성격(지연후 일괄쓰기)을 갖는 버퍼할당은
리눅스 DMA 에는 없는 것들인데 이런 것들을 통합할수 있도록 가고 있습니다.
DMA, SMMU, IOMMU, GART 등은 서로 밀접하게 연관되어 있는 것들이죠.
테그라의 성능향상이 기대되는 부분입니다.
그럼...