BIND 10 #853: boost::mpi (or MPI in general?) as a possible replacement of MSGQ
BIND 10 Development
do-not-reply at isc.org
Tue Jul 19 13:37:55 UTC 2011
#853: boost::mpi (or MPI in general?) as a possible replacement of MSGQ
-------------------------------------+-------------------------------------
Reporter: shane | Owner: shane
Type: task | Status: accepted
Priority: | Milestone:
critical | Sprint-20110802
Component: msgq | Resolution:
Keywords: | Sensitive: 0
Defect Severity: N/A | Sub-Project: Core
Feature Depending on Ticket: | Estimated Difficulty: 0.0
Add Hours to Ticket: 0 | Total Hours: 0
Internal?: 0 |
-------------------------------------+-------------------------------------
Comment (by shane):
MPI is a quite mature technology, from the 1990 originally. It is in heavy
use by academia and governments. There are many implementations, and
standards work continues to this day (although in a MPI-specific standards
body).
Wikipedia has a longish article about it:
http://en.wikipedia.org/wiki/Message_Passing_Interface
To run it, we would need a daemon or set of daemons. There are many
implementations so we would need to choose one.
We would also need to choose a library to use in our applications. It
might make sense to use the boost::mpi version, since we are already using
Boost. However, we could not use the header-only mode for C++, so this is
not a "slam dunk" option. Also, Boost has certain preferred daemon
implementations:
* [http://www.open-mpi.org/ Open MPI 1.0.x]
* [http://www.lam-mpi.org/ LAM/MPI 7.x]
* [http://www-unix.mcs.anl.gov/mpi/mpich/ MPICH 1.2.x]
Taken from:
http://www.boost.org/doc/libs/1_37_0/doc/html/mpi/getting_started.html#mpi.mpi_impl
I'll go through the points we came up with, then have discussion at the
end.
* Nice: Cross-machine
MPI is explicitly designed to work across a network. It is also
designed to be high-performance, so often uses shared memory for local
communication, and specialized network protocols for working with remote
machines.
* We have to be able to secure if it uses other computers.
This seems trickier. Some implementations can use SSH as the
underlying mechanism, although MPI is designed more around running jobs.
Think "batch processing".
* Compatible license (not GPL)
BSD licensed versions of C++ and Python libraries exist. We may be
able to use the boost::mpi for both C++ and Python, however we will not be
able to use C++ in header-only mode. BSD licensed versions of the "actual"
MPI install also exist.
* Nice: send file descriptors
This does ''not'' appear to be supported.
* Nice: minimize dependencies
Depending on which implementation we choose, this can be true. If we
use boost::mpi then we have only added another use of Boost for the
libraries. We'll need the MPI install too.
* Nice: Client-side in Python and C++
Yes.
* Nice: Not have to declare types before sending
Types can be built at runtime (according to the Wikipedia article).
I'm not sure how easy this is in practice, especially in C++, but it is
possible.
* Nice: high-performance
Used in supercomputers around the world.
* Point-to-point and group communication (including no listeners)
Both are nicely supported.
* Separate instances (to run multiple BIND 10 in parallel)
Yes.
* Multiple OS support
Yes.
* Nice: unit-tests for the code itself
Not sure... the boost::mpi presumably has the same testing as the rest
of Boost. Some other libraries definitely do. The non-library part of MPI
will have varying levels of testing, depending on the implementation.
There are many!!!
* Nice: mock test support
I did not see any.
I am pretty sure that MPI could replace msgq for us. We'd get increased
performance and fewer bugs. However, MPI is not really a match
''conceptually'' for what we want to do. It is designed for batch
processing, especially in the context of large computing efforts. We would
need to spend an amount of time getting and testing our implementations
together, and providing a way to install & configure these so the user
does not have to learn the details.
So... I think MPI is a possibility, but probably not a strong one.
--
Ticket URL: <http://bind10.isc.org/ticket/853#comment:5>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list