Skip to content

A modern networking framework based on ucx for Java 19+

License

Notifications You must be signed in to change notification settings

hhu-bsinfo/infinileap

Repository files navigation

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.

🚧   Notice

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.

🚀   Demos

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

⚠️   Known issues

  • 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 global gradle.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.

🔧   Requirements

📜   License

This project is licensed under the GNU GPLv3 License - see the LICENSE file for details.