vSphere Replication throughput test with IPerf

How fast is fast?

Most use cases for vSphere Replication have a VM replicating between datacenters, whether it’s between company-owned facilities, to a colo, or a cloud like VMC on AWS. A big part of how fast your VMs will replicate is down to the WAN speed but how do you know where the bottlenecks are?

Handily the vSphere Replication appliance already comes with iperf3 https://iperf.fr/. Equally handily ESXi comes with iperf3 as well.

  Replication traffic will originate on the ESXi host where the VM is running. The destination will be the vSphere Replication Server on the destination site. With iperf3 on both sides, we can simulate the same path as the actual replication traffic takes.

Configuring the vSphere Replication Server as the IPerf3 Server

The first challenge is that the VR appliance has the firewall enabled and unsurprisingly IPerf3 isn’t allowed.

systemctl status iptables

iptables service status

iptables -nL

List firewall rules

Rather than turning it off completely or making a permanent change we can open a port for IPerf3 temporarily.

iptables -A INPUT -p tcp --dport 5201 -j ACCEPT

Allow TCP 5201

We will setup the VR appliance as the IPerf3 server so it will listen for the client. In this setup I have vSphere Replication network traffic on a separate VLAN with a separate vmk on the ESXi hosts and the VR appliances. So to test properly I need to setup the IPerf3 server to also work on this network. I do that with the –bind option and specify the IP of the interface.

iperf3 --server --port 5201 --bind 172.18.0.101

Start iperf3

ESXi host as the client

With the server side setup, we need to configure the ESXi hosts as IPerf3 clients. The ESXi firewall needs changed to allow outbound traffic. The easiest way to do this is just to turn it off.

esxcli network firewall get
esxcli network firewall set --enabled=false
esxcli network firewall get

Disable ESXi firewall

Now we are ready to run iperf3

/usr/lib/vmware/vsan/bin/iperf3 --client 172.18.0.101 --port 5201

Run iperf from ESXi

And on the server looks like this -

Run iperf from ESXi

This gives a pretty good idea of what bandwidth you can expect for the VM replications. It only tests from 1 ESXi host and to 1 VR appliance. We can get closer to a realistic test by including more ESXi hosts as clients.

More ESXi hosts as clients

To simulate multiple VM replications we need to have multiple IPerf3 transfers running concurrently. Here I will add 2 more ESXi hosts as clients and setup 2 more IPerf3 servers on the VR appliance

On the VR appliance I open 2 more ports and start 2 more IPerf3 servers

iptables -A INPUT -p tcp --dport 5202 -j ACCEPT
iptables -A INPUT -p tcp --dport 5203 -j ACCEPT

Run iperf from ESXi

iperf3 --server --port 5202 --bind 172.18.0.101
iperf3 --server --port 5203 --bind 172.18.0.101

Run iperf server 5202 Run iperf server 5203

On 2 more ESXi hosts I turn off the firewall and run IPerf3 clients Looking across the output of the IPerf3 servers on the VR appliance

Run iperf client 5201 Run iperf client 5203 Run iperf client 5203

I get 500 + 277 + 274 = 1,051 Mbits/sec

This compares pretty much with the result from only 1 ESXi host which shows that the network is the constraint with the available bandwidth being split across the 3 connections.

Finally let’s check that the VR appliance isn’t the bottleneck. From top I can see the 3 iperf3 processes are using roughly 20% CPU each. Its worth keeping an eye on the CPU but this isn’t the bottleneck.

VR appliance top output

Clean-up

We must remember to enable the ESXi firewall again as that change is persisted. The VR appliance changes won’t be kept after a reboot.

Written on April 14, 2021