GraalVM
GraalVM is a universal virtual machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Groovy, Kotlin, Clojure, and LLVM-based languages such as C and C++.
See also
GraalVM이 Spark 워크로드를 가속화하는 방법
- Facebook에서의 Graalvm | Oracle Java Embedded Korea Blog - Spark 워크로드는 JDK 배포판으로 GraalVM으로 전환하는 것만으로 약 10%-42%의 속도 향상을 기대할 수 있습니다.
Spark 성능 향상에 가장 크게 기여한 몇 가지 최적화는 다음과 같습니다.
- 다형성 인라인
- 전통적인 인라인은 컴파일러가 메서드 호출이 대상으로 하는 정확한 메서드를 결정할 수 있는 경우에만 작동합니다.
- GraalVM은 추상 메서드도 인라인 될 수 있는 추가 프로파일 링 정보를 수집하여 이 지점을 넘어 인라인을 가능하게 합니다.
- 부분 탈출 분석
- 부분 이스케이프 분석의 개념은 개체가 탈출하지 않는 분기에서 스칼라 교체를 수행하여 불필요한 개체 할당을 제거하고 개체가 탈출해야 하는 분기의 힙에 존재하는지 확인하는 것입니다.
- 이렇게 하면 애플리케이션의 메모리 공간과 GC에서 발생하는 CPU 로드가 모두 줄어듭니다.
- 이러한 최적화는 Spark와 같이 데이터가 많은 애플리케이션에서 훨씬 더 중요합니다.
- 특히 Facebook에서 관찰한 바와 같이 GraalVM 은 java/lang/Double.valueOf 와 같은 메서드들에서 CPU 소비를 5 배까지 줄였습니다.
- GraalVM의 고급 추측 최적화
- 동적 런타임 피드백을 활용하여 더 빠른 기계 코드를 생성합니다.
- 프로그램의 특정 부분이 프로그램 실행 중에 실행되지 않을 것이라고 추측함으로써 GraalVM 컴파일러는 코드를 전문화하고 더 효율적으로 만들 수 있습니다.
- Spark의 경우 이 최적화는 분기(예: 긴 if-then-else체인)를 제거하고, 제어 흐름을 단순화하고, 루프 본문에서 동적 검사의 양을 줄이고, 추가 최적화를 가능하게 하는 앨리어싱 제약 조건을 설정함으로써 특히 잘 작동 합니다.