[libcxx-commits] [libcxx] d7ed6d8 - [libc++] Improvements to the benchmark runners (#194659)
via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Apr 28 08:50:17 PDT 2026
Author: Louis Dionne
Date: 2026-04-28T11:50:06-04:00
New Revision: d7ed6d8c9f2f2f314f73fe7f39d8bd19968ecf4f
URL: https://github.com/llvm/llvm-project/commit/d7ed6d8c9f2f2f314f73fe7f39d8bd19968ecf4f
DIFF: https://github.com/llvm/llvm-project/commit/d7ed6d8c9f2f2f314f73fe7f39d8bd19968ecf4f.diff
LOG: [libc++] Improvements to the benchmark runners (#194659)
- Run the ref workloads on SPEC
- Record the SPEC version in the machine info
- Allow filtering which benchmarks are run in run-benchbot
Added:
Modified:
libcxx/test/benchmarks/spec.gen.py
libcxx/utils/ci/lnt/run-benchbot
libcxx/utils/ci/lnt/run-benchmarks
Removed:
################################################################################
diff --git a/libcxx/test/benchmarks/spec.gen.py b/libcxx/test/benchmarks/spec.gen.py
index ab546e53e0692..a76010b6e1460 100644
--- a/libcxx/test/benchmarks/spec.gen.py
+++ b/libcxx/test/benchmarks/spec.gen.py
@@ -76,7 +76,7 @@
print(f'RUN: %{{spec_dir}}/bin/runcpu --config %{{temp}}/spec-config.cfg --action build --output_root %{{temp}} {benchmark}')
# Run the benchmark
- print(f'RUN: /usr/bin/time -l -o %{{temp}}/time.txt %{{spec_dir}}/bin/runcpu --config %{{temp}}/spec-config.cfg --action run --size train --output_root %{{temp}} {benchmark}')
+ print(f'RUN: /usr/bin/time -l -o %{{temp}}/time.txt %{{spec_dir}}/bin/runcpu --config %{{temp}}/spec-config.cfg --action run --size ref --output_root %{{temp}} {benchmark}')
# Clean up, since there can be lots of content created
print(f'RUN: rm -rf %{{temp}}/benchspec')
@@ -84,10 +84,10 @@
# The `runcpu` command above doesn't fail even if the benchmark fails to run. To determine failure, parse the CSV
# results and ensure there are no compilation errors or runtime errors in the status row. Also print the logs and
# fail if there are no CSV files at all, which implies a SPEC error.
- print(f'RUN: %{{libcxx-dir}}/utils/parse-spec-results --extract "Base Status" --keep-failed %{{temp}}/result/*.train.csv > %{{temp}}/status || ! cat %{{temp}}/result/*.log')
+ print(f'RUN: %{{libcxx-dir}}/utils/parse-spec-results --extract "Base Status" --keep-failed %{{temp}}/result/*.refrate.csv > %{{temp}}/status || ! cat %{{temp}}/result/*.log')
print(f'RUN: ! grep -E "CE|RE" %{{temp}}/status || ! cat %{{temp}}/result/*.log')
# If there were no errors, parse the SPEC results and the `time` output into LNT-compatible format and print them.
- print(f'RUN: %{{libcxx-dir}}/utils/parse-spec-results %{{temp}}/result/*.train.csv --output-format=lnt > %{{temp}}/results.lnt')
+ print(f'RUN: %{{libcxx-dir}}/utils/parse-spec-results %{{temp}}/result/*.refrate.csv --output-format=lnt > %{{temp}}/results.lnt')
print(f'RUN: %{{libcxx-dir}}/utils/parse-time-output %{{temp}}/time.txt --benchmark {benchmark.replace(".", "_")} --extract instructions max_rss cycles peak_memory >> %{{temp}}/results.lnt')
print(f'RUN: cat %{{temp}}/results.lnt')
diff --git a/libcxx/utils/ci/lnt/run-benchbot b/libcxx/utils/ci/lnt/run-benchbot
index 266a064f4987f..52fb813b9321e 100755
--- a/libcxx/utils/ci/lnt/run-benchbot
+++ b/libcxx/utils/ci/lnt/run-benchbot
@@ -29,6 +29,8 @@ ${PROGNAME} [options] <BUILDER> [-- commit ...]
[--lnt-url <URL>] The optional URL of the LNT instance to submit results to. By
default, results are not submitted to any LNT instance.
+[--filter <FILTER>] Optional filter to pass to lit to run only a subset of benchmarks.
+
Environment variables
SPEC_DIR Optional path to a SPEC installation. If set and the directory
exists, SPEC benchmarks are included in the run.
@@ -62,6 +64,10 @@ while [[ $# -gt 0 ]]; do
LNT_URL="${2}"
shift; shift
;;
+ --filter)
+ FILTER="${2}"
+ shift; shift
+ ;;
--)
shift
COMMITS=("$@")
@@ -124,6 +130,11 @@ run_benchmarks() {
spec_arg="--spec-dir ${SPEC_DIR}"
fi
+ local filter_arg=""
+ if [ -n "${FILTER}" ]; then
+ filter_arg="--filter ${FILTER}"
+ fi
+
local output=$(next_available_path "${BUILD_DIR}/${1}.json")
${MONOREPO_ROOT}/libcxx/utils/ci/lnt/run-benchmarks \
--test-suite-commit ${BENCHMARK_SUITE_VERSION} \
@@ -132,6 +143,7 @@ run_benchmarks() {
--compiler ${COMPILER} \
--benchmark-commit ${1} \
${spec_arg} \
+ ${filter_arg} \
--output ${output}
if [ -n "${LNT_URL}" ]; then
diff --git a/libcxx/utils/ci/lnt/run-benchmarks b/libcxx/utils/ci/lnt/run-benchmarks
index e0d2c153f4f27..611bd9c4d45b9 100755
--- a/libcxx/utils/ci/lnt/run-benchmarks
+++ b/libcxx/utils/ci/lnt/run-benchmarks
@@ -38,6 +38,10 @@ def gather_machine_information(args):
info['compiler'] = subprocess.check_output([args.compiler, '--version']).decode().strip().splitlines()[0]
info['test_suite_commit'] = subprocess.check_output(['git', '-C', args.git_repo, 'rev-parse', args.test_suite_commit]).decode().strip()
+ if args.spec_dir is not None:
+ with open(args.spec_dir / 'version.txt', 'r') as f:
+ info['spec'] = f.read().strip()
+
return info
def gather_run_information(args):
More information about the libcxx-commits
mailing list