Speed Up Ejabberd

January 18, 2009

Whenever an XMPP server or client writes stanzas to the wire, it must serialize its internal XML representation to real XML. This serialization process is the biggest consumer of clock cycles in XMPP code. Ejabberd is no exception, but you can make serialization almost ten times faster with this little trick.

Erlang comes with a native code compiler called HiPE (High Performance Erlang). One of the great things about Erlang is that you can mix native modules and byte-compiled modules freely. We’re going to native compile the ejabberd XML routines to achieve the speed boost.

First, you’ll need some ejabberd source code. The file we want to compile is ejabberd/src/xml.erl . If you installed ejabberd from a package, don’t worry. You don’t even need to run configure.

Next, go to the directory with xml.erl and run the compiler:

cd ejabberd/src erlc +native xml.erl

Finally, move the xml.beam file into your ebin directory. On Ubuntu, this is normally /usr/lib/ejabberd/ebin , but it might also be under /usr/local/ejabberd/ebin . Just replace the xml.beam that is already there.

That’s it! Now you’re XML routines will execute much faster! It would be great if the ejabberd team made this the default for CPU hungry modules.