[SPARK-29282][TESTS] Use the same VM configurations for test/benchmark
### What changes were proposed in this pull request? This PR aims to specify the JDK8 default configurations `-XX:+UseParallelGC -XX:-UseDynamicNumberOfGCThreads` explicitly. As we see in this PR [here](https://github.com/apache/spark/pull/25966/files#diff-12b89b7ee67c63c2254b749c8f8d0694R10), this will make the comparison between JDK8 and JDK11 easier by removing a misleading regression. **NOTE THAT THESE JVM CONFS ARE ONLY FOR BENCHMARK COMPARISON, NOT FOR A PRODUCTION** ### Why are the changes needed? There exists many JVM-level changes between JDK8 and JDK11. For example, the followings are notable changes and it turns out that especially (1) and (2) shows a misleading regression in our micro-benchmark environment because our microbenchmark uses small VM memory. 1. [JEP 248: Make G1 the Default Garbage Collector](https://bugs.openjdk.java.net/browse/JDK-8073273) **JDK9+** 2. [Enable UseDynamicNumberOfGCThreads by default](https://bugs.openjdk.java.net/browse/JDK-8198547) **JDK11+** 3. [Change default value of HeapSizePerGCThread](https://bugs.openjdk.java.net/browse/JDK-8200417) **JDK11+** ### Does this PR introduce any user-facing change? No. ### How was this patch tested? This is a test-only JVM configuration change. Manually, run the benchmark. Closes #25966 from dongjoon-hyun/SPARK-29282. Authored-by: Dongjoon Hyun <dhyun@apple.com> Signed-off-by: Dongjoon Hyun <dhyun@apple.com>
This commit is contained in:
parent
1d4b2f010b
commit
df28671800
|
@ -6,7 +6,7 @@ OpenJDK 64-Bit Server VM 11.0.4+11-LTS on Linux 3.10.0-862.3.2.el7.x86_64
|
||||||
Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
|
Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
|
||||||
Benchmark KryoPool vs old"pool of 1" implementation: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
|
Benchmark KryoPool vs old"pool of 1" implementation: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
|
||||||
------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------
|
||||||
KryoPool:true 6524 9149 NaN 0.0 13047076.5 1.0X
|
KryoPool:true 6208 8374 NaN 0.0 12416876.6 1.0X
|
||||||
KryoPool:false 12855 16469 663 0.0 25709170.6 0.5X
|
KryoPool:false 9084 11577 724 0.0 18168947.4 0.7X
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
================================================================================================
|
================================================================================================
|
||||||
Benchmark KryoPool vs "pool of 1"
|
Benchmark KryoPool vs old"pool of 1" implementation
|
||||||
================================================================================================
|
================================================================================================
|
||||||
|
|
||||||
Java HotSpot(TM) 64-Bit Server VM 1.8.0_131-b11 on Mac OS X 10.14
|
OpenJDK 64-Bit Server VM 1.8.0_222-b10 on Linux 3.10.0-862.3.2.el7.x86_64
|
||||||
Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
|
Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
|
||||||
Benchmark KryoPool vs "pool of 1": Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative
|
Benchmark KryoPool vs old"pool of 1" implementation: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
|
||||||
------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------
|
||||||
KryoPool:true 2682 / 3425 0.0 5364627.9 1.0X
|
KryoPool:true 6012 7586 NaN 0.0 12023020.2 1.0X
|
||||||
KryoPool:false 8176 / 9292 0.0 16351252.2 0.3X
|
KryoPool:false 9289 11566 909 0.0 18578683.1 0.6X
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.apache.spark.{SparkConf, SparkContext}
|
||||||
import org.apache.spark.benchmark.{Benchmark, BenchmarkBase}
|
import org.apache.spark.benchmark.{Benchmark, BenchmarkBase}
|
||||||
import org.apache.spark.internal.config._
|
import org.apache.spark.internal.config._
|
||||||
import org.apache.spark.internal.config.Kryo._
|
import org.apache.spark.internal.config.Kryo._
|
||||||
|
import org.apache.spark.launcher.SparkLauncher.EXECUTOR_EXTRA_JAVA_OPTIONS
|
||||||
import org.apache.spark.serializer.KryoTest._
|
import org.apache.spark.serializer.KryoTest._
|
||||||
import org.apache.spark.util.ThreadUtils
|
import org.apache.spark.util.ThreadUtils
|
||||||
|
|
||||||
|
@ -71,6 +72,9 @@ object KryoSerializerBenchmark extends BenchmarkBase {
|
||||||
|
|
||||||
def createSparkContext(usePool: Boolean): SparkContext = {
|
def createSparkContext(usePool: Boolean): SparkContext = {
|
||||||
val conf = new SparkConf()
|
val conf = new SparkConf()
|
||||||
|
// SPARK-29282 This is for consistency between JDK8 and JDK11.
|
||||||
|
conf.set(EXECUTOR_EXTRA_JAVA_OPTIONS,
|
||||||
|
"-XX:+UseParallelGC -XX:-UseDynamicNumberOfGCThreads")
|
||||||
conf.set(SERIALIZER, "org.apache.spark.serializer.KryoSerializer")
|
conf.set(SERIALIZER, "org.apache.spark.serializer.KryoSerializer")
|
||||||
conf.set(KRYO_USER_REGISTRATORS, classOf[MyRegistrator].getName)
|
conf.set(KRYO_USER_REGISTRATORS, classOf[MyRegistrator].getName)
|
||||||
conf.set(KRYO_USE_POOL, usePool)
|
conf.set(KRYO_USE_POOL, usePool)
|
||||||
|
|
|
@ -980,7 +980,8 @@ object TestSettings {
|
||||||
javaOptions in Test ++= System.getProperties.asScala.filter(_._1.startsWith("spark"))
|
javaOptions in Test ++= System.getProperties.asScala.filter(_._1.startsWith("spark"))
|
||||||
.map { case (k,v) => s"-D$k=$v" }.toSeq,
|
.map { case (k,v) => s"-D$k=$v" }.toSeq,
|
||||||
javaOptions in Test += "-ea",
|
javaOptions in Test += "-ea",
|
||||||
javaOptions in Test ++= "-Xmx4g -Xss4m"
|
// SPARK-29282 This is for consistency between JDK8 and JDK11.
|
||||||
|
javaOptions in Test ++= "-Xmx4g -Xss4m -XX:+UseParallelGC -XX:-UseDynamicNumberOfGCThreads"
|
||||||
.split(" ").toSeq,
|
.split(" ").toSeq,
|
||||||
javaOptions += "-Xmx3g",
|
javaOptions += "-Xmx3g",
|
||||||
// Exclude tags defined in a system property
|
// Exclude tags defined in a system property
|
||||||
|
|
Loading…
Reference in a new issue