Create a pipeline to run micro-benchmarks periodically (#128507)

This commit is contained in:
Ievgen Degtiarenko 2025-05-27 16:34:08 +02:00 committed by GitHub
parent cdc74748dc
commit b909a503a5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 57 additions and 9 deletions

View file

@ -0,0 +1,10 @@
steps:
- label: periodic-micro-benchmarks
command: |
.ci/scripts/run-gradle.sh -p benchmarks/ run --args 'org.elasticsearch.benchmark._nightly -rf json -rff build/result.json'
timeout_in_minutes: 300
agents:
provider: gcp
image: family/elasticsearch-ubuntu-2004
machineType: custom-32-98304
buildDirectory: /dev/shm/bk

View file

@ -7,7 +7,7 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/
package org.elasticsearch.benchmark.esql;
package org.elasticsearch.benchmark._nightly.esql;
import org.elasticsearch.common.logging.LogConfigurator;
import org.elasticsearch.common.settings.Settings;
@ -67,9 +67,9 @@ public class QueryPlanningBenchmark {
}
private PlanTelemetry telemetry;
private EsqlParser parser;
private Analyzer analyzer;
private LogicalPlanOptimizer optimizer;
private EsqlParser defaultParser;
private Analyzer manyFieldsAnalyzer;
private LogicalPlanOptimizer defaultOptimizer;
@Setup
public void setup() {
@ -100,8 +100,8 @@ public class QueryPlanningBenchmark {
var functionRegistry = new EsqlFunctionRegistry();
telemetry = new PlanTelemetry(functionRegistry);
parser = new EsqlParser();
analyzer = new Analyzer(
defaultParser = new EsqlParser();
manyFieldsAnalyzer = new Analyzer(
new AnalyzerContext(
config,
functionRegistry,
@ -112,10 +112,10 @@ public class QueryPlanningBenchmark {
),
new Verifier(new Metrics(functionRegistry), new XPackLicenseState(() -> 0L))
);
optimizer = new LogicalPlanOptimizer(new LogicalOptimizerContext(config, FoldContext.small()));
defaultOptimizer = new LogicalPlanOptimizer(new LogicalOptimizerContext(config, FoldContext.small()));
}
private LogicalPlan plan(String query) {
private LogicalPlan plan(EsqlParser parser, Analyzer analyzer, LogicalPlanOptimizer optimizer, String query) {
var parsed = parser.createStatement(query, new QueryParams(), telemetry);
var analyzed = analyzer.analyze(parsed);
var optimized = optimizer.optimize(analyzed);
@ -124,6 +124,6 @@ public class QueryPlanningBenchmark {
@Benchmark
public void manyFields(Blackhole blackhole) {
blackhole.consume(plan("FROM test | LIMIT 10"));
blackhole.consume(plan(defaultParser, manyFieldsAnalyzer, defaultOptimizer, "FROM test | LIMIT 10"));
}
}

View file

@ -263,3 +263,41 @@ spec:
Daily:
branch: main
cronline: "0 12 * * * America/New_York"
---
# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/e57ee3bed7a6f73077a3f55a38e76e40ec87a7cf/rre.schema.json
apiVersion: backstage.io/v1alpha1
kind: Resource
metadata:
name: buildkite-pipeline-elasticsearch-periodic-micro-benchmarks
description: Runs periodic micro benchmarks fom the main branch
links:
- title: Pipeline
url: https://buildkite.com/elastic/elasticsearch-periodic-micro-benchmarks
spec:
type: buildkite-pipeline
system: buildkite
owner: group:elasticsearch-team
implementation:
apiVersion: buildkite.elastic.dev/v1
kind: Pipeline
metadata:
description: ":elasticsearch: Runs nightly micro benchmarks fom the main branch"
name: elasticsearch / periodic / micro-benchmarks
spec:
repository: elastic/elasticsearch
pipeline_file: .buildkite/pipelines/periodic-micro-benchmarks.yml
branch_configuration: main
teams:
elasticsearch-team: {}
ml-core: {}
everyone:
access_level: BUILD_AND_READ
provider_settings:
build_branches: false
build_pull_requests: false
publish_commit_status: false
trigger_mode: none
schedules:
Daily:
branch: main
cronline: "@daily"