I posted the following on my homepage this morning:
I bought a dual Opteron 244 back in November of 2003
because I wanted a really, really fast desktop machine. Around the same
time, I started playing with MythTV,
and it wasn't long after that I got a pcHDTV
HD-2000 card and began watching high-definition programming.
Unfortunately, despite the Opteron's superior I/O bus design and
incredibly speedy processing, it had more trouble decoding HDTV than
did a much cheaper non-HT uniproc Pentium 4.
It has taken quite some time for MythTV to get to the point where it
can reasonably be used with this configuration. Recently, a version of
ffmpeg that appears to be optimized for AMD64 has been imported into the
Myth CVS repository: to get this, make sure to uncheck the "uselibmpeg"
option in Setup/TV Settings/Playback. However, this alone isn't
sufficient.
While I can't pinpoint the exact problem, I changed two major things
in one day that resulted in much improved performance:
- Cross/Downgraded from Debian
gcc-3.4 to Ubuntu Hoary.
This is a non-trivial operation if you are not used to screwing with
Debian packages a lot. I still find old pieces of gcc-3.4/4.0-based
packages now and then, and need to reinstall them from Ubuntu's archive
when I find them. I recommend reinstalling from scratch if you aren't
comfortable with recovering from broken libc packages by hand. :)
- Upgraded my kernel to 2.6.11.6. I actually don't think
this was part of the performance improvement, but it was a variable, so
I didn't want to leave it out. If you have stability problems with
CONFIG_PREEMPT_BKL (preempting the big kernel lock), turn it off; I did.
In sum, my configuration looks like the following:
- Hardware: Dual Opteron 244; Tyan
Thunder K8W S2885 mobo w/AMD-81x1 I/O interfaces; NVidia FX5600 AGP; 4 GB PC2700
(333MHz) dual DDR SDRAM; Creative
SB Live! 5.1 with coax S/PDIF
- Distribution: Ubuntu Hoary
- Linux: 2.6.11.6 (See my
kernel .config)
- ALSA drivers: 1.0.8 (alsa-source 1.0.8-4ubuntu4)
- NVidia drivers: 7167 (nvidia-kernel-source 1.0.7167-0ubuntu25)
- MythTV configuration: CVS as of 2005-Apr-02. Configuration
options: --disable-audio-arts --disable-audio-jack --disable-lirc
--disable-joystick-menu --disable-firewire --disable-ivtv
--disable-xrandr --enable-opengl-vsync --enable-memalign-hack
--cpu=x86_64
- MythTV patches: [broken
pthread_rwlock_*]
- MythTV compilation: gcc-3.3, because the required Ubuntu packages
(e.g., libGLU, libqt-mt) are compiled with gcc-3.3 and link with
libstdc++5. I use make CC="gcc-3.3" CXX="g++-3.3" LINK="g++-3.3"
to build.
- MythTV config: turn off libmpeg decoding; use "ALSA:iec958" for
the sound device; turn on AC3 passthrough; turn on extra audio buffering
Performance improved significantly under this
configuration. The following tests were performed with a playback
window size of 1066x600 (16:9).
- Playback of a specific 1080i clip (CBS football) went from
>99% of one CPU (with dropped frames) under the old config to ~55%
of one CPU for mythfrontend and 15% for X.org with smooth playback.
- Playback of a specific 720p clip (FOX "24") went from >99% of
one CPU (with dropped frames) under the old config to ~40% of one CPU
for mythfrontend and 15% for X.org with smooth playback.
Furthermore, at full size (1280x1024 with the video
letterboxed to 16:9), playback still runs smoothly, though 1080i
playback consumes close to 100% of one CPU for mythfrontend. Not clear
why the playback window size should matter with XVideo, but it does.
If you have success with this configuration, I'd love to hear about
it. If you have problems and are able to determine what I've left out,
let me know so I can add the appropriate config elements.
Cheers,
Kyle