@@ -143,3 +143,39 @@ class CometPluginsNonOverrideSuite extends CometTestBase {
143
143
assert(execMemOverhead4 == " 2G" )
144
144
}
145
145
}
146
+
147
+ class CometPluginsUnifiedModeOverrideSuite extends CometTestBase {
148
+ override protected def sparkConf : SparkConf = {
149
+ val conf = new SparkConf ()
150
+ conf.set(" spark.driver.memory" , " 1G" )
151
+ conf.set(" spark.executor.memory" , " 1G" )
152
+ conf.set(" spark.executor.memoryOverhead" , " 1G" )
153
+ conf.set(" spark.plugins" , " org.apache.spark.CometPlugin" )
154
+ conf.set(" spark.comet.enabled" , " true" )
155
+ conf.set(" spark.memory.offHeap.enabled" , " true" )
156
+ conf.set(" spark.memory.offHeap.size" , " 2G" )
157
+ conf.set(" spark.comet.exec.shuffle.enabled" , " true" )
158
+ conf.set(" spark.comet.exec.enabled" , " true" )
159
+ conf.set(" spark.comet.memory.overhead.factor" , " 0.5" )
160
+ conf
161
+ }
162
+
163
+ /*
164
+ * Since using unified memory, but not shuffle unified memory
165
+ * executor memory should be overridden by adding comet shuffle memory size
166
+ */
167
+ test(" executor memory overhead is correctly overridden" ) {
168
+ val execMemOverhead1 = spark.conf.get(" spark.executor.memoryOverhead" )
169
+ val execMemOverhead2 = spark.sessionState.conf.getConfString(" spark.executor.memoryOverhead" )
170
+ val execMemOverhead3 = spark.sparkContext.getConf.get(" spark.executor.memoryOverhead" )
171
+ val execMemOverhead4 = spark.sparkContext.conf.get(" spark.executor.memoryOverhead" )
172
+
173
+ // in unified memory mode, comet memory overhead is spark.memory.offHeap.size (2G) * spark.comet.memory.overhead.factor (0.5) = 1G
174
+ // so the total executor memory overhead is executor memory overhead (1G) + comet memory overhead (1G) = 2G
175
+ // and the overhead is overridden in MiB
176
+ assert(execMemOverhead1 == " 2048M" )
177
+ assert(execMemOverhead2 == " 2048M" )
178
+ assert(execMemOverhead3 == " 2048M" )
179
+ assert(execMemOverhead4 == " 2048M" )
180
+ }
181
+ }
0 commit comments