145 Views
July 20, 18
スライド概要
第21回 Lucene/Solr勉強会 https://solr.doorkeeper.jp/events/75586 LT資料
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Graal を Solr で使ってみた 第21回 Lucene/Solr 勉強会 #SolrJP (2018/07/19) ヤフー株式会社 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 矢野 友貴
Introduction • 氏名 • 矢野 友貴 (やの ゆうき) • 所属 • ヤフー株式会社 D&S統括本部 • Solr 歴 = 2年ちょっと • やってること • プラグイン開発, k8s 対応, etc. @Lucene/Solr Revolution 2017 前回の Lucene/Solr 勉強会でも発表してました! https://www.slideshare.net/techblogyahoo/solr-solrjp Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 1
Today’s topic https://www.graalvm.org/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. http://lucene.apache.org/solr/ 2
GraalVM • オラクルが 2018/4/17 にリリースした新しい VM • 複数の言語を共通のプラットフォームで動作できる • 新しい JIT コンパイラ (Graal) ← 今日はこっちの話 https://blogs.oracle.com/developers/announcing-graalvm Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 3
Today’s topic https://www.graalvm.org/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. http://lucene.apache.org/solr/ 4
Graal Compiler • Java で書かれた JIT コンパイラ • JDK9 で追加された JVMCI (JEP 243) 経由で差し替える • JDK10 からオプションで β 版が利用可能 (JEP 317) HotSpot machinecode bytecode JVMCI Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. Graal 5
Graal Compiler (cont’d) • Graal の強み → メモリ最適化周りが賢い (らしい) • Partial Escape Analysis の実装 • エスケープ解析 = オブジェクトの参照がサブルーチン内 で閉じてるか (escape しないか) を解析 • 参照が閉じてるならヒープじゃなくてスタックに割当 • Partial Escape Analysis では条件分岐も考慮 • Ex) if 文が true なら escape しないので部分的に最適化 • 詳しくは 論文 を読んでね! Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 6
Graal Compiler (cont’d) • 論文だと概ねパフォーマンスが改善 • 最大でメモリが 60%, 速度が 30% 改善してるケースも • Java Day Tokyo で Twitter の人がデモしてたケース (factorie) メモリ割当 (MB)/iter malloc回数/iter PEAなし PEAあり 差分 PEAなし PEAあり 差分 iter回数/分 PEAなし PEAあり 差分 ※ PEA = Partial Escape Analysis http://www.ssw.uni-linz.ac.at/Research/Papers/Stadler14/Stadler2014-CGO-PEA.pdf Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 7
Graal x Solr • 何も考えず雑に Solr を Graal で動かしてみる • Oracle-JDK10 に内蔵されている Graal を利用 -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler • 環境 • JDK8 vs JDK10 vs JDK10+Graal • G1GC • Solr-7.3.1 + 3億件ぐらいのデータ + プラグイン色々 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 8
Graal x Solr (cont‘d) • JDK10 にするだけで全体的に速くなった • Graal は 99.9%ile が妙に速くなった (他は遅いけど) • (仮説) GC が改善したことで最悪値が良くなったかも? JDK8に対するレイテンシの相対値 average 95%ile 99%ile 99.9%ile JDK8 1.0 1.0 1.0 1.0 JDK10 0.971 0.940 0.972 0.984 JDK10+Graal 1.058 1.069 1.061 0.908 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 9
Graal x Solr (cont‘d) • GC の停止時間は JDK10 で改善してるような雰囲気 • 外れ値を除くと Graal ありの方が若干短いかも? GC の実行タイミングと停止時間 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 10
Graal x Solr (cont‘d) • ロングランしてみると 99.9%ile は実負荷でも改善 • が, たまに JVM がクラッシュして Solr が落ちる • JDK10 内蔵の Graal はまだ不安定なのかも 99.9%ile レイテンシの推移 JDK8 JDK10 + Graal 99.9%ile が 大きく改善 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. JVM Crashed! Graal を有効にすると BlockTreeTermsWriter#write でたまに JVM がクラッシュする 11
Summary • Graal x Solr • • • • GC は改善してそうな雰囲気がある 99.9%ile のような最悪値に結構効く たまに JVM が落ちる (誰か最新の GraalVM で検証してくれないかな) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 12