Proving Gig Speed

Saku Ytti saku at ytti.fi
Tue Jul 17 08:54:17 UTC 2018


On Tue, 17 Jul 2018 at 10:53, James Bensley <jwbensley at gmail.com> wrote:

> Virtually any modern day laptop with a 1G NIC will saturate a 1G link
> using UDP traffic in iPerf with ease. I crummy i3 netbook with 1G NIC
> can do it on one core/thread.

I guess if you use large packets this might be true. But personally,
if I'm testing network, I'm interested in latency, jitter, packet, bps
_AND_ pps goals as well, not just bps goal. And I've never seen clean
1Gbps on iperf with small packets. It just cannot be done, even if
iPerf was written half decently and it used recvmmsg, it still
wouldn't be anywhere near.
Clean 1Gbps with small packets in user space is actually very much
doable today, just you can't use UDP socket, you must use AF_PACKET on
Linux or BPF on OSX and you can write portable 1Gbps UDP
sender/receiver.
I'm very surprised we don't have iperf like program for netengs which
does this and reports latency, jitter, packet loss with binary search
for highest lossless pps/bps rates.

I started to write one with Anton Aksola in Rust (using libpnet[0]),
and implemented quite flexible protocol (server/client, client can ask
server exactly what kind of packet to construct/expect, what rate to
send/receive over JSON based protocol), so you could also use it to
ask it to DDoS your routers control-plane in lab etc. And actually got
it working, OSX+Linux ~wirarate (still needs higher end laptop to do
1.5Mpps on single core and we didn't implement multicore support). But
as both of us are trash in Rust (and every other applicable language
in this domain), we kind of dropped the project once we had sufficient
POC running on our laptops.
Someone who actually can code, could easily implement such program in
a weekend. I'm happy to share the trash we've done if someone intends
to check this box in open source world. May use it for inspiration, or
just straight up add polish and enough CLI to make it usable as-is.

I think very important quality is multiplatform with static binaries.
Because important use case is, that you can ask modestly informed
customer to copy paste one line to donwload server and copy paste
another line to have it running.
If use case is that both ends have arbitrary clued people, then there
are plenty of good solutions, like Cisco's trex[1]. But what I need is
iPerf-like program, which actually a) performs and b) reports the
correct things.

[0] https://github.com/libpnet/libpnet
[1] https://trex-tgn.cisco.com/
-- 
  ++ytti



More information about the NANOG mailing list