ci/piglit: allow parallel piglit jobs

This allows to split a piglit job in several parallel jobs, to speed up
the execution.

Due piglit restrictions, this only works for single profiles. Otherwise
an error will be shown in the runner.

Also, a new gitlab job variable `PIGLIT_TESTS` is introduced that
contains the excluded/included tests with `-x` or `-n`. The rest of the
piglit options go to `PIGLIT_OPTIONS` (like `--timeout n`).

v2 (Andres):
 - Replay profile is supported in parallel jobs.
 - Bail out inmediately if parallel jobs is tried with multiple
profiles.
 - Use testlist only when doing parallel jobs.
 - Do not drop pass tests when filtering executed tests.
 - Get rid of PIGLIT_FRACTION.

v4:
 - uncommit unrelated change (Andres).

Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Reviewed-by: Andres Gomez <agomez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9022>
This commit is contained in:
Juan A. Suarez Romero 2021-02-12 18:20:00 +01:00
parent b17ec53c81
commit e814e23f59
10 changed files with 102 additions and 28 deletions

View file

@ -905,7 +905,7 @@ test-d3d12-windows:
GIT_STRATEGY: none # testing doesn't build anything from source GIT_STRATEGY: none # testing doesn't build anything from source
GALLIUM_DRIVER: d3d12 GALLIUM_DRIVER: d3d12
PIGLIT_PROFILE: quick_gl PIGLIT_PROFILE: quick_gl
PIGLIT_OPTIONS: -x nv_copy_depth_to_color -x repeat-wait -x arb_timer_query@timestamp-get PIGLIT_TESTS: -x nv_copy_depth_to_color -x repeat-wait -x arb_timer_query@timestamp-get
script: script:
- . _install/piglit_run.ps1 - . _install/piglit_run.ps1
artifacts: artifacts:

View file

@ -71,6 +71,7 @@ for var in \
PIGLIT_REPLAY_REFERENCE_IMAGES_BASE_URL \ PIGLIT_REPLAY_REFERENCE_IMAGES_BASE_URL \
PIGLIT_REPLAY_UPLOAD_TO_MINIO \ PIGLIT_REPLAY_UPLOAD_TO_MINIO \
PIGLIT_RESULTS \ PIGLIT_RESULTS \
PIGLIT_TESTS \
TEST_LD_PRELOAD \ TEST_LD_PRELOAD \
TU_DEBUG \ TU_DEBUG \
VK_CPU \ VK_CPU \

View file

@ -113,23 +113,21 @@ else
fi fi
fi fi
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD | tee /tmp/version.txt | grep \"Mesa $MESA_VERSION\(\s\|$\)\""
if [ "$ZINK_USE_LAVAPIPE" ]; then if [ "$ZINK_USE_LAVAPIPE" ]; then
export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/lvp_icd.x86_64.json" export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/lvp_icd.x86_64.json"
fi fi
rm -rf results # If the job is parallel at the gitlab job level, will take the corresponding
cd /piglit # fraction of the caselist.
if [ -n "$CI_NODE_INDEX" ]; then
PIGLIT_OPTIONS=$(printf "%s" "$PIGLIT_OPTIONS") if [ "$PIGLIT_PROFILES" != "${PIGLIT_PROFILES% *}" ]; then
FAILURE_MESSAGE=$(printf "%s" "Can't parallelize piglit with multiple profiles")
quiet print_red printf "%s\n" "$FAILURE_MESSAGE"
exit 1
fi
PIGLIT_CMD="./piglit run -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_PROFILES "$(/usr/bin/printf "%q" "$RESULTS") USE_CASELIST=1
RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $SANITY_MESA_VERSION_CMD && $PIGLIT_CMD"
if [ "$RUN_CMD_WRAPPER" ]; then
RUN_CMD="set +e; $RUN_CMD_WRAPPER "$(/usr/bin/printf "%q" "$RUN_CMD")"; set -e"
fi fi
print_red() { print_red() {
@ -183,6 +181,35 @@ replay_minio_upload_images() {
done done
} }
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD | tee /tmp/version.txt | grep \"Mesa $MESA_VERSION\(\s\|$\)\""
rm -rf results
cd /piglit
if [ -n "$USE_CASELIST" ]; then
PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
PIGLIT_GENTESTS="./piglit print-cmd $PIGLIT_TESTS $PIGLIT_PROFILES --format \"{name}\" > /tmp/case-list.txt"
RUN_GENTESTS="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $PIGLIT_GENTESTS"
eval $RUN_GENTESTS
sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
PIGLIT_TESTS="--test-list /tmp/case-list.txt"
fi
PIGLIT_OPTIONS=$(printf "%s" "$PIGLIT_OPTIONS")
PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
PIGLIT_CMD="./piglit run -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_TESTS $PIGLIT_PROFILES "$(/usr/bin/printf "%q" "$RESULTS")
RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $SANITY_MESA_VERSION_CMD && $PIGLIT_CMD"
if [ "$RUN_CMD_WRAPPER" ]; then
RUN_CMD="set +e; $RUN_CMD_WRAPPER "$(/usr/bin/printf "%q" "$RUN_CMD")"; set -e"
fi
FAILURE_MESSAGE=$(printf "%s" "Unexpected change in results:") FAILURE_MESSAGE=$(printf "%s" "Unexpected change in results:")
eval $RUN_CMD eval $RUN_CMD
@ -223,8 +250,21 @@ if [ "x$PIGLIT_PROFILES" = "xreplay" ] \
"minio://${MINIO_HOST}${__MINIO_PATH}/${__MINIO_TRACES_PREFIX}/junit.xml" "minio://${MINIO_HOST}${__MINIO_PATH}/${__MINIO_TRACES_PREFIX}/junit.xml"
fi fi
cp "$INSTALL/$PIGLIT_RESULTS.txt" \ if [ -n "$USE_CASELIST" ]; then
".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" # Just filter the expected results based on the tests that were actually
# executed, and switch to the version with no summary
cat $RESULTSFILE | head -n -16 > ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.new"
RESULTSFILE=".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.new"
cat ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig" | head -n -17 | rev \
| cut -f2- -d: | rev | sed "s/$/:/g" > /tmp/executed.txt
grep -F -f /tmp/executed.txt "$INSTALL/$PIGLIT_RESULTS.txt" \
> ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" || true
else
cp "$INSTALL/$PIGLIT_RESULTS.txt" \
".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline"
fi
if diff -q ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" $RESULTSFILE; then if diff -q ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" $RESULTSFILE; then
exit 0 exit 0
fi fi

View file

@ -10,12 +10,31 @@ cd /piglit
export OCL_ICD_VENDORS=$OLDPWD/install/etc/OpenCL/vendors/ export OCL_ICD_VENDORS=$OLDPWD/install/etc/OpenCL/vendors/
PIGLIT_OPTIONS=$(echo $PIGLIT_OPTIONS | head -n 1)
set +e set +e
unset DISPLAY unset DISPLAY
export LD_LIBRARY_PATH=$OLDPWD/install/lib export LD_LIBRARY_PATH=$OLDPWD/install/lib
clinfo clinfo
./piglit run -c -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_PROFILES $OLDPWD/results
# If the job is parallel at the gitlab job level, will take the corresponding
# fraction of the caselist.
if [ -n "$CI_NODE_INDEX" ]; then
if [ "$PIGLIT_PROFILES" != "${PIGLIT_PROFILES% *}" ]; then
echo "Can't parallelize piglit with multiple profiles"
exit 1
fi
USE_CASELIST=1
fi
if [ -n "$USE_CASELIST" ]; then
./piglit print-cmd $PIGLIT_TESTS $PIGLIT_PROFILES --format "{name}" > /tmp/case-list.txt
sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
PIGLIT_TESTS="--test-list /tmp/case-list.txt"
fi
./piglit run -c -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_TESTS $PIGLIT_PROFILES $OLDPWD/results
retVal=$? retVal=$?
if [ $retVal -ne 0 ]; then if [ $retVal -ne 0 ]; then
echo "Found $(cat /tmp/version.txt), expected $VERSION" echo "Found $(cat /tmp/version.txt), expected $VERSION"
@ -24,15 +43,26 @@ set -e
PIGLIT_RESULTS=${PIGLIT_RESULTS:-$PIGLIT_PROFILES} PIGLIT_RESULTS=${PIGLIT_RESULTS:-$PIGLIT_PROFILES}
mkdir -p .gitlab-ci/piglit mkdir -p .gitlab-ci/piglit
cp $OLDPWD/install/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline ./piglit summary console $OLDPWD/results | head -n -1 | grep -v ": pass" > .gitlab-ci/piglit/$PIGLIT_RESULTS.txt
./piglit summary console $OLDPWD/results | head -n -1 | grep -v ": pass" >.gitlab-ci/piglit/$PIGLIT_RESULTS.txt
if diff -q .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}; then if [ -n "$USE_CASELIST" ]; then
# Just filter the expected results based on the tests that were actually
# executed, and switch to the version with no summary
cat .gitlab-ci/piglit/$PIGLIT_RESULTS.txt | head -n -16 | tee .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.new \
| rev | cut -f2- -d: | rev | sed "s/$/:/g" > /tmp/executed.txt
grep -F -f /tmp/executed.txt $OLDPWD/install/$PIGLIT_RESULTS.txt \
> .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline || true
else
cp $OLDPWD/install/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline
cp .gitlab-ci/piglit/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.new
fi
if diff -q .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.{baseline,new}; then
exit 0 exit 0
fi fi
./piglit summary html --exclude-details=pass $OLDPWD/summary $OLDPWD/results ./piglit summary html --exclude-details=pass $OLDPWD/summary $OLDPWD/results
echo Unexpected change in results: echo Unexpected change in results:
diff -u .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,} diff -u .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.{baseline,new}
exit 1 exit 1

View file

@ -3,7 +3,7 @@ $env:PIGLIT_NO_FAST_SKIP = 1
Copy-Item -Path _install\bin\opengl32.dll -Destination C:\Piglit\lib\piglit\bin\opengl32.dll Copy-Item -Path _install\bin\opengl32.dll -Destination C:\Piglit\lib\piglit\bin\opengl32.dll
# Run this using VsDevCmd.bat to ensure DXIL.dll is in %PATH% # Run this using VsDevCmd.bat to ensure DXIL.dll is in %PATH%
cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && py -3 C:\Piglit\bin\piglit.py run `"$env:PIGLIT_PROFILE`" $env:PIGLIT_OPTIONS .\results" cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && py -3 C:\Piglit\bin\piglit.py run `"$env:PIGLIT_PROFILE`" $env:PIGLIT_OPTIONS $env:PIGLIT_TESTS .\results"
py -3 C:\Piglit\bin\piglit.py summary console .\results | Select -SkipLast 1 | Select-String -NotMatch -Pattern ': pass' | Set-Content -Path .\result.txt py -3 C:\Piglit\bin\piglit.py summary console .\results | Select -SkipLast 1 | Select-String -NotMatch -Pattern ': pass' | Set-Content -Path .\result.txt

View file

@ -40,6 +40,8 @@ vc4-rpi3-gles2:armhf:
BM_POE_TIMEOUT: 180 BM_POE_TIMEOUT: 180
PIGLIT_OPTIONS: >- PIGLIT_OPTIONS: >-
--timeout 60 --timeout 60
PIGLIT_PLATFORM: gbm
PIGLIT_TESTS: >-
-x .tesc -x .tesc
-x .tese -x .tese
-x arb_gpu_shader_fp64 -x arb_gpu_shader_fp64
@ -83,7 +85,6 @@ vc4-rpi3-gles2:armhf:
-x ppgtt_memory_alignment -x ppgtt_memory_alignment
-x streaming-texture-leak -x streaming-texture-leak
-x texturesize -x texturesize
PIGLIT_PLATFORM: gbm
vc4-rpi3-piglit-quick_gl:armhf: vc4-rpi3-piglit-quick_gl:armhf:
extends: extends:
@ -154,6 +155,8 @@ v3d-rpi4-gles2:armhf:
BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh" BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
PIGLIT_OPTIONS: >- PIGLIT_OPTIONS: >-
--timeout 60 --timeout 60
PIGLIT_PLATFORM: gbm
PIGLIT_TESTS: >-
-x .tesc -x .tesc
-x .tese -x .tese
-x arb_gpu_shader_fp64 -x arb_gpu_shader_fp64
@ -182,7 +185,6 @@ v3d-rpi4-gles2:armhf:
-x maxsize -x maxsize
-x streaming-texture-leak -x streaming-texture-leak
-x tex-miplevel-selection -x tex-miplevel-selection
PIGLIT_PLATFORM: gbm
v3d-rpi4-piglit-quick_gl:armhf: v3d-rpi4-piglit-quick_gl:armhf:
extends: extends:

View file

@ -112,7 +112,7 @@ a530_gles31:
# Also excluding some particularly slow tests (gl-1.3-texture-env) # Also excluding some particularly slow tests (gl-1.3-texture-env)
# #
# Check fastboot.sh for more piglit tests being excluded! # Check fastboot.sh for more piglit tests being excluded!
PIGLIT_OPTIONS: >- PIGLIT_TESTS: >-
-x atomic_counters -x atomic_counters
-x gl-1.0-blend-func -x gl-1.0-blend-func
-x glsl-1.30@execution@clipping -x glsl-1.30@execution@clipping
@ -277,7 +277,7 @@ a630_vk_sysmem:
# #
# vs-clip-distance/vertex-enables skipped because they seem to be flaky in # vs-clip-distance/vertex-enables skipped because they seem to be flaky in
# parallel with other tests (reliably fails on its own) # parallel with other tests (reliably fails on its own)
PIGLIT_OPTIONS: >- PIGLIT_TESTS: >-
-x vs-output-array-vec2-index-wr-before-gs -x vs-output-array-vec2-index-wr-before-gs
-x fixed-clip-enables -x fixed-clip-enables
-x vs-clip-distance-enables -x vs-clip-distance-enables

View file

@ -16,7 +16,7 @@ llvmpipe-piglit-cl:
LP_NUM_THREADS: 1 LP_NUM_THREADS: 1
PIGLIT_PROFILES: cl PIGLIT_PROFILES: cl
PIGLIT_RESULTS: "llvmpipe-cl" PIGLIT_RESULTS: "llvmpipe-cl"
PIGLIT_OPTIONS: > PIGLIT_TESTS: >
-x bswap -x phatk -x clz-optimizations -x bswap -x phatk -x clz-optimizations
script: script:
- install/piglit/run_cl.sh - install/piglit/run_cl.sh
@ -31,6 +31,7 @@ llvmpipe-piglit-quick_gl:
LP_NUM_THREADS: 0 LP_NUM_THREADS: 0
PIGLIT_OPTIONS: > PIGLIT_OPTIONS: >
--process-isolation false --process-isolation false
PIGLIT_TESTS: >
-x egl_ext_device_ -x egl_ext_device_
-x egl_ext_platform_device -x egl_ext_platform_device
-x ext_timer_query@time-elapsed -x ext_timer_query@time-elapsed

View file

@ -39,7 +39,7 @@ softpipe-piglit-quick:
# rasterpos skipped until we uprev piglit (commit ff2a7650be7349) # rasterpos skipped until we uprev piglit (commit ff2a7650be7349)
# triangle-rasterization skipped due to flakes thanks to it using a time-based random seed. # triangle-rasterization skipped due to flakes thanks to it using a time-based random seed.
# glx-multithread-texture is flaky, undiagnosed # glx-multithread-texture is flaky, undiagnosed
PIGLIT_OPTIONS: > PIGLIT_TESTS: >
-x rasterpos -x rasterpos
-x triangle-rasterization -x triangle-rasterization
-x glx-multithread-texture -x glx-multithread-texture

View file

@ -15,7 +15,7 @@ zink-piglit-quick_gl:
- .piglit-test - .piglit-test
- .zink-lvp-test - .zink-lvp-test
variables: variables:
PIGLIT_OPTIONS: > PIGLIT_TESTS: >
-x arb_map_buffer_alignment@arb_map_buffer_alignment-map-invalidate-range -x arb_map_buffer_alignment@arb_map_buffer_alignment-map-invalidate-range
-x glx-make-current -x arb_timer_query -x arb_sample_shading@builtin-gl-sample-mask -x glx-make-current -x arb_timer_query -x arb_sample_shading@builtin-gl-sample-mask
PIGLIT_PROFILES: quick_gl PIGLIT_PROFILES: quick_gl