More valgrinding and fixing a serious mem leak - Alex
[terminatorX.git] / README.PERFORMANCE
1 There are several things you can do to improve terminatorX performance:
2
3 1. Don't use fancy gtk+ themes
4 2. Install suid root
5 3. Compile an optimized binary
6 4. Optimize your terminatorX setup
7 5. Optimize your kernel
8
9 In Detail:
10
11 1. Don't use pixmapped nor other "fat" gtk+-themes.
12 ---------------------------------------------------
13
14 The sequencer brings a lot of additional GUI activity. Now the "selfmade"
15 widgets perform pretty good (no matter what theme you use) but for example
16 scale widgets are extremly slow with pixmap-themes. The problem is that the
17 gtk-pixmap engine has to stretch the images and stretching images is a very
18 CPU-intensive task. So it's best to not use those themes at all.
19
20 Now just recently I installed terminatorX on PIII 500 and wondered why it
21 performed like running on a 486 machine. Now I found that those new fancy
22 gtk+-themes that bring their own code to draw the widgets eat performance
23 like mad, too. This even hurts the performance of tX' very own widgets and
24 therefore hurts playback performance quite a lot. So you shouldn't use these 
25 kind of themes, neither.
26
27 2. Install suid root
28 --------------------
29
30 When run with root privileges terminatorX creates the engine thread
31 with realtime scheduling priorities which should result in much better
32 playback performance. Since Version 3.73 terminatorX supports running
33 suid root. If you install the terminatorX binary suid root with the
34 following commands: (with the default install you should find the
35 terminatorX binary in /usr/local/bin)
36                 
37  > chown root terminatorX
38  > chmod u+s terminatorX
39                 
40 terminatorX will be started with root privileges even when an
41 "unprivileged" user runs the binary. terminatorX will then create the
42 engine thread with realtime priority before any files are written, any
43 parameters are evaluated or connections to the X11 display are
44 established. Right after that terminatorX will drop root privileges,
45 so the actual terminatorX code runs unprivileged.
46                 
47 The problem is, with Linux' pthreads implementation the pthread
48 manager thread (that can not be influenced by terminatorX) will still
49 run with root privileges.
50                
51 So there is a small chance that a malicious attacker could utilize
52 terminatorX to acquire root privileges if installed suid root,
53 although it should require quite some effort to create an exploit for
54 that. On the other hand realtime scheduling massively improves the
55 playback performance. So depending on who can access your computer you
56 will have to decide for yourself on performance vs security.
57 Alternatively you can of course run terminatorX as root to achieve
58 realtime scheduling.
59
60 3. Compile an optimized binary
61 ------------------------------
62
63 This issue is covered in the INSTALL file mostly. Setting good optimization
64 flags is a good idea although this step will proabably have the least effect.
65
66 4. Optimize your terminatorX setup
67 ----------------------------------
68
69 The default settings for the GUI updates provide good realtime feedback. This
70 may cause problems on slower machines or evil gtk+-themes. If the GUI-thread
71 causes dropouts in the audio-engine you should increase the Update-Delay value 
72 in the options dialog.
73
74 5. Optimize your kernel
75 -----------------------
76
77 The current 2.2.X-kernels show a pretty high latency. This is problematic for
78 near-realtime apps and therefore most linux-audio-apps. Ingo Molnar is
79 maintaining a patch against the 2.2.x kernels that reduces latency. They are
80 called "low-latency-patches" and are available from:
81 http://people.redhat.com/mingo/lowlatency-patches/
82
83 Now although latency has improved with the 2.4 releases there is still some
84 tuning possible with those kernels. There exist patches for those kernels as
85 well and they may go into the main kernel tree as soon as they're finished.