[igt-dev] [PATCH i-g-t v1] Data Port Cache Coherency tests.
Lis, Tomasz
tomasz.lis at intel.com
Thu Jun 21 11:54:47 UTC 2018
On 2018-06-21 07:53, Joonas Lahtinen wrote:
> Quoting Tomasz Lis (2018-06-20 18:14:38)
>> This adds a new test binary, containing tests for the Data Port Coherency
>> option. The tests check whether the option value is stored properly on the
>> kernel side, but also whether is is correctly set to proper GPU register.
> I'm fairly sure there already was review feedback that simply checking
> the register state is not a good IGT test.
>
> IGT tests make sure that whatever uAPI the kernel has, the promised effects
> of that uAPI do not get broken. And the promise for cache coherency uAPI
> for surely isn't that some register value gets written, it's that the
> cache coherency is traded with some performance. The chicken bits or the
> whole implementation of the feature might be turned upside down, but as
> long as the userspace is still working, userspace should not care.
>
> So the chicken bit setting should be scrapped, and actual cache
> coherency observed. It might be a worthy kernel selftest that register
> writes stick and remain over sleep states as a generic thing, but not
> here.
>
> If you don't address the feedback given, but hammer the mailing list
> without addressing it, don't expect further feedback.
>
> Regards, Joonas
Thank you for your feedback, both now and in the previous round.
Developing a test which checks whether the hardware is really doing what
is should is possible, but also it is quite problematic.
On the UMD side, there are Khronos OCL 2.1 tests which verify coherency;
but they have graphics pipeline fully configured, and it is a lot easier
to verify it on the user level.
We could write a test which does the following:
- Allocates a very big buffer
- Executes a shader which fills the whole buffer over and over, with
increasing numbers
- Does it long enough for the IGT to notice changes in the buffer while
the shader is being executed
- If there were increasing changes in buffer content - test passes
But there are issues with this approach:
- We need a lot of memory to do the test; the faster the GPU is, the
more we need
- We need to write a shader, in assembly, for each platform
- A new shader will need to be written to test future platforms
- We need to configure the graphics pipeline within IGT test, which is
not trivial
- The test results may be unreliable because even if coherency is
disabled, there is no guarantee that the memory will not be updated
- Actually the buffer probably will be updated while the shader is
executing without coherency, but details may depend on platform,
pipeline settings and buffer size
- The test results may be unreliable due to timing, so it will likely
produce sporadics
- The test would require a separate pre-silicon part
- Test execution time would be considerable
After reading the answers in previous review, I agree that to achieve
the IGTs goal testing hardware should be included. But I don't think
it's a good idea here.
But maybe there is an easier way to test the functionality which I
didn't noticed? Or maybe some of my arguments are invalid?
We do have gem_gpgpu_fill test which does execute a simple shader. The
shader needs to be written for each gen to re-enable the test, but it
works.
-Tomasz
Adding the last mail in previous review, for reference:
Quoting Lis, Tomasz (2018-03-20 18:27:44)
>
>
> On 2018-03-20 16:36, Chris Wilson wrote:
> > Quoting Chris Wilson (2018-03-20 15:30:59)
> >> Quoting Tomasz Lis (2018-03-20 15:12:32)
> >>> From: "Lis, Tomasz" <tomasz.lis at intel.com>
> >>>
> >>> This adds a new test binary, containing tests for the Data Port
> >>> Coherency option. The tests check whether the option is correctly
> >>> set to proper GPU register.
> >> But where's the test that it *does* anything? I.e. what's the
> >> expected change in user visible behaviour? (What does the flag
> >> really mean, now and for years to come?)
>
> With a test that "does anything" (which I understand as - submitting
large workload and checking the coherency while the workload is
executing) we would be testing the hardware, not the kernel.
> I prepared a test binary designed to test the kernel change I
proposed. This is what I consider good practices.
> Do we have another approach when developing IGT?
What we try to avoid is "visible userspace breakage". So when some added
kernel feature introduces a behavioral change for userspace, the
accompanying tests should make sure that change is observed with the
feature bit flipped. That's pretty much the only way we can make sure
the written userspace applications using the feature will keep working
when going forward.
Writing to MMIO address X so that the bits Y and Z stick will only
guarantee that there is some hardware register in there. It is not very
valuable of a test because making sure the feature keeps working will
implicitly test the same thing.
Hopefully this answers the question.
Regards, Joonas
>
> > To be clear; this test illustrates that it is a context register
> > being tweaked and not an execbuf property.
> > -Chris
> I agree the hardware flag is within hardware context. Both the kernel
> patch and the IGT test are accessing that bit, so they both illustrate
> it is a context register.
> But both patches also implement UMD interface to that flag via execbuf
> flag. What do you mean when you write this is "not an execbuf property"?
>
>
More information about the igt-dev
mailing list