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)