Производительность jaihouse на AM5728

Чтобы проверить производительность Jailhouse в реальном времени, Sitara AM5728 была настроена на запуск Linux на одном из ядер ARM Cortex A15 и inmate TI-RTOS на другом ядре A15. Был выполнен тест для измерения задержки прерываний. Производительность приложения на основе драйвера режима опроса inmate должна быть идентична системе без виртуализации в статической системе разделения, такой как Jailhouse. Все что требуется для анализа на основе прерываний, это необходимость совместного использования контроллера прерываний (GIC), который будет вводить некоторые помехи от Linux в приложение реального времени. Измерения, показанные ниже это более миллиона прерываний, ясно показывают помехи и фиксируют верхнюю границу 8,8 мкс. Для первого запуска теста задержки прерывания незагруженный Linux, работающий на ядре 0, находится в первом столбце. Во второй колонке Linux на ядре 0 запущен STREAM. STREAM является эталоном доступа к внешней памяти, который полностью использует количество выдающихся операций чтения и записи в память. Он масштабируется от отдельных процессоров до кластеров суперкомпьютеров, здесь он используется на уровне процессора. Он был выбран как представитель наихудшего режима доступа к памяти приложения на базе Linux на Cortex A15, по существу, с профилем доступа к памяти, таким как оптимизированная копия памяти. В AM5728 два ядра Cortex A15 совместно используют кэш L2 и доступ к остальной части SoC, которую тестирует тест STREAM, работающий на ядре 0, в то время как ядро 1 доступа GIC регистрируется для ответа на прерывание.

Задержка прерывания inmate из bare metal (core 1)

Ненагруженный linux на ядре 0 На linux запущен  STREAM benchmark ядро 0
Счетчик прерываний

Bucket 1.6 мкс — 3.2 мкс

99.3756% 33.9323%
Счетчик прерываний

Bucket 3.2 мкс — 6.4 мкс

0.6244% 66.0632%
Счетчик прерываний

Bucket 6.4 мкс — 12.8 мкс

нету 0.0045%
Минимальная задержка прерывания 2.2 мкс 1.8 мкс
Максимальная задержка прерывания 5.0 мкс  8.8 мкс

Сборка jailhouse из исходников

Исходники jailhouse расположены в $TI_SDK_PATH/board-support/extra-drivers/jailhouse-0.7 директории. Эта директория содержит следующие поддиректории:

  • Документация
  • ci — конфигурационные файлы для различных платформ. Скопируйте jailhouse-config-am57xx-evm.h файл внутрь hypervisor/include/jailhouse директории и переименуйте его в config.h
  • configs — cell конфигурационные файлы
  • driver — jailhouse.ko модуль ядра (код)
  • hypervisor — гипервизор (код)
  • inmates — inmates демки. Они также содержат код для ti_app inmate примеров.
  • scripts
  • tools — jailhouse утилиты для управления

У Makefile SDK верхнего уровня есть jailhouse_clean, jailhouse и jailhouse_install, которые могут быть использованы для очистки, сборки и установки jailhouse в целевой файловой системе.

Создание и запуск демо Ethercat Slave

Чтобы построить и запустить ethercat slave демо, вам необходимо установить PLSDK-РТ, PRSDK и PRU-ICSS-ETHERCAT-SLAVE собрать. Мы предполагаем, что у вас уже установлены первые два пакета SDK. PRU-ICSS-ETHERCAT-SLAVE может быть загружен с http://software-dl.ti.com/processor-industrial-sw/esd/PRU-ICSS-ETHERCAT-SLAVE/01_00_05_00/index_FDS.html.

После этого SDK установлен, вы может собрать Ethercat slave компоненты.

Если am572x-ethercat.cell еще не установлена на целевой файловой системе, соберите ее из makefile верхнего уровня PLSDK-RT «make jailhouse» и скопируйте ее в target по следующему пути /usr/share/jailhouse/examples. Для построения ethercat_slave_demo.bin необходимо сделать следующее:

  • модифицировать IA_SDK_HOME в~/ti/processor_sdk_rtos_am57xx_[version]/demos/jailhouse-inmate/rtos/ethercat_slave_demo/Makefile для указания каталога установки PRU-ICSS-ETHERCAT-SLAVE.
  • В ~/ti/processor_sdk_rtos_am57xx_[version]/demos/jailhouse-inmate/makefile: добавить ethercat_slave_demo* запись, как pruss-test/icss-emac-test в конец makefile

  • cd ~/ti/processor_sdk_rtos_am57xx_[version]/
  • source setupenv.sh
  • cd ~/ti/processor_sdk_rtos_am57xx_[version]/demos/jailhouse-inmate
  • source setenv.sh
  • make ethercat_slave_demo

После шагов выше, копия ethercat_slave_demo.bin в целевой под /usr/share/jailhouse/examples.

Для запуска inmate обратитесь к инструкции по запуску демо на AM572x-IDK . Имейте в виду, что начальный адрес inmate-0x80000000. Таким образом, вам нужно использовать его в качестве параметра в команде » jailhouse cell load:

Процедура проверки двусторонней связи между подчиненным inmate и главной станцией:

  • см. http://processors.wiki.ti.com/index.php/PRU_ICSS_EtherCAT для настройки Ethercat master.
  • Master: онлайн запись [data] в 32-битный выход RxPDO. После этого ведомое устройство должно сообщить соответствующее значение через Board_setDigOutput. Значение также можно проверить с помощью «devmem2 0xeef00000».
  • Slave: devmem2 0xeef00004 b [данные]. После этого Мастер должен отобразить соответствующее значение на 32-битном входе TXPDO

Внутренние компоненты jailhouse

В этом разделе приведены некоторые детали jailhouse и необходимые модификации ядра.

Модификации Linux ядра.

Для того чтобы запустить гипервизор и inamte jailhouse требуются дополнительные узлы в ядре dtb. Смотрите am572x-evm-jailhouse.dts и am572x-idk-jailhouse.dts. Они добавляют необходимые узлы или изменяют существующие узлы по умолчанию am57xx-evm-reva3.dts и am57xx-idk.dts DTS файлы.

Резервирование памяти

Ядру Linux необходимо зарезервировать память для гипервизора jailhouse и inmate. Эта память должна быть зарезервирована статически. В этом релизе мы зарезервировали 16 МБ физической памяти для гипервизора и 16 МБ для inmate.

Резервирование аппаратных модулей

Ядро Linux включает все модули SOC HW, необходимые для его настройки. Соответствующие драйверы настраивают необходимые таймеры и инициализируют регистры HW. Для всех неиспользуемых IPs таймеры не настроены. Также менеджер питания ядра может перевести модуль в спящий режим. Jailhouse inmate не имеет общего аппаратного модуля с ядром Linux (кроме отладочного UART). Но inmate не настраивает необходимые таймеры и не имеет дело с доменами питаниями (power domain). Таким образом, мы по-прежнему передаем ядро Linux (по крайней мере, в текущем релизе) для настройки таймеров на модуле HW inmate. Если мы хотим использовать некоторые аппаратные модули для inmate, мы должны заранее сообщить об этом kernel. Следующие узлы отключают использование таймера 8 и uart 9 ядром. Кроме того, это ограничивает ядро, чтобы поместить эти IPs в спящий режим.

Вы можете увидеть другие узлы в jailhouse DTS, которые резервируют другие IPs для использования inmate. Таким образом, DTS IDK отключает узлы, IPs которых используются для inmate icss_emac и pruss.

Резервирование входов прерываний GIC

Линии прерываний от аппаратных модулей не идут непосредственно к контроллеру прерываний ARM (GIC). Они идут к crossbar регистру, который выбирает входной сигнал распределителя GIC. Выбор производится динамически ядром Linux. Linux отслеживает все используемые и неиспользуемые входные данные GIC. Если jailhouse inmate должен использовать прерывание, он должен сам настроить crossbar регистр. Чтобы предотвратить конфликт между Linux crossbar manager и inmate, и дать inmate некоторые неиспользуемые входы GIC, которые он может использовать, нам нужно зарезервировать некоторые из них в ядре dts. Это может быть сделано путем добавления GIC ввода цифр к «ti,irqs-skip» свойство «crossbar_mpu:» узла. Линии 134 и 135 добавляются к следующему узлу.

Примечание: icss_emac.bin использует гораздо больше линий прерываний. Вот почему dtb IDK пропускает дополнительные прерывания.

Конфигурация корневой cell

Когда гипервизор включен, он создает cell для Linux и перемещает ее в эту cell. Cell называется «корневая cell». Конфигурация cell как «*.c» файл, который компилируется в специальный двоичный формат «*.cell» файл. Гипервизор использует файл «cell» для создания cell. Конфигурация cell описывает области памяти и их атрибуты, которые будут использоваться cell,

Битовая карта ядер ЦП, выделенных для cell,

Битовая карта прерываний контроллера SPI прерываний

и некоторые другие параметры. То есть для всех cell.
Кроме того, корневая cell также выделяет физическую память для гипервизора.

Раздел» области памяти » используется гипервизором для создания таблицы преобразования MMU второго этапа. Обычно для корневой cell используется идентичное отображение — «VA = PA». См. am57xx-evm.c является полной конфигурацией корневой cell am57xx-evm.

 

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Уведомлять о