Ramp interactively
Start somewhere comfortable and use the hotkeys.-d 0 runs until you stop it. Then:
+raises the rate 10%,-lowers itgswitches the graph between packets/sec and bits/secrzeroes the visible counters after each change, so you’re reading the new steady state rather than an average that includes the old one
Errors starts moving.
Or jump straight to unlimited
Frame size changes everything
Small frames are a packet-rate problem; large frames are a bit-rate problem. They fail differently, so test both:Reading the failure
Actual rate below set, TX errors zero
Actual rate below set, TX errors zero
The sender can’t build packets fast enough. Try more queues:Rates are aggregate, so more queues shouldn’t change the target, only whether the box can reach it. If
--queues 1 and --queues 12 give the same number, adding cores isn’t your problem.Also check you got native XDP and zero-copy in the header. Generic mode or copy mode will cap you well below the hardware.TX errors climbing
TX errors climbing
The kernel is rejecting descriptors. Usually the packet is bigger than the interface MTU, or bigger than a UMEM frame. Wireblast checks both before starting, so mid-run errors are worth investigating rather than ignoring.
Sender is fine, receiver drops
Sender is fine, receiver drops
You’ve found the receiver’s limit, not the sender’s. Per-queue detail appears under the dashboard:“Ring full” means packets arrived faster than they were collected. More queues on the receiver is the first thing to try.
Both ends fine, but packets go missing
Both ends fine, but packets go missing
The path is dropping them: a policer, a shaper, a congested uplink, or a link that isn’t the speed you assumed. Neither end will show errors, because neither end is at fault. That’s the signature.
Isolating variables
The useful property is that a run is deterministic. The same flags produce the same packets in the same order, so you can change one thing at a time and trust the comparison.--pps, --duration, --flows or ports doesn’t require reattaching XDP, so in the TUI you can press e, change one number, and be running again in seconds. Changing --queues does force a reattach and another link bounce.
Example 019 runs the queue sweep for you.
A reference point
Aggregate rate holds steady regardless of queue count. Measured on a 10G ixgbe NIC at--pps 1M:
That’s what a working rate limiter looks like. If your numbers drift with queue count, something else is going on.
Line rate, for reference
10G, for the sizes above:
L1 includes the preamble, start-frame delimiter and interframe gap, which is why 64-byte frames cap at 14.88 Mpps rather than 19.5. See reading the numbers.