[Mesa-dev] [PATCH 3/4] winsys/radeon: Keep bo statistics
Lauri Kasanen
cand at gmx.com
Tue Jan 7 02:14:45 PST 2014
On Tue, 7 Jan 2014 01:44:28 +0100
Marek Olšák <maraeo at gmail.com> wrote:
> On Mon, Jan 6, 2014 at 12:17 PM, Lauri Kasanen <cand at gmx.com> wrote:
> > These will be used later on for optimizing the VRAM placement.
> >
> > No measurable overhead (glxgears).
>
> I recommend testing torcs (the Forza track) next time. glxgears is not
> useful here.
Can you elaborate why Torcs? I used glxgears, because it indeed was
useful (if you check the previous patches, before the timing was moved
into a thread, there was a 7% glxgears regression).
> > +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
> > @@ -361,6 +361,14 @@ static unsigned radeon_drm_cs_add_reloc(struct radeon_winsys_cs *rcs,
> > + if (usage & RADEON_USAGE_WRITE) {
> > + bo->stats.num_writes++;
> > + bo->stats.last_write_time = stats_time_get(ws);
> > + } else {
> > + bo->stats.num_reads++;
> > + bo->stats.last_read_time = stats_time_get(ws);
> > + }
>
> You do know that this is mostly useless, don't you? You sure won't
> know which resources are used for reading only, because
> glBufferSubData or glTexSubImage may generate a write, and an app
> which uploads data every frame or every couple of draw calls can cause
> the resource to appear as being used for writing all the time, while
> in reality it's only used for reading during rendering.
That's ok, as they are both implemented as a blit - a write. Doing that
write on the gpu hw, but in system RAM, is not ideal.
I don't see how it would skew the results badly, since if the app
bothers to update a texture every frame, that texture is surely
important to the app.
As the cost also takes into account the buffer size, having a small but
often-written texture (such as a HUD that is read once per frame) would
not displace a large read-only texture.
> You also won't
> know how many draw calls the resource is used in, because the function
> is called only once per state change and there can be many draw calls
> per state change. ... which may be called many
> times for the same buffer.
That sounds contradictory ;)
I see that r600_context_bo_reloc is called on every call of
r600_draw_vbo, r600_emit_shader. Though for vertex, constant buffers
and sampler views there's indeed dirty_mask checks. For those,
additional stats calls will need to be added in the places that update
that dirty_mask for correct results.
Thanks!
- Lauri
More information about the mesa-dev
mailing list