[chimera-dev] fenster
Thomas Goddard
goddard@cgl.ucsf.EDU
Thu, 5 Dec 2002 14:07:48 -0800 (PST)
Comparison of Fenster X server versus XFree86 compiled CVS code
running Chimera on Mac OS 10.2.2. Chimera does 3D molecular graphics
using OpenGL and X windows, and is developed by our group, the UCSF
Computer Graphics Lab.
The main conclusions are:
1) The fenster X server (Dec 5 download) is about 2.25 faster at
texture data transfer and rendering from Chimera to a Radeon 9000
graphics card than XFree86 (Oct 21, 2002) compiled from CVS source
code with hardware OpenGL support.
2) Chimera and in some cases Mac OS crashes when using a GeForce 4
Ti 4600 with both the fenster X server and the XFree86 CVS compiled
server.
Details follow.
Benchmark Details
-----------------
Benchmark scores with fenster and Radeon 9000 (64 Mb)
on PowerMac, Dual G4 1GHz, Mac OS 10.2.2.
% glxinfo
OpenGL renderer string: ATI Radeon 9000 Pro OpenGL Engine
OpenGL version string: 1.3 ATI-1.2.6.3
Surface Mesh Contour Solid Recolor (Fenster)
119 118 70 240 75
XFree86 compiled from Oct 21, 2002 CVS source code which has
OpenGL hardware support gives the following scores. These were obtained
earlier on the same machine with Mac OS 10.2.1.
Surface Mesh Contour Solid Recolor (XFree86 CVS)
118 118 71 239 57
Scores for Fenster with an older GeForce 2 MX (32 Mb)
on PowerMac, Single G4 733 Mhz, Mac OS 10.2.2
% glxinfo
OpenGL renderer string: NVIDIA GeForce2MX OpenGL Engine
OpenGL version string: 1.1 NVIDIA-1.2.1
Surface Mesh Contour Solid Recolor (Fenster)
71 76 60 48 42
And with the Oct 21, 2002 XFree86, and Mac OS 10.2.1:
Using XFree86:
Surface Mesh Contour Solid Recolor (XFree86 CVS)
70 76 60 48 40
With XDarwin 4.2.0.1 which uses Mesa (software OpenGL) and has
no hardware acceleration the scores are much lower. These are for
the Dual G4 machine above.
Surface Mesh Contour Solid Recolor (XDarwin)
45 45 70 1 2
Scores measure size N of NxNxN volume data set that can be
rendered at 10 frames per second. Higher scores are better.
Surface, Mesh, and Solid (texture based) rendering all use
OpenGL display lists, so they are measuring graphics card
performance, not the overhead in sending the data to the card.
The Contour score measures computer CPU speed and does no graphics.
The Recolor score measures data throughput getting texture data
from Chimera to the graphics card.
As expected from what these scores measure, only the Recolor
benchmark gives a better score with Fenster. The transfer speed is
faster with Fenster versus my compiled XFree86 by a factor of 2.28
(= 75^3 / 57^3) on the Radeon and about 1.15 times faster on the
GeForce 2 MX. Both hardware accelerated X servers with the Radeon 9000
are about 18 times faster than XDarwin (Mesa, no hardware acceleration)
at surface and mesh rendering and over 10000 times faster at texture
rendering.
Crash Details for GeForce 4 card
--------------------------------
Chimera with a GeForce 4 Ti 4600 in the Dual G4 PowerMac crashes when
running the surface benchmark. The crash dump is shown below with the
crash occuring in gldFreeVertexBuffer() 4 levels below Chimera code.
This Chimera code has been tested on dozens of other platforms (Linux,
Windows, and Mac with many graphics cards) and works correctly.
Another test case crashes Mac OS 10.2.2. The screen is grayed and a
message box says the computer must be restarted by holding down the
power button. This appears to be driver bug for the GeForce 4 Ti
4600. The system crash is produced with Fenster or the Oct 21, 2002
compiled XFree86 and Chimera beta version 1, build 1602, available for
free from http://www.cgl.ucsf.edu/chimera. To produce the system
crash start Chimera, start Extensions/Utilities/Benchmark, set the
standard model size entry field to 200, and pressing the Show standard
model Surface button. I don't know how to produce a crash dump for
system crashes.
Chimera crash dump (not the system crash) when running surface benchmark
with GeForce 4 Ti 4600 follows:
Date/Time: 2002-12-05 10:33:42 -0800
OS Version: 10.2.2 (Build 6F21)
Host: mach.local.
Command: python2.2
PID: 431
Exception: EXC_BAD_ACCESS (0x0001)
Codes: KERN_PROTECTION_FAILURE (0x0002) at 0x02195000
Thread 0 Crashed:
#0 0x015c64bc in gldFreeVertexBuffer
#1 0x014a3820 in 0x14a3820
#2 0x01483fd8 in 0x1483fd8
#3 0x014a70ec in 0x14a70ec
#4 0x0219ad74 in SGroup::draw_opaque_elements()
#5 0x021996e4 in Surface_Renderer::draw_opaque_groups(Surface_Renderer::Group::Display_Style)
#6 0x02198dc4 in Surface_Display::Surface_LensModel::draw(chimera::LensViewer const*, chimera::LensViewer::DrawPass) const
#7 0x00813f40 in chimera::Lens::draw(chimera::LensViewer const*, chimera::LensViewer::DrawPass, int const*)
#8 0x009ddea4 in (anonymous namespace)::doDrawPass(chimera::LensViewer const*, chimera::LensViewer::DrawPass, __gnu_cxx::__normal_iterator<chimera::ScreenBox*, std::vector<chimera::ScreenBox, std::allocator<chimera::ScreenBox> > >, __gnu_cxx::__normal_iterator<chimera::ScreenBox*, std::vector<chimera::ScreenBox, std::allocator<chimera::ScreenBox> > >)
#9 0x00820c30 in chimera::LensViewer::drawScreenBoxes(otf::Array<int, (int)4> const&, __gnu_cxx::__normal_iterator<chimera::ScreenBox*, std::vector<chimera::ScreenBox, std::allocator<chimera::ScreenBox> > >, __gnu_cxx::__normal_iterator<chimera::ScreenBox*, std::vector<chimera::ScreenBox, std::allocator<chimera::ScreenBox> > >) const
#10 0x00821440 in chimera::LensViewer::draw(bool) const
#11 0x00821cec in chimera::LensViewer::displayCB()
#12 0x0087713c in LensViewer_displayCB
#13 0x000580b8 in PyObject_Call (abstract.c:1685)
#14 0x0006c9bc in instancemethod_call (classobject.c:2277)
#15 0x000580b8 in PyObject_Call (abstract.c:1685)
#16 0x00073468 in PyEval_CallObjectWithKeywords (ceval.c:3050)
#17 0x00092438 in builtin_apply (bltinmodule.c:95)
#18 0x000711b4 in eval_frame (ceval.c:2005)
#19 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#20 0x0008871c in function_call (funcobject.c:374)
#21 0x000580b8 in PyObject_Call (abstract.c:1685)
#22 0x0006c9bc in instancemethod_call (classobject.c:2277)
#23 0x000580b8 in PyObject_Call (abstract.c:1685)
#24 0x00073468 in PyEval_CallObjectWithKeywords (ceval.c:3050)
#25 0x00531780 in PythonCmd (_tkinter.c:1291)
#26 0x0a00d998 in TclInvokeStringCommand
#27 0x0a00ea4c in TclEvalObjvInternal
#28 0x0a00f2e4 in Tcl_EvalEx
#29 0x0a00f5c4 in Tcl_Eval
#30 0x00825c24 in graphics_display
#31 0x003d3aec in Togl_Render (togl.c:1023)
#32 0x0a064194 in TclServiceIdle
#33 0x0a054914 in Tcl_DoOneEvent
#34 0x0b00b3a4 in Tk_UpdateObjCmd
#35 0x0a00ea4c in TclEvalObjvInternal
#36 0x0a00ec1c in Tcl_EvalObjv
#37 0x0052f290 in Tkapp_Call (_tkinter.c:619)
#38 0x00073530 in fast_cfunction (ceval.c:3118)
#39 0x000711f0 in eval_frame (ceval.c:2007)
#40 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#41 0x000736dc in fast_function (ceval.c:3161)
#42 0x000712a4 in eval_frame (ceval.c:2024)
#43 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#44 0x000736dc in fast_function (ceval.c:3161)
#45 0x000712a4 in eval_frame (ceval.c:2024)
#46 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#47 0x000736dc in fast_function (ceval.c:3161)
#48 0x000712a4 in eval_frame (ceval.c:2024)
#49 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#50 0x000736dc in fast_function (ceval.c:3161)
#51 0x000712a4 in eval_frame (ceval.c:2024)
#52 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#53 0x000736dc in fast_function (ceval.c:3161)
#54 0x000712a4 in eval_frame (ceval.c:2024)
#55 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#56 0x0008871c in function_call (funcobject.c:374)
#57 0x000580b8 in PyObject_Call (abstract.c:1685)
#58 0x0006c9bc in instancemethod_call (classobject.c:2277)
#59 0x000580b8 in PyObject_Call (abstract.c:1685)
#60 0x00073468 in PyEval_CallObjectWithKeywords (ceval.c:3050)
#61 0x00092438 in builtin_apply (bltinmodule.c:95)
#62 0x000711b4 in eval_frame (ceval.c:2005)
#63 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#64 0x0008871c in function_call (funcobject.c:374)
#65 0x000580b8 in PyObject_Call (abstract.c:1685)
#66 0x0006c9bc in instancemethod_call (classobject.c:2277)
#67 0x000580b8 in PyObject_Call (abstract.c:1685)
#68 0x00073468 in PyEval_CallObjectWithKeywords (ceval.c:3050)
#69 0x00531780 in PythonCmd (_tkinter.c:1291)
#70 0x0a00d998 in TclInvokeStringCommand
#71 0x0a00ea4c in TclEvalObjvInternal
#72 0x0a0312fc in TclExecuteByteCode
#73 0x0a03084c in TclCompEvalObj
#74 0x0a00f6f0 in Tcl_EvalObjEx
#75 0x0b046528 in ButtonWidgetObjCmd
#76 0x0a00ea4c in TclEvalObjvInternal
#77 0x0a00ec1c in Tcl_EvalObjv
#78 0x0a00f6b0 in Tcl_EvalObjEx
#79 0x0a05e110 in Tcl_UplevelObjCmd
#80 0x0a00ea4c in TclEvalObjvInternal
#81 0x0a0312fc in TclExecuteByteCode
#82 0x0a03084c in TclCompEvalObj
#83 0x0a05e698 in TclObjInterpProc
#84 0x0a00ea4c in TclEvalObjvInternal
#85 0x0a00f2e4 in Tcl_EvalEx
#86 0x0a00f5c4 in Tcl_Eval
#87 0x0a010b54 in Tcl_GlobalEval
#88 0x0b004380 in Tk_BindEvent
#89 0x0b009f04 in TkBindEventProc
#90 0x0b011e00 in Tk_HandleEvent
#91 0x0b0123c4 in WindowEventProc
#92 0x0a05454c in Tcl_ServiceEvent
#93 0x0a054830 in Tcl_DoOneEvent
#94 0x00530950 in Tkapp_MainLoop (_tkinter.c:1697)
#95 0x000711b4 in eval_frame (ceval.c:2005)
#96 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#97 0x000736dc in fast_function (ceval.c:3161)
#98 0x000712a4 in eval_frame (ceval.c:2024)
#99 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#100 0x000736dc in fast_function (ceval.c:3161)
#101 0x000712a4 in eval_frame (ceval.c:2024)
#102 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#103 0x000736dc in fast_function (ceval.c:3161)
#104 0x000712a4 in eval_frame (ceval.c:2024)
#105 0x000725fc in PyEval_EvalCodeEx (ceval.c:2585)
#106 0x000750d8 in PyEval_EvalCode (ceval.c:483)
#107 0x0002968c in run_node (pythonrun.c:1080)
#108 0x00028e38 in PyRun_SimpleFileExFlags (pythonrun.c:688)
#109 0x000059d4 in Py_Main (main.c:364)
#110 0x000018e4 in _start (crt.c:267)
#111 0x00001764 in start
PPC Thread State:
srr0: 0x015c64bc srr1: 0x0200f030 vrsave: 0x00000000
xer: 0x20000000 lr: 0x015c5ff4 ctr: 0x00000099 mq: 0x00000000
r0: 0x000083a7 r1: 0xbfffbb50 r2: 0x015c5b88 r3: 0x02195000
r4: 0x01ed1488 r5: 0x4004d808 r6: 0x0004d810 r7: 0x0000ffff
r8: 0x00008350 r9: 0x00000058 r10: 0x000000f0 r11: 0x000087e0
r12: 0x015c5db8 r13: 0x00000000 r14: 0x00000000 r15: 0x00000000
r16: 0x00000000 r17: 0x007f9020 r18: 0x00000010 r19: 0x00000005
r20: 0x000014ff r21: 0x00000000 r22: 0x00000004 r23: 0x01166020
r24: 0x00000000 r25: 0x00000000 r26: 0x00000000 r27: 0x00010b30
r28: 0x0055f000 r29: 0x000122f4 r30: 0x01156020 r31: 0x015c5dd0
Tom Goddard
UC San Francisco
Computer Graphics Lab
goddard@cgl.ucsf.edu