Skip to content

hummingbird: hummbwtester as a PoC application - #67

Merged
juagargi merged 47 commits into
hummingbird-endhostfrom
hummingbird-bwtester
Sep 8, 2026
Merged

juagargi merged 47 commits into
hummingbird-endhostfrom
hummingbird-bwtester

Conversation

@juagargi

@juagargi juagargi commented Jul 14, 2026 •

Copy link
Copy Markdown
Owner

Add hummbwtester as a PoC application to showcase Hummingbird.

  • Basic bwtester-like application.
  • Hummingbird support, with bidirectional reservations.
  • Best-effort capable.
  • Prometheus metrics at the client only.
  • Basic Prometheus and Grafana configuration (starter kit).
  • Merge Hummingbird marketplace modifications #74
  • Support the marketplace.

Adapt border router with findings from running hummbwtester:

  • Configurable BR queue sizes.
  • Extend BR metrics with queue sizes, etc.

Fixes #69


This change is Reviewable

@juagargi
juagargi force-pushed the hummingbird-bwtester branch 2 times, most recently from a472d57 to 47df401 Compare July 24, 2026 06:06
@juagargi
juagargi marked this pull request as ready for review August 3, 2026 11:24
Add two docker containers, one for Prometheus, one for Grafana.
Add a preconfigured dashboard to Grafana.
- Observe only the client, nothing from the server.
- The server does not export any Prometheus metric anymore.
- Pong responses now contain the number of bytes received at the
server side.
- Use only the client's clock to derive rates, RTT, etc.
- Adapt Grafana board.
Add configurable topology setup, tc bandwidth shaping, and orchestration
for Hummingbird and best-effort clients in tester containers.
Expose client-only Prometheus metrics and update Grafana monitoring.
Use random Hummingbird reservation IDs and add tests and documentation.
Reservation parameters, payload size, pong rate, and renewal fraction
are now configurable at the hummbwtester.json file.
Run tc inside the border router namespace, so that
it shares buffers with the egress socket.
When tc shares buffers, the enqueued packets in tc
actually live in the egress socket buffer,
creating back pressure (via EAGAIN) on the sending
logic.
With BatchSize=1, this completely blocks the border
router from attempting to enqueue more packets into
the socket, which in turn slows down the sending rate.
We want to define small batch sizes for egress,
but keep the ingress batch and buffer sizes big enough
not to affect performance.
Make explicit the size of the processor queue size.
This allows to soften the compute peaks needed by the BR when new
packets arrive that cannot be processed currently,
without modifying the ingress batch size config parameter.
@juagargi
juagargi force-pushed the hummingbird-bwtester branch from 03e5917 to d843655 Compare September 1, 2026 07:31
Increase the read buffer of the underlying UDP socket,
allowing to store more packets before the kernel drops
them due to border router ingress being slow.

Using SO_RXQ_OVFL report the number of dropped packets at the
Linux socket level (before reaching the border router).
…t deadline.

Server sets the native Linux receive buffer to a configurable amount.
Client doesn't send all remaining packets trying to catch up with
the nominal rate after a lost deadline, to avoid big bursts.

Add more metrics to Grafana, in particular the dropped packet count at
native Linux receive sockets.
But discard those that are older than the last valid pong response
received by the client.
The setup script now finds the JWT from the
marketplace client registration website.

Experiment configuration supports modes "keys" and "marketplace".
Bandwidth units are necessary for marketplace mode.
Add tests.
Make sure that the clients in our local topology do not run out of funds
when acquiring reservations by bumping the initial balance to 1
billion.
@juagargi
juagargi force-pushed the hummingbird-bwtester branch from 2d21272 to 0a804a6 Compare September 8, 2026 07:25
This encapsulates finding one marketplace fully covering the path,
obtaining the forward reservation, optionally the reverse one,
and preparing both returning a snetpath.Reservation.
- hummbwtester_client_reservation_renewals_total
- hummbwtester_client_market_roundtrip_seconds
- hummbwtester_client_pacing_overrun_total
- hummbwtester_client_pacing_delay_seconds
Remove dots not coming where the actual measurement happened.
@juagargi
juagargi merged commit d2b6916 into hummingbird-endhost Sep 8, 2026
4 of 7 checks passed
@juagargi
juagargi deleted the hummingbird-bwtester branch September 8, 2026 11:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant