Netperf is a benchmark that can be used to measure the performance ofmany different types of networking. It provides tests for bothunidirectional throughput, and end-to-end latency. The environmentscurrently measureable by netperf include:
Here are some of the netperf services available via this page:Download Netperf Clone or downloadvarious revisions of the Netperf benchmark.Netperf Numbers Submit and Retrieve Netperf results from the Netperf Database.Netperf Training View the Netperf manual or whitepapers on using Netperf.Netperf Feedback Providefeedback on the benchmark or the pages.Other Resources The network performance world does not live on netperf alone.Happy Benchmarking!
It's probably because one of the machines is using a poorly tuned TCP window (netperf apparently calls this the Recv Socket Size). During the TCP 3-way handshake that opens a TCP connection, each host communicates what size TCP window it can handle on receive, so the other host knows how much data to put in-flight before waiting for a TCP Ack.
To calculate a proper TCP window to use, you need to calculate your "Bandwidth * Delay Product" (BDP). Ping one machine from the other and note the ping time. On my busy GigE LAN, it's about 1ms right now. I think that's a bit high for GigE, but let's go with it since one end of your link is just 100BASE-TX.
Then again, if you're using a modern OS like Windows 8.x, this Answer shouldn't apply, because your hosts should have automatic TCP window tuning, so the initially-reported values might not be trustworthy. If you're using an ancient OS like Windows XP, or if automatic TCP window tuning is disabled or not working for some reason, then this applies.
The three key measures of network performance are latency (the time required to transfer data across the network), throughput (the amount of data or number of data packets that can be delivered on an IP network in a predefined timeframe) and jitter or delay jitter (the changes and their duration in delay that occur during transfers).
In this blog post, I will show you how to measure throughput using NetPerf and iPerf, two open source network performance benchmark tools that support both UDP and TCP protocols. Each tool provides in addition other information: NetPerf for example provides tests for end-to-end latency (round-trip times or RTT) and is a good replacement for Ping, iPerf provides packet loss and delay jitter, useful to troubleshoot network performance. Choosing one or the other tool depends on your use-case and the test you are planning to achieve. Note that for the same input parameters, the tools can report different bandwidths, as they are not designed the same.
I will use the default parameters and run each test for 5 minutes (300 seconds). For a good report, it is recommended to run the tests multiple times, at different times of the day, with different parameters.
NetPerf and iPerf have a client and server functionality, and must be installed both on the server and the client from where you are conducting network performance tests. For each tool I will provide the most common parameters, and conduct tests between a client (1GB MEM) and a server (1GB MEM) and in my LAN (Local Area Network), and between a client and a remote server (in a WAN).
$ netperf -H HOST -l 300 -t TCP_STREAM
MIGRATED TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to (null) () port 0 AF_INET : histogram : spin interval
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
UDP does not provide an end to end control flow, when testing UDP throughput make sure you specify the size of the packet to be sent by the client. Always read the receive rate on the server, since UDP is an unreliable protocol, the reported send rate can be much higher than the actual receive rate.
Often times an application can slowly start leaking memory and eventually result in an out of memory exception. Other times, certain problematic code paths may result in a spike in CPU utilization. These are just some of the classes of problem you can pro-actively identify with metrics.
EventCounters offer an improvement over Windows perf counters as these are now usable on all OSes where .NET Core is supported. Additionally, unlike perf counters, they are also usable in low privilege environments (like xcopy deployments). Unfortunately, the lack of a tool like Performance Monitor (perfmon) made it difficult to consume these metrics in real time.
While metrics help identify the occurence of anomalous behavior, they offer little visibility into what went wrong. To answer the question why your application has anomalous behavior you need to collect additional information via traces. As an example, CPU profiles collected via tracing can help you identify the hot path in your code.
Traces are immutable timestamped records of discrete events. Traces contain local context that allow you to better infer the fate of a system. Traditionally, the .NET Framework (and frameworks like ASP.NET) emitted diagnostic traces about its internals via Event Tracing for Windows (ETW). In .NET Core, these trace were written to ETW on Windows and LTTng on Linux.
As a result of running dotnet trace you are presented with a .netperf file. This file contains both the runtime events and sampled CPU stacks that can be visualized in perfview. The next update of Visual Studio (16.1) will also add support for visualizing these traces.
In some cases, it is not possible to ascertain what caused anomalous behavior by just tracing the process. In the event that the process crashed or situations where we may need more information like access to entire process heap, a process dump may be more suitable for analysis.
A dump is a recording of the state of working virtual memory of a process usually captured when the process has terminated unexpectedly. Diagnosing core dump is commonly used to identify the causes of application crashes or unexpected behavior.
Traditionally, you relied on your operating system to capture a dump on application crash (e.g., Windows Error Reporting) or used a tool like procdump to capture a dump when certain trigger criteria are met.
Thanks for trying out the new diagnostics tools in .NET Core 3.0. Please continue to give us feedback, either in the comments or on GitHub. We are listening carefully and will continue to make changes based on your feedback.
All the repositories are running a year or more behind the current flent versionon github. My advice generally has been to install flent via your packagemanager, get everything it depends on running, then try the git version. Thereare a lot of dependencies for the GUI, all different.
Despite the title of this blog entry, I love flent, and how useful ithas been in all my work building better networks and devices but I felt the need here to express what itdoes and where you can go wrong, when using it.
Automatedly, flent can generate plots for any given test, post-hoc, in anyformat - be they pngs for the web, or high resolution pdfs or svgs forpublication, or it can merely output a .csv file for further analysis.
Flent comparison plots are most useful for disproving to statisticsminors that Gaussian statistics measure anything useful when it comes tonetwork behavior! You should care an awful lot about everything abovethe 95th percentile, for example, and most stats folk just chop that offbefore even starting an analysis.
Amdahls law applies quite firmly to network behaviors - thetotal time to complete a string of network transactions is bound by the speed ofthe slowest portion of the transaction. Recently I saw that someone hadindependently rediscovered that 50 year old law and called it something else. Sigh.
I have many, many examples of averages misleading. One of the most egregious wasa Qualcomm ath10k chip test of 100 flows - where the bufferbloat was so bad,that only 5 flows could even start! Their box was passing their original testbecause it hit the bandwidth number with just the 5 flows, leaving the other 95 out in the cold.
So I stress that while relying on any one test overmuch is a tad foolish,discarding a test for a consistently bad result, and hiding under the bed,worse. The RRUL test was designed to break everything on the Net I knew to bebroken in 2012, in under 60 seconds. Life is too short to put up with bad networks. Yes, long tests lose userinterest quickly, but you still should do them to keep yourself, and your ISP, honest.
One example of how short testing can screw you up was the maddeningWiFi short period anomaly is here -where months of 1 minute long test data were sometimes permuted by aWiFi channel scan and we only figured that out extending the length ofthe test to 5 minutes, from 1.
We found another network crash bug, once, that took 26 minutes ofcontinuous testing to tickle. And another, with a counteroverflow in odhcp6 that took 51 days to hit and hammered your networkperpetually afterwards. Thank GHU for FQ!
The original RRUL specificationspecified isochronous traffic and wanted one way delay (OWD) for the measurementflows and also timestamps within the TCP flows, not just in the TCP timestampoption This turned out to be (way) too hard to implement in 2013, and in flent, even today.
A huge flaw in much network research today is that researchers tend to focus onachievable speeds in the lab - or - focusing on the 100Gbit range - and nothingin-between, where all the real end-users are. Another flaw most researchersignore is not testing asymmetric networks where the download and uploadbandwidth ratios are 10x1, or worse.
Our focus with flent has been measuring actually achieved rates in the field,which for ISPs ranges from 384k up to a gigabit - and also measuring queuedepth, cpu overhead, packet loss or marking, etc. Some binding variables thereinclude the size of the initial window also, but pacing, receive and sendbuffering, and slow start factor into play also. Users and ourselvesare also frequently misled by fundamental characteristics of the Cubic and Renocongestion control algorithms: at higher speeds, loss rates drop dramatically,and its hard to achieve full bandwidth with just one flow in a short period.
7fc3f7cf58