FPGA - DMA 사용의 장단점

DMA 사용시 장단점

enter image description here

DMA 사용의 장단점

1. DMA란

  • DMA는 Direct Memory Access의 약자로 직접 메모리 접근이라는 용어이다.

2. DMA 사용 이유

  • 일반적으로 메모리에 데이터를 Read, Write 할 때 CPU를 통해서 데이터를 Read, Write 하게 된다. 적은 양의 데이터라면 메모리 주소번지에 CPU가 접근하여 데이터를 Read, Write 하면 되는데 데이터가 많아지게 되면 주소번지마다 CPU가 접근하여 데이터를 Read, Write 하게 되므로 CPU의 리소스가 메모리의 데이터를 Read, Write 하는데 많이 할당된다. 다른 주변장치들도 관리해야하는 CPU의 입장에서 이는 비효율일 수 밖에 없는데 이런 메모리와 주변장치들의 Read, Write 동작을 대신 해주는 것이 DMA라고 보면 된다.

3. DMA의 단점

  • 메모리의 데이터 Read, Write 동작 시 DMA를 사용하면 최선인가? 라는 생각이 들 수 있는데 결론부터 얘기하면 아니다
  • DMA로 데이터를 이동하고 이를 CPU 가공하려면 이전 포스팅(‘Xilinx Cache에 대한 고찰’) 에서 얘기한 Cache Coherence가 유지되지 않는 문제가 발생할 수 있기 때문이다. 때문에 적은 양의 데이터를 DMA로 전송하고 CPU에서 가공하기 위해 Cache 동기화 동작까지 하게 된다면 CPU에서 메모리를 접근하는 것보다 더 많은 시간이 소요될 수 있다.

4. DMA 사용 예

  • 그렇다면 DMA를 언제 사용하면 좋을까? 주로 메모리간의 데이터 이동, 메모리와 주변장치 간의 데이터 이동 등에 사용한다고 보면 되겠다.
  • 단순하게 생각하면 사용이 많이 제한적으로 보일 수 있는데 어떻게 활용하느냐에 따라 DMA의 장점은 활용하면서 데이터 가공까지 겸할 수 있다. 예를들면 저장된 이미지 데이터를 DMA를 통해 가로로 짝수줄만 DMA 전송하고 이를 다시 세로로 짝수줄만 전송하면 CPU의 관여 없이 100x100 픽셀의 이미지가 50x50 픽셀 이미지로 Resizing 된다. 또는 DDR 메모리의 이미지 또는 대량의 데이터를 USB 또는 이더넷 등 외부로 전송해야 할 때 DMA를 활용하면 CPU를 효율적으로 활용할 수 있게 된다.

5. 결론

  • 결론적으로 DMA는 CPU를 효율적으로 사용할 수 있게 도와주는 장치 이다. DMA가 어떤 동작을 해야할지와 언제 시작 해야하는지는 CPU가 정해줘야 하고 이후에 CPU는 DMA가 정해진 동작이 끝났는지만 체크해주면 되는 것이다.
  • 시스템을 설계할 때 DMA를 어떻게 활용하느냐에 따라 시스템의 성능이 달라지므로 꼭 DMA의 많은 기능들에 대해 알고 있으면 좋겠다. 추후 시간이된다면 DMA의 추가적인 기능인 SG 등에 대해서 다뤄보도록 하겠다. 마지막으로 네xx 카페에서 누군가 질문했던 것애 대한 답변 방식으로 마무리 해본다.

모든 주변장치를 DMA로 접근해도 문제가 없는 것인가?

  1. 모든 주변장치를 DMA로 접근해도 문제는 없습니다.
  2. DMA는 하나의 동작만 가능합니다.
  3. DMA로 주고 받은 데이터를 CPU가 접근해야 한다면 cache coherence이 유지되지 않는 문제가 발생할 수 있습니다.
  4. 때문에 cache 동기화 동작이 필요한데 전송 데이터 양이 적다면 이 시간이 CPU가 직접 데이터를 가져오는 시간보다 오래걸릴듯 합니다.(데이터 크기가 얼마부터 DMA가 유리한지는 계산이 필요할듯)
  5. 또한 전송 데이터양이 작고 주변장치 수 만큼 DMA가 있는게 아니라면 CPU가 DMA를 매번 다시 셋팅하는 시간이 CPU가 주변장치에 접근하는 시간보다 오래 걸릴 수 있습니다.
  6. 결국에는 DMA동작을 셋팅하고 시작 시점을 주는것은 CPU 입니다. 일반적으로 데이터양이 적고 CPU에서 가공해야 한다면 CPU에서 접근하는 것이 빠를 것이고 전송 데이터양이 많거나 CPU에서 따로 가공이 필요하지 않은 데이터들이라면 DMA가 유리할 것 같네요. 상황에 따른 적용이 필요할 것 같습니다.

도움이 되셨다면 더 좋은 정보 공유를 위해 광고 클릭 부탁 드립니다 :)

댓글 쓰기

0 댓글