팔 코어 텍스 -a9 쿼드 코어 장치가 있고 다중 프로세스 응용 프로그램을 프로그래밍하고 있습니다. 이 프로세스는 동일한 입력 소스, 즉 mmap() 호출을 사용하여 모두 액세스하는 DMA 버퍼를 공유합니다.임시로 캐시 할 수있는 DMA 메모리 만들기
프로세스가 DMA 메모리에 액세스하는 데 걸리는 시간이 입력 소스를 정상 할당 버퍼 (즉, malloc을 사용하여 할당 됨)로 변경하는 것보다 훨씬 더 오래 걸리는 것으로 나타났습니다.
버퍼가 안정적 일 때 (대부분의 경우 하드웨어에서 변경되지 않음) 또는 더티 (데이터가 있음)를 결정할 수 있기 때문에 DMA 버퍼를 캐싱 할 수없는 이유를 이해합니다. 변경됨) 메모리 영역을 일시적으로 캐시 가능하게 만들면 속도가 크게 향상 될 수 있다고 생각했습니다.
할 방법이 있습니까?
나는 현재 메모리를 매핑이 줄을 사용하고 있습니다 :
void *buf = mmap(0, size, PROT_READ | PROT_WRITE,MAP_SHARED, fd, phy_addr);
감사합니다!
DMA 버퍼가 너무 광범위합니다. 당신은 어떻게 그것을 얻거나 만들 수 있습니까? –
장치의 커널 모듈에 DMA_ALLOC_COHERENT가있는 DMA 버퍼를 만듭니다. – oferlivny