Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Java/Kotlin-GraalVM-native client (to solve performance problems with standard Java/Kotlin) #107

Merged
merged 2 commits into from
Dec 15, 2020

Conversation

Karloid
Copy link

@Karloid Karloid commented Dec 13, 2020

Как выяснилось, многие стратегии на Java/Kotlin имеют серьезные проблемы с низкой и непредсказуемой производительностью из-за JIT и, как следствие, TIME LIMITами
Потребляемое время для jvm-стратегий #106

Одно из решений - это использовать GraalVM Ahead of Time компиляцию native-image

  • в результате у нас из джарника получается нативный бинарник, в котором нет джита, и работает он быстро и предсказуемо:
    если раньше моя стратегия локально занимала 12с на выполнение (неполный бой с QuickStart'ами), то GraalVM билд занимает ~1c,
    и самое главное - все это время прекрасно отслеживается внутри самой стратегии

кажется, что такой вариант билда здорово поможет java\kotlin стратегиям


работоспособность контейнера проверял следующей командой:

% docker run -v /Users/fox/projects/raic-2020/clients/Kotlin-GraalVM-native/output:/output/ -ti kotlin-graalvm-aot:1.8  /bin/bash -c "sh ./compile.sh base && sh ./run.sh"

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

/Users/fox/projects/raic-2020/clients/Kotlin-GraalVM-native/output

links:
https://www.graalvm.org/reference-manual/native-image/
https://www.graalvm.org/reference-manual/native-image/NativeImageMavenPlugin/

PS: докерфайл мб можно как-то улучшить, я совсем не эксперт в докере
PPS: с базовым образом oracle/graalvm-ce:20.3.0-java11 у меня зависал yum
PPPS: преобразование jar в натив на моей стратегии с 2мб jar занимает примерно 30сек реального времени, проц 9700k. Выходной бинарь имеет размер ~11мб

@Karloid Karloid changed the title Add Kotlin-GraalVM-native client (to solve performance problems with standard Kotlin) Add Java/Kotlin-GraalVM-native client (to solve performance problems with standard Kotlin) Dec 13, 2020
@Karloid
Copy link
Author

Karloid commented Dec 13, 2020

Добавил поддержку для Java-GraalVM-native
там все аналогично, единственный момент - это снижение таргета джавы с 15 на 11 т.к. грааль вм не поддерживает 15

(но, кажется, большинство предпочтут отсутствие таймлитов, тем фичам, которые появились в 15 джаве)

@Karloid Karloid changed the title Add Java/Kotlin-GraalVM-native client (to solve performance problems with standard Kotlin) Add Java/Kotlin-GraalVM-native client (to solve performance problems with standard Java/Kotlin) Dec 13, 2020
@Karloid
Copy link
Author

Karloid commented Dec 13, 2020

Общая инструкция как без докера\мавена собрать свою стратегию в натив:

1)качаем\ставим GraalVM
https://www.graalvm.org/docs/getting-started/#install-graalvm

он ставится как “обычный” jdk, но не обязательно его делать дефолтным, или именно им собирать джарник
можно в PATH Только прописать

export PATH=${PATH}:/Library/Java/JavaVirtualMachines/graalvm-ce-java11-20.3.0//Contents/Home/bin
  1. доустанавливаем native-image
    https://www.graalvm.org/reference-manual/native-image/#install-native-image
    gu install native-image
    (gu - это утилита из GraalVM)

  2. Конвертим jar в native -

native-image -jar ./strategy.jar ./strategy_native

@kuviman kuviman merged commit 4c63677 into MailRuChamps:main Dec 15, 2020
@13human
Copy link

13human commented Dec 15, 2020

@Karloid для scala клиента подобное сложно реализовать?

@Karloid
Copy link
Author

Karloid commented Dec 19, 2020

@Karloid для scala клиента подобное сложно реализовать?

по идее нет, аналогично должно быть

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants