Thread (102 messages) 102 messages, 3 authors, 2021-08-06

Re: [igt-dev] [PATCH i-g-t v3 02/52] lib/intel_allocator: Add few helper functions for common use

From: Dixit, Ashutosh <hidden>
Date: 2021-08-06 01:32:53

On Thu, 05 Aug 2021 11:53:54 -0700, Dixit, Ashutosh wrote:
On Tue, 03 Aug 2021 23:13:41 -0700, Zbigniew Kempczyński wrote:
quoted
Even if Simple is stateful we got some case in which its usage
is currently limited (so you can see using reloc in most of the
tests). Problem is with...  it is stateful. Most of tests creates batch
(gem object), use it and destroy it. From allocator perspective we alloc
offset, then we free it. In next round we got same offset for another batch
(gem object). So kernel serialize the execution until previous vma is freed.
This lead to non-pipelined execution.
Maybe I am wrong but to me it looks fixable. Maybe we need to keep track of
the "last allocated offset" in simple so that next time we allocate a new
offset even if the previous one has been freed (rather than reallocating
the previous offset). Or we can allocate starting from a random offset?
quoted
You can see pattern in many tests - ahnd = get_reloc_ahnd(...),
get offset for scratch surface, then pass scratch_offset to some execution
function. This allows to keep us same offset for scratch and get new
offsets for batches.
So I think I see this in e.g. the gem_exec_async patch. Allocating new
offsets for batches helps to avoid the stalls mentioned above, correct?
quoted
The best would be to have something hybrid which would propose new (and
not busy) bb, but that should happen in multiprocess env so I haven't
found how to write this yet. Libdrm handles pools of objects and reuses
them if they were not busy. But doing this in multiprocess requires
synchronization so some additional mechanism should be added to
allocator to handle this case.
What I proposed above using "last allocated offset" will not work in the
multiprocess env?
quoted
I still wonder to introduce .dependency_offset in creating spinner when
.dependency handle is passed. Currently we have to use Simple to ensure
we got same offset for .dependency. As spinners keep batch handles until
they are freed this likely is not a problem. But it may be in the
future.
OK.
I am not following the above two paragraphs, maybe we can discuss more some
time.
I do follow what you are saying now somewhat. Thank you.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help