Best Practices: Measuring Bandwidth on Microsoft Virtual Server
Overview
Measuring bandwidth for Microsoft Virtual Server environments (including older Microsoft Virtual Server and modern Windows-based VM hosts) requires combining host- and guest-level metrics, controlled test tools, and consistent methodology to get meaningful results. This guide gives a concise, actionable checklist and step-by-step procedures to measure bandwidth accurately, plus tips to avoid common pitfalls.
Goals to set before testing
- Objective: throughput (max sustained Mbps), utilization (% of link), or latency/jitter?
- Scope: single VM, VM-to-VM, host aggregate, or cross-host?
- Baseline conditions: CPU, memory, disk I/O, and background traffic minimized or recorded.
Tools (recommended)
- ntttcp / NTTTCP-for-Linux — Microsoft-supported throughput tester for Windows/Linux.
- iPerf3 — widely used cross-platform throughput and latency tests.
- OS counters / PerfMon (Windows) — Network Interface, TCPv4, and Process counters.
- Host monitoring: Hypervisor/host NIC stats, switch port counters, and sFlow/NetFlow if available.
- Packet capture (optional): Wireshark/tcpdump for troubleshooting anomalies.
Test environment setup (do these every time)
- Isolate test traffic: run tests on an isolated VLAN or dedicated NICs to avoid interference.
- Match MTU/jumbo frames: set identical MTU on sender, receiver, host, and switch if testing large transfers.
- Disable nonessential services/antivirus on test VMs that can alter throughput.
- Ensure NIC offloads consistent: check and document offload settings (TCP Chimney, RSS, Large Send Offload).
- Use same VM size and placement: for repeatability keep VM flavors and host placement constant.
- Allow firewall rules: permit test tool traffic on both endpoints.
Measurement procedure (recommended standard test)
- Choose two endpoints: sender VM and receiver VM. Prefer VMs on the same host for host-local tests and on different hosts for network path tests.
- Run a short verification: 10–30s single-stream test to confirm connectivity.
- Run main test: 300 seconds (5 minutes) with multiple streams to saturate NICs (ntttcp and iperf3 support parallel streams). Longer duration smooths transient variance.
- Example (ntttcp): run receiver then sender with -t 300 and appropriate -m (threads).
- Example (iperf3): iperf3 -s on receiver; iperf3 -c-P 8 -t 300 on sender.
- Repeat tests at different times and under different loads (idle vs. typical workload). Run at least 3 runs and take median.
Metrics to record
- Throughput (Mbps) — sustained bits/sec from test tool.
- Packet loss and retransmits — from test tool and TCP counters.
- Latency/jitter — round-trip time where relevant.
- Host NIC counters: bytes/sec, drops, errors, TX/RX queue length.
- Guest OS counters: Network Interface bytes/sec, TCP segment retrans/sec, CPU % during test.
- Switch port stats: utilization, errors, discards.
Record timestamp, VM placement, test parameters (streams, duration, MTU, offloads).
Interpreting results & common causes of limited throughput
- CPU bottleneck: high CPU on sender/receiver reduces achievable throughput. Check CPU util during test.
- NIC offload mismatches: improper offload settings in guest vs. host can reduce performance.
- Host NIC saturation: many VMs sharing a single physical NIC will contend; use NIC teaming or additional physical NICs.
- Virtual switch or driver limits: outdated VM tools/drivers or virtual NIC type (use synthetic high-performance adapters where available).
- Switch/config limits: flow-control, QoS, or spanning-tree behavior can throttle traffic.
- MTU mismatch: prevents jumbo frame benefits or causes fragmentation.
- Network policies or egress throttles: cloud or hypervisor-enforced egress limits (documented per VM size).
Best-practice tuning checklist
- Use the highest-performance virtual NIC supported (e.g., VMXNET3 on VMware or Hyper-V synthetic NIC).
- Keep virtual NIC drivers and VM integration tools up to date.
- Enable RSS (Receive Side Scaling) and ensure vCPU count matches RSS queues for scaling.
- Consider NIC teaming or SR-IOV where supported to increase throughput and reduce host CPU overhead.
- Use dedicated physical NICs or VLANs for heavy VM traffic.
- Tune TCP window sizes for high-bandwidth, high-latency links if testing across WAN.
- Monitor host and switch counters continuously during tests to find mismatches.
Troubleshooting steps (quick)
- Confirm single-run reproducibility with iperf3/ntttcp.
- Check CPU and disk I/O; eliminate non-network bottlenecks.
- Compare guest and host NIC counters — if host shows higher bytes than guest, inspect virtual switch.
- Capture packets to find retransmits or abnormal TCP behavior.
- Swap to a Linux VM test pair — Linux often achieves higher raw throughput for diagnosis.
- Update virtualization drivers and retry.
Reporting template (copy/paste)
- Test date/time:
- Sender VM: (name, host, vCPU, RAM)
- Receiver VM: (name, host, vCPU, RAM)
- Placement: same-host / cross-host / cross-rack
- Tool & version: (ntttcp / iperf3 + flags)
- MTU / offloads / NIC type:
- Test duration & streams:
- Throughput results (3 runs): Mbps (median):
- CPU % sender/receiver during test:
- Packet loss / retransmits:
- Host NIC and switch counters summary:
- Notes / suspected bottleneck / next steps:
Quick actionable summary
- Use ntttcp or iperf3, run 5-minute multi-stream tests, record host and guest counters, and repeat runs.
- Isolate test traffic, match MTU and offload settings, keep drivers updated, and monitor CPU.
- If throughput is low, compare guest vs. host counters, check for CPU or NIC saturation, and test with Linux endpoints to isolate OS/driver issues.
Date: February 10, 2026.
Leave a Reply