Switching to SeparateJvmsExecutor causes Exception

163 views
Skip to first unread message

bluenote10

unread,
May 5, 2014, 8:59:23 AM5/5/14
to scala...@googlegroups.com
I just tried using ScalaMeter for the first time following the Getting Started instructions. I'm currently trying to run the example where the local evaluator is replaced by SeparateJvmsExecutor for the first time. That is my code looks like this:

package microbenchmarks

import org.scalameter.api._

object RangeBenchmark extends PerformanceTest {

  /* configuration */

  lazy val executor = SeparateJvmsExecutor(
    new Executor.Warmer.Default,
    Aggregator.min,
    new Measurer.Default
  )
  lazy val reporter = new LoggingReporter
  lazy val persistor = Persistor.None

  /* inputs */

  val sizes = Gen.range("size")(300000, 1500000, 300000)

  val ranges = for {
    size <- sizes
  } yield 0 until size

  /* tests */

  performance of "Range" in {
    measure method "map" in {
      using(ranges) in {
        r => r.map(_ + 1)
      }
    }
  }
}


However running this test leads to an exception (while with the local executor everything was still fine). The traceback looks as follows:

[info] Compiling 1 Scala source to /home/kellerf/svn/coding/dmf/target/scala-2.10/test-classes...
Exception in thread "main" java.lang.ClassCastException: sun.management.GarbageCollectorImpl cannot be cast to javax.management.NotificationEmitter
    at org.scalameter.utils.package$$anon$2$$anonfun$1.apply(package.scala:22)
    at org.scalameter.utils.package$$anon$2$$anonfun$1.apply(package.scala:16)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1156)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at org.scalameter.utils.package$$anon$2.apply(package.scala:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:622)
    at org.scalameter.Executor$Warmer$Default$$anon$1.foreach(Executor.scala:64)
    at org.scalameter.execution.SeparateJvmsExecutor$$anonfun$sample$1$1$$anonfun$apply$3.apply(SeparateJvmsExecutor.scala:51)
    at org.scalameter.execution.SeparateJvmsExecutor$$anonfun$sample$1$1$$anonfun$apply$3.apply(SeparateJvmsExecutor.scala:50)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1156)
    at org.scalameter.execution.SeparateJvmsExecutor$$anonfun$sample$1$1.apply(SeparateJvmsExecutor.scala:50)
    at org.scalameter.execution.SeparateJvmsExecutor$$anonfun$sample$1$1.apply(SeparateJvmsExecutor.scala:39)
    at org.scalameter.execution.package$Main$.mainMethod(package.scala:75)
    at org.scalameter.execution.package$Main$.main(package.scala:70)
    at org.scalameter.execution.package$Main.main(package.scala)
Test threw exception: java.lang.ClassCastException: org.scalameter.execution.SeparateJvmsExecutor$$anonfun$sample$1$1 cannot be cast to scala.collection.Seq
java.lang.ClassCastException: org.scalameter.execution.SeparateJvmsExecutor$$anonfun$sample$1$1 cannot be cast to scala.collection.Seq
    at org.scalameter.execution.SeparateJvmsExecutor.sample$1(SeparateJvmsExecutor.scala:39)
    at org.scalameter.execution.SeparateJvmsExecutor.org$scalameter$execution$SeparateJvmsExecutor$$sampleReport$1(SeparateJvmsExecutor.scala:73)
    at org.scalameter.execution.SeparateJvmsExecutor$$anonfun$3.apply(SeparateJvmsExecutor.scala:87)
    at org.scalameter.execution.SeparateJvmsExecutor$$anonfun$3.apply(SeparateJvmsExecutor.scala:85)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1156)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at org.scalameter.execution.SeparateJvmsExecutor.runSetup(SeparateJvmsExecutor.scala:85)
    at org.scalameter.Executor$$anonfun$run$1.apply(Executor.scala:17)
    at org.scalameter.Executor$$anonfun$run$1.apply(Executor.scala:15)
    at org.scalameter.utils.Tree$$anonfun$1.apply(Tree.scala:17)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:309)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at org.scalameter.utils.Tree.map(Tree.scala:17)
    at org.scalameter.utils.Tree$$anonfun$2.apply(Tree.scala:18)
    at org.scalameter.utils.Tree$$anonfun$2.apply(Tree.scala:18)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:309)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at org.scalameter.utils.Tree.map(Tree.scala:18)
    at org.scalameter.utils.Tree$$anonfun$2.apply(Tree.scala:18)
    at org.scalameter.utils.Tree$$anonfun$2.apply(Tree.scala:18)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:309)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at org.scalameter.utils.Tree.map(Tree.scala:18)
    at org.scalameter.Executor$class.run(Executor.scala:15)
    at org.scalameter.execution.SeparateJvmsExecutor.run(SeparateJvmsExecutor.scala:18)
    at org.scalameter.PerformanceTest$Initialization$class.executeTests(PerformanceTest.scala:44)
    at org.scalameter.PerformanceTest.executeTests(PerformanceTest.scala:10)
    at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1$$anonfun$apply$2.apply(ScalaMeterFramework.scala:65)
    at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1$$anonfun$apply$2.apply(ScalaMeterFramework.scala:56)
    at org.scalameter.package$MonadicDynVar$$anon$3$$anonfun$foreach$1.apply(package.scala:25)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
    at org.scalameter.package$MonadicDynVar$$anon$3.foreach(package.scala:25)
    at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1.apply(ScalaMeterFramework.scala:56)
    at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1.apply(ScalaMeterFramework.scala:55)
    at org.scalameter.package$MonadicDynVar$$anon$3$$anonfun$foreach$1.apply(package.scala:25)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
    at org.scalameter.package$MonadicDynVar$$anon$3.foreach(package.scala:25)
    at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1.apply(ScalaMeterFramework.scala:55)
    at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1.apply(ScalaMeterFramework.scala:54)
    at org.scalameter.package$MonadicDynVar$$anon$3$$anonfun$foreach$1.apply(package.scala:25)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
    at org.scalameter.package$MonadicDynVar$$anon$3.foreach(package.scala:25)
    at org.scalameter.ScalaMeterFramework$$anon$1.run(ScalaMeterFramework.scala:54)
    at sbt.TestRunner.delegateRun(TestFramework.scala:58)
    at sbt.TestRunner.run(TestFramework.scala:51)
    at sbt.TestRunner.runTest$1(TestFramework.scala:71)
    at sbt.TestRunner.run(TestFramework.scala:80)
    at sbt.TestFramework$$anonfun$6$$anonfun$apply$8$$anonfun$7$$anonfun$apply$9.apply(TestFramework.scala:178)
    at sbt.TestFramework$$anonfun$6$$anonfun$apply$8$$anonfun$7$$anonfun$apply$9.apply(TestFramework.scala:178)
    at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:190)
    at sbt.TestFramework$$anonfun$6$$anonfun$apply$8$$anonfun$7.apply(TestFramework.scala:178)
    at sbt.TestFramework$$anonfun$6$$anonfun$apply$8$$anonfun$7.apply(TestFramework.scala:178)
    at sbt.Tests$$anonfun$makeSerial$1$$anonfun$apply$8.apply(Tests.scala:121)
    at sbt.Tests$$anonfun$makeSerial$1$$anonfun$apply$8.apply(Tests.scala:121)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:233)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:233)
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
    at scala.collection.immutable.List.foreach(List.scala:76)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:233)
    at scala.collection.immutable.List.map(List.scala:76)
    at sbt.Tests$$anonfun$makeSerial$1.apply(Tests.scala:121)
    at sbt.Tests$$anonfun$makeSerial$1.apply(Tests.scala:121)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:47)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:47)
    at sbt.std.Transform$$anon$5.work(System.scala:71)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:238)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Is there anything I can do to get this to work?

My SBT version is 0.12.1 running Scala 2.10.0. My modifications to my build.sbt are just as specified in the Getting Started SBT integration instructions.

Aleksandar Prokopec

unread,
May 5, 2014, 10:53:52 AM5/5/14
to bluenote10, scala...@googlegroups.com
Yes, we should have a better error message for this.
My guess is that you are probably using JDK 6, or a non-standard JVM, so the GC tracking utilities are not available. The solution is to add the -preJDK7 flag when running the tests. This should be mentioned somewhere in the guide, although I cannot find where now.
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.

Aleksandar Prokopec

unread,
May 6, 2014, 7:15:17 AM5/6/14
to scala...@googlegroups.com, bluenote10


On Monday, 5 May 2014 16:53:52 UTC+2, Aleksandar Prokopec wrote:
Yes, we should have a better error message for this.
My guess is that you are probably using JDK 6, or a non-standard JVM, so the GC tracking utilities are not available. The solution is to add the -preJDK7 flag when running the tests. This should be mentioned somewhere in the guide, although I cannot find where now.

bluenote10 wrote:

bluenote10

unread,
May 6, 2014, 9:49:30 AM5/6/14
to scala...@googlegroups.com
Yes, this indeed was the solution, thank you very much!

What is strange though is that I'm actually running JVM 7 (at least the SBT instance from which I start the benchmark runs on a JVM 7 -- maybe the executor somehow picks JDK 6 which I have installed in parallel).

Aleksandar Prokopec

unread,
May 6, 2014, 9:56:13 AM5/6/14
to bluenote10, scala...@googlegroups.com
I think the reason is that the GC notification emitters were not available in the early JDK7 releases, e.g. before 1.7.04 or something like that.
--
Aleksandar Prokopec
Doctoral Assistant
LAMP, IC, EPFL
http://people.epfl.ch/aleksandar.prokopec
On 06/05/14 15:49, bluenote10 wrote:
Yes, this indeed was the solution, thank you very much!

What is strange though is that I'm actually running JVM 7 (at least the SBT instance from which I start the benchmark runs on a JVM 7 -- maybe the executor somehow picks JDK 6 which I have installed in parallel).
--
You received this message because you are subscribed to the Google Groups "ScalaMeter" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scalameter+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages