Tuning ØMQ

This page provides information on tuning ØMQ to make it run better and faster on your operating system. It's a work in progress - if you have tips, join this site and edit this page!

Linux

  • The Ubuntu default file limit per process is 1024 (ulimit -n to show). Raise it by editing /etc/security/limits.conf and add "* - nofile 10000", or some other high value. Logout and login to affect the change.
  • Installing on a naive Ubuntu server (v 11.10 in this case), running ./configure raises an error that it can not find install-sh,install.sh,… . These commands enabled ./configure and make to complete successfully:
$ libtoolize --force
$ aclocal
$ autoheader
$ automake --force-missing --add-missing
$ autoconf
$ ./configure
  • Note: This error has been fixed in Ubuntu 12.04.4 LTS.

OS X

  • Mac OSX uses DYLD_LIBRARY_PATH instead of unix LD_LIBRARY_PATH. You may also want to take a good look at https://github.com/zeromq/jzmq/issues/29.
  • The default file limit per process is 256. Raise it by running ulimit -n 1200 for bash, or in tcsh run limit descriptors 1200
  • Update for OS X El Captain (10.11): you need install the following packages if you don't have these installed:
    • brew install automake
    • brew install autoconfig
    • brew install pkgConfig
    • brew install libtool
  • Once you are done with installation of these packages, follow the usual steps to install zeroMQ

FreeBSD

No tips yet Be the first to add one.

Windows

  • Default FD_SETSIZE is 1024 in project. This will limit large-scale simulations. Increase this in the project. Recommended value would be 4096. E.g.
-DFD_SETSIZE=4096

AIX

Building on AIX requires the standard complications: being able to ./configure and make. This alone will present a challenge given that it's AIX in the first place.

Build Notes: Requirements include: automake, make, autoconf, m4, tar, libtool, gcc, g++, and possibly IBM's compiler XLC. Your mileage may vary. If you have a build script, please blog about it or make a note here, as this is important info for the rest of us.

Corey Stup's notes on building shared libraries on AIX with native compiler:
When using the native compiler (in my case, its xlC 8.0 but later versions will have the same problem), the build tools are using the wrong flags to xlC to indicate to create a shared library.
‘configure` is generating libtool to use the "-bM:SRE" flag to indicate "create a shared object" as part of .libs/libzmq.so.3 target. This should be changed to the -qmkshrobj flag.
Without -qmkshrobj, the C++ compiler does not detect the static members of classes correctly, and thus does not run any constructors needed before main() begins. In the case of zmq, this includes:
zmq::atomic_counter_t zmq::ctx_t::max_socket_id in ctx.cpp. The atomic_counter_t isn’t created, nor is the mutex inside initialized. The first time any part of zmq tries to lock this mutex it fails miserably due to not being initialized (failure is in mutex.hpp)

With GCC, both shared and static build and test fine.

OSL running on MCST-R CPU (Rus: ОС «Эльбрус»)

Autodetection of poller on OSL doesn't work. You need to specify it during configure phase:

./configure --with-poller=poll

No tips yet Be the first to add one.

Add your OS here

No tips yet Be the first to add one.