[comp.benchmarks] X-terminal benchmarks

HANK@BARILVM.BITNET (Hank Nussbacher) (11/11/90)

The client was a Sun Sparcstation 1.  The network was an isolated
Ethernet (via a DELNI) with an HP Lanalyzer checking the network.

40 separate benchmarks were performed on all six X-terminal stations.
The results are presented below.  I did not perform the actual
benchmarks but they have been provided to me by the person who
did them and who I have worked with.  No further benchmarks are planned.

I will let you each draw your own conclusions from these benchmarks,
but one fact is quite obvious: not all X-terminals are equal.

                               X-terminal benchmarks
                                   November 1990
                               ---------------------



             Vaxstat.  Visual     Visual    NCD16     NCD17c   Tektronix
             3100      x19turbo   x19PLUS                       XP27
            +---------+---------+---------+---------+---------+---------+
Server      |DEC-     |Visual   |Visual   |NCD      |NCD      |Tektronix|
 vendor     | WINDOWS |         |         |         |         |         |
Xserver ver.|11.11    |11.3     |11.3     |11.2001  |11.2001  |11.0     |
Revision #  |0        |0        |0        |0        |0        |0        |
Defaultdepth|         |         |         |         |         |         |
 rootwindow |1        |1        |1        |1        |8        |8        |
Server      |         |         |         |         |         |         |
 Byteorder  |LSBfirst |MSBfirst |MSBfirst |MSBfirst |MSBfirst |MSBfirst |
Server      |         |         |         |         |         |         |
 BitmapBit- |         |         |         |         |         |         |
 order      |LSBfirst |MSBfirst |MSBfirst |MSBfirst |MSBfirst |MSBfirst |
Disp. Width |1024     |1280     |1152     |1024     |1024     |1152     |
Disp. Height| 864     |1024     | 900     |1024     | 768     | 900     |

------------+---------+---------+---------+---------+---------+---------+
line 10     | 7761.6  | 4749.8  | 2037    | 2080.2  | 6003.60 | 6367.8  |
line 100    | 4631.4  | 3495    | 1351.20 | 1247.45 | 4545.60 | 6411    |
line 400    | 1813.09 | 1735.09 |  625.50 |  643.64 | 2594.40 | 6261    |

1) Draw a line of length 10".  Results in vectors/sec.
2) Draw a line of length 100". Results in vectors/sec.
3) Draw a line of length 400". Results in vectors/sec.

------------+---------+---------+---------+---------+---------+---------+
dline 10    |  858    | 4159.8  | 1598.73 | 1351.2  | 3795    | 6046.20 |
dline 100   |  330    | 2319.27 |  893.50 |  780    | 2066.18 | 6111    |
dline 400   |   97.64 | 1158    |  363.23 |  330    |  896.73 | 3709.20 |

1) Draw a dashed line of length 10".  Results in vectors/sec.
2) Draw a dashed line of length 100". Results in vectors/sec.
3) Draw a dashed line of length 400". Results in vectors/sec.

------------+---------+---------+---------+---------+---------+---------+
wline 10    |  740.73 |  625    |  321.86 |  139.06 |  375.5  |  877.64 |
wline 100   |  393.50 |  254.62 |  111.60 |   47.06 |  113.05 |  604.36 |
wline 400   |  143    |   87.56 |   35.75 |   16.03 |   35.83 |  304    |

1) Draw a wide line (linewidth=5) of length 10".  Results in vectors/sec.
2) Draw a wide line (linewidth=5) of length 100". Results in vectors/sec.
3) Draw a wide line (linewidth=5) of length 400". Results in vectors/sec.

------------+---------+---------+---------+---------+---------+---------+
rect 10     | 3489.6  | 2230.18 |  993.20 |  836.36 | 2672    | 2117.20 |
rect 100    | 1725.45 | 1725.82 |  637.45 |  544.36 | 2044    | 2117.20 |
rect 400    |  703.64 | 1009.09 |  323.43 |  255.67 | 1168.36 | 2102.80 |

1) Draw a rectangle with 10 pixel sides.  Results in rectangles/sec.
2) Draw a rectangle with 100 pixel sides. Results in rectangles/sec.
3) Draw a rectangle with 400 pixel sides. Results in rectangles/sec.

------------+---------+---------+---------+---------+---------+---------+
fillrect 10 | 2207.09 | 2448.20 |  992.36 |  642.80 | 1456    | 1132.40 |
fillrect 100| 1061    | 1438.40 |  500.91 |  426.73 |  948.8  | 1020.18 |
fillrect 400|  229.67 |  365.67 |  121.25 |  125.69 |  187.17 |  473.09 |

1) Draw a filled rectangle with 10 pixel sides.  Results in rect./sec.
2) Draw a filled rectangle with 100 pixel sides. Results in rect./sec.
3) Draw a filled rectangle with 400 pixel sides. Results in rect./sec.

------------+---------+---------+---------+---------+---------+---------+
tilerect 10 | 1928.91 | 1958.60 |  816.18 |  520.40 | 1048    | 1111.8  |
tilerect 100|  760.55 |  918.18 |  348.67 |  269.09 |  510.18 |  334    |
tilerect 400|  172.77 |  258.92 |   85.89 |   80.29 |  133.54 |   31.66 |

1) Draw a tile-filled rec. with 10 pixel sides.  Results in rect./sec.
2) Draw a tile-filled rec. with 100 pixel sides. Results in rect./sec.
3) Draw a tile-filled rec. with 400 pixel sides. Results in rect./sec.

------------+---------+---------+---------+---------+---------+---------+
stiprect 10 | 2121.60 | 1907.6  |  857    |  463.82 | 1214    | 1101.8  |
stiprect 100|  741.82 |  797.64 |  280.67 |  221.17 |  538    |  632.6  |
stiprect 400|  149.73 |  196.86 |   62.09 |   51.11 |  141.38 |   63.88 |

1) Draw a stipple-filled rec. with 10 pixel sides.  Results in rect./sec.
2) Draw a stipple-filled rec. with 100 pixel sides. Results in rect./sec.
3) Draw a stipple-filled rec. with 400 pixel sides. Results in rect./sec.

------------+---------+---------+---------+---------+---------+---------+
invtrect 10 | 7202.60 | 5590.09 | 2384.64 | 1426.91 | 3526.1  | 5746.27 |
invtrect 100| 1333.10 | 1837.36 |  663    |  664.64 | 1075.09 |  918.73 |
invtrect 400|  118.30 |  255.38 |   93.20 |   95.61 |  119.50 |   64.47 |

1) Draw an inverted rec. with 10 pixel sides.  Results in rect./sec.
2) Draw an inverted rec. with 100 pixel sides. Results in rect./sec.
3) Draw an inverted rec. with 400 pixel sides. Results in rect./sec.

------------+---------+---------+---------+---------+---------+---------+
arcs 10     |  556.55 |   72.30 |  176.62 |  363.27 | 1120.55 |  409.64 |
arcs 100    |  371.09 |   63.80 |  101    |  241    |  841.6  |  262.91 |
arcs 400    |  219.67 |   50.27 |   40.96 |  124.31 |  347.82 |  115.43 |

1) Draw an arc with 10 pixel diameter.  Results in arcs/sec.
2) Draw an arc with 100 pixel diameter. Results in arcs/sec.
3) Draw an arc with 400 pixel diameter. Results in arcs/sec.

------------+---------+---------+---------+---------+---------+---------+
fillarcs 10 |  496    |   68.86 |   36.87 |   34.82 |  103.29 |  246.6  |
fillarcs 100|  102.13 |   51.04 |   26    |   28.42 |   85.14 |  146.91 |
fillarcs 400|   26.23 |   30.19 |   12.87 |   16.52 |   40.32 |   61.44 |

1) Draw a filled arc with 10 pixel diameter.  Results in arcs/sec.
2) Draw a filled arc with 100 pixel diameter. Results in arcs/sec.
3) Draw a filled arc with 400 pixel diameter. Results in arcs/sec.

------------+---------+---------+---------+---------+---------+---------+
fillpoly 100|  137.83 |  122.14 |   46.94 |   35.62 |   35.62 |  233.09 |

1) Draw a filled polygon with 5 points (size=100).  Results in poly/sec.

------------+---------+---------+---------+---------+---------+---------+
screencp 10 |  345.27 |  577.64 |  298.5  |  206.18 |  570    |  763.64 |
screencp 100|  219.50 |  298.50 |  120    |  158.50 |  409.20 |  770.18 |
screencp 400|   47.70 |   73.26 |   18.27 |   68.40 |   83.57 |   64.12 |

1) Copy a screen to screen with 10 pixel sides.  Results in copies/sec.
2) Copy a screen to screen with 100 pixel sides. Results in copies/sec.
3) Copy a screen to screen with 400 pixel sides. Results in copies/sec.

------------+---------+---------+---------+---------+---------+---------+
scroll      |   82.80 |  140.86 |   43.18 |   50.25 |   58.47 |   42.32 |

1) Scroll an area 640x400.  Results in scrolls/sec.

------------+---------+---------+---------+---------+---------+---------+
bitmapcp 10 |  314.75 | 1059    |  517.91 |  337.55 |  755.30 |  928    |
bitmapcp 100|  218.67 |  410.75 |  162.54 |  244.45 |  302.64 |  928.1  |
bitmapcp 400|   60.06 |   89.67 |   20.74 |   64.07 |   41.47 |   77.79 |

1) Copyplane (Bitmap->Screen) with 10 pixel sides.  Results in copies/sec.
2) Copyplane (Bitmap->Screen) with 100 pixel sides.  Results in copies/sec.
3) Copyplane (Bitmap->Screen) with 400 pixel sides.  Results in copies/sec.

------------+---------+---------+---------+---------+---------+---------+
drawimagestr|22213.80 |27880    | 9815.4  | 7749    |  N/A    |20350.91 |

1) Draw an image string (font=fixed, height=13).  Results in chars/sec.
   Note: for NCD17c, font fixed is not available.

------------+---------+---------+---------+---------+---------+---------+
window c/d/d|   34.80 |   35.70 |   16.80 |   12.40 |   28.70 |  38.20  |

1) Window create, draw, destory.  Results in runs/sec.
------------+---------+---------+---------+---------+---------+---------+

rnovak@mips.com (Robert E. Novak) (11/13/90)

Are the sources for the benchmarks available?

Do the benchmarks take any steps to verify that the requested operations
are actually performed by the server?

SPEC has been looking at the various X benchmarks but they have all been
unsuitable since there is no verification of operation.  My
understanding is that with X11R4 it is possible to read back from the
server a bitmap of the drawing that was created on the server.  Once
this capability is in place, SPEC will probably be more aggressive in
exploring graphics performance.

One of th base requirements for all SPEC benchmarks (as you may have
guessed) is that the results of a program can be mechanically verified
against known good results.
---
Robert E. Novak                     Mail Stop 5-10, MIPS Computer Systems, Inc.
{ames,decwrl,pyramid}!mips!rnovak      950 DeGuigne Drive, Sunnyvale, CA  94086
rnovak@mips.COM        (rnovak%mips.COM@ames.arc.nasa.gov)      +1 408 524-7183

graeme@labtam.labtam.oz (Graeme Gill) (11/14/90)

In article <43091@mips.mips.COM>, rnovak@mips.com (Robert E. Novak) writes:
> Are the sources for the benchmarks available?
> 
	From the look of the tests xbench was probably used to produce
these figures. The other widely known test suit is x11perf. xbench as
it was distributed over the network has some problems. One major
one is that it does not disable or accept the no-expose events
generated by its copy area tests. This can cause strange results as
the host starts running out of memory trying to store all the events.
There are also other peculiarities, ie the invert rectangles test
only does one rectangle at a time, hence it is partially a measure
of network latency rather than pure invert area performance. This is
inconsistent with the other tests.
	x11perf is most useful for developmental work on servers,
although it is possible to use its results to draw conclusions about the
relative performance of an X server. I make use of x11perf extensively 
in verifying the results of my server optimisations. This often involves
modifying and/or adding tests to the x11perf suite.

> One of the base requirements for all SPEC benchmarks (as you may have
> guessed) is that the results of a program can be mechanically verified
> against known good results.

	This could be a difficult issue. Although the X specifications
specify exact pixelisation rules for most graphical operations, some
are deliberately relaxed - ie zero width lines - so that machine
dependent hardware can be used. Since zero width lines are widely used
by X applications, one cannot simply leave out these tests. The MIT X11R3
example server (which a number of vendors products are still based on) does
not even meet the pixelisation rules for some operations. Verification
would be almost impossible to do at the same time as speed testing,
since efficient use of the X protocol calls for doing as many graphics
operations as possible per packet, and reading back an image is a
relatively slow operation. If you really wanted to 'cook' the results of 
a server could save all the commands and only render them on receiving
a getimage request. The performance of all operations except getimage
would then seem exceptionally fast. Verification of the graphics
rendering is only part of the problem, as other commands would
also have to be verified - ie window creation, cursor operation,
exposures etc etc.

	It would certainly be very useful to have an X pixelisation
verification suite, but this seems to be a difficult project,
as the closest thing available for the MIT consortium is a partially
completed X protocol verification suite. If such a tool was available
then one could use it to verify the correct functioning of the
device under test, and then run the performance benchmarks,
but whether this is what you are looking for, I don't know.
	The other slight possibility would be to come up with a series
of operations that leave you with a (hopefully) unique pattern that
can then be verified.

	The current benchmarking tools only cover a small fraction
of the spectrum of drawing operations that may differ markedly
in speed on a particular X server. For instance, X allows the
16 boolean logical operations, but generally only fill and invert
are tested by benchmarks. Many servers will special case these
two ops as they are the ones used by applications the vast majority of
the time. The speed of textured fills will vary markedly with the
size of the texture pattern used, since servers may have 2 or 3 different
algorithms depending on whether a line of the pattern will fit in a register
or whether it is even, and therefore doesn't need bit shifting.
	Performance will vary widely depending on the number of
operations that can be grouped together (ie the size of the poly
fill rect request etc.), the frequency of sync commands etc.

	Benchmarking of X terminals is especially difficult since many
of the results will depend on the speed and exact implementation of the
host machines communication interface - ie Ethernet, TCP/IP etc.,
and how that interacts with the server communications.

	X servers can have notoriously uneven performance, so that
two applications that make different demands on the X server may
vary markedly in relative speed when running on different servers.

	In summary, trying to benchmark X servers in a fair way may
make CPU benchmarking look very simple. Considerable investigation
of the issues that may affect performance is needed. If perfect
verification of operation is needed, then benchmarking may not be
possible at all.

	Graeme Gill
	Labtam I.S. Pty. Ltd.
	graeme@labtam.oz.au