Skip to content

hummingbird: hummbwtester as a PoC application - #67

Open
juagargi wants to merge 37 commits into
hummingbird-endhostfrom
hummingbird-bwtester
Open

hummingbird: hummbwtester as a PoC application#67
juagargi wants to merge 37 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).

Fixes #69


This change is Reviewable

juagargi added 10 commits July 22, 2026 13:15
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.
@juagargi
juagargi force-pushed the hummingbird-bwtester branch from 3acc7bb to a472d57 Compare July 24, 2026 05:51
@juagargi
juagargi force-pushed the hummingbird-bwtester branch from a472d57 to 47df401 Compare July 24, 2026 06:06
juagargi added 17 commits July 24, 2026 08:07
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.
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.
@juagargi
juagargi marked this pull request as ready for review August 3, 2026 11:24
But discard those that are older than the last valid pong response
received by the client.
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