Я использую ARM926EJS. Я получаю на 20% большую скорость памяти в тесте памяти, без Linux (точно так же, как исполняемый файл Getting Started). Но в Linux такой же код работает на 20% медленнее.Низкая пропускная способность памяти в Linux-Embedded (ARM)
Кодекс
/// Below code just performs burst mode memcopy test. void asmcpy(void *a, void *b, int iSize) { do { asm volatile ( "ldmia %0!, {r3-r10} \n\t" "stmia %0!, {r3-r10} \n\t" :"+r"(a), "+r"(b) : :"r"(r3),"r"(r4),"r"(r5),"r"(r6),"r"(r7),"r"(r8),"r"(r9),"r"(r10) ); }while(size--) }
Я проверил, что никакой другой процесс не занимает процессорное время на Linux. (Я проверил это с помощью команды времени, он показывает в реальном масштабе времени такое же, как USR время)
Пожалуйста, сообщите мне, что может быть проблемой с Linux?
Thanks & С уважением.
ДОБАВЛЕНО:
мой тестовый код
int main() { int a[320 * 120], b[320 * 120]; for(int i=0; i != 10000; i++) { /// Size is divided by 8 because our memcpy function performs 8 integer load stores in the iteration asmcpy(a, b, (320 * 120)/8); } }
Начало работы исполняемый бин файл, который отправляется в ОЗУ, используя последовательный порт и выполняет непосредственно, прыгая по этому адресу в памяти. (без ОС)
ADDED.
Я не видел такой разницы в производительности на других процессорах. Они использовали SD RAM, этот процессор использует DDR Ram. Это может быть причиной?
ADDED. Кэш данных не активирован при запуске кода и кэширование данных в режиме Linux, поэтому в идеале все данные должны кэшироваться и получать доступ без какой-либо задержки в оперативной памяти, но все же Linux на 20% медленнее.
ADDED: Мой микроконтроллер LPC3250. Оба теста были протестированы на одной внешней ОЗУ DDR.
можете ли вы разместить свой тестовый код и сценарий на двух разных настройках? Кроме того, что такое исполняемый файл Getting Started? Просто немного больше в целом может быть много разных причин – ThePosey
Это почти сравнение яблок с апельсинами, так как вы работаете с полной операционной системой, которая имеет таймеры, управление памятью и т. Д., Которые все планируется запустить, без каких-либо операций система просто выполняет прямые инструкции. Я думаю, это в значительной степени объясняет вашу разницу в производительности. Как сказал Хавьер, даже несмотря на то, что никакие другие пользовательские процессы, происходящие в ядре, по-прежнему не делают само собой. – ThePosey
У меня есть аналогичное аппаратное обеспечение (ARM926EJS + DDR), и я наблюдаю совершенно противоположное: операции с памятью медленны без ОС, пока не активируется кеш (т.е. в ОС) – shodanex