Linux Audio Performance Scaling in Games
I completed a round of benchmarks a month or two ago, but never got around to posting it.
The idea behind it was to observe Linux audio performance and how it scales under different API. I decided upon utilizing ioquake3 because of several reasons:
1) It is an older game that is fill-rate limited, thus it will allow greater headroom for analyzing the impact of audio performance (the graphics card is less important).
2) It provides audio output through multiple APIs - SDL and OpenAL.
3) Furthermore, both SDL and OpenAL allow one to manually override (specify) the audio device to be used. This can be achieved in OpenAL's configuration file, and in the case of SDL through an environment variable.
4) Lastly, the quake3 engine is well known for being a reliable (reproducable) benchmark.
AMD 1.67Ghz Athlon XP
768 MB PC2100 Reg ECC (266Mhz DDR-SDRAM)
AMD 761 Northbridge (AGP)
ATI 9800 Pro 128MB AGP 4x
Creative SBLive! PCI
Two drivers were tested along-side each other:
Xorg Mesa DRI and ATI's FGLRX (8.40.4)
These versions were the latest available to the distrobution at the time of testing. I later tested the ATI 8.42 driver, however it proved to be slower (yes slower), and the resolution of 1920x1440 did not function correctly (bugs, there were others).
The distrobution (default included) versions were used of: ALSA, OpenAL and SDL.
1920x1440 was unavailable to the opensource Mesa DRI driver on Kubuntu 7.10
SDL ALSA Native:
OpenAL ALSA Native:
OpenAL ALSA 5.1 Surround:
Overall, the ATI FGLRX wipes the deck with the OSS Mesa DRI, but that is not the issue at hand,
Immediately, we can see in the transition from Sound Disabled to ALSA Native that ATI FGLRX takes a serious performance hit at lower resolutions (~30 fps). Mesa DRI also takes a performance hit (~15 fps), however Mesa DRI is already quite CPU-bound (limited to the power of your main processor) to begin with as it does more calculations on the CPU instead of on the 9800 Pro itself.
Going from SDL ALSA Native to OpenAL ALSA Native shows a slight hit in performance, although not nearly as bad as the previous transition. OpenAL is done in software on Linux, and this is the result of the positional calculations being done in CPU time.
At last, we can see in the OpenAL 5.1 Surround benchmark that the engine becomes entirely CPU-bound. This is unfortunate, for a couple of reasons:
1) The computer these tests were run on is not at all 'slow'. Requiring absurd amounts of CPU just for audio routing and positional processing is daft at best.
2) This was not always the case. Using the emu10k1 OSS drivers developed by Rui Sousa (still available on SourceForge), you can achieve very similar results (albeit 4-channel surround) with hardware surround decoding of both WAV and MP3.
With the myriad of options available to Linux users, there are ways to customize the gaming experience to become a very personal one. Hopefully in the future, performance of multichannel audio routing and positional adjustments using ALSA can be improved.
Please leave any comments or questions. I will try to answer them when I have the time. Thanks and I hope you enjoyed the banchmarks!