Skip to content

Latest commit

 

History

History
96 lines (83 loc) · 5.21 KB

File metadata and controls

96 lines (83 loc) · 5.21 KB

Changelog

Notable changes. This project follows semantic versioning from 0.1.0 onward; while the major version is 0, the runtime's C API and the knob names may still change, and any change that does will be listed here.

0.1.0 — 2026-08-22

First release as a project rather than a paper artifact. Everything the paper measured is preserved and still reproduces; what changed is that the code can now be built, tested and used by someone who did not write it.

Added

  • A build system. make builds the runtime, the emulated backend and the examples, warning-free under -Wall -Wextra on gcc and clang. make check runs the correctness suite, make demo reproduces the headline effect, make gpu builds the CUDA backend, make install installs headers, libraries and a pkg-config file. Previously the only build instructions were gcc command lines embedded in prose in the results files.
  • A test suite. 13 tests, no GPU and no root required, finishing in under a minute: verified results with and without the runtime, proof the mechanism engaged rather than passing through, non-offloading passthrough safety, fiber-aware cond and rwlock, the shared-state hazard and both of its mitigations, and knob precedence. Every load run is bounded so a stall fails loudly instead of hanging.
  • A documented public API. include/toffload/accel.h specifies the four-function backend contract. include/toffload/toffload.h adds an optional application-facing API — stats, yield, region watch — with every symbol weak, so a program links and runs whether or not the runtime is loaded.
  • accel_run() as the backend entry point, with accel_encrypt() kept as an alias. The old name is crypto-specific; the mechanism never was.
  • Configuration beyond environment variables. Knobs resolve TOFFLOAD_<KNOB>, then the legacy RT_<KNOB>, then a file named by TOFFLOAD_CONFIG. File keys ignore case, - and _.
  • An opt-in stats interface. TOFFLOAD_STATS=stderr[:seconds] or a file path, plus toffload_get_stats() for programmatic access. Eight counters including offloads, I/O yields and serializations, which did not exist before.
  • CI. Build and test on ubuntu-22.04 and 24.04 across gcc and clang, an ASan+UBSan job, an aarch64 cross-build proving the other supported architecture's assembly still compiles, shellcheck on the entry-point scripts, and an install job that compiles a consumer against the installed headers via pkg-config.
  • Documentation: quickstart, architecture, a five-minute test for whether your server can benefit, writing a backend, the safety model, a full configuration reference, troubleshooting, reproducing the paper, and a path map from the published paper's paths to the current layout.
  • Project files: contributing guide, code of conduct, security policy, roadmap, issue and PR templates, editorconfig and clang-format.

Fixed

  • Enforce mode deadlocked the runtime. The handler lock was released only in write(), so a connection that closed at EOF — where read() returns 0 and the handler exits without responding — leaked it permanently, and every other fiber spun in hl_acquire forever. Reproduced as a hard hang with TOFFLOAD_ENFORCE=1 at 16 connections. The lock is now reclaimed when a fiber completes.
  • Enforce mode starved every connection but one. read() took the handler lock on entry rather than on the first byte of a request, so the holder kept it across the idle wait for its client's next request. The critical section now opens when data actually arrives.
  • Three example programs called atoi without including <stdlib.h>.
  • A dead variable and two real compiler warnings in the runtime.

Changed

  • Repository layout. include/, src/, backends/, examples/, tests/, bench/ and docs/ at the top; the research artifact preserved intact under experiments/. This also removes the collision where runtime/ meant microbenchmarks while transparent-runtime/ meant the runtime. git log --follow works across the move, and docs/paper-path-map.md translates every old path.
  • The runtime is quiet by default. It used to print a counter line every couple of seconds and a summary at exit, unconditionally, into the host process's stderr. Now it prints one banner on load (suppressible with TOFFLOAD_QUIET) and nothing else unless TOFFLOAD_STATS is set.
  • The fiber sources are no longer triplicated. fw_fiber.c, fw_fiber.h and fw_switch.S existed as three byte-identical copies; there is now one.
  • make demo reports a median of three runs. A single run was noisy enough to produce impossible tables — stock faster at 100 µs than at 20 µs — which made the whole comparison untrustworthy.

Compatibility

  • RT_* environment variables all still work.
  • accel_encrypt() still works and is still interposed.
  • Every path referenced by the published paper is mapped in docs/paper-path-map.md.