| status | done |
|---|---|
| domain | ci-cd |
| created | 2026-04-06 |
| last_updated | 2026-04-13 |
| owner | juliayakovlev |
The perf-simple-query microbenchmark tests currently run only via the weekly cron trigger in perfRegressionParallelPipelinebyRegion.groovy, using pre-installed Scylla AMIs or scylla_version parameters. There is no trigger to run these tests using the offline installer (unified package) after PGO (Profile-Guided Optimization) builds complete.
PGO builds produce optimized Scylla binaries distributed as unified (relocatable) packages. To validate that PGO-optimized builds maintain or improve performance, we need trigger pipelines that:
- Hook into the PGO build completion flow (invoked as downstream jobs after PGO builds finish).
- Run perf-simple-query tests against the PGO build artifacts using the offline installer mode (
unified_package+nonroot_offline_install). - Cover both architectures (x86_64 and aarch64) and both read/write variants via separate per-architecture triggers.
- Follow the same structure, parameters, and coding style as
perfRegressionParallelPipelinebyRegion.groovy.
This work is tracked in Jira sub-task SCT-194.
Four Jenkins pipeline jobs exist under jenkins-pipelines/performance/branch-perf-v17/scylla-enterprise/perf-regression/:
| Jenkinsfile | Architecture | Variant | Test Config |
|---|---|---|---|
scylla-enterprise-perf-simple-query-weekly-microbenchmark_arm64.jenkinsfile |
aarch64 | read | amazon_perf_simple_query_ARM.yaml + error thresholds |
scylla-enterprise-perf-simple-query-weekly-microbenchmark_arm64-write.jenkinsfile |
aarch64 | write | amazon_perf_simple_query_ARM.yaml + perf_simple_write_option.yaml |
scylla-enterprise-perf-simple-query-weekly-microbenchmark_x86_64.jenkinsfile |
x86_64 | read | amazon_perf_simple_query_ARM.yaml + amazon_perf_simple_query_x86.yaml + error thresholds |
scylla-enterprise-perf-simple-query-weekly-microbenchmark_x86_64-write.jenkinsfile |
x86_64 | write | amazon_perf_simple_query_ARM.yaml + amazon_perf_simple_query_x86.yaml + perf_simple_write_option.yaml |
All four use longevityPipeline() with:
test_name: 'microbenchmarking_test.PerfSimpleQueryTest.test_perf_simple_query'backend: 'aws',region: 'eu-west-1',provision_type: 'on_demand'
These jobs are triggered from perfRegressionParallelPipelinebyRegion.groovy (lines 174–209) as part of the testRegionMatrix. Each is configured with:
microbenchmark: true— skips AMI image lookuplabels: ['master-weekly']— only triggered onmaster-weeklycron scheduleignore_versions: []— runs for all versionssub_tests: ['microbenchmark']
The trigger pipeline (perf-regression-trigger.jenkinsfile) calls perfRegressionParallelPipelinebyRegion() which iterates the matrix, filters by version/labels, and invokes build job: for each matching entry.
The offline installer mode is already fully supported through the pipeline stack:
longevityPipeline.groovy(lines 78–83) — exposesunified_packageandnonroot_offline_installparameters.runSctTest.groovy(lines 145–147) — exportsSCT_UNIFIED_PACKAGEandSCT_NONROOT_OFFLINE_INSTALLenvironment variables.sdcm/sct_config.py— definesunified_package,nonroot_offline_install, andinstall_modeconfiguration fields.sdcm/cluster.py— handles unified package download, architecture validation, and nonroot installation.
- No trigger pipelines exist to invoke perf-simple-query jobs with a
unified_packageURL after PGO builds. - No
unified_packageparameter is passed fromperfRegressionParallelPipelinebyRegion.groovyto downstream jobs. - No PGO-specific entry point exists — the PGO build system has no way to invoke these perf tests with the built artifact URL.
- Two architecture-specific trigger pipelines —
vars/perfSimpleQueryOfflineInstallerTriggerX86.groovyandvars/perfSimpleQueryOfflineInstallerTriggerArm.groovy— each accepting aunified_packageURL and triggering the corresponding architecture's perf-simple-query jobs using the offline installer mode. - PGO build integration — each trigger is invokable as a downstream job from the PGO build completion flow, accepting the unified package URL as a parameter. Separate triggers allow PGO builds to invoke only the relevant architecture.
- Full architecture coverage — the x86 trigger covers x86_64 read and write variants; the ARM trigger covers arm64 read and write variants.
- Consistent style — follows the structure, parameter naming, and coding patterns of
perfRegressionParallelPipelinebyRegion.groovy. - Reusable Jenkinsfiles — reuses the existing perf-simple-query
.jenkinsfiledefinitions (which already supportunified_packagevialongevityPipeline()). - New Jenkinsfile trigger entry points for Jenkins to discover and invoke each pipeline independently.
Description: Implement two shared library functions — vars/perfSimpleQueryOfflineInstallerTriggerX86.groovy and vars/perfSimpleQueryOfflineInstallerTriggerArm.groovy — each accepting a unified_package URL and triggering its architecture's perf-simple-query jobs with offline installer parameters.
Key design decisions:
- Follow the same
def call(Map pipelineParams)signature asperfRegressionParallelPipelinebyRegion.groovy. - Two separate triggers per architecture instead of one combined trigger. This was chosen because PGO builds produce separate per-architecture packages, and each architecture can be triggered independently without requiring the other.
- Each trigger defines a
testMatrixlist of job entries withjob_nameandregionfields scoped to its architecture. - Accept parameters:
unified_package(required),nonroot_offline_install(boolean, default true),requested_by_user,billing_project. - No
scylla_versionparameter — removed as unnecessary; the unified package URL is sufficient for tracking and the downstream jobs do not need a separate version string. - Use
build job:withwait: falseto trigger each job asynchronously, passingunified_packageandnonroot_offline_installthrough to the downstreamlongevityPipeline(). - No cron triggers — these pipelines are invoked externally by PGO build jobs.
- No AMI/image lookup needed — offline installer uses the unified package directly.
Files created:
vars/perfSimpleQueryOfflineInstallerTriggerX86.groovy— triggers x86_64 read and write jobsvars/perfSimpleQueryOfflineInstallerTriggerArm.groovy— triggers arm64 read and write jobs
Definition of Done:
- Each pipeline accepts a
unified_packageURL and triggers its two architecture-specific perf-simple-query jobs. - Parameters are consistent with
perfRegressionParallelPipelinebyRegion.groovynaming. - Jobs receive
unified_packageandnonroot_offline_installparameters. - No cron trigger — designed for external invocation.
Description: Create two Jenkinsfiles that call their respective trigger functions, providing Jenkins-discoverable entry points.
Files created:
jenkins-pipelines/performance/branch-perf-v17/scylla-enterprise/perf-regression/perf-simple-query-offline-installer-trigger-x86.jenkinsfile— callsperfSimpleQueryOfflineInstallerTriggerX86()jenkins-pipelines/performance/branch-perf-v17/scylla-enterprise/perf-regression/perf-simple-query-offline-installer-trigger-arm.jenkinsfile— callsperfSimpleQueryOfflineInstallerTriggerArm()
Definition of Done:
- Both Jenkinsfiles exist and call their respective shared library functions.
- Follow the same pattern as
perf-regression-trigger.jenkinsfile. - Each can be registered as a Jenkins job that PGO build pipelines can invoke as a downstream build for the relevant architecture.
Description: Validate both trigger pipelines work correctly by manually triggering them with test unified package URLs.
Definition of Done:
- Each pipeline can be triggered manually from Jenkins with a
unified_packageURL. - The x86 trigger starts the two x86_64 downstream jobs; the ARM trigger starts the two arm64 downstream jobs.
- Downstream jobs receive the correct
unified_packageandnonroot_offline_installparameters. - Jobs use the offline installer to install Scylla from the unified package.
Dependencies: Requires Jenkins access and valid architecture-specific unified package URLs.
- No unit tests needed — this is a Groovy pipeline definition. Groovy pipeline code in this repository is not unit-tested (consistent with existing patterns).
- Syntax validation — verify the Groovy files parse correctly by running pre-commit checks.
- Trigger each pipeline manually in Jenkins with a
unified_packageURL pointing to a valid unified package for the corresponding architecture. - Verify downstream jobs are invoked — check Jenkins build queue for the two architecture-specific perf-simple-query jobs per trigger.
- Verify parameter passthrough — confirm downstream jobs receive
unified_packageandnonroot_offline_installvalues. - Verify offline installation — confirm at least one downstream job per architecture successfully installs Scylla from the unified package and runs the perf-simple-query test.
- Verify PGO integration — trigger from an actual PGO build completion flow and confirm the full chain works for both architectures.
- Two new Jenkins jobs exist (one per architecture) that can be invoked with a
unified_packageURL after PGO builds complete. - The x86 trigger invokes x86_64 read and write variants; the ARM trigger invokes arm64 read and write variants.
- The offline installer mode is correctly configured for each downstream job.
- The trigger pipelines follow the same coding style and parameter conventions as
perfRegressionParallelPipelinebyRegion.groovy. - No existing pipelines or jobs are modified or broken.
| Risk | Mitigation |
|---|---|
| PGO build system integration details unknown | The trigger pipelines are designed to be invoked generically via build job: with a unified_package URL. PGO build integration requires only adding a downstream build step in the PGO pipeline. No SCT-side coupling to PGO internals. |
| Unified package URL format may vary by architecture | Resolved: By splitting into two separate per-architecture triggers, each PGO build invokes only the trigger matching its architecture with the correct unified package URL. No need for a single trigger to handle multiple architecture-specific URLs. |
| Nonroot installation may fail on certain AMI bases | The offline installer automatically selects Ubuntu 24.04 base AMIs (handled in sct_config.py lines 2737–2758). This is well-tested for existing offline install flows. |
| Downstream jobs may not be registered in Jenkins yet | The existing four perf-simple-query Jenkinsfiles are already registered. No new downstream jobs need to be created. |
| Pre-commit hooks may generate auto-generated files | Follow the convention of not committing auto-generated nemesis/Jenkins pipeline files. Only the new files in vars/ and jenkins-pipelines/ should be committed. |