Commit Graph
97 Commits
Author SHA1 Message Date
Simon-Pierre 82b15d69cf refactor bootstrap flow 2026-07-14 09:51:18 -04:00
Alberto Soutullo 54f1b90ba4 Update Readme 2026-07-14 14:26:45 +02:00
Alberto Soutullo c17575c0bd Update Dockerfile, Readme and run 2026-07-14 14:23:39 +02:00
Alberto Soutullo a56d4fa8fc Update version 2026-07-14 14:10:26 +02:00
Alberto Soutullo 11c819a12e Add client mode and extra logs 2026-07-14 14:10:03 +02:00
Alberto Soutullo 37637a9ebb Push latest changes 2026-07-02 19:31:28 +02:00
Zhuolun Li 2ff22f99f5 Speed up regression node build: drop unused ggplotnim, merge apt layers (#39)
remove ggplotnim and merge apt-get for faster build
2026-06-26 09:48:18 +01:00
Zhuolun Li e4ec33715a Form regression mesh via kad-dht instead of static connectTo (#37)
Form regression mesh via kad-dht instead of static connectTo
2026-06-22 02:33:36 +01:00
Alberto Soutullo 1816e739af Fix wrong variable name 2026-06-17 16:19:43 +02:00
Alberto Soutullo 1efeb01f67 Update nim to 2.2.4 2026-06-17 12:19:20 +02:00
Alberto Soutullo 52455a92e0 Add number of maximum bootstrap connections 2026-06-17 12:07:21 +02:00
Gabriel Cruz bda50dbde6 chore: do not manually start disco 2026-06-15 09:20:36 +02:00
Alberto Soutullo 4ed93f5728 Update nimlibp2p version in nimble file 2026-06-09 15:22:26 +02:00
Alberto Soutullo 8f73a401c6 Add log lines 2026-06-09 15:22:25 +02:00
Alberto Soutullo de8611d0e5 Decrease startup jitter to 10 ms 2026-06-09 11:37:28 +02:00
Alberto Soutullo 72e3c67dfd Beter log all arguments 2026-06-09 11:37:13 +02:00
Alberto Soutullo ef0e15e2eb Add env variable for max connections 2026-06-09 11:36:56 +02:00
Alberto Soutullo cc47aef31c Merge pull request #33 from vacp2p/ping-util
Ping in regression node
2026-06-09 09:46:03 +02:00
Alberto Soutullo 7fcad75d3a Fix stream closing error for mplex 2026-06-08 09:22:23 +02:00
Alberto Soutullo e82528834a Add debug lines 2026-06-05 12:34:54 +02:00
Alberto Soutullo afbe0a35c4 Add ping util 2026-06-05 11:33:57 +02:00
Zhuolun LiandClaude Opus 4.7 ec1d9a9b62 Shadow runner base image with dynamic test-node build and configurable metrics interval (#28)
* shadow: add k8s-based runner setup

Adds a containerized Shadow runner so the existing single-machine prototype
(shadow/{topogen.py,run.sh,*.awk}) can execute on a lab worker without SSH.

- shadow/Dockerfile: multi-stage build — nim test-node `main` (mirrors
  nim-test-node/Dockerfile_amd64) + Ubuntu 22.04 runner with Shadow v3.3.0
  built from source (rustup + cmake/glib deps).
- shadow/k8s-job.yaml: Job pinned to node-05 in zerotesting-shadow, with
  seccomp Unconfined + SYS_PTRACE for Shadow's syscall interposition.
- shadow/kaniko-build-job.yaml: in-cluster image build via kaniko on node-04
  (avoids 30+ min QEMU emulation on arm64 macs); pushes to
  radiken/dst-shadow-nim.
- .dockerignore at repo root: keeps the buildx context lean for the new
  root-context Shadow build; per-experiment builds under nim-test-node/ are
  unaffected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: fix kaniko git context branch case

GitHub branch refs are case-sensitive server-side. The branch landed as
Alan/shadow-k8s (capital A, matching team convention), but the manifest
referenced lowercase.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: add python3-yaml to the runner image

topogen.py imports yaml; without python3-yaml the sim aborts at
ModuleNotFoundError before generating shadow.yaml.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: build nim test node dynamically for Shadow runner

The k8s test-node build links the nim main fully static (-static -mmusl,
-static-libgcc, -static-libstdc++) for container portability. Shadow won't
accept a static binary because its syscall interposer is LD_PRELOAD-based,
which only hooks dynamically linked ELFs. Smoke test confirmed:

  Failed to verify plugin path '/tmp/t2/main'
  Caused by: not a dynamically linked ELF

Drop the static linker flags in the Shadow stage of the Dockerfile so the
nim main ends up dynamically linked against the runner image's glibc /
libssl3 / libstdc++. The k8s build (nim-test-node/Dockerfile_amd64) is
unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: split runner image into base + per-experiment test-node

Until now we baked the nim test-node main binary into the Shadow runner
image. That couples the generic Shadow runtime to one specific test node
and means rebuilding the whole image (Rust + Shadow) any time the nim
source changes.

Split into two images:

- radiken/dst-shadow-base: Ubuntu 22.04 + Shadow v3.3.0 + python deps.
  No nim binary. Built rarely. shadow/Dockerfile.
- radiken/dst-test-node-shadow: dynamic-linked nim main, two-stage build
  with debian:bookworm-slim final stage. nim-test-node/Dockerfile_amd64_shadow.

Per-run Job specs use an init container to copy /node/main out of the
test-node image into an emptyDir, then run shadow from the base image with
the binary + shadow.yaml mounted in. Decouples the Shadow runtime from the
per-experiment binary.

Two kaniko Job manifests (shadow/kaniko-build-job.yaml and
shadow/kaniko-build-test-node-job.yaml), both pinned to node-04.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: bake python3-requests into base for the publisher host

The Shadow runner pod runs traffic_sync.py (mounted via ConfigMap) as a
publisher host inside shadow.yaml. traffic_sync.py uses the requests
library, which isn't in the upstream python3 package. Bake it in once
rather than apt-installing at every run start.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test-node: make storeMetrics scrape interval configurable

storeMetrics (used in Shadow mode to curl /metrics into metrics_pod-N.txt)
was hardcoded to a 5-minute interval. Shadow sims run for seconds-to-minutes
of simulated time, so a single scrape fires at t~=0 (before the mesh forms)
and the run ends before the next one. The captured libp2p_network_bytes
counter is therefore ~0 and useless for bandwidth comparison.

Add METRICS_INTERVAL_S env var (default 300 to preserve k8s behavior).
Shadow runs set it short (e.g. 15s) so the last scrape captures the
post-traffic cumulative byte counts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: drop superseded k8s-job.yaml, fix stale image comment

k8s-job.yaml was the old single-image by-hand runner manifest pointing at the
retired radiken/dst-shadow-nim image; the runner Job is now generated by
10ksim's builders. Also fix a kaniko comment that still named dst-shadow-nim.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix comments

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 10:09:43 +01:00
Alberto Soutullo f1ef4433fa Add start sleep parameter 2026-06-01 12:17:48 +02:00
Alberto Soutullo f22ab2d58a Remove mix related params 2026-06-01 12:12:10 +02:00
Alberto Soutullo 881b3b646c Add missing rng 2026-06-01 12:02:33 +02:00
Alberto Soutullo dd8f83f0a4 Update node to match v2.0.0 2026-06-01 12:02:33 +02:00
Alberto Soutullo f2e0286b03 Remove mix from regression node 2026-06-01 11:55:21 +02:00
Alberto Soutullo 7ccb77181a Move regression node to its own folder 2026-05-29 14:48:08 +02:00
Alberto Soutullo 233ae32d99 Merge pull request #27 from vacp2p/Alberto/service_discovery
Service discovery node
2026-05-27 11:39:39 +02:00
Alberto SoutulloandZhuolun Li 74c2342846 Apply suggestions from code review
Co-authored-by: Zhuolun Li <44989482+radiken@users.noreply.github.com>
2026-05-27 11:28:20 +02:00
mamoutou-diarra e4d6066c3c remove mix and publisher 2026-05-26 11:45:51 +02:00
mamoutou-diarra 8c174e78e7 add per node load mode 2026-05-26 11:45:50 +02:00
mamoutou-diarra 95d9e525c8 remove nimble.paths 2026-05-26 11:45:50 +02:00
mamoutou-diarra 4f355e449f remove nimble.paths 2026-05-26 11:45:50 +02:00
mamoutou-diarra ec7b5d0623 add new publisher for gossip queues overflow tests 2026-05-26 11:45:50 +02:00
mamoutou-diarra 0d41340741 fix dst_* labels issues 2026-05-26 11:45:49 +02:00
mamoutou-diarra b5aa3c1d44 add muxer and peer_id labels to dst_* metrics 2026-05-26 11:45:49 +02:00
mamoutou-diarra a380e49d2c remove mix and wait 15s instead 5s for mesh creation 2026-05-26 11:45:49 +02:00
Alberto Soutullo b99e72fec5 Remove nimble.paths 2026-05-25 13:19:36 +02:00
Alberto Soutullo 878837f963 Optimize Dockerfile 2026-05-25 13:13:19 +02:00
Alberto Soutullo 8b2dd12421 Pin libp2p version 2026-05-25 13:12:58 +02:00
Zhuolun Li 758dd6638c Merge pull request #24 from vacp2p/Alan/connmanager
Add Connection Manager Experiment Node
2026-05-15 18:59:22 +01:00
Alberto Soutullo 8655ddbb2d Inject ipSimCoefficient correctly 2026-05-14 16:06:40 +02:00
Alberto Soutullo 206c241db5 Add missing line 2026-05-14 15:49:10 +02:00
Alberto Soutullo 1afdac8ba9 Add default ipSimCoefficient set to 0.0 2026-05-14 15:36:24 +02:00
Alberto Soutullo 40448ec2dd Correct name in .nimble file 2026-05-14 15:36:02 +02:00
Alberto Soutullo 4a50ca04e2 Change nimble command with nim 2026-05-14 14:59:17 +02:00
Alberto Soutullo 4251ae4413 Add HEALTH_PORT to README.md 2026-05-14 14:35:19 +02:00
Alberto Soutullo 86e7b02ec7 Adjust README.md 2026-05-13 17:42:24 +02:00
Alberto Soutullo 1cf903bfaf Add new nimble.paths and config.nims 2026-05-13 17:40:56 +02:00