Le 18/10/2024 à 10:47, Michel Dänzer a écrit :
On 2024-10-18 01:36, Timur Kristóf wrote:
Or that you bisect between
very old very new versions?
I suspect the latter.
Yes, it happens that almost every time I have to bisect Mesa, both boundaries
of my bisect are “very old” and “very new” enough (it's usually only within a
timespan in months)
Other than that, I think it's normal and expected that the drivers
evolve and some options change.
As Thomas points out though, such changes potentially cause pain for people who
need to bisect across them. So such changes shouldn't be done lightly but only
if the benefits clearly outweigh that pain.
It's totally normal and expected things change, now there can be ways to make
those changes having less impact on bisecting. Here are some examples I think
about, from the most annoying one to the most pleasant one to use.
1. One way to reduce the painful mismatch may also be done by milestoning some
of them, but this also have some drawbacks as it requires a pending branch for
the sum of the breaking meson changes.
2. For the true/enabled Meson problem, maybe Meson itself can be made more
backward-compatible. I noticed some of the pain comes from Meson itself, the
same Mesa commit may rebuild with the exact same build options if the build
directory is pruned first, without changing any Mesa build option. Having a
build directory not rebuildable without pruning it first is a problem I almost
never face with CMake so I guess Meson can be improved on that purpose.
3. A third way to make bisecting easier is to do bibisects, basically “binary
bisects”. This would solve most of those uses cases.
You can see what The Documentation Foundation does for LibreOffice:
https://wiki.documentfoundation.org/QA/Bibisect
One idea of bibisect implementation is that every now and then a complete build
of Mesa would be done and stored in a tarball somewhere, it would be built
against an old-enough libc to maximize the cross-distribution compatibility.
Then a git repository would commit at the same time some reference of the
tarball. That being done, a bibisect tool would just run git bisect over those
commits, and a special script would fetch and unpack the binary tarball (that
would replace the build step in the bisect process) and provide a way to run
any arbitrary command in some environment.
This would make bisecting very straightforward for most uses cases. Once one
gets the before/after boundaries of the bibisect, one can finish the bisect by
building the few remaining commits from source.
For example the binary tarballs would be done once a week, so the source bisect
would only span over a single week of changes. With a single week of changes,
chance that Meson options change on every commit is very low.
I myself do a bit of that by keeping some copies of my builds (alongside copies
of old build scripts) to make it simpler to check for regressions.
Eero Tamminen also talked about bibisect here:
https://gitlab.freedesktop.org/mesa/mesa/-/issues/12024#note_2611196
Something that has helped me was having machinery that builds Mesa (among other
things) regularly (e.g. daily or weekly), and keeping those builds (+ their date
& commit info) around for a year or two. Build script is in Git, and documents
the necessary build options for given time period.
One can then do quick bisect using LD_LIBRARY_PATH to prebuilt binaries. Git
bisect is then needed only for getting the exact commit between the final 2
binary builds, and unlikely to need build option changes.
Something that will be annoying to deal with in setting-up a bibisect
infrastructure is that it may be needed to build and ship the related LLVM
components as well (llvmpipe, radeonsi, r600 clover…).
Maybe there are other ways I didn't think of that can help to make bisecting
easier without preventing Mesa contributors to actually change Mesa as soon as
they like. The best solutions are the one that both make bisecting easier and
doesn't slow down the merge of breaking changes.
--
Thomas “illwieckz” Debesse