Ostinato for MacOS Maximum Transmit Rate

2 minute read

Update (2021): Ostinato now supports 10G, 25G and 40Gbps line-rate rate traffic using the Turbo Transmit add-on.

In my last post, I presented results for a maximum transmit rate performance test on the Ostinato 0.9 Live ISO. I intended to repeat that for all platforms, but life got in the way.

I got some time today, so I did a test on MacOS with the same Ostinato 0.9 version as the Live ISO.

I configured a single stream, again same as earlier -

  • Protocols: Mac, Ethernet II, IPv4, UDP, Pattern
  • Source and Destination Mac addresses populated with the actual Mac addresses of the source and sink
  • Source and Destination IP addresses populated with the actual IP addresses of the source and sink
  • Packets/sec: 0
  • Number of packets: 10 (default)
  • After this stream: Goto first

Performance figures

Here are the numbers -

Packet Size Max Rate (Kpps) Max Rate (Mbps)
64 755 507
128 695 823
256 448 989
512 233 992
1024 119 994
1518 81 997

Mbps rate was calculated using the below formula to take into account the ethernet line overhead of 20 bytes (1 byte SFD + 7 byte preamble + 12 byte inter-packet gap) -

Rate (in Mbps) = (PacketSize + 20) * kppsRate * 8 / 1000

Specs

Software

Hardware

  • MacBook Pro
  • Processor: Intel Core i7 @ 2.5GHz (4-core), Hyperthreading on
  • RAM: 16GB
  • Thunderbold to Gigabit Ethernet Adaptor

Observations

  • Max line rate (well - quite close to it) is reached for 256 byte packets and larger, same as the Live ISO
  • For smaller packet sizes, the MacOS version performs better (64 - 507Mbps, 128 - 823Mbps) than the Linux ISO (64 - 403Mbps, 128 - 702Mbps)
  • Although the underlying hardware and OS is different, I think the primary reason for the better performance is because of the OS - with Linux, only one core reaches 100% CPU during the test, but with MacOS (which is based on BSD) two processes show usage >= 100% - drone and kernel_task.
  • Looking at per core CPU usage/history in activity monitor, 4 (out of 8 vCPUs) show usage between 50 to 60%
  • I can’t seem to figure out how to see per thread CPU usage or the associated core for a thread to dissect futher - (if you know how to get this info, please share in the comments below)

Leave a Comment