From c476c4b570c580f947f18ec8c277d604e91bc6a1 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 27 Sep 2007 12:44:43 -0700 Subject: [PATCH] Add render_bench post --- src/exa/i965/render_bench.mdwn | 90 ++++++++++++++++++ .../i965/render_bench/render_bench-exa.log | 68 +++++++++++++ .../render_bench/render_bench-offscreen.png | Bin 0 -> 12814 bytes .../i965/render_bench/render_bench-xaa.log | 68 +++++++++++++ src/exa/i965/render_bench/render_bench.png | Bin 0 -> 12403 bytes 5 files changed, 226 insertions(+) create mode 100644 src/exa/i965/render_bench.mdwn create mode 100644 src/exa/i965/render_bench/render_bench-exa.log create mode 100644 src/exa/i965/render_bench/render_bench-offscreen.png create mode 100644 src/exa/i965/render_bench/render_bench-xaa.log create mode 100644 src/exa/i965/render_bench/render_bench.png diff --git a/src/exa/i965/render_bench.mdwn b/src/exa/i965/render_bench.mdwn new file mode 100644 index 0000000..00736c9 --- /dev/null +++ b/src/exa/i965/render_bench.mdwn @@ -0,0 +1,90 @@ +[[meta title="Running render_bench against EXA/i965"]] + +[[tag exa performance xorg i965]] + +Earlier this month I attended the X Developers' Summit in Cambridge, +UK (not the Cambridge near Boston, USA). We stayed at Clare College +which, like all of the University of Cambridge colleges that I saw, is +immaculately well-kept and quite beautiful. Just look at the +[gardens](http://www.clare.cam.ac.uk/about/gardens.html) I walked past +every day to get from my room to the conference room in the +library. Kudos to the X.Org foundation for arranging such a beautiful +site, (I think Daniel Stone and Matthew Garrett deserve particular +thanks), and for providing travel expenses so I could attend. + +Adam "ajax" Jackson was kind enough to write up some [notes on my +talk](http://www.x.org/wiki/Events/XDS2007/Notes#head-d045b0de9e63cb633cdac00d4c3e9140cfb2e7eb) +and the other talks as well. I haven't posted slides from the talk, +but it really wasn't much more than a condensed version of exa-related +blog entries I've made, (and which are linked to in Adam's writeup). + +One of the things I asked for in the talk is more benchmarks for 2D +rendering---in particular real-world applications with benchmarking +modes and micro-benchmarks distilled from real-world +applications. Vincent Torri recently reminded me that Carsten +"rasterman" Haitzler wrote +[render_bench](http://www.rasterman.com/files/render_bench.tar.gz) a +long time ago precisely to measure the performance of XRender, (and to compare it to his imlib2 software). + +I hadn't run `render_bench` since I started playing with EXA and the +i965 chip, so it was definitely a worthwhile thing to do. Here are the +results I got (comparing XAA and EXA both against imlib2): + +[[img render_bench-offscreen.png]] + +All of the numbers are from the same 2.13GHz dual-core Intel +machine. But the absolute numbers aren't interesting anyway. The +interesting part is the huge improvement in X Render performance going +from XAA to EXA for the i965 device. It goes from 2-8 times slower +than imlib2 to 1.3-12.9 times faster. Anyone interested in the raw +times can view the [EXA +log](http://cworth.org/exa/i965/render_bench/render_bench-exa.log) and +[XAA +log](http://cworth.org/exa/i965/render_bench/render_bench-exa.log) +files. + +One thing that would be useful is for someone to augment the framework +to also test the same drawing operations through cairo. It would be +good to verify that none of the cairo software layers get in the way +of this performance, (I can imagine cairo doing something like setting +up and tearing down XRender Picture objects rather than reusing them, +but hopefully it will perform just as well). + +And I should point out that this improvement is not due to anything +I've done. This is basically just an upstream xserver tree, (it might +have my glyph-pixmaps change but they are not relevant here). So kudos +to the EXA hackers I mentioned in my talk, (Keith Packard, Zack Rusin, +Eric Anholt, and Michel Dänzer). I definitely need to amend my [what +EXA gets right](http://cworth.org/exa/what_exa_gets_right/) post to +add image-scaling to window-copying and solid-fills. + +This also isn't with any special hacks to the xf86-driver-intel +source, (I'm using upstream commit 286f5df0b from Sep. 6). This +benchmark clearly isn't hitting the same compositing slowness I'm +seeing with [glyph +rendering](http://cworth.org/exa/i965/eliminating_glyph_fallbacks/) +and that might be because it's using larger images than the generally +tiny images that are used for glyphs, (but I'm just guessing---I +haven't looked closely). + +Meanwhile, I am rewriting the driver to eliminate all the syncs and +flushes when compositing to fix the glyph performance. I hope to have +something worth sharing soon. + +Finally, I also compared the results of `evas_xrender_x11_test with +evas_software_x11_test`. This is similar to the original `render_bench`, +but with a more real-world framework in place, (the evas canvas), as +opposed to just a micro benchmark. Here XRender/EXA did not fare as +well, scoring an evas benchmark score of 4.994 compared to the 10.418 +of the software version. (Meanwhile XAA scored 4.840 but with some +noticeably incorrect results---the large scaled image came out just +black). The weaker performance here might very well be because the +evas tests do include text which `render_bench` does not, (but again I'm +just guessing and haven't looked closely). + +Oh, and the evas snapshot I used for this test is +[evas-0.9.9.023](http://enlightenment.freedesktop.org/fetch.php?file=evas-0.9.9.023.tar.gz). I +tried to also test a newer snapshot such as +[evas-0.9.9.041](http://download.enlightenment.org/snapshots/2007-08-26/evas-0.9.9.041.tar.gz), +but it seems to not build the `evas_*_test` programs anymore. Perhaps +they're now available separately? diff --git a/src/exa/i965/render_bench/render_bench-exa.log b/src/exa/i965/render_bench/render_bench-exa.log new file mode 100644 index 0000000..042e39a --- /dev/null +++ b/src/exa/i965/render_bench/render_bench-exa.log @@ -0,0 +1,68 @@ +Available XRENDER filters: +nearest +bilinear +convolution +fast +good +best +Setup... +*** ROUND 1 *** +--------------------------------------------------------------- +Test: Test Xrender doing non-scaled Over blends +Time: 0.193 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing non-scaled Over blends +Time: 0.229 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing non-scaled Over blends +Time: 0.297 sec. +*** ROUND 2 *** +--------------------------------------------------------------- +Test: Test Xrender doing 1/2 scaled Over blends +Time: 0.083 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing 1/2 scaled Over blends +Time: 0.094 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing 1/2 scaled Over blends +Time: 0.104 sec. +*** ROUND 3 *** +--------------------------------------------------------------- +Test: Test Xrender doing 2* smooth scaled Over blends +Time: 0.624 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing 2* smooth scaled Over blends +Time: 0.761 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing 2* smooth scaled Over blends +Time: 4.602 sec. +*** ROUND 4 *** +--------------------------------------------------------------- +Test: Test Xrender doing 2* nearest scaled Over blends +Time: 0.624 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing 2* nearest scaled Over blends +Time: 0.761 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing 2* nearest scaled Over blends +Time: 1.322 sec. +*** ROUND 6 *** +--------------------------------------------------------------- +Test: Test Xrender doing general nearest scaled Over blends +Time: 1.246 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing general nearest scaled Over blends +Time: 1.599 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing general nearest scaled Over blends +Time: 2.280 sec. +*** ROUND 7 *** +--------------------------------------------------------------- +Test: Test Xrender doing general smooth scaled Over blends +Time: 1.246 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing general smooth scaled Over blends +Time: 1.599 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing general smooth scaled Over blends +Time: 16.104 sec. diff --git a/src/exa/i965/render_bench/render_bench-offscreen.png b/src/exa/i965/render_bench/render_bench-offscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9b20052ee37e5d96f8f29992593394735657f5 GIT binary patch literal 12814 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 literal 0 HcmV?d00001 diff --git a/src/exa/i965/render_bench/render_bench-xaa.log b/src/exa/i965/render_bench/render_bench-xaa.log new file mode 100644 index 0000000..a3d7137 --- /dev/null +++ b/src/exa/i965/render_bench/render_bench-xaa.log @@ -0,0 +1,68 @@ +Available XRENDER filters: +nearest +bilinear +convolution +fast +good +best +Setup... +*** ROUND 1 *** +--------------------------------------------------------------- +Test: Test Xrender doing non-scaled Over blends +Time: 2.017 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing non-scaled Over blends +Time: 2.015 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing non-scaled Over blends +Time: 0.297 sec. +*** ROUND 2 *** +--------------------------------------------------------------- +Test: Test Xrender doing 1/2 scaled Over blends +Time: 0.761 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing 1/2 scaled Over blends +Time: 0.760 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing 1/2 scaled Over blends +Time: 0.104 sec. +*** ROUND 3 *** +--------------------------------------------------------------- +Test: Test Xrender doing 2* smooth scaled Over blends +Time: 19.575 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing 2* smooth scaled Over blends +Time: 19.571 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing 2* smooth scaled Over blends +Time: 4.591 sec. +*** ROUND 4 *** +--------------------------------------------------------------- +Test: Test Xrender doing 2* nearest scaled Over blends +Time: 10.873 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing 2* nearest scaled Over blends +Time: 10.878 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing 2* nearest scaled Over blends +Time: 1.322 sec. +*** ROUND 6 *** +--------------------------------------------------------------- +Test: Test Xrender doing general nearest scaled Over blends +Time: 17.499 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing general nearest scaled Over blends +Time: 17.495 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing general nearest scaled Over blends +Time: 2.290 sec. +*** ROUND 7 *** +--------------------------------------------------------------- +Test: Test Xrender doing general smooth scaled Over blends +Time: 36.446 sec. +--------------------------------------------------------------- +Test: Test Xrender (offscreen) doing general smooth scaled Over blends +Time: 36.473 sec. +--------------------------------------------------------------- +Test: Test Imlib2 doing general smooth scaled Over blends +Time: 16.114 sec. diff --git a/src/exa/i965/render_bench/render_bench.png b/src/exa/i965/render_bench/render_bench.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfd25c894d088496031c81153e75fde80ead7bd GIT binary patch literal 12403 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