def Run()

in perfkitbenchmarker/linux_benchmarks/specjbb2015_benchmark.py [0:0]


def Run(benchmark_spec):
  """Runs Specjbb2015 on the target vm.

  Args:
    benchmark_spec: The benchmark specification.

  Returns:
    A list of sample.Sample objects with the performance results.

  Raises:
    Benchmarks.RunError: If no results are found.
  """
  vm = benchmark_spec.vms[0]

  if FLAGS.specjbb_run_mode == MULTIJVM_MODE:
    if FLAGS.specjbb_multijvm_nodes:
      node_ids = FLAGS.specjbb_multijvm_nodes
    else:
      numa_map = numactl.GetNuma(vm)
      node_ids = list(numa_map.keys())

    # Run backends and txinjectors as background commands
    # java -jar specjbb2015.jar -m txinjector -G GRP1 -J JVM1 > grp1jvm1.log
    # java -jar specjbb2015.jar -m backend -G GRP1 -J JVM1 > grp1jvm2.log
    for group in range(1, _GetNumGroups(vm) + 1):
      node_id = node_ids[(group - 1) % len(node_ids)]

      txinjector_cmd = [
          'java',
          _JVMArgs(vm, TXINJECTOR_MODE),
          '-jar',
          _JAR_FILE,
          '-m',
          TXINJECTOR_MODE,
          '-G',
          f'GRP{group}',
          '-J',
          'JVM1',
          '>',
          f'grp{group}jvm1.log',
      ]
      _RunBackgroundNumaPinnedCommand(vm, txinjector_cmd, node_id)

      backend_cmd = [
          'java',
          _JVMArgs(vm, BACKEND_MODE),
          '-jar',
          _JAR_FILE,
          '-m',
          BACKEND_MODE,
          '-G',
          f'GRP{group}',
          '-J',
          'JVM2',
          '>',
          f'grp{group}jvm2.log',
      ]
      _RunBackgroundNumaPinnedCommand(vm, backend_cmd, node_id)

    # Run multicontroller as a foreground command
    controller_cmd = [
        'java',
        _JVMArgs(vm, MULTICONTROLLER_MODE),
        _SpecArgs(vm, MULTICONTROLLER_MODE),
        '-jar',
        _JAR_FILE,
        '-m',
        MULTICONTROLLER_MODE,
        '-p',
        _PROPS_FILE,
    ]
    run_cmd = ('cd {dir} && {cmd} 2>&1 | tee {log_file}').format(
        dir=_SPEC_DIR, cmd=' '.join(controller_cmd), log_file=_LOG_FILE
    )
    stdout, _ = vm.RobustRemoteCommand(run_cmd)
    max_heap_size_gb = _MaxHeapMB(vm, BACKEND_MODE) / 1000.0  # for metadata

  else:  # COMPOSITE mode
    run_cmd = [
        'java',
        _JVMArgs(vm, COMPOSITE_MODE),
        _SpecArgs(vm, COMPOSITE_MODE),
        '-jar',
        _JAR_FILE,
        '-m',
        COMPOSITE_MODE,
        '-p',
        _PROPS_FILE,
    ]
    cmd = ('cd {dir} && {cmd} 2>&1 | tee {log_file}').format(
        dir=_SPEC_DIR, cmd=' '.join(run_cmd), log_file=_LOG_FILE
    )
    stdout, _ = vm.RemoteCommand(cmd, timeout=_FOUR_HOURS)
    max_heap_size_gb = _MaxHeapMB(vm, COMPOSITE_MODE) / 1000.0  # for metadata

  jdk_metadata = FLAGS.openjdk_version
  if FLAGS.build_openjdk_neoverse:
    jdk_metadata += '_neoverse_optimized'

  metadata = {
      'OpenJDK_version': jdk_metadata,
      'iso_hash': BENCHMARK_DATA[_SPEC_JBB_2015_ISO],
      'num_workers': int(
          vm.NumCpusForBenchmark()
          * FLAGS.specjbb_workers_ratio
          / _GetNumGroups(vm)
      ),
      'num_groups': _GetNumGroups(vm),
      'worker_ratio': FLAGS.specjbb_workers_ratio,
      'memory_ratio': FLAGS.specjbb_memory_ratio,
      'ram_mb_per_core': FLAGS.specjbb_ram_mb_per_core,
      'max_heap_size': f'{max_heap_size_gb}g',
      'specjbb_mode': FLAGS.specjbb_run_mode,
      'sla_metrics': _CollectSLAMetrics(vm),
      'specjbb_numa_aware': FLAGS.specjbb_numa_aware,
  }
  vm.PullFile(vm_util.GetTempDir(), _LOG_FILE)
  return ParseJbbOutput(stdout, metadata)