[t:/]$ 지식_

DMA는 항상 빠른가?

2009/03/02

DMA는 말 그대로 CPU 타임을 아끼게 해준다. 요약하자면 다음과 같이 응용된다. 칩마다 조금 다름

  1. 복사 시작 번지 지정.
  2. 복사 끝 번지 지정.
  3. 타겟 번지 지정.
  4. 복사 개시!!

이렇게 하면 4단계의 수행만으로 복사에 대해서 CPU은 don't care 상태이다. 복사가 끝나면 DMA 인터럽트를 통해서 끝났음을 알려준다.

다음의 경우는 일반적인 DMA 복사의 경우이다.

0--------------f
****************
****************
****************
****************
****************
****************
****************
****************
      .
      .
      .
      .
****************
****************

0x3000:0000 - 0x3000:4000 까지의 연속 복사이다. 이 경우는 DMA가 월등히 빠르고 CPU 타임을 아껴준다.

다음의 경우를 보자. 블럭복사이다.

0--------------f
----------------
----------------
----------------
----****--------
----****--------
----****--------
----****--------
----------------
----------------

      .
      .
      .
      .
----------------
----------------

이런 경우는 연속적인 부분이 짧다. 따라서 DMA 셋업을 4회나 수행해야 한다. DMA에 의해서 버는 CPU타임은 적은 반면에 DMA 셋업 오버헤딩이 더 클 수도 있다.

따라서 수 바이트의 작은 메모리 복사를 빈번하게 하는 경우 DMA는 오히려 독이 될 수도 있다. 대표적인 경우가 프레임버퍼 - 비디오램 복사문제이다.

이 경우는 DMA를 쓰지 않아야 하는 경우가 많다. 비디오 처리를 고속화 하기 위해서 칩레벨의 명령어로서 블럭 트랜스퍼를 지원한다면 다음과 같이 될 것이다. 2D 가속기가 하는 일이다.

  1. 복사 시작 번지 지정
  2. 복사 width
  3. 복사 height
  4. 타겟 시작 번지 지정

역시 4단계의 수행만으로 끝난다.





공유하기













[t:/] is not "technology - root". dawnsea, rss