Skip to main content

ncsim

PyPI DOI Open in GitHub Codespaces

Codespaces: The web UI should open automatically. If it does not, type start-viz in the terminal, then open port 5173 from the Ports tab. Port 8000 is the internal API and is not the UI.

Networked Compute Simulator — a headless discrete-event simulator for evaluating task scheduling algorithms on heterogeneous networked systems.

ncsim models compute nodes, network links with WiFi interference, and DAG task graphs. It produces detailed JSONL traces and JSON metrics for analysis.

Features

  • Deterministic simulation: Same inputs + same seed = identical results
  • 22+ SAGA static batch schedulers: HEFT, CPOP, Min-Min, Sufferage, and more; PEFT is added automatically with SAGA 2.1.0, alongside built-in round-robin and manual assignment
  • Multi-hop routing: Direct, widest-path (max-min bandwidth), and shortest-path (min-latency)
  • 802.11 WiFi PHY/MAC: Log-distance path loss, SNR-based MCS rate adaptation (802.11n/ac/ax)
  • Interference models: Proximity, CSMA/CA clique-based, and CSMA/CA Bianchi (capture-aware)
  • Fair bandwidth sharing when multiple transfers share a link
  • Experiment scripts for interference verification and routing comparison
  • Documentation: installation guide, quick start, architecture overview, and WiFi interference model

Try in GitHub Codespaces

Open ncsim in GitHub Codespaces for a ready-to-use environment with both the web UI and CLI. The UI starts automatically on port 5173, while the ncsim CLI is ready in the terminal. A demo simulation is also run during setup; inspect its raw scenario.yaml, trace.jsonl, and metrics.json files under results/codespaces-demo/.

Rerun the demo and analyze its trace from the terminal:

ncsim --scenario scenarios/demo_simple.yaml --output results/codespaces-demo
python analyze_trace.py results/codespaces-demo/trace.jsonl --gantt --timeline --tasks

If the UI does not open automatically, start or restart it with:

start-viz

Then select the Ports tab at the bottom of Codespaces, hover over port 5173, and select the globe (Open in Browser).

Installation

Recommended: Clone the repository to get started. The repo includes example scenarios, experiment scripts, documentation, and the web visualization UI — all useful for learning and exploring ncsim:

git clone https://github.com/ANRGUSC/ncsim.git
cd ncsim
pip install -e .

# For development (includes pytest)
pip install -e ".[dev]"

Alternatively, pip install anrg-ncsim installs just the core simulator and ncsim CLI. This is suitable if you want to use ncsim as a library in your own project and will write your own scenario YAML files. It does not include the example scenarios, experiment scripts, visualization UI, or documentation.

Requires Python 3.12+ and anrg-saga >= 2.0.4. The PyPI release of SAGA provides 22 directly compatible schedulers. To add PEFT as the 23rd scheduler, install SAGA 2.1.0 from its tagged source:

python -m pip install "anrg-saga @ git+https://github.com/ANRGUSC/saga.git@v2.1.0"

Quick Start

ncsim --scenario scenarios/demo_simple.yaml --output results/

Output:

  • results/trace.jsonl — event trace
  • results/metrics.json — summary metrics
  • results/scenario.yaml — copy of the input scenario

CLI Options

ncsim --scenario PATH --output DIR [options]

Options:
  --seed N              Random seed (default: from scenario or 42)
  --scheduler ALGO      SAGA scheduler, round_robin, or manual
  --scheduler-option K=V
                        Scheduler constructor option (repeatable)
  --routing ROUTING     direct | widest_path | shortest_path
  --interference MODEL  none | proximity | csma_clique | csma_bianchi
  --verbose             Enable verbose logging

WiFi / RF options (for csma_clique or csma_bianchi):
  --tx-power DBM        Transmit power in dBm (default: 20)
  --freq GHZ            Carrier frequency in GHz (default: 5.0)
  --path-loss-exponent N
                        Path loss exponent (default: 3.0)
  --wifi-standard STD   n | ac | ax (default: ax)
  --rts-cts             Enable RTS/CTS

Scenario Format

scenario:
  name: "Simple Demo"
  network:
    nodes:
      - {id: n0, compute_capacity: 100, position: {x: 0, y: 0}}
      - {id: n1, compute_capacity: 50, position: {x: 10, y: 0}}
    links:
      - {id: l01, from: n0, to: n1, bandwidth: 100, latency: 0.001}
  dags:
    - id: dag_1
      inject_at: 0.0
      tasks:
        - {id: T0, compute_cost: 100}
        - {id: T1, compute_cost: 200}
      edges:
        - {from: T0, to: T1, data_size: 50}
  config:
    scheduler: wba
    scheduler_options:
      alpha: 0.75
    seed: 42

Tasks can include pinned_to: node_id for use with --scheduler manual. Run ncsim --help for the scheduler list provided by the installed SAGA version. SAGA scheduler options currently available are fcp.priority_queue_size, gdl.dynamic_level, smt.epsilon, smt.solver_name, and wba.alpha; all have SAGA defaults.

See scenarios/ for more examples including WiFi interference, multi-hop routing, and parallel spread topologies.

Experiment Scripts

Two standalone scripts for running structured experiments:

# Validate WiFi interference model against analytical predictions
python run_interference_verification.py

# Compare widest_path vs shortest_path routing on grid topologies
python run_routing_comparison.py
python visualize_routing_comparison.py  # Generate plots from results

Trace Analysis

python analyze_trace.py results/trace.jsonl --gantt --timeline --tasks

Running Tests

python -m pytest tests/ -v

More than 300 tests across 14 modules cover the event queue, execution engine, scheduling, routing, WiFi physics, visualization API, and acceptance criteria.

Architecture

For a detailed overview, see the architecture documentation.

ncsim/                  # Python package
├── main.py             # CLI entry point
├── core/
│   ├── simulation.py   # Main simulation loop
│   ├── event_queue.py  # Priority queue with deterministic ordering
│   └── execution_engine.py
├── models/
│   ├── network.py      # Node, Link, Network
│   ├── dag.py          # DAG, Edge, Task
│   ├── routing.py      # Direct, WidestPath, ShortestPath
│   ├── interference.py # Proximity, CSMA Clique, CSMA Bianchi
│   └── wifi.py         # 802.11 PHY/MAC
├── scheduler/
│   ├── base.py         # Scheduler interface
│   └── saga_adapter.py # SAGA static batch scheduler registry and adapter
└── io/
    ├── scenario_loader.py
    ├── trace_writer.py
    └── results_writer.py

scenarios/              # Example scenario YAML files (10 examples)
tests/                  # Unit and integration tests (14 test modules)
docs/                   # MkDocs documentation source

Web Visualization (ncsim-viz)

ncsim includes an optional web UI (viz/) for interactive experiment configuration and result visualization. The viz is not included in the PyPI package — clone the repository to use it.

Setup

# Terminal 1: Backend API server
cd viz/server && pip install -r requirements.txt && python run.py

# Terminal 2: Frontend dev server
cd viz && npm install && npm run dev

Open http://localhost:5173 to configure experiments, run simulations, and visualize results interactively. See viz/README.md for full documentation.

Configure & Run

Build a scenario interactively — choose a scheduler, routing strategy, interference model, topology preset (line, star, ring, mesh, grid), and DAG preset (chain, fork-join, diamond, parallel). Edit nodes, links, and tasks in editable tables, then run the experiment with one click.

Configure & Run

Visualization Tabs

After running or loading an experiment, explore results across six tabs:

Tab Description
Overview Makespan, task/transfer counts, node and link utilization bars
Network Interactive D3 topology with node capacity and bandwidth labels
DAG Task dependency graph with tasks colored by assigned node
Schedule Gantt chart showing task execution windows across all nodes
Simulation Animated replay: synchronized network view + live Gantt + event log
Parameters Full scenario config inspector

Overview
Overview — summary dashboard with node utilization

DAG
DAG — task dependency graph, colored by node assignment

Schedule
Schedule — Gantt chart of task execution across nodes

Simulation
Simulation — animated replay with live transfers, Gantt timeline, and event log

The simulation replay supports keyboard shortcuts: Space (play/pause), arrow keys (step events), +/- (speed 0.25x-10x), and keys 1-6 to switch tabs.

viz/                    # Web visualization (React + FastAPI)
├── src/                # React frontend
├── server/             # FastAPI backend
└── public/             # Sample experiment runs

Citation

If you use ncsim in your research, please cite it:

@software{krishnamachari2026ncsim,
  author    = {Krishnamachari, Bhaskar},
  title     = {ncsim: Headless Discrete Event Simulator for Networked Computing Research},
  version   = {1.1.0},
  year      = {2026},
  url       = {https://github.com/ANRGUSC/ncsim},
  doi       = {10.5281/zenodo.19138224}
}

License

MIT

Contributors

Bhaskar Krishnamachari, Maya GutierrezAutonomous Networks Research Group (ANRG), University of Southern California

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anrg_ncsim-1.1.0.tar.gz (76.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

anrg_ncsim-1.1.0-py3-none-any.whl (65.4 kB view details)

Uploaded Python 3

File details

Details for the file anrg_ncsim-1.1.0.tar.gz.

File metadata

  • Download URL: anrg_ncsim-1.1.0.tar.gz
  • Upload date:
  • Size: 76.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for anrg_ncsim-1.1.0.tar.gz
Algorithm Hash digest
SHA256 5783121ea8469a6826058ce4eb9817065f523d1e87a5da781669b84dfa39f7e2
MD5 e8b5ea1f4f6eec2a4135601898731daa
BLAKE2b-256 43548795deeb4d70d4577c8776d80ca9f530a1e567fa2124385f993ea11ece1e

See more details on using hashes here.

File details

Details for the file anrg_ncsim-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: anrg_ncsim-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 65.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for anrg_ncsim-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9b357575a8249d78e7366c41151eec2b78e0a20722c83bc6f6a2d88754326a52
MD5 35696067e1bfb1b925f10143a21b8096
BLAKE2b-256 8244e9e4da8d7f58f34fd43c3bd040153bc25bab87114658b73b3b25a826a3c1

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page