aboutsummaryrefslogtreecommitdiff
path: root/tcwg-benchmark-monthly.yaml
blob: b6b9bf99fd9aa6f6af2b576ca805754afa59eaeb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#See http://docs.openstack.org/infra/jenkins-job-builder/genindex.html
- job:
    name: tcwg-benchmark-monthly
    project-type: freestyle
    node: master
    display-name: 'TCWG BBB Benchmark Monthly'
    description: 'Monthly release benchmarking'
    block-downstream: true
    properties:
        - authorization:
            anonymous:
                - job-read
                - job-extended-read
            tcwg:
                - job-build
                - job-cancel
        - build-discarder:
            days-to-keep: 30
            num-to-keep: 30
            artifact-days-to-keep: 2
            artifact-num-to-keep: 1
    parameters:
        - string:
            name: PREBUILT_32
            description: |
              A prebuilt (32-bit) benchmark tarball as produced by abe or direct make invocation.
              <ul>
                <li>If produced by abe, tar up the contents of <code>build/&lt;host&gt;/&lt;target&gt;</code>.</li>
                <li>If produced by direct make, tar up the top-level git repository (but you can exclude the <code>.git</code> dir).</li>
              </ul>
              Leave blank if you have supplied <code>TOOLCHAIN_32</code>.<br/>
              If this option is given, no build will be performed.
        - string:
            name: TOOLCHAIN_32
            description: |
              32-bit toolchain to use. Give local filesystem path, or formats interpretable by wget or scp/rsync.<br/>
              Leave blank if you have supplied <code>PREBUILT_32</code>.<br/>
              <br/>
              <b>Examples</b><br/>
              <code>/usr/bin/gcc</code><br/>
              <code>https://releases.linaro.org/components/toolchain/binaries/latest-5.1/arm-linux-gnueabihf/gcc-linaro-5.1-2015.08-x86_64_arm-linux-gnueabihf.tar.xz</code><br/>
              <code>my.name@my.server:location_of_my_toolchain</code>
        - string:
            name: SYSROOT_32
            description: |
              32-bit sysroot to use. Give local filesystem path, or formats interpretable by wget or scp/rsync.<br/>
              Leave blank if you have supplied <code>PREBUILT_32</code>, or to let toolchain use whatever sysroot it uses by default.<br/>
              For release benchmarking, should be set to our libc if you have supplied <code>TOOLCHAIN_32</code>, or left blank if you have supplied <code>PREBUILT_32</code>.<br/>
              <br/>
              <b>Examples</b><br/>
              <code>/home/foo/sysroots/sysroot_bar/</code><br/>
              <code>https://releases.linaro.org/components/toolchain/binaries/latest-5.1/arm-linux-gnueabihf/sysroot-linaro-glibc-gcc5.1-2015.08-arm-linux-gnueabihf.tar.xz</code><br/>
              <code>my.name@my.server:location_of_my_sysroot</code>
        - string:
            name: PREBUILT_64
            description: |
              A prebuilt (64-bit) benchmark tarball as produced by abe or direct make invocation.
              <ul>
                <li>If produced by abe, tar up the contents of <code>build/&lt;host&gt;/&lt;target&gt;</code>.</li>
                <li>If produced by direct make, tar up the top-level git repository (but you can exclude the <code>.git</code> dir).</li>
              </ul>
              Leave blank if you have supplied <code>TOOLCHAIN_64</code>.<br/>
              If this option is given, no build will be performed.
        - string:
            name: TOOLCHAIN_64
            description: |
              64-bit toolchain to use. Give local filesystem path, or formats interpretable by wget or scp/rsync.<br/>
              Leave blank if you have supplied <code>PREBUILT_64</code>.<br/>
              <br/>
              <b>Examples</b><br/>
              <code>/usr/bin/gcc</code><br/>
              <code>https://releases.linaro.org/components/toolchain/binaries/latest-5.1/aarch64-linux-gnu/gcc-linaro-5.1-2015.08-x86_64_aarch64-linux-gnu.tar.xz</code><br/>
              <code>my.name@my.server:location_of_my_toolchain</code>
        - string:
            name: SYSROOT_64
            description: |
              64-bit sysroot to use. Give local filesystem path, or formats interpretable by wget or scp/rsync.<br/>
              Leave blank if you have supplied <code>PREBUILT_64</code>, or to let toolchain use whatever sysroot it uses by default.<br/>
              For release benchmarking, should be set to our libc if you have supplied <code>TOOLCHAIN_64</code>, or left blank if you have supplied <code>PREBUILT_64</code>.<br/>
              <br/>
              <b>Examples</b><br/>
              <code>/home/foo/sysroots/sysroot_bar/</code><br/>
              <code>https://releases.linaro.org/components/toolchain/binaries/latest-5.1/aarch64-linux-gnu/sysroot-linaro-glibc-gcc5.1-2015.08-aarch64-linux-gnu.tar.xz</code><br/>
              <code>my.name@my.server:location_of_my_sysroot</code>
        - string:
            name: Overrides
            description: |
              Key=Value arguments, for expert users.<br/>
              Separate with whitespace, for example <code>TIMEOUT=3600 HOST_DEVICE_TYPE=juno</code>.<br/>
              For testing purposes only.<br/>
              Note that this job is structured such that some variables cannot
              be overridden.
              Does not cope well if the Value side of Key=Value contains spaces.
    wrappers:
        - timeout:
            timeout: 120
        - workspace-cleanup
    builders:
      - shell: |
          #!/bin/bash
          set -eux
          set -o pipefail

          #TODO: If benchmarking ever merges back to mainline abe, set this to a suitable branch
          export TESTDEF_REVISION=benchmarking
          export BUNDLE_STREAM='/anonymous/monthly/'

          export BENCHMARK=CPU2006

          for x in ${Overrides:-}; do
            export "${x}"
          done

          #Force this _after_ overrides
          export LAVA_SERVER=192.168.16.2/RPC2/
          export BUNDLE_SERVER=lava.tcwglab/RPC2/

          git clone --depth 1 -b ${TESTDEF_REVISION} https://git.linaro.org/toolchain/abe
          git clone --depth 1 https://git.linaro.org/ci/lci-build-tools

          for TARGET_CONFIG in big:juno-a57 little:juno-a53; do
            export TARGET_CONFIG
            for bitness in 64 32; do
              export LAVA_JOB_NAME="Monthly release benchmark (AArch${bitness} on ${TARGET_CONFIG})"
              if test -n "${Overrides:+x}"; then
                export LAVA_JOB_NAME="${LAVA_JOB_NAME}. With overrides: ${Overrides}."
              fi

              #Run all of this in a subshell so that we enter each loop with
              #environment in the same state.
              (
                indirect="PREBUILT_${bitness}"
                export PREBUILT="${!indirect:-}"
                indirect="TOOLCHAIN_${bitness}"
                export TOOLCHAIN=${!indirect:-}
                indirect="SYSROOT_${bitness}"
                export SYSROOT="${!indirect:-}"
                unset indirect
                if test ${bitness} -eq 32; then
                  export TRIPLE=arm-linux-gnueabihf
                else
                  export TRIPLE=aarch64-linux-gnu
                fi

                #Generate YAML, which will be converted to JSON
                yaml=`mktemp`
                bash -x ./abe/scripts/Benchmark.sh > "${yaml}"
                #Must be exported to be visible to yaml-to-json.py - env vars that
                #happen to be job params are already exported, so don't need this

                #Parameters for post-build-lava
                cat << EOF > post_build_lava_parameters_${TARGET_CONFIG}_${bitness}
                CUSTOM_JSON_URL=${BUILD_URL}/artifact/lava-jobdef_${TARGET_CONFIG}_${bitness}.json

                #Server to dispatch to, as opposed to server where bundle stream is.
                #post-build-lava takes responsibility for specifying a protocol.
                LAVA_SERVER=${LAVA_SERVER}

                #DEVICE_TYPE to placate pbl - we don't actually use it
                DEVICE_TYPE=dummy-ssh
          EOF

                #Convert YAML to JSON
                ./lci-build-tools/yaml-to-json.py "${yaml}" > "lava-jobdef_${TARGET_CONFIG}_${bitness}.json"
                rm "${yaml}"
              )
            done
          done

    publishers:
      - archive:
          artifacts: lava-jobdef_*.json
      - trigger-parameterized-builds:
        - project: tcwg-post-build-lava
          condition: SUCCESS
          property-file: post_build_lava_parameters_big:juno-a57_64
      - trigger-parameterized-builds:
        - project: tcwg-post-build-lava
          condition: SUCCESS
          property-file: post_build_lava_parameters_big:juno-a57_32
      - trigger-parameterized-builds:
        - project: tcwg-post-build-lava
          condition: SUCCESS
          property-file: post_build_lava_parameters_little:juno-a53_64
      - trigger-parameterized-builds:
        - project: tcwg-post-build-lava
          condition: SUCCESS
          property-file: post_build_lava_parameters_little:juno-a53_32
      - email:
          recipients: 'bernie.ogden@linaro.org'