Джазель на Биглебоне

Мне нужно запустить приложения Java поверх Linux на моем Beaglebone. Я знаю, что ядра ARM имеют поддержку технологии Jazelle для выполнения байт-кода Java на оборудовании. В любом случае мне непонятно, что мне нужно использовать эту технологию. Мне нужно каким-то образом "активировать" Jazelle? Нужна ли мне виртуальная машина Java Jazelle? Каков поток для развертывания и запуска программного обеспечения Java, использующего технологию Jazelle? Требуется ли лицензия для использования Jazelle?

Спасибо.

Ответ 1

Jazelle - это режим выполнения в архитектуре ARM, который "обеспечивает архитектурную поддержку аппаратного ускорения исполнения байт-кода виртуальной машиной Java (JVM)" - цитируется в Руководстве по архитектуре ARM.

Также похоже, что есть два аромата Jazelle; DBX и RCT. Следующий текст приведен в Руководстве программистов серии Cortex-A (v3).

2.2.2   Jazelle
   Jazelle-DBX (Direct Bytecode eXecution) был введен в ARMv5TEJ для ускорения Java   при сохранении мощности. Сочетание повышенной доступности памяти и   улучшения в компиляторах "точно в срок" (JIT) с тех пор уменьшили его ценность в приложении   процессоры. В результате многие процессоры ARMv7-A не реализуют это оборудование   ускорение.

     

Jazelle-DBX лучше всего подходит для обеспечения высокопроизводительной Java в системах с очень ограниченными   памяти (например, телефон с функцией или недорогое встроенное использование). В современных системах он в основном используется для обратной совместимости.

     

2.2.3 Thumb Execution Environment (ThumbEE)
  Введенный и требуемый в ARMv7-A, ThumbEE иногда называют Jazelle-RCT  (Цель компиляции времени выполнения). Это связано с небольшими изменениями в наборе команд Thumb, которые делают   это лучшая цель для кода, сгенерированного во время выполнения в контролируемых средах (например,   таких как Java, Dalvik, С#, Python или Perl).   ThumbEE предназначен для использования компиляторами Just-In-Time (JIT) или Ahead-Of-Time (AOT)   где он может уменьшить размер кода перекомпилированного кода. Компиляция управляемого кода находится вне   объем этого документа.

Насколько я знаю, большинство приложений Jazelle-DBX реализовано в реализациях Java Card, где вы действительно хотите получить большую производительность от крошечного чипа. Этот действительно ограниченный домен может воспользоваться некоторым дополнительным усилением путем непосредственного выполнения байт-кода на процессоре.

Однако большинство современных встроенных систем, таких как ваш Beaglebone, уже имеют больше памяти и процессорной мощности, чем когда Java дебютировала на типичных рабочих столах тех времен, что делает Jazelle-DBX не необходимым. Это в основном потому, что вы получаете JIT-компиляцию на собственный хост. (Реализация JIT слишком велика для Java-карт.)

Полезность ThumbEE/Jazelle-RCT также вызывает сомнения. Цитата из обсуждение по переносу android:

Прохождение всего этого, чтобы получить бесплатные проверки указателей на нуль, не делает   много смысла.

В заключение я не знаю о какой-либо реализации Java VM с использованием любого вкуса Jazelle, включая Dalvik Android. Если бы мне пришлось запускать Java на встроенное устройство, я бы выбрал между ними; Dalvik, JamVM или Java SE Embedded.

Ответ 2

Вам нужно перейти в http://infocenter.arm.com. beaglebone использует Cortex-A8, который является ARMv7. В процессорах серии Cortex-A с левой стороны Cortex-A8 получают самую последнюю инструкцию r3v2 (rev 3.2). В разделе Архитектура ARM разверните Справочные руководства, которые вы хотите ARMv7-AR (проблема C является самой актуальной на момент написания этой статьи).

Взятие этой информации в мой пример

http://github.com/dwelch67/beaglebone_samples

показывает пример на моем beaglebone:

12345678                                                                        
Hello World!                                                                    
413FC082                                                                        
410330C3                                                                        
00000000                                                                        
00001131                                                                        
00000011                                                                        
00000000                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
13112111                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
12345678               

Итак, это похоже на ядро ​​r3p2 (rev 3.2). Как говорится в руководствах, поддерживаются ThumbEE, Jazelle, большой палец и ARM.

Теперь запутанная вещь - это TRM на сайте ti, ARM trm все говорят, что Jazelle поддерживается, пока вы не сосредоточитесь на этом:

Расширение Jazelle

Процессор Cortex-A8 обеспечивает тривиальную реализацию расширения Jazelle. Это означает, что процессор не ускоряет выполнение каких-либо байт-кодов, и все байт-коды выполняются программными подпрограммами.

В реализации расширения Jazelle:

Состояние Jazelle не поддерживается

Инструкция BXJ ведет себя как инструкция BX.

Что говорит нам несколько вещей. Означает ли это, что в этом процессоре нет оборудования Jazelle, несмотря на то, что в других местах говорят, что это?

Это также показывает нам, что для запуска jazelle-кода вы bxj, чтобы получить там, как и вы, bx, чтобы переключаться между режимами руки и большого пальца. Поэтому я попробовал:

.globl bxjtest
bxjtest:
    ldr r0,=skip
    bxj r0
    mov r0,#1
    bx lr
skip:
    mov r0,#2
    bx lr

и похоже, что реализованный ассемблер bxj

82000064 <bxjtest>:
82000064:   e59f0044    ldr r0, [pc, #68]   ; 820000b0 <GET32+0x8>
82000068:   e12fff20    bxj r0
8200006c:   e3a00001    mov r0, #1
82000070:   e12fff1e    bx  lr

82000074 <skip>:
82000074:   e3a00002    mov r0, #2
82000078:   e12fff1e    bx  lr

но код возвращает 2 из инструкции руки по этому адресу. не знаю, значит ли это что-то или нет, может быть, есть еще кое-что, что нужно сделать, чтобы заставить Джазель работать. У меня создается впечатление, что там действительно нет ядра jazelle, у меня создается впечатление, что вы покупаете библиотеку программного обеспечения.

Документы Jazelle выглядят так, что вам нужно связаться с ARM, чтобы получить доступ. Поэтому я не знаю гораздо больше, чем то, как на самом деле использовать его.

Чтение далее в ARM. в регистре ID_ISAR1 отображается 1, указывающий

0b0001

Добавляет инструкцию BXJ и бит J в PSR.

Этот параметр может указывать на тривиальную реализацию расширения Jazelle.

И тогда описание ARM ARM для регистра ID_PFR0 имеет больше информации, чем TRM, говорится

Тривиальная реализация расширения Jazelle указывается значением 0b0001.

И 0b0001 - это то, что мы читаем для этого поля в этом регистре.

Чем больше я копаю, тем больше это кажется "тривиальной реализацией", что означает для меня "не существует". регистр JMCR показывает, что если это тривиальная реализация, то чтение должно возвращаться как ноль (RAZ), а записи должны игнорироваться (WI), которые они есть, я написал один, прочитал его, это был ноль. Тем не менее, я попробовал инструкцию BXJ и все еще выполнил код руки.

Ответ 3

В основном как поставщик продукта вы получаете лицензию от ARM (платите за) за возможность включения и запуска вашего кода на технологии Jazelle. Плата будет основана на прогнозируемом объеме, фактическом результате и т.д. Я не знаком с фактическим уровнем цен. Есть определенные фрагменты кода, необходимые для переключения CPU из-за выполнения байтового кода при вводе/выходе кода Java. Если вы не платите за эту привилегию как поставщик устройств, Jazelle не работает и может быть спокойно проигнорирован. Jazelle первого поколения была ответом на необходимость быстрого выполнения Java в системах с ограниченным объемом оперативной памяти, где интерпретатор байтового кода был до тех пор единственным доступным вариантом. JIT требует RAM для компиляции, ранние телефоны были оптимизированы для низкой стоимости, уменьшая объем памяти. Некоторые из первых музыкальных телефонов использовали Jazelle для повышения производительности исполнения MIDlet, но в последовательной памяти продуктов вскоре выросли всевозможные мультимедийные уровни смартфонов. Тогда компиляторы JIT стали практически осуществимыми и действительно превосходили общую производительность. Jazelle просто сопоставляет байтовый код с двоичным кодом машинного кода по большей части и "не может работать быстрее, чем байт-код", так сказать. В то время как JIT может иногда отображать определенные последовательности последовательностей байтовых кодов в эффективный собственный код, который выполняется быстрее, чем если бы он был основан на отдельных операциях байтового кода по одному за раз. Таким образом, режим ранней Jazelle уже не очень полезен. Рост RAM сделал JIT более выполнимыми.