From d5edd002c701e9c4880c2dd65db16e77595a43d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Doktor?= Date: Tue, 24 Mar 2026 12:53:27 +0100 Subject: [PATCH 1/7] docs.jenkins: Use double \\ in {HOST,GUEST}_RPM_FROM_URLS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit in order to escape properly it needs to use double \\ in the url. Signed-off-by: Lukáš Doktor --- docs/source/jenkins/jobs.yaml | 12 ++++++------ docs/source/jenkins/vars_runperf.groovy | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/source/jenkins/jobs.yaml b/docs/source/jenkins/jobs.yaml index 9f2aa95..3d0a4c5 100644 --- a/docs/source/jenkins/jobs.yaml +++ b/docs/source/jenkins/jobs.yaml @@ -93,7 +93,7 @@ default: "" - text: name: HOST_RPM_FROM_URLS - description: 'Specify pages to query for links to RPMs to be installed on host. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\\;O=D' + description: 'Specify pages to query for links to RPMs to be installed on host. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\;O=D' default: "{param-host-rpm-from-urls}" - string: name: GUEST_KERNEL_ARGS @@ -101,7 +101,7 @@ default: "" - text: name: GUEST_RPM_FROM_URLS - description: 'Specify pages to query for links to RPMs to be installed on guest. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\\;O=D' + description: 'Specify pages to query for links to RPMs to be installed on guest. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\;O=D' default: "" - bool: name: PBENCH_PUBLISH @@ -199,7 +199,7 @@ default: "" - text: name: HOST_RPM_FROM_URLS - description: 'Specify pages to query for links to RPMs to be installed on host. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\\;O=D' + description: 'Specify pages to query for links to RPMs to be installed on host. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\;O=D' default: "{param-host-rpm-from-urls}" - string: name: GUEST_KERNEL_ARGS @@ -207,7 +207,7 @@ default: "" - text: name: GUEST_RPM_FROM_URLS - description: 'Specify pages to query for links to RPMs to be installed on guest. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\\;O=D' + description: 'Specify pages to query for links to RPMs to be installed on guest. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\;O=D' default: "" - bool: name: PBENCH_PUBLISH @@ -330,7 +330,7 @@ default: "" - text: name: HOST_RPM_FROM_URLSS - description: 'Double enter (\\n\\n) separated list of Single enter (\\n) separated list of pages to query for links to RPMs to be installed on host. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\\;O=D' + description: 'Double enter (\\n\\n) separated list of Single enter (\\n) separated list of pages to query for links to RPMs to be installed on host. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\;O=D' default: "{param-host-rpm-from-urls}" - string: name: GUEST_KERNEL_ARGSS @@ -338,7 +338,7 @@ default: "" - text: name: GUEST_RPM_FROM_URLSS - description: 'Double enter (\\n\\n) separated list of Single enter (\\n) separated list of pages to query for links to RPMs to be installed on guest. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\\;O=D' + description: 'Double enter (\\n\\n) separated list of Single enter (\\n) separated list of pages to query for links to RPMs to be installed on guest. Works well with koji/brew links to package or build page as well as individually published list of pkgs, also tries to find "$arch/" link and search pkgs there.\n\nThe format is:\n$pkgFilter;$rpmFilter;$urlList\nkernel-[^"]*fc38;!debug|bpftool|kernel-tools|perf|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8\nhttps://koji.fedoraproject.org/koji//buildinfo?buildID=2110910\n(\d+);;http://example.com/repos/test/MyRepo/?C=M\;O=D' default: "" - string: name: UPSTREAM_QEMU_COMMITS diff --git a/docs/source/jenkins/vars_runperf.groovy b/docs/source/jenkins/vars_runperf.groovy index 8a41300..ff41e52 100644 --- a/docs/source/jenkins/vars_runperf.groovy +++ b/docs/source/jenkins/vars_runperf.groovy @@ -156,7 +156,7 @@ String cmdInstallRpmsFromURLs(String param, String arch) { args = line.split("(? Date: Tue, 24 Mar 2026 12:54:13 +0100 Subject: [PATCH 2/7] docs.jenkins: Switch to fio 3.34 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lukáš Doktor --- docs/source/jenkins/vars_runperf.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/jenkins/vars_runperf.groovy b/docs/source/jenkins/vars_runperf.groovy index ff41e52..0a27194 100644 --- a/docs/source/jenkins/vars_runperf.groovy +++ b/docs/source/jenkins/vars_runperf.groovy @@ -20,12 +20,12 @@ import java.util.regex.Pattern @Field String fioNbdScript = ('\n\n# FIO_NBD_SETUP' + '\ndnf install --skip-broken -y fio gcc zlib-devel libnbd-devel make qemu-img libaio-devel' + '\ncd /tmp' + - '\ncurl -L https://github.com/axboe/fio/archive/fio-3.19.tar.gz | tar xz' + - '\ncd fio-fio-3.19' + + '\ncurl -L https://github.com/axboe/fio/archive/refs/tags/fio-3.34.tar.gz | tar xz' + + '\ncd fio-fio-3.34' + '\n./configure --enable-libnbd\n' + makeInstallCmd + '\nmkdir -p /var/lib/runperf/' + - '\necho "fio 3.19" >> /var/lib/runperf/sysinfo') + '\necho "fio 3.34" >> /var/lib/runperf/sysinfo') // Usage: String.format(upstreamQemuScript, upstreamCommit, upstreamCommit) @Field String upstreamQemuScript = """# UPSTREAM_QEMU_SETUP OLD_PWD="\$PWD" From c76913768cb15af0e7eac12d6e5bf2667c90314f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Doktor?= Date: Tue, 24 Mar 2026 12:54:28 +0100 Subject: [PATCH 3/7] docs.jenkins: Add new qemu deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lukáš Doktor --- docs/source/jenkins/vars_runperf.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/jenkins/vars_runperf.groovy b/docs/source/jenkins/vars_runperf.groovy index 0a27194..cfc6ebc 100644 --- a/docs/source/jenkins/vars_runperf.groovy +++ b/docs/source/jenkins/vars_runperf.groovy @@ -29,7 +29,7 @@ import java.util.regex.Pattern // Usage: String.format(upstreamQemuScript, upstreamCommit, upstreamCommit) @Field String upstreamQemuScript = """# UPSTREAM_QEMU_SETUP OLD_PWD="\$PWD" -dnf install --skip-broken -y python3-devel zlib-devel gtk3-devel glib2-static spice-server-devel usbredir-devel make gcc libseccomp-devel numactl-devel libaio-devel git ninja-build +dnf install --skip-broken -y python3-devel zlib-devel gtk3-devel glib2-static spice-server-devel usbredir-devel make gcc libseccomp-devel numactl-devel libaio-devel git ninja-build python3-tomli cd /root [ -e "qemu" ] || { mkdir qemu; cd qemu; git init; git remote add origin https://gitlab.com/qemu-project/qemu.git; cd ..; } cd qemu From d4117ea5ea7be86d96d8e562221bb6a1e7466171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Doktor?= Date: Tue, 24 Mar 2026 12:56:41 +0100 Subject: [PATCH 4/7] docs.jenkins: Add bisecter job template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this job is useful to bisect over multiple parameters using `;` to separate different arguments (in some params a newline). Signed-off-by: Lukáš Doktor --- docs/source/jenkins/jobs.yaml | 103 ++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/docs/source/jenkins/jobs.yaml b/docs/source/jenkins/jobs.yaml index 3d0a4c5..f7da4eb 100644 --- a/docs/source/jenkins/jobs.yaml +++ b/docs/source/jenkins/jobs.yaml @@ -355,6 +355,109 @@ lightweight-checkout: true +############################################################################## +# Definition for a bisecter job +############################################################################## +- job-template: + name: "{name}-bisecter" + project-type: pipeline + parameters: + - string: + name: JOB_NAME + description: 'Name of the run-perf job to be used for triggering the tests.\nWarning: there might be concurrency issues in case one attempts to concurrently schedule jobs!' + default: "{param-job}" + - string: + name: MACHINE + description: 'Machine to be provisioned and tested' + default: "{param-machine}" + - string: + name: ARCH + description: 'Target machine architecture' + default: "{param-arch}" + - string: + name: TESTS + description: 'Space separated list of tests to be executed (WARNING: fio-nbd test requires the FIO_NBD_SETUP checkbox enabled!)' + default: "{param-tests}" + - string: + name: PROFILES + description: 'Space separated list of profiles to be applied' + default: "{param-profiles}" + - string: + name: CMP_MODEL_JOB + description: 'Job to copy linear "model.json" from' + default: "{param-cmp-model-job}" + - string: + name: CMP_MODEL_BUILD + description: 'Build to copy linear "model.json" from (-1 means lastSuccessful)' + default: "{param-cmp-model-build}" + - string: + name: CMP_TOLERANCE + description: Tolerance for mean values + default: "{param-cmp-tolerance}" + - string: + name: CMP_STDDEV_TOLERANCE + description: Tolerance for standard deviation values + default: "{param-cmp-stddev-tolerance}" + - bool: + name: FIO_NBD_SETUP + description: 'Compile and install fio with nbd ioengine enabled before test execution' + default: "{param-fio-nbd-setup}" + - string: + name: DESCRIPTION_PREFIX + description: Description prefix (describe the difference from default) + default: "" + - bool: + name: PBENCH_PUBLISH + description: 'Push the pbench results to company pbench server' + default: "{param-pbench-publish}" + - string: + name: GITHUB_PUBLISHER_PROJECT + description: 'Github publisher project ID (when you want to publish your results)' + default: "" + - string: + name: METADATA + description: 'Additional run-perf --metadata arguments' + default: "{param-metadata}" + - text: + name: HOST_SCRIPT + description: 'Host script to be executed on all --servers' + default: "{param-host-script}" + - text: + name: WORKER_SCRIPT + description: 'Worker script to be executed on all runperf workers' + default: "{param-worker-script}" + - bool: + name: PROVISION + description: 'Provision the machine with "--provisioner Beaker"' + default: false + - string: + name: DISTROS + description: '`;` separated list of distributions to be installed/is installed (Fedora-31), when empty latest el8 nightly build is obtained from bkr, when `..` is used it uses bkr to fill all available versions in between the specified versions' + default: "{param-distro}" + - string: + name: GUEST_DISTROS + description: '`;` separated list of distribution to be installed on guest, when empty "distro" is used, when `..` is used it uses bkr to fill all available versions in between the specified versions' + default: "{param-guest-distro}" + - text: + name: HOST_RPM_FROM_URLS + description: 'Single enter (\\n) separated list of pages to query for links to RPMs to be installed on host. It uses "bisecter -E" format (something like "url://https\\://koji.fedoraproject.org/koji//packageinfo?packageID=8:kernel-5.14:+5")' + default: "{param-host-rpm-from-urls}" + - text: + name: GUEST_RPM_FROM_URLS + description: 'Single enter (\\n) separated list of pages to query for links to RPMs to be installed on worker. It uses "bisecter -E" format (something like "url://https\\://koji.fedoraproject.org/koji//packageinfo?packageID=8:kernel-5.14:+5")' + default: "" + sandbox: true + pipeline-scm: + scm: + - git: + url: git://PATH_TO_YOUR_REPO_WITH_PIPELINES.git + branches: + - main + script-path: "bisecter_bisect.groovy" + lightweight-checkout: true + + + ############################################################################## # Definition of the analyze-perf job ############################################################################## From 9bf2c785f67155026d667cc3afccbec60584f5ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Doktor?= Date: Tue, 24 Mar 2026 12:57:27 +0100 Subject: [PATCH 5/7] docs.jenkins: Add METADATA argument MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is useful to specify pbench repos and other free-form metadata. Signed-off-by: Lukáš Doktor --- docs/source/jenkins/jobs.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/jenkins/jobs.yaml b/docs/source/jenkins/jobs.yaml index f7da4eb..05a0139 100644 --- a/docs/source/jenkins/jobs.yaml +++ b/docs/source/jenkins/jobs.yaml @@ -185,6 +185,10 @@ name: PROFILES description: 'Space separated list of profiles to be applied' default: "{param-profiles}" + - string: + name: METADATA + description: 'Additional run-perf --metadata arguments' + default: "{param-metadata}" - text: name: HOST_SCRIPT description: 'Host script to be executed on all --servers' From e4c84bdbc5dcfe434787226fc3b8344b57aa2c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Doktor?= Date: Tue, 24 Mar 2026 12:58:13 +0100 Subject: [PATCH 6/7] docs.jenkins: Modernize jjb include command. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lukáš Doktor --- docs/source/jenkins/jobs.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/jenkins/jobs.yaml b/docs/source/jenkins/jobs.yaml index 05a0139..dc43ca9 100644 --- a/docs/source/jenkins/jobs.yaml +++ b/docs/source/jenkins/jobs.yaml @@ -575,8 +575,8 @@ default: "{param-age}" description: How old results should be pruned builders: - - python: - !include-raw-escape: ../scripts/prune_artifacts.py + - system-groovy: + command: !include-raw-escape ../scripts/prune_artifacts.groovy ############################################################################## From 603b4c6f47d2b59dff1c08963c0da8757af80867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Doktor?= Date: Tue, 24 Mar 2026 13:01:01 +0100 Subject: [PATCH 7/7] docs.jenkins: Modernize pipelines to work with latest run-perf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit we changed the run-perf worker tag from runperf-slave to kubernetes and now expect run-perf to be installed on that worker, rather than updating it inside the pipeline. As run-perf is now expected to be installed, remove the direct script calling with using the pre-installed scripts directly. Signed-off-by: Lukáš Doktor --- docs/source/jenkins/compareperf.groovy | 6 ++---- docs/source/jenkins/identify.groovy | 6 ++---- docs/source/jenkins/multi_runperf.groovy | 4 ++-- .../source/jenkins/publish-results-git.groovy | 9 ++------- docs/source/jenkins/runperf.groovy | 10 +++++----- docs/source/jenkins/upstream_bisect.groovy | 19 ++++++++++--------- docs/source/jenkins/vars_runperf.groovy | 12 +----------- 7 files changed, 24 insertions(+), 42 deletions(-) diff --git a/docs/source/jenkins/compareperf.groovy b/docs/source/jenkins/compareperf.groovy index 6bcb0ec..b79229d 100644 --- a/docs/source/jenkins/compareperf.groovy +++ b/docs/source/jenkins/compareperf.groovy @@ -18,7 +18,7 @@ cmpStddevTolerance = params.CMP_STDDEV_TOLERANCE.trim() // Extra variables // Provisioner machine -workerNode = 'runperf-slave' +workerNode = 'kubernetes' // runperf git branch gitBranch = 'main' // misc variables @@ -29,7 +29,6 @@ lastBuildChr = '-1' stage('Analyze') { node(workerNode) { assert builds.size() >= 2 - runperf.deployRunperf(gitBranch) referenceBuilds = [] // Get all the reference builds (second to second-to-last ones) if (builds.size() > 2) { @@ -69,9 +68,8 @@ stage('Analyze') { status = 0 lock(workerNode) { // Avoid modifying workerNode's environment while executing compareperf - sh runperf.pythonDeployCmd status = sh(returnStatus: true, - script: ('python3 scripts/compare-perf -vvv --tolerance ' + cmpTolerance + + script: ('compare-perf -vvv --tolerance ' + cmpTolerance + ' --stddev-tolerance ' + cmpStddevTolerance + ' --xunit ' + runperf.resultXml + ' --html ' + runperf.htmlIndex + spaceChr + cmpExtra + ' -- src_result/* ' + referenceBuilds.join(spaceChr) + diff --git a/docs/source/jenkins/identify.groovy b/docs/source/jenkins/identify.groovy index 5d5bf96..9534592 100644 --- a/docs/source/jenkins/identify.groovy +++ b/docs/source/jenkins/identify.groovy @@ -17,7 +17,7 @@ rebaseModelBuild = params.REBASE_MODEL_BUILD // Extra variables // Provisioner machine -workerNode = 'runperf-slave' +workerNode = 'kubernetes' // runperf git branch gitBranch = 'main' // misc variables @@ -25,7 +25,6 @@ spaceChr = ' ' stage('Analyze') { node(workerNode) { - runperf.deployRunperf(gitBranch) // Get all the specified builds for (build in builds) { copyArtifacts(filter: 'result*/**/result*.json', optional: false, fingerprintArtifacts: true, @@ -41,9 +40,8 @@ stage('Analyze') { status = 0 lock(workerNode) { // Avoid modifying workerNode's environment while executing compareperf - sh 'python3 setup.py develop --user' status = sh(returnStatus: true, - script: ('python3 scripts/analyze-perf -vvv --stddev-linear-regression ' + + script: ('analyze-perf -vvv --stddev-linear-regression ' + runperf.modelJson + spaceChr + extraArgs + ' -- results/*')) } if (fileExists(runperf.modelJson)) { diff --git a/docs/source/jenkins/multi_runperf.groovy b/docs/source/jenkins/multi_runperf.groovy index 1e0e52e..2674afc 100644 --- a/docs/source/jenkins/multi_runperf.groovy +++ b/docs/source/jenkins/multi_runperf.groovy @@ -59,7 +59,7 @@ workerScript = params.WORKER_SCRIPT // Extra variables // Provisioner machine -workerNode = 'runperf-slave' +workerNode = 'kubernetes' // misc variables srcBuildUnset = '-1' @@ -81,7 +81,7 @@ for (params in paramTypes.combinations()) { // Use a cleanup job to remove host-setup-script things srcBuild = runperf.triggerRunperf(env.JOB_NAME, srcBuild == srcBuildUnset, params[7], params[6], machine, arch, tests, profiles, srcBuild, params[4], - params[3], params[2], params[1], + params[1], params[2], params[3], params[5], prefix, pbenchPublish, fioNbdSetup, Math.max(0, referenceBuilds).toString(), cmpModelJob, cmpModelBuild, cmpTolerance, cmpStddevTolerance, diff --git a/docs/source/jenkins/publish-results-git.groovy b/docs/source/jenkins/publish-results-git.groovy index 3d2a4db..1d19279 100644 --- a/docs/source/jenkins/publish-results-git.groovy +++ b/docs/source/jenkins/publish-results-git.groovy @@ -181,7 +181,7 @@ void updateLinkFile(String path, String link, String missingTemplate) { } } -node('runperf-slave') { +node('kubernetes') { sh "rm -rf $buildArtifacts/" copyArtifacts(filter: runperf.runperfResultsFilter, optional: false, fingerprintArtifacts: true, projectName: job, selector: specific(build), @@ -192,14 +192,9 @@ node('runperf-slave') { runperfResults = sh(returnStdout: true, script: "res=($buildArtifacts/result*); echo \${res[0]}").trim() // Strip results if asked for if (stripResults) { - // Deploy run-perf to get strip tool - dir('run-perf') { - git branch: gitBranch, url: 'https://github.com/distributed-system-analysis/run-perf.git' - sh runperf.pythonDeployCmd - } sh "rm -Rf '.$buildArtifacts'" sh "mv '$buildArtifacts' '.$buildArtifacts'" - sh "python3 run-perf/scripts/strip-run-perf -i -s -vvv '.$runperfResults' '$runperfResults'" + sh "strip-run-perf -i -s -vvv '.$runperfResults' '$runperfResults'" sh "[ -e '.$buildArtifacts/html' ] && mv '.$buildArtifacts/html' '$buildArtifacts/html'" sh "rm -Rf '.$buildArtifacts'" } diff --git a/docs/source/jenkins/runperf.groovy b/docs/source/jenkins/runperf.groovy index 4252873..1c11f4c 100644 --- a/docs/source/jenkins/runperf.groovy +++ b/docs/source/jenkins/runperf.groovy @@ -56,7 +56,7 @@ workerScript = params.WORKER_SCRIPT // Extra variables // Provisioner machine -workerNode = 'runperf-slave' +workerNode = 'kubernetes' // runperf git branch gitBranch = 'main' // extra runperf arguments @@ -70,8 +70,7 @@ node(workerNode) { } stage('Measure') { - runperf.deployDownstreamConfig(gitBranch) - runperf.deployRunperf(gitBranch) + runperf.cloneDownstreamConfig(gitBranch) if (fedoraLatestKernel) { kernelURL = '\nkernel-;!debug|kernel-selftests|kernel-doc;https://koji.fedoraproject.org/koji//packageinfo?packageID=8' hostRpmFromURLs += kernelURL @@ -111,7 +110,7 @@ node(workerNode) { lock(machine) { sh '$KINIT' status = sh(returnStatus: true, - script: "python3 scripts/run-perf ${extraArgs} -v --hosts ${machine} --distro ${distro} " + + script: "run-perf ${extraArgs} -v --hosts ${machine} --distro ${distro} " + "--provisioner Beaker --default-password YOUR_DEFAULT_PASSWORD --profiles ${profiles} " + '--log run.log --paths ./downstream_config --metadata ' + "'build=${currentBuild.number}${descriptionPrefix}' " + @@ -168,8 +167,9 @@ node(workerNode) { cmpExtra = '' } // Compare the results and generate html as well as xunit results + sh "mkdir -p '${runperf.htmlPath}'" status = sh(returnStatus: true, - script: ('python3 scripts/compare-perf --log compare.log ' + + script: ('compare-perf --log compare.log ' + '--tolerance ' + cmpTolerance + ' --stddev-tolerance ' + cmpStddevTolerance + " --xunit ${runperf.resultXml} --html ${runperf.htmlIndex} --html-small-file " + cmpExtra + ' -- src_result/* ' + referenceBuilds.reverse().join(' ') + diff --git a/docs/source/jenkins/upstream_bisect.groovy b/docs/source/jenkins/upstream_bisect.groovy index dc7ac4a..d989337 100644 --- a/docs/source/jenkins/upstream_bisect.groovy +++ b/docs/source/jenkins/upstream_bisect.groovy @@ -41,7 +41,7 @@ workerScript = params.WORKER_SCRIPT // Extra variables // Provisioner machine -workerNode = 'runperf-slave' +workerNode = 'kubernetes' // runperf git branch gitBranch = 'main' // extra runperf arguments @@ -55,6 +55,8 @@ String getBkrInstallCmd(String hostBkrLinks, String hostBkrLinksFilter, String a } node(workerNode) { + def contribPath = sh(script: 'runperf-contrib-path', returnStdout: true).trim() + stage('Preprocess') { (distro, guestDistro, descriptionPrefix) = runperf.preprocessDistros(distro, guestDistro, arch, descriptionPrefix) @@ -62,11 +64,10 @@ node(workerNode) { } stage('Measure') { - runperf.deployDownstreamConfig(gitBranch) - runperf.deployRunperf(gitBranch) + runperf.cloneDownstreamConfig(gitBranch) metadata = '' - hostScript = runperf.setupScript(hostScript, hostKernelArgs, HostRpmFromURLs, arch, fioNbdSetup) - workerScript = runperf.setupScript(workerScript, guestKernelArgs, GuestRpmFromURLs, arch, fioNbdSetup) + hostScript = runperf.setupScript(hostScript, hostKernelArgs, hostRpmFromURLs, arch, fioNbdSetup) + workerScript = runperf.setupScript(workerScript, guestKernelArgs, guestRpmFromURLs, arch, fioNbdSetup) writeFile file: 'host_script', text: hostScript setupQemu = String.format(runperf.upstreamQemuScript, upstreamQemuGood, upstreamQemuGood) writeFile(file: 'host_script_with_qemu', @@ -85,15 +86,15 @@ node(workerNode) { sh 'git clone https://gitlab.com/qemu-project/qemu.git upstream_qemu/' sh '$KINIT' // First run the provisioning and dummy test to age the machine a bit - sh("python3 scripts/run-perf ${extraArgs} -v --hosts ${machine} --distro ${distro} " + + sh("run-perf ${extraArgs} -v --hosts ${machine} --distro ${distro} " + '--host-setup-script host_script_with_qemu --host-setup-script-reboot ' + '--provisioner Beaker --default-password YOUR_DEFAULT_PASSWORD ' + '--profiles DefaultLibvirt --paths ./downstream_config --log prejob.log -- ' + '\'fio:{"runtime": "30", "targets": "/fio", "block-sizes": "4", "test-types": "read", ' + '"samples": "1"}\'') // And now run the bisection without reprovisioning - sh("DIFFPERF='python3 scripts/diff-perf' contrib/upstream_qemu_bisect.sh upstream_qemu/ " + - "${upstreamQemuGood} ${upstreamQemuBad} python3 scripts/run-perf ${extraArgs} " + + sh("DIFFPERF='diff-perf -v' '${contribPath}/upstream_qemu_bisect.sh' upstream_qemu/ " + + "${upstreamQemuGood} ${upstreamQemuBad} run-perf ${extraArgs} " + "-v --hosts ${machine} --distro ${distro} --log job.log " + "--default-password YOUR_DEFAULT_PASSWORD --profiles ${profiles} " + "--paths ./downstream_config --metadata " + @@ -118,6 +119,6 @@ node(workerNode) { reportFiles: 'index.html', reportName: 'HTML Report', reportTitles: '']) } // Remove the unnecessary big files - sh 'contrib/bisect.sh clean' + sh "'${contribPath}/bisect.sh' clean" } } diff --git a/docs/source/jenkins/vars_runperf.groovy b/docs/source/jenkins/vars_runperf.groovy index cfc6ebc..bfb3faf 100644 --- a/docs/source/jenkins/vars_runperf.groovy +++ b/docs/source/jenkins/vars_runperf.groovy @@ -15,7 +15,6 @@ import java.util.regex.Pattern @Field String runperfArchFilterRmCmd = "\\rm -Rf result* src_result* reference_builds ${htmlPath} *.log" @Field String runperfResultsFilter = 'result*/*/*/*/*.json,result*/RUNPERF_METADATA,result*/**/__error*__/**' @Field String makeInstallCmd = '\nmake -j $(getconf _NPROCESSORS_ONLN)\nmake install' -@Field String pythonDeployCmd = 'python3 setup.py develop --user' @Field String kojiUrl = 'https://koji.fedoraproject.org/koji/' @Field String fioNbdScript = ('\n\n# FIO_NBD_SETUP' + '\ndnf install --skip-broken -y fio gcc zlib-devel libnbd-devel make qemu-img libaio-devel' + @@ -82,19 +81,10 @@ List preprocessDistros(String distro, String guestDistro, String arch, descripti return [distro, guestDistro, descriptionPrefix] } -void deployRunperf(gitBranch) { - git branch: gitBranch, url: 'https://github.com/distributed-system-analysis/run-perf.git' - // Remove files that might have been left behind - sh runperfArchFilterRmCmd - sh "mkdir ${htmlPath}" - sh pythonDeployCmd -} - -void deployDownstreamConfig(gitBranch) { +void cloneDownstreamConfig(gitBranch) { // This way we add downstream plugins and other configuration dir('downstream_config') { git branch: gitBranch, url: 'git://PATH_TO_YOUR_REPO_WITH_PIPELINES/runperf_config.git' - sh pythonDeployCmd } }