Size: a a a

2019 April 26

ПФ

Паша Финкельштейн in graalvm_ru
Nikita Lipskiy
У нас всегда есть горячий и холодный путь. Горячий супер-оптимальный, а холодный много лучше чем уход в деоптимизацию
но если пошли по холодному — то шансов стать горячим у него нет же?
источник

NL

Nikita Lipskiy in graalvm_ru
есть
источник

NL

Nikita Lipskiy in graalvm_ru
если услович горячие ио идем по горячему
источник

NL

Nikita Lipskiy in graalvm_ru
к примеру появился новый наследник. Для хотспота это все - деоптимизация. У нас если этот наследник не приходит в место оптимизации - управление идет по горячему пути
источник

A

Alex in graalvm_ru
У тебя оба бранча рабочие, один на fast path, второй slow path (ну в прошлом ты нарывался что в 5% все таки нужно ходить туда), поменялся профиль и теперь ходишь 95% времени по slow path
источник

A

Alex in graalvm_ru
@pjBooms а с этим примером что?
источник

A

Alex in graalvm_ru
в рантайме ведь ничего не поменяется до того как пересоберешь программу
источник

NL

Nikita Lipskiy in graalvm_ru
Alex
У тебя оба бранча рабочие, один на fast path, второй slow path (ну в прошлом ты нарывался что в 5% все таки нужно ходить туда), поменялся профиль и теперь ходишь 95% времени по slow path
Да, будешь ходить по slow path. Но надо понимать, что  этот slowpath — тоже потимизировнный, просто возможно не так хорошо, как горячий.
источник

A

Alex in graalvm_ru
Я понимаю
Так же представляю что зачастую fast path подразумевает просто линейный проход без самих переходов
Slow path зачастую подразумевает jmp в конец, что-то сделали, jmp назад.

И часто основные потери в slow path составляют именно эти переходы
источник

NL

Nikita Lipskiy in graalvm_ru
в slowpath часто оказывается весь остаток метода под другим условием.  То есть только jump вперед. Такое версионирование метода
источник

A

Alex in graalvm_ru
Я про

If (a) x1 else x2
If (b) y1 else y2

В лучшем случае нету переходов

В худшем 4 jump (2 вперед, 2 назад)
источник

ПФ

Паша Финкельштейн in graalvm_ru
Мне кажется что случай когда slow path это дополнительные jmp и это основные затраты - наименее проблемный. Там прямо процессор идеи начать угадывать.
Кажется сложно становится когда там на slow path какие-то сложные операции попадаются
источник

AW

Alex White in graalvm_ru
И очередной глупый вопрос, но он позволит мне сэкономить кучу времени: что в жавовом жите(в частности хотспотовом) завязывается на рантайм?
Например, налл чеки и последующий их хендлинг с ретрансляцией - завязан, сейф поинт - завязан.
Есть какие-то еще примеры сходу или мне стоит прошерстить все ноды, которые могут быть сгенерированы в ideal графе и понять, что они делают?
источник

ВВ

Виктор Вербицкий in graalvm_ru
Кто тут хотел ключики? @xhumanoid, лови:
-XX:ReservedCodeCacheSize=32m - установка размера кеша
-XX:+UseCodeCacheFlushing - включение агресивного сброса кеша
Как это всё работает описано тут: https://stackoverflow.com/questions/38173592/oracle-jvm-8-when-codecache-flushing-is-enabled-how-much-is-flushed
источник

A

Alex in graalvm_ru
спасибо
источник

ВВ

Виктор Вербицкий in graalvm_ru
Alex White
И очередной глупый вопрос, но он позволит мне сэкономить кучу времени: что в жавовом жите(в частности хотспотовом) завязывается на рантайм?
Например, налл чеки и последующий их хендлинг с ретрансляцией - завязан, сейф поинт - завязан.
Есть какие-то еще примеры сходу или мне стоит прошерстить все ноды, которые могут быть сгенерированы в ideal графе и понять, что они делают?
Что-то ты какие-то безнадёжные вопросы задаёшь 😊
Боюсь корректный ответ на этот вопрос даже разработчики JVM дать не смогут.
Единственный верный ответ - практическая проверка на конкретном коде. И нужно понимать, что при эволюции кода, будет эволюционировать ответ. Причём не только с эволюцией вашего кода, но и с эволюцией самой JVM.
Так что если вас это действительно заботит, то надо реализовывать автотесты дающие некую оценку и следить за этой оценкой при разработке.
А универсального ответа просто не может существовать.
источник

AW

Alex White in graalvm_ru
Виктор Вербицкий
Что-то ты какие-то безнадёжные вопросы задаёшь 😊
Боюсь корректный ответ на этот вопрос даже разработчики JVM дать не смогут.
Единственный верный ответ - практическая проверка на конкретном коде. И нужно понимать, что при эволюции кода, будет эволюционировать ответ. Причём не только с эволюцией вашего кода, но и с эволюцией самой JVM.
Так что если вас это действительно заботит, то надо реализовывать автотесты дающие некую оценку и следить за этой оценкой при разработке.
А универсального ответа просто не может существовать.
Потому что мне ставят безнадежные задачи)
Понятно, что универсального ответа не существует, тк спецификация есть только на байткод и формат метаданных.
Мне сейчас надо собрать список таких специфичных штук для хотспота из опенждк12, например. Чтобы потом можно было сказать, что слишком уж их много для того, чтобы заморачиваться с этой идеей
источник

AW

Alex White in graalvm_ru
Главная моя проблема - ограничение по времени, где за 2 недели(хаха) надо вникнуть во все тонкости жвмного рантайма и придумать, как эти проблемы будут стоически преодолены(нет)
источник

ПФ

Паша Финкельштейн in graalvm_ru
ещё за 2
источник

AW

Alex White in graalvm_ru
не, там уже 2 квартала дают
источник