Developed by the operating systems group of the department of computer science of the Heinrich Heine University Düsseldorf, Infinileap aims at providing a simple object-oriented interface between Java and the native ucx
library by leveraging Project Panama's Foreign Function Interface and Foreign-Memory Access API.
Infinileap is a research project under development. We do not recommend using the system in a production environment. Expect to encounter bugs. However, we are looking forward to bug reports and code contributions.
The project includes several sample applications that can be run from the command line.
In order to run them, a distribution of the example
module must first be created using Gradle.
By default, Gradle installs the distribution inside the module's build
folder. This behavior can be customized
with the installPath
property
# Install the distribution inside ${HOME}/infinileap
./gradlew example:installDist -PinstallPath="${HOME}/infinileap"
# Switch into ${HOME}/infinileap
cd "${HOME}/infinileap"
After Gradle has completed the build, the examples can be run from within the specified location.
All demos require a server as well as a client and should therefore be executed in two separate console windows. The addresses to be used for establishing the connection can be specified via the following program arguments.
Name | Type | Side | Description | Example |
---|---|---|---|---|
-c / --connect |
java.net.InetSocketAddress |
CLIENT |
The server's address and port | 127.0.0.1:2998 |
-l / --listen |
java.net.InetSocketAddress |
SERVER |
The address the server should listen on | 127.0.0.1:2998 |
It is also possible to omit the port. In this case the default value 2998
is used.
Messaging Demo (Source)
This demo exchanges a message between the server and the client, which is then output to the console.
-
Server Side
./bin/infinileap messaging --listen 127.0.0.1
-
Client Side
./bin/infinileap messaging --connect 127.0.0.1
Streaming Demo (Source)
This demo exchanges a stream of data between the server and the client, which is then output to the console.
-
Server Side
./bin/infinileap streaming --listen 127.0.0.1
-
Client Side
./bin/infinileap streaming --connect 127.0.0.1
Memory Access Demo (Source)
This demo directly reads the contents of a buffer residing inside the remote server's memory and prints it out to the console.
-
Server Side
./bin/infinileap memory --listen 127.0.0.1
-
Client Side
./bin/infinileap memory --connect 127.0.0.1
Atomic Operation Demo (Source)
This demo atomically increments a value residing inside the remote server's memory and prints out the result to the console.
-
Server Side
./bin/infinileap atomic --listen 127.0.0.1
-
Client Side
./bin/infinileap atomic --connect 127.0.0.1
-
If your JDK is not installed in one of the default locations, Gradle can be instructed to look in a custom location. To enable this feature the
org.gradle.java.installations.paths
property has to be set within your globalgradle.properties
file usually located inside${HOME}/.gradle
.org.gradle.java.installations.paths=/custom/path/jdk20
-
The HotSpot VM uses the SIGSEGV signal for its own purposes, which may interfere with signal handlers installed by the ucx library. Fortunately, ucx's signal handlers can be disabled by using an undocumented environment variable (see MPI.jl issue #337).
UCX_ERROR_SIGNALS=""
-
The ucx library may fail at parsing some locale-dependent configuration values (e.g. numbers with decimal separators).
parser.c:928 UCX ERROR Invalid value for MEM_REG_GROWTH: '0.06ns'. Expected: time value: <number>[s|us|ms|ns] uct_md.c:270 UCX ERROR Failed to read MD config
Setting the locale to English might fix this.
This project is licensed under the GNU GPLv3 License - see the LICENSE file for details.