# Microbenchmark and tune network performance with iPerf3 and Linux traffic control

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/servers-and-cloud-computing/microbenchmark-network-iperf3/)
- [Set up Arm-based Linux systems for network performance testing with iPerf3](https://learn.arm.com/learning-paths/servers-and-cloud-computing/microbenchmark-network-iperf3/setup/)
- [Microbenchmark the network connection](https://learn.arm.com/learning-paths/servers-and-cloud-computing/microbenchmark-network-iperf3/basic-microbenchmarking/)
- [Simulate different network conditions](https://learn.arm.com/learning-paths/servers-and-cloud-computing/microbenchmark-network-iperf3/simulating-network-conditions/)
- [Tune kernel parameters](https://learn.arm.com/learning-paths/servers-and-cloud-computing/microbenchmark-network-iperf3/tuning/)
- [Next Steps](https://learn.arm.com/learning-paths/servers-and-cloud-computing/microbenchmark-network-iperf3/_next-steps/)

## About this Learning Path

| Skill level:       | Introductory         |
|--------------------|----------------------|
| Reading time:      | 30 min               |
| Last updated:      | 29 Sep 2026          |

| Author:              | Kieran Hejmadi, Arm ![GitHub](https://github.com/kieranhejmadi01) ![LinkedIn](https://linkedin.com/in/kieran-hejmadi-88920815b) |
|----------------------|--------------------------------------------------------------------------------------|
| Arm IP:              | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| Tags:                | [Performance and Architecture](https://learn.arm.com/tag/performance-and-architecture), [AWS Graviton](https://learn.arm.com/tag/aws-graviton), [Microsoft Azure Cobalt](https://learn.arm.com/tag/microsoft-azure-cobalt), [Google Axion](https://learn.arm.com/tag/google-axion), [Oracle Cloud Infrastructure (OCI) Ampere Compute](https://learn.arm.com/tag/oracle-cloud-infrastructure-oci-ampere-compute), [Linux](https://learn.arm.com/tag/linux), [iPerf3](https://learn.arm.com/tag/iperf3) |

### Who is this for?
This is an introductory topic for performance engineers, Linux system administrators, and application developers who want to microbenchmark, simulate, or tune the networking performance of distributed systems.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Run accurate network microbenchmark tests using iPerf3.
- Simulate real-world network conditions using Linux traffic control (tc).
- Tune basic Linux kernel parameters to improve network performance.

### Prerequisites
Before starting, you will need the following:
- Basic understanding of networking principles such as Transmission Control Protocol/Internet Protocol (TCP/IP) and User Datagram Protocol (UDP).
- Access to two [Arm-based cloud instances](https://learn.arm.com/learning-paths/servers-and-cloud-computing/csp/).

### Summary
You’ll measure TCP and UDP network performance between Arm-based Linux systems with iPerf3. First, you’ll configure a server and client, choose an alternate port when needed, and confirm that the server is listening. Next, you’ll identify the active interface and use Linux traffic control to introduce delay and loss, then compare the results. Finally, you’ll apply basic kernel tuning and test traffic between a local machine and a cloud instance.

### Frequently asked questions

<details>
<summary>How do I know that the iPerf3 server started correctly?</summary>
Confirm that the server prints output similar to `Server listening on 5201 (test #1)`. If the default port is busy, restart it on another port with the `-p` option.
</details>

<details>
<summary>What should I check if the client can't connect to the server?</summary>
Verify network reachability and confirm that you used the correct IP address or hostname. Ensure that your cloud security group allows inbound TCP traffic to the selected iPerf3 port.
</details>

<details>
<summary>Which system do I run the iPerf3 server and the test on?</summary>
Start iPerf3 in server mode on the system designated as `SERVER`. Run the test from the other system, which acts as the client.
</details>

<details>
<summary>How do I choose the network interface when applying Linux tc?</summary>
Run `ip addr show` on the client to identify the active network interface. Use that interface name, such as `ens5`, when you apply delay or loss with `tc`.
</details>

<details>
<summary>What result should I expect after adding delay or testing from a local machine to the cloud?</summary>
Rerun iPerf3 and compare its output with your instance-to-instance baseline. Use the measured throughput, jitter, and packet-loss values to see how the new network conditions affect performance.
</details>
