[PATCH] dix/dispatch: DoGetImage: Use a single buffer

Adam Jackson ajax at redhat.com
Mon Mar 31 07:58:18 PDT 2014


On Sat, 2014-03-29 at 17:53 +0800, Daniel Kurtz wrote:

> Since we are now allocating from the heap, there should no longer be
> necessary, or desirable to chop up the DoGetImage() buffer.

Maybe not necessary, but probably still desirable.

In the PutImage direction we have a similar phenomenon: libX11 doesn't
generate bigreqs for PutImage, so things get chunked up at around the
256k smallreq size.  You can make it use bigreqs [1], but if you do,
large puts are actually slower, at least as measured by x11perf
-putimage500.  I didn't investigate far enough to get a graph of
throughput versus write size, but I would expect to see knees in the
curve corresponding to a) unix socket buffer size b) dcache sizes and
associativity.  I would also expect to see different curves for dumb
framebuffers compared to drivers that can finish the request with DMA,
since they'd exert different pressure on the dcache.  So there probably
is an optimal size for performance, and it probably does vary across
systems, and the optimal size is probably not ever the whole image in
one shot.

Even if it were, I'd be uncomfortable with trying only one allocation
and BadAlloc'ing if it fails, purely from a QOI perspective that's
pretty lame.

[1] - http://ajax.fedorapeople.org/libX11-bigreqify-putimage.patch

- ajax



More information about the xorg-devel mailing list