Lightweight Single-System-Image Linux Cluster: A Project Proposal

Executive Summary

This proposal describes the design and implementation of a lightweight single-system-image (SSI) Linux cluster that allows multiple networked commodity Linux systems to appear and function as a single large multi-user timesharing system to end users. The primary goal is to provide transparent process execution, inter-process communication, and file system access across cluster nodes while maintaining the familiar Unix/Linux abstraction of a unified process space, global file namespace, and global user session view.

Unlike heavyweight SSI systems (e.g., ScaleMP's vSMP) that require high-performance interconnects and implement global shared memory, this system is designed to be lightweight, software-centric, and deployable on standard Ethernet-connected commodity hardware such as x86 servers or, as a proof-of-concept, a bank of Raspberry Pi 5 systems. The system is explicitly targeted at interactive multi-user workloads (shells, compilers, office applications, services) rather than tightly coupled HPC or large shared-memory applications.

This proposal outlines:

Problem Statement and Motivation

The Problem

Organizations often operate pools of independent Linux servers in order to aggregate compute, storage, and memory capacity. However, this approach creates operational friction:

For an interactive multi-user environment serving developers, researchers, or system administrators, the cognitive and operational load of managing multiple independent systems is substantial.

The Opportunity

A single-system-image cluster would eliminate this friction by presenting a unified, familiar Linux interface to users while transparently distributing work across physical nodes according to available capacity. A user would log in once, access what appears to be a conventional multi-user Linux system, and interact with processes, files, and other users without regard to physical node boundaries.

Such a system would be particularly valuable for:

Background and State of the Art

Single-system-image clustering has been explored extensively in academic and commercial systems. Key prior work includes:

Academic and Open-Source SSI Systems

Kerrighed (2003–2010): A comprehensive SSI extension to the Linux kernel providing global process IDs, remote fork/exec, cluster-wide pipes via a "KerNet" distributed stream layer, and process migration. Kerrighed targeted academic research on cluster computing but did not achieve production adoption due to its reliance on mainline kernel integration and perceived complexity.[web:17]

OpenSSI / OSCAR (1998–2010): An open-source SSI cluster system that unified process space, file systems, and IPC across nodes, presenting a single large system image. OpenSSI demonstrated that SSI semantics could be practical for modest multi-user clusters, though active development ceased as commodity cloud infrastructure became prevalent.[web:9][web:11]

openMosix / MOSIX (1995–2005 for MOSIX; 2001–2012 for openMosix): An Israeli research system and its Linux implementation that provided transparent process migration and cluster-wide load balancing via kernel extensions and a distributed file system overlay (oMFS). openMosix is often cited as the closest precedent to a "lightweight" SSI for Unix systems, as it did not require a dedicated interconnect.[web:19][web:22]

Zap (OSDI 2002): A lightweight process migration and virtualization system for unmodified Linux applications, implemented as a loadable kernel module rather than full kernel modifications. Zap demonstrated that SSI-like behavior (process placement, virtualization of PIDs and network endpoints) could be achieved with minimal kernel integration, a principle valuable for this proposal.[web:23][web:20][web:25]

Commercial Systems

ScaleMP vSMP (2004–present): A commercial software virtualization layer that aggregates multiple x86 servers into a single NUMA shared-memory system. vSMP relies on a distributed hypervisor and requires high-speed interconnects (InfiniBand or similar) to maintain cache coherence and shared memory semantics, making it significantly more expensive and less suitable for interactive multi-user workloads.[web:6][web:1][web:10]

Gaps in the Literature

While the above systems demonstrate the feasibility of SSI clustering, each has limitations relative to the proposed design:

This proposal fills that gap by proposing a modern, focused SSI implementation that:

  1. Targets interactive multi-user Linux workloads on commodity hardware (Ethernet-connected servers or Raspberry Pi boards)

  2. Maintains compatibility with standard Linux tools and workflows

  3. Prioritizes simplicity, modularity, and minimal kernel changes (leveraging lessons from Zap and modern kernel practices)

  4. Explicitly optimizes for interactive, latency-sensitive operations rather than HPC throughput

  5. Avoids the global shared-memory complexity that drove vSMP's cost and hardware requirements

Proposed System: High-Level Design

Architecture Overview

The system consists of a small cluster of networked nodes (e.g., 4–16 commodity Linux systems) that cooperate via a cluster control layer to present a unified single-system-image to users and applications.

Key design principles:

  1. Transparent process placement: Users invoke fork() and exec() normally; the cluster scheduler transparently places the new process on a node with sufficient capacity, while the user-space shell and libraries see a unified process space.

  2. Extended PID space: Process IDs are logically extended to include a node identifier, allowing up to millions of globally unique PIDs. User-space tools like ps are adapted to display these global PIDs as if they were local.

  3. Distributed pipes and IPC: When a Unix pipe connects processes on different nodes, the kernel transparently implements the pipe using a reliable network stream (TCP, SCTP, or a custom datagram-based protocol) instead of a shared buffer.

  4. Global file namespace: A cluster file system or carefully configured NFS presents a single, unified file tree; data locality is a runtime hint, not a requirement.

  5. Unified session and login view: A cluster login service (SSH to a frontend or load-balanced VIP) authenticates users once and registers their session globally; commands like who and w aggregate session information from all nodes.

  6. Cluster awareness in resource management: The scheduler respects load, CPU availability, and data locality when placing processes; users do not explicitly choose nodes.

System Components

Cluster Node Architecture

Each physical node runs a standard Linux kernel extended with a cluster-aware module (or patch set) that:

Cluster Messaging Layer

A reliable, efficient inter-kernel transport provides:

This layer is implemented as a combination of:

Process Scheduler

A distributed scheduler component (one instance per node, with a designated leader for global decisions) uses:

Initial implementation prioritizes local placement (to minimize remote syscalls); later versions can add process migration for load balancing.

Global File System

A clustered file system (NFS with careful tuning, or a more sophisticated cluster FS such as CephFS, GlusterFS, or a simplified custom solution) provides:

Login and Session Management

A cluster-wide login service:

Core Modifications to Linux Subsystems

1. Process Model and PIDs

Current behavior: Linux PIDs are 32-bit integers, with 16 bits historically available for per-user PID allocation.

Proposed modification:

Implementation strategy: Modify the process creation code path to assign CPIDs; provide a /proc/cpids file or a get_cpid() syscall for userspace to query the mapping.

2. Remote Fork and Process Placement

Current behavior: fork() and execve() create and execute processes on the calling node.

Proposed modification:

Implementation strategy: Implement as a loadable kernel module (for modularity) or as an in-kernel extension, following Zap's approach of virtualizing process creation without requiring a full hypervisor.

3. Pipes, FIFOs, and Distributed Streams

Current behavior: pipe() creates a local in-kernel buffer; data flows between processes in kernel memory.

Proposed modification:

Implementation strategy: Implement the distributed stream abstraction in the cluster module; hook into the VFS pipe creation and operation code to detect remote endpoints and redirect I/O appropriately.

4. Unix-Domain Sockets and Distributed Endpoints

Current behavior: Unix-domain sockets are addressed by a file path; connection state is maintained by the kernel.

Proposed modification:

Implementation strategy: Modify the af_unix socket family implementation in the kernel to route remote connections through the cluster messaging layer.

5. Procfs and Process Visibility

Current behavior: Each node's /proc filesystem shows only local processes.

Proposed modification:

Implementation strategy: Implement as a virtual file system (VFS) that queries the cluster messaging layer on each /proc access; cache results locally to avoid excessive network traffic.

6. Login, Sessions, and TTYs

Current behavior: Login occurs on a specific node; session state is recorded in /var/run/utmp and /var/log/wtmp locally.

Proposed modification:

Implementation strategy: Implement the distributed session service as a user-space daemon on each node (or on a few designated nodes) backed by a simple consensus protocol (or a primary/backup replica for simplicity); hook sshd and login to register sessions with this service.

7. File System and Global Namespace

Current behavior: Each node has its own mount tree; NFS mounts are per-node.

Proposed modification:

Implementation strategy: Use standard NFS for the initial proof-of-concept; upgrade to a clustered FS for the robust phase. The locality hinting is implemented in the scheduler's decision logic.

8. Signaling and Process Control

Current behavior: kill() targets a local PID; signals are delivered via the kernel.

Proposed modification:

Implementation strategy: Modify the kill() syscall handler to check the node ID in the target CPID; if remote, forward via RPC; if local, proceed normally.

Cluster Messaging and Communication Protocol

The reliability and latency of inter-node communication directly impacts user experience. The messaging layer should:

Proposed implementation:

  1. Protocol: A custom reliable datagram protocol over Ethernet, similar in spirit to SCTP or Kerrighed's KerNet:

  2. Kernel module: Implement the protocol in a loadable kernel module to avoid large changes to the core network stack. The module exposes a simple API to other kernel subsystems:

  3. User-space daemon: A small daemon on each node handles:

  4. Performance tuning:

Specific System Calls and Kernel Subsystems Affected

Subsystem

Key Syscalls/Operations

Modification

Process Management

fork(), clone(), execve(), wait(), waitpid()

Virtualize process creation to support remote placement; extend to recognize and route CPIDs.

IPC/Pipes

pipe(), pipe2(), read(), write() on pipes

Detect remote endpoints; back with distributed streams.

Sockets

socket(), connect(), bind() (Unix domain)

Extend Unix-domain socket implementation to route remote connections.

Signal Handling

kill(), sigaction(), signal delivery

Extend kill() to handle CPIDs; forward signals to remote nodes.

Process Monitoring

ps, /proc, procfs

Extend procfs to show global process view; update ps to consume distributed data.

Login/Session

sshd, login, /var/run/utmp

Modify to integrate with cluster-wide session service.

File Systems

VFS operations, mount, open, read, write

Configure shared mounts; optionally extend with locality hints.

TTY/Terminal

ioctl(), terminal control

Ensure remote shells have proper TTY allocation; handle control characters across network.



Proof-of-Concept Phase (6–12 months)

Goals

Demonstrate that a lightweight, software-only SSI cluster is feasible and practical for interactive multi-user workloads.

Deliverables

  1. Kernel module and extensions (estimated: 2000–3000 lines of C code)

  2. User-space tools (estimated: 500–1000 lines)

  3. Test environment

  4. Documentation

Scope Limitations (PoC Phase)

Success Criteria

Robust Implementation Phase (2–4 years)

Goals

Harden the system for practical deployment in real environments, extend IPC and file system support, and add optional process migration.

Deliverables

  1. Enhanced kernel subsystems

  2. Advanced file system support

  3. Cluster management and operations

  4. Security and isolation

  5. Performance optimization

Success Criteria

Required Expertise

Successful implementation requires a multidisciplinary team:

Core Team (4–6 people)

  1. Senior Linux Kernel Engineer (1–2 people)

  2. Distributed Systems Engineer (1 person)

  3. Systems Engineer / Performance Specialist (1 person)

  4. DevOps / Operations Engineer (1 person)

Supporting Roles

Skill Requirements

Implementation Strategy and Architecture

Modular Design

To minimize disruption to the Linux kernel and ease adoption, the implementation should follow a modular approach:

  1. Kernel Module (the SSI layer)

  2. Kernel Patches (minimal)

  3. User-Space Daemons (libcluster, scheduler, session service)

  4. Library and Tool Integration

Build and Testing Strategy

Timeline and Resource Allocation

Proof-of-Concept Phase: 6–12 months (3–4 people full-time)

Phase

Month

Deliverables

Notes

Requirements & Design

1–1.5

Architecture document, design review

Engage with kernel experts for feedback.

Kernel Module Core

2–4

CPID mapping, remote fork/exec, cluster messaging

Focus on correctness over optimization.

Distributed Pipes

3–5

Pipe virtualization, distributed stream mechanism

Requires careful I/O handling.

User-Space Tools

4–6

ps, scheduler, session service

Can run in parallel with kernel work.

Integration & Testing

6–8

Multi-node test environment, integration tests

Iterative debugging and refinement.

Documentation & Demo

8–12

Architecture doc, deployment guide, demo videos

Prepare for community/stakeholder review.



Estimated effort: ~2000–3000 person-hours for PoC.

Resource allocation:

Robust Implementation Phase: 2–4 years (4–6 people, varying)

Phase

Months

Focus

Effort

Phase 2a: Hardening

Months 1–6

Failure recovery, membership, robust messaging

1–2 engineers

Phase 2b: Extended IPC

Months 4–10

Unix sockets, FIFOs, advanced signal handling

1 engineer

Phase 2c: File System

Months 6–12

Cluster FS integration, locality hints

1 engineer

Phase 2d: Process Migration

Months 8–18

Load balancing, transparent migration

1–2 engineers

Phase 2e: Operations & Docs

Months 12–24

Deployment automation, runbooks, training

1–2 engineers



Estimated total effort: ~8000–12000 person-hours for robust implementation.

Comparison with Existing Systems

vs. Kerrighed / OpenSSI

Aspect

Kerrighed/OpenSSI

Proposed System

Kernel Integration

Deep kernel patches; required fork of kernel tree

Minimal patches; mostly a kernel module

IPC Coverage

Comprehensive (all SysV IPC, distributed memory)

Focused (pipes, sockets, basic IPC)

Shared Memory

Global memory coherence (expensive)

Local memory only; not a design goal

Target Workloads

HPC, tightly coupled parallel applications

Interactive multi-user, shells, services

Community/Maintenance

Largely abandoned (last major release ~2010)

Fresh design, aligned with modern Linux

Hardware Requirements

Specialized interconnects (for best performance)

Commodity Ethernet is sufficient



vs. vSMP

Aspect

vSMP

Proposed System

Architecture

Hypervisor-based virtualization

Kernel module + user-space services

Shared Memory

Full NUMA shared memory coherence

Not provided; local memory only

Target Market

HPC, large enterprise servers

Modest multi-user clusters

Cost

Expensive (software license + hardware)

Open-source, runs on commodity hardware

Interconnect

High-speed fabrics (InfiniBand)

Standard Ethernet (Gigabit or higher)

Complexity

Very high; heavyweight virtualization

Lower; software-only, minimal kernel changes



vs. Zap

Aspect

Zap

Proposed System

Focus

Process migration and pod mobility

Continuous SSI semantics (pipes, ps, who)

Implementation

LKM-based virtualization

LKM + kernel patches + user-space

Scope

Process placement and migration

Full single-system-image illusion

Unmodified Apps

Yes (main design goal)

Modified tools expected (ps, shell); core apps work



Example Proof-of-Concept: Raspberry Pi 5 Cluster

A Raspberry Pi 5 cluster is an excellent, practical testbed for this system. The specific characteristics of Raspberry Pi 5 hardware provide useful insights into design tradeoffs.

Hardware Profile

CPU & Memory:

Storage:

Networking:

Power and Cooling:

Design Implications

1. Process Placement and Locality

2. Distributed I/O and Pipes

3. Storage and File Systems

4. Failure Tolerance

5. Performance Targets

6. Operational Simplicity

Reference Topology

A small proof-of-concept cluster might consist of:

Total cost: < $500–1000 in hardware (depending on storage capacity), making it an excellent sandbox for kernel development and cluster research.

Expected Limitations and Workarounds

Limitation: Single PCIe lane for NVMe limits storage throughput.
Workaround: Use external USB 3.0/3.1 storage for the shared data tier; network performance (Gigabit) is the true bottleneck, not storage.

Limitation: CPU per core is lower than x86; bursty workloads may exceed capacity.
Workaround: Provide burst capacity via a hybrid setup (Pi for baseline, x86 servers for peak); or teach users realistic expectations for this hardware tier.

Limitation: Longer latencies than data center clusters mean some latency-sensitive operations (e.g., distributed shared memory) won't work well.
Workaround: Accept that the system is optimized for interactive, not compute-parallel, workloads; document this clearly.

Advantage: Inexpensive and simple enough that many researchers and hobbyists can deploy and experiment with SSI concepts without significant capital investment.

Risk Analysis and Mitigation

Technical Risks

Risk

Probability

Impact

Mitigation

Kernel stability issues from SSI modifications

Medium

High

Careful code review, extensive testing, modular design, gradual feature integration

Network/messaging layer unreliability

Medium

High

Use well-tested protocol (TCP/SCTP initially), comprehensive testing, fallback to simpler implementation

Performance unacceptable for interactive use

Low–Medium

High

Early prototyping, latency profiling, optimization sprints; target Gigabit latencies explicitly

Unforeseen interactions with modern kernel subsystems (cgroups, namespaces, seccomp)

Medium

Medium

Design review with kernel experts; test on multiple kernel versions; modular architecture allows isolation

Process migration complexity exceeds schedule

Medium

Medium

Make migration optional in PoC; focus on placement-only first

File system coherence issues

Low

Medium

Use NFS initially (well-understood semantics); cluster FS integration deferred to robust phase



Organizational Risks

Risk

Probability

Impact

Mitigation

Key team member departure

Medium

High

Document architecture thoroughly; cross-train team; use modular subsystem boundaries

Kernel API changes break compatibility

Low

Medium

Monitor LKML, participate in kernel community; design for modularity to ease porting

Difficulty recruiting specialized kernel expertise

Medium

Medium

Partner with academic institutions or kernel developers; offer interesting research/publication opportunities

Scope creep (adding HPC, shared memory, etc.)

High

Medium

Clear, written scope statement; regular steering reviews; resist feature requests outside scope



Mitigation Strategy

Success Metrics and Evaluation

Proof-of-Concept Phase

  1. Functional correctness:

  2. Stability:

  3. Integration:

Robust Implementation Phase

  1. Operational readiness:

  2. Scalability:

  3. Adoption:

Conclusion

A lightweight, software-centric single-system-image Linux cluster is a feasible and valuable project that addresses real operational needs for shared compute infrastructure. By drawing on prior research (Kerrighed, openMosix, OpenSSI, Zap) and focusing on interactive multi-user workloads rather than HPC or shared memory, the system can be built with modest hardware requirements (commodity Ethernet-connected servers or Raspberry Pi boards) and a reasonable timeline (6–12 months for PoC, 2–4 years for robust implementation).

The key to success is a modular design that minimizes kernel changes, robust testing and failure handling, and clear scope management to avoid feature creep. The system will appeal to research institutions, small organizations, and hobbyists seeking to aggregate modest compute resources into a familiar, unified Linux environment.

A Raspberry Pi 5 cluster proves an excellent low-cost, practical testbed for validating the architecture and demonstrating feasibility to potential stakeholders and contributors.

References

[1] Healy, P. D. (2016). Single system image: A survey. Journal of Parallel and Distributed Computing, 28(1), 112–131. https://cora.ucc.ie/bitstreams/4b38c7e4-499d-438c-bf7d-3d00c2bfde29/download

[2] Single system image. Wikipedia. https://en.wikipedia.org/wiki/Single_system_image

[3] OpenSSI: OpenSSI Project. https://en.wikipedia.org/wiki/OpenSSI

[4] Kerrighed: Open-Source Cluster Middleware. Various publications and documentation (2003–2010). https://www.ssrg.ece.vt.edu/theses/MS_Ansary.pdf

[5] Bevilacqua, A., & Ferrorato, C. (2003). Kerrighed and Parallelism: Cluster Computing On Single System Image. Academic research documentation. https://www.scribd.com/document/352492934/01392625

[6] OpenMosix HOWTO. The Linux Documentation Project. https://tldp.org/HOWTO/html_single/openMosix-HOWTO/

[7] OpenMosix Project. SourceForge historical repository. https://openmosix.sourceforge.net/

[8] Osman, S., Subhraveti, D., Su, G., & Nieh, J. (2002). The Design and Implementation of Zap: A System for Migrating Computing Environments. Proceedings of the OSDI 2002, Boston, MA. https://www.cs.columbia.edu/~nieh/pubs/osdi2002_zap.pdf

[9] Zap: Process Migration. ACM Digital Library. https://dl.acm.org/doi/10.1145/844128.844162

[10] ScaleMP vSMP. Commercial product documentation. https://www.computer.org/csdl/proceedings-article/cluster/2010/4220a029/12OmNvnfkal

[11] ScaleMP vSMP for HPC Evaluation. FutureGrid Project Report (2011). https://www.infomall.org/sites/dsc/portal.futuregrid.org/projects/407.html

[12] Single System Image (SSI) Survey and Technical Overview. University of Melbourne Cloud Computing Group (2016). https://clouds.cis.unimelb.edu.au/papers/SSI-CCWhitePaper.pdf

[13] Introduction to Single System Image Cluster Technique. International Journal of Latest Trends in Engineering and Applied Mathematics, Vol. 3, Issue 4, 207–213 (2024). https://www.ijltemas.in/DigitalLibrary/Vol.3Issue4/207-213.pdf

[14] Ellis, A. (2023). First Impressions with the Raspberry Pi 5. Blog post. https://blog.alexellis.io/first-impressions-with-the-raspberry-pi-5/

[15] Ellis, A. (2023). Booting the Raspberry Pi 5 from NVMe. Blog post. https://blog.alexellis.io/booting-the-raspberry-pi-5-from-nvme/

[16] Raspberry Pi 5 Product Brief. Raspberry Pi Foundation. https://pip.raspberrypi.com/documents/RP-008348-DS-3-raspberry-pi-5-product-brief.pdf

[17] Tom's Hardware Raspberry Pi 5 16GB Review (2025). https://www.tomshardware.com/raspberry-pi/raspberry-pi-5-16gb-review

[18] Survey of Open Source Cluster Management Systems. Linux.com, September 2006. https://www.linux.com/news/survey-open-source-cluster-management-systems/