Evgeny_CD, Архитектор (21.02.2010 01:51 - 02:01, просмотров: 3391)
Чет я в ступор впал. Торможу. ARM720: DMA и кеш - как их подружить? Есть некая область памяти. В которой процессор обрабатывает данные от периферии. Куда они подтаскаваются DMA.
Обработали мы кусок данных в памяти. То, к чему обращались - закешировалось. Теперь через какой-то промежуток времени DMA снова притащит данные.
DMA притащило данные. Мы идем их обрабатывать, и тут кеш радостно подставляет нам старые данные.
Как с этим бороться? Инвалидировать можно весь кеш целиком, не кешлайны отдельно (если я правильно доку вкурил).
Поместить данные в некешируемую зону - падение производительности на операциях с данными.
Использовать SWAP? Тоже не есть гуд. Из памяти оно читает, наплевав на кеш. Это хорошо, но последущий за этим цикл записи в общем-то нафиг не нужен. И скорости он точно не прибавит.
Т.е. по сути, чтобы не терять время зря в описанной ситуации, можно использовать только накристальный SRAM, поместив его в некешируемую зону MMU?
Вот изврат-то. Чет я как-то никогда не задумывался над деталями процесса...