<div dir="ltr"><div><div>Is this use case affected?<br><br>piglit run --deqp-mustpass-list --process-isolation 0 -p gbm -c quick cts_gl45 deqp_gles2 deqp_gles3 deqp_gles31<br><br></div><div>Yes, that is just 1 command to run all those test suites at the same time.<br></div><div><br></div>I use my personal "deqp" piglit branch that also disables process isolation for glcts and deqp, and parses the deqp mustpass lists which are in txt files.<br><br></div>Marek<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 4, 2018 at 6:26 PM, Dylan Baker <span dir="ltr"><<a href="mailto:dylan@pnwbakers.com" target="_blank">dylan@pnwbakers.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I don't expect everyone I've CC'd to give thorough review (or any<br>
review), I've mostly CC'd people who I think would be interested in this<br>
work, or who's work flow I might be altered by it.<br>
Piglit has struggled to cope with the growing number of tests that it<br>
contains, especially with startup time. Piglit has always calculated<br>
tests at runtime, which was not a problem when there were only a few<br>
hundred or even thousand tests. Piglit now has roughly 55,000<br>
OpenGL/OpenGL ES tests, which is a lot to calculate at start up. It also<br>
means that piglit needs to keep a python object for each of those tests<br>
in memory, which has sent the resident memory usage soaring. We've also<br>
moved to automatic test discovery for glslparser, asmparser, and shader<br>
tests, which is very convenient and reduces typing, but further<br>
increases the amount of time spent starting up. This has even made<br>
features which decrease runtime, like fast skipping, hurt startup<br>
performance, making it a less than desirable tradeoff in some cases.<br>
Even on a relatively fast machine with an nvme disk 15-20 seconds is not<br>
an unheard of startup time. That might be okay to run 55,000 tests, but<br>
not if you only need a dozen, such as when bisecting.<br>
This series is my proposal to fix that, mainly by moving much of that<br>
cost to build time. This series creates the infrastructure build XML<br>
base profiles at build time, which are installed with piglit instead of<br>
the python profiles. These profiles are lazily iterated over to ease<br>
memory usage, test objects are created as they are run, and python can<br>
garbage collect them as soon as they are done running. Along with that<br>
any filters applied to profiles (like removing 80% of the vs_in shader<br>
tests in quick) are done before the profile is serialized, and all fast<br>
skipping information is collected at build time as well, and encoded in<br>
the XML. All this means that start times are vastly reduced.<br>
For example:<br>
    XML profiles<br>
    quick: 0.5<br>
    shader: 0.5<br>
    quick: 11.6<br>
    shader: 7.3<br>
This series also implements some optimizations for running without<br>
filters or test-lists, if you add a filter quick would take 2.5<br>
seconds, because that is necessary to calculate the total number of<br>
tests before starting.<br>
To keep classic profiles like all, quick, quick_cl, gpu, cpu, and<br>
llvmpipe working this series adds meta profiles, small XML snippets that<br>
list other profiles. These can contain other meta profiles, xml<br>
profiles, or python profiles. This means that for most uses cases your<br>
existing command line will still work, `./piglit run quick out -c` will<br>
still do exactly the same thing as before, just faster.<br>
The XML generated is dumb, there is no encoding of options or logic. An<br>
early version of this series did contain logic and options, but the<br>
result was pretty terrible. It was very hard to read, and the code to<br>
handle it was very complicated. I've chosen not to go down that path.<br>
There are drawbacks, some things that relied on run time generation have<br>
cannot be handled the same way, among them the "multi shader" concept,<br>
where shader_runner consumes a directory of shader_tests at a time. This<br>
was previously handled via a --process-isolation=false flag, now its<br>
encoded into profiles, "shader_multi" and "quick_shader_multi"; there<br>
was also an option to use glslparsertest with ES shaders and<br>
ARB_ES_compatibility, that is now "glslparser_arb_compat". I haven't<br>
added metaprofiles for these cases, although we certainly could (or you<br>
can write your own, the schema is dead simple), so `./piglit run quick<br>
out --process-isolation=false` is now `./piglit run quick_gl glslparser<br>
quick_shader_multi out`.<br>
I've run this through our CI extensively, and gotten green results out<br>
of it across the board.<br>
I know this is a big series, but piglit makes a lot of assumptions about the<br>
test profiles being created at runtime, and we've had to changes those<br>
Dylan Baker (35):<br>
  update git ignore for this series<br>
  test/piglit_test: add ROOT_DIR variable<br>
  framework/profile: Allow a group manager class to be overwritten<br>
  framework/test: Use getter for altering PiglitBaseTest Command<br>
  framework/test: expose required and excluded platforms<br>
  framework/profile: Add a __len__ method to TestProfile<br>
  framework: Use custom class for ASM parser tests<br>
  framework/test: add a test class for built-in constants<br>
  tests: use BuiltInConstantsClass<br>
  framework: use a class method for building test via parsing<br>
  framework: do the same for shader test<br>
  framework/test: Split multishader too<br>
  framework/test/piglit_test: make cl_concurrency always a boolean<br>
  framework/test: Add class for cl-program-tester<br>
  framework/test: Make shader paths relative<br>
  framework/test: use relative paths for GLSLParser tests<br>
  tests/all: Make asmparser tests path relative<br>
  framework/test: make BuiltInConstantTest files relative<br>
  framework/test: make CLProgramTester take relative paths<br>
  profile: Add support for loading xml based profiles<br>
  profile: allow forcing python or xml loading<br>
  framework/profile: Add support for meta profiles<br>
  py_modules: Add support for out of tree builds<br>
  tests/quick: fix filtering of vs_in shader tests<br>
  tests: use meta profiles<br>
  shader_tests: correctly generate xml during out of tree builds<br>
  tests/glsl_parser_test.py: fix is_skip for serialized profiles<br>
  fix glslparser test for out of tree builds<br>
  fix asmparser test serialization for out of tree builds<br>
  tests/cl.py: fix out of tree serialization<br>
  opengl.py: Remove exported gl extensions<br>
  Add script to serialize profiles to XML<br>
  tests: Add script to find all hand written test files<br>
  Generate xml for builtin profiles<br>
  profile: use gz to compress profiles<br>
 .gitignore                                        |    4 +-<br>
 CMakeLists.txt                                    |   10 +-<br>
 framework/profile.py                              |  203 +-<br>
 framework/test/glsl_parser_<wbr>test.py                |   60 +-<br>
 framework/test/piglit_test.py                     |   68 +-<br>
 framework/test/shader_test.py                     |  131 +-<br>
 tests/CMakeLists.no_api.txt                       |   89 +-<br>
 tests/CMakeLists.txt                              |    2 +-<br>
 tests/all.meta.xml                                |    6 +-<br>
 tests/all.py                                      | 4999 +--------------<br>
 tests/cl.py                                       |   71 +-<br>
 tests/cpu.meta.xml                                |    4 +-<br>
 tests/cpu.py                                      |   31 +-<br>
 tests/find_static_tests.py                        |   74 +-<br>
 tests/glslparser.py                               |   63 +-<br>
 tests/gpu.meta.xml                                |    5 +-<br>
 tests/gpu.py                                      |   18 +-<br>
 tests/llvmpipe.meta.xml                           |    5 +-<br>
 tests/llvmpipe.py                                 |   33 +-<br>
 tests/llvmpipe_gl.py                              |   33 +-<br>
 tests/no_error.py                                 |   17 +-<br>
 tests/opencl_foreign.py                           |   34 +-<br>
 tests/opengl.py                                   | 4837 ++++++++++++++-<br>
 tests/py_modules/constants.py                     |    8 +-<br>
 tests/quick.meta.xml                              |    6 +-<br>
 tests/quick.py                                    |   97 +-<br>
 tests/quick_cl.meta.xml                           |    5 +-<br>
 tests/quick_cl.py                                 |   37 +-<br>
 tests/quick_gl.py                                 |   78 +-<br>
 tests/quick_shader.py                             |   53 +-<br>
 tests/serializer.py                               |  151 +-<br>
 tests/shader.py                                   |   71 +-<br>
 unittests/framework/test/test_<wbr>glsl_parser_test.py |   61 +-<br>
 unittests/framework/test/test_<wbr>shader_test.py      |   37 +-<br>
 unittests/framework/test_<wbr>profile.py               |    5 +-<br>
 35 files changed, 6009 insertions(+), 5397 deletions(-)<br>
 create mode 100644 tests/CMakeLists.no_api.txt<br>
 create mode 100644 tests/all.meta.xml<br>
 delete mode 100644 tests/all.py<br>
 create mode 100644 tests/cpu.meta.xml<br>
 delete mode 100644 tests/cpu.py<br>
 create mode 100644 tests/find_static_tests.py<br>
 create mode 100644 tests/gpu.meta.xml<br>
 delete mode 100644 tests/gpu.py<br>
 create mode 100644 tests/llvmpipe.meta.xml<br>
 delete mode 100644 tests/llvmpipe.py<br>
 create mode 100644 tests/llvmpipe_gl.py<br>
 create mode 100644 tests/opencl_foreign.py<br>
 create mode 100644 tests/opengl.py<br>
 create mode 100644 tests/quick.meta.xml<br>
 delete mode 100644 tests/quick.py<br>
 create mode 100644 tests/quick_cl.meta.xml<br>
 delete mode 100644 tests/quick_cl.py<br>
 create mode 100644 tests/quick_gl.py<br>
 create mode 100644 tests/quick_shader.py<br>
 create mode 100644 tests/serializer.py<br>
base-commit: 385fbbe2e73bf4f65f425101e8fa89<wbr>0ae5b52649<br>
<span class="HOEnZb"><font color="#888888">--<br>
git-series 0.9.1<br>