Jazelle на приведенном

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

спасибо.

3 ответов


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

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

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

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

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

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

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

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

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

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


вам нужно перейти к 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, thumb и ARM.

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

Расширение Jazelle

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

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

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

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

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

Он также показывает нам, что для запуска кода jazelle вы bxj, чтобы добраться туда так же, как вы bx для переключения между режимами arm и thumb. Поэтому я попробовал:

.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 из инструкции arm по этому адресу. не знаю, означает ли это что-нибудь или нет, может быть, есть другие вещи, которые вы должны сделать, чтобы заставить Джазель работать. Я получаю впечатление хотя там действительно нет ядра jazelle, у меня сложилось впечатление, что вы покупаете библиотеку программного обеспечения.

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

чтение дальше в руке. регистр ID_ISAR1 показывает 1, указывающее

0b0001

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

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

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

тривиальная реализация расширения Jazelle обозначается значением 0b0001.

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

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


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