реклама на сайте
подробности

 
 
> Производительность SAM9XE, непонятки с этим процом
EugenB2
сообщение Jan 14 2010, 21:01
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820



Имеется платка с SAM9XE512, все запускает, шьется, работает. Но есть одно неприятное НО. Решил я затестить производительность сей штуки. Сделал тупо просто:
t=GetTickCount(); 1ms тики
for(k=0;k < 6600000; k++); подобрал, чтобы 1секунду примерно
t=GetTickCount()-t; равно 1000
(вообще сделал вывод в DEBUG и компом проверил отсчет 1 секунды)

Итак получаем в дизасме(позже выложу), что цикл занимает 5 инструкций, одна из них 2такта . Итого 7 тактов.
Итак 7*6600000=46200000 46 MIPS
Потом включаю ICache. Вуаля, производительность сразу в два раза 92мипса.
А теперь вопрос! Где обещанные 200MIPS????? Или я где-то ошибся?

Сообщение отредактировал EugenB2 - Jan 14 2010, 21:06
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
vmp
сообщение Jan 15 2010, 12:36
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(andrewlekar @ Jan 15 2010, 14:41) *
То есть секция TLB у вас размещалась в SDRAM? Это не слишком било по производительности? Разглядываю примеры - там располагали эту секцию в SRAM.

Не проверял. Но вообще-то она кешируется, в ARM926EJ-S кеш TLB имеет по 32 элемента на код и данные, так что для данной конфигурации почти все должно было осесть в кеше.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 15 2010, 12:37
Сообщение #17


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(andrewlekar @ Jan 15 2010, 13:41) *
То есть секция TLB у вас размещалась в SDRAM? Это не слишком било по производительности? Разглядываю примеры - там располагали эту секцию в SRAM.

Это совершенно не бъет по производительности если суммарное количество активных секций (та память с которой работаем) не превашает 64 (напр 64 секции по 1MB). Активные секции постоянно будут в регистрах MMU и обращений к TLB практически не будет.
Go to the top of the page
 
+Quote Post
EugenB2
сообщение Jan 16 2010, 07:42
Сообщение #18





Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820



Цитата(vmp @ Jan 15 2010, 13:32) *
Пример инициализации MMU для SAM9XE под IAR 5.x
Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый).
Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000.

Спасибо за файлик. После некоторых его исправлений я наконец-то получил таки мои 200мипсов!
Я так подумал, а почему бы не разместить TLB таких объемов во FLASH(и ОЗУ не надо тратить и должно врое работать все), и разместил, залил вуаля, все также нормально(вроде нормально) работает.
Прикрепленный файл  mmu_sam9xe.zip ( 2 килобайт ) Кол-во скачиваний: 166
Go to the top of the page
 
+Quote Post
EugenB2
сообщение Jan 16 2010, 08:46
Сообщение #19





Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820



Ндаа. Радость была недолгой. Вставил во FreeRTOS, после prvSetupTimerInterrupt - это конфиг таймера шедулера - зависает все ((.

подправил исходничек и вуаля на FreeRTOS тоже заработало
Прикрепленный файл  mmu_sam9xe_2.zip ( 2 килобайт ) Кол-во скачиваний: 174


==============
Кстати, что за глюк форума, не дает отредактировать сообщение.

Сообщение отредактировал EugenB2 - Jan 16 2010, 09:23
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jan 16 2010, 09:04
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(defunct @ Jan 15 2010, 15:37) *
Это совершенно не бъет по производительности если суммарное количество активных секций (та память с которой работаем) не превашает 64 (напр 64 секции по 1MB). Активные секции постоянно будут в регистрах MMU и обращений к TLB практически не будет.


Зря вы таблицу страниц назваете TLB smile.gif TLB - это как раз тот самый ассоциативный кэш из 64 регистров к которым и будем обращение. Translation Lookaside Buffer.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jan 16 2010, 18:38
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(EugenB2 @ Jan 15 2010, 16:20) *
Cам в догадках...
\ ??testit_0:
\ 00000008 10109FE5 LDR R1,??testit_1 ;; 0xd59f80 единственное обращение к памяти, а производительности особо не прибавилось
\ 0000000C 010050E1 CMP R0,R1
\ 00000010 0100002A BCS ??testit_2
\ 00000014 010090E2 ADDS R0,R0,#+1
\ 00000018 FAFFFFEA B ??testit_0
468 }
\ ??testit_2:
\ 0000001C 1EFF2FE1 BX LR ;; return


Может я и не прав - у arm9 кэши логические - они работают с логичсескими адресами, а таблицы страниц не что иное как данные, в совокупности с тем что 926 в отличие от 720 имеют гарвардскую архитектуру им нужно и кэш данных включать.

Сообщение отредактировал sasamy - Jan 16 2010, 19:38
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 17 2010, 10:17
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sasamy @ Jan 16 2010, 21:38) *
Может я и не прав - у arm9 кэши логические - они работают с логичсескими адресами, а таблицы страниц не что иное как данные, в совокупности с тем что 926 в отличие от 720 имеют гарвардскую архитектуру им нужно и кэш данных включать.

Вы сами-то поняли, что хотели сказать?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jan 17 2010, 16:15
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(aaarrr @ Jan 17 2010, 14:17) *
Вы сами-то поняли, что хотели сказать?


Согласен - ерунду полную сморозил smile.gif
Go to the top of the page
 
+Quote Post
V_M_Luck
сообщение Feb 9 2010, 12:24
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Уважаемый vmp!
Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?

Уважаемый vmp!
Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 9 2010, 12:42
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(V_M_Luck @ Feb 9 2010, 15:24) *
Уважаемый vmp!
Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?

Я хоть и не vmp, но отвечу smile.gif

Рассмотрим два случая:

1. DMA пишет в память. В том случае, если DMA производит запись в область памяти, для которой включено кэширование (любого типа), то существует ненулевая вероятность, что ядро при чтении поднимет данные из кэша, вместо обращения к памяти. То есть для нормальной работы придется полностью или частично сбрасывать кэш перед чтением.

2. DMA читает из памяти. Здесь мы наблюдаем обратный эффект: в памяти могут содержаться устаревшие с точки зрения ядра данные, если кэш сконфигурирован в режиме write-back.
Go to the top of the page
 
+Quote Post
V_M_Luck
сообщение Feb 9 2010, 12:54
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Спасибо за ответ.
Это в общем-то понятно. Вопрос возник вот почему. Я, разбираясь в этом вопросе провожу некоторые эксперименты. Я настроил UART на выдачу через PDC. Ну и шлю на ПК строчки. Без ММУ и кэшей все работает. Подключаю ММУ, все ОЗУ - одним сектором, кэш и буферизация включены, DCash, ICASH включены - все ОК. Отключаю DCash - тоже работает, но начинает глючить дебаггер. Отключаю кэш и буферизацию в ММУ - не работает! Вишу в Data abort.
Как же корректно сконфигурировать ММУ и кэши для использования DMA?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 9 2010, 14:57
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(V_M_Luck @ Feb 9 2010, 15:54) *
Вишу в Data abort.

Посмотрите, откуда падаете в Data Abort. Связь с кэшем тут если и есть, то весьма опосредованная.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 9 2010, 23:35
Сообщение #28


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sasamy @ Jan 16 2010, 11:04) *
Зря вы таблицу страниц назваете TLB smile.gif TLB - это как раз тот самый ассоциативный кэш из 64 регистров к которым и будет обращение. Translation Lookaside Buffer.

За поправку спасибо!
нутром чуял что что-то не то, но теоретической базы полную истину изобразить нехватило. sad.gif

В моем посте имелось в виду, что не будет обращений к Translation Table (TT) - той что лежит в памяти.
Go to the top of the page
 
+Quote Post
vmp
сообщение Feb 10 2010, 06:32
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(V_M_Luck @ Feb 9 2010, 15:54) *
Как же корректно сконфигурировать ММУ и кэши для использования DMA?

Пример я уже давал выше. Буфера надо располагать в некешируемой области - для данного примера это от 0x21F00000 до 0x21FFBFFF.
В некешируемой области биты С и B должны быть равны 0 (некешируемая и небуферируемая).
Еще раз обращаю винмание на тонкость с переадресацией 0-х адресов - их надо отображать в 0x00200000 (флеш), иначе не работают прерывания.
Data Abort - возможно, вы настроили не всю таблицу.
То, что у вас работал PDC из кешируемой памяти - либо просто везение (эти адреса не лежали в кеше), либо неправильная настройка (кеш был выключен или эта область памяти не кешировалась).
Go to the top of the page
 
+Quote Post
V_M_Luck
сообщение Feb 10 2010, 07:38
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Цитата(aaarrr @ Feb 9 2010, 16:57) *
Посмотрите, откуда падаете в Data Abort. Связь с кэшем тут если и есть, то весьма опосредованная.

Попадаю из первого обращения к стеку.
Я пользуюсь примером EugenB2. Единственное, я маплю адреса Boot Memory на Flash, поэтому первая запись TT 0x00000C1A.
Когда отключаю DCache, убираю запись в TT 0x00300C1E (SRAM) - попадаю в Data Abort. То же, если TT не исправлять.
Цитата(vmp)
Пример я уже давал выше. Буфера надо располагать в некешируемой области - для данного примера это от 0x21F00000 до 0x21FFBFFF.

Если использовать SRAM, то необходимо его дробить на мелкие страницы?
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016