TSSX stands for transparent shared-memory socket exchange and is a system-level C library that silently replaces domain socket communication with a custom shared memory data channel, promising performance improvements up to an order of magnitude.
One of the core goals of TSSX is to be incredibly easy and hassle-free to integrate into your system. We use the
LD_PRELOAD trick to transparently overwrite system-call symbols with our own, using the dynamic linker. As such, if
./happy-banana-client are your executables using
recv or similar system-calls to communicate over domains sockets, then the following lines will execute your application with TSSX:
$ LD_PRELOAD=$PWD/path/to/libtssx-server.so ./happy-banana-server $ LD_PRELOAD=$PWD/path/to/libtssx-client.so ./happy-banana-client
libtssx-client.so are the result of compiling our library. And that is it! You don't have to recompile a single line, the dynamic linker does all the magic for you. We support the complete standard Berkeley Socket API, with light implementations of
fcntl to the extent that is relevant to domain sockets.
The project can be built using CMake on Linux and OS X:
mkdir build cd build cmake .. make
Which will compile the TSSX library into the
build/source/tssx path. We also provide example programs in the
try/ folder, compiled into
build/try, with appropriate run scripts (for convenience) in the
scripts/ directory (run them from
We are working on a publication and will update this section accordingly in the near future.