iPerf3 This OS Does Not Support Sendfile

Posted on

When we find a problem in using something especially about technology, sometimes it makes us annoyed. Some of you now may be facing an iPerf error which says that this OS does not support sendfile. If this thing happens, what thing can we do to fix it?

When we tried to look for information about it, actually we could not find it. So, if now you are facing iPerf This OS Does Not Support Sendfile error, you are able to visit some forums and then you are able to ask others about it. If you are lucky, you will be able to find a thread about it. But if not, you are able to make a thread there and then ask about this issue. As you may also know that there are a number of forums including forums about technology. So, you are able to visit one of them to find the correct information.

However, instead of finding information about iPerf3 This OS Does Not Support Sendfile, we found another issue that is the iperf 3.1.3 -b option does not work. We found this in the Github. On that site, a user named solarcom78 states that after he installed iperf3 3.1.3 on his Ubuntu 64 machine, he notices that option -b ## does not seem to work. Then, he shows the log on that forum. From this thread, there are some people who respond.

A user named bmah888 says that he thinks that he knows what the problem is. He says that -b cannot work right except we have set the FQ queueing discipline for whatever interface that we are using . In the other words, we have to do this on Linux systems where it is supported:

tc qdisc add dev eth0 root fq

Furthermore, he says that this is a problem. Basically, when we added the fair queueing pacing support and turned it on by default, we made -b break on a lot of default configurations of Linux, out of the box.

Then, another user named bltierney suggests him to check to see whether the setsockopt system call to set SO_MAX_PACING_RATE fails. If it happens, then you have to revert the old method. In addition, he also says that for the perfSONAR usecase, not have the current default behaviour  means altering a lot of other code. Also, he says that he is using bwctl with the -b option to be able to diagnose switch buffer problems for SC16. On a CentOS7 host, it works and paces traffic letting him for the right send rate for a given path.

In another thread in Github, you are able to find a thread about Problems with -f (send to / receive from ) file. A user named shd2015 tells that when he uses the -F option at the server, he sees 100% data loss and some rubbish gets written into the file. He wonders what mistake which he makes and why it is discarding all the data. Then, he also tells that if he removes -f option at the server, and then the client can read from the file specified and send the data until all the data is sent. He sees 2 to 3 datagram loss and data rate of 4.5Gbps. You can find the answer by visiting the forum. And hopefully, you can also find information that you are looking for about iPerf about the OS which does not support sendfile.


If we talk about sendfile, actually it is one of the features that you are able to find in iPerf 3.0. In iPerf 3.0, there are new features and one of them is zerocopy. It means that it uses a zero copy sendfile() method of sending data. It is important for you to know that it uses much less CPU. Here are some other new features in iPerf 3.0:

  • It has dynamic server (client/server parameter exchange). Now, we can set most iPerf server options dynamically by the client.
  • There is a client/server results exchange.
  • A server of iPerf3 accepts a single client simultaneously.
  • There is the iPerf API (libiperf). It provides a way which is easy to use, customize and extend iPerf functionality.
  • -R. It reverses test mode. Server sends and the client receives.
  • -O, –omit N : omit the first n seconds (and it is done to ignore TCP slowstart).
  • -b, –bandwidth n[KM] for TCP (only UDP for IPERF 2): It is for setting the target bandwidth to n bits/sec (the default is 1 Mbit/sec for UDP, and it is unlimited for TCP).
  • -V, –verbose : It is a more detailed output than before.
  • -J, –json : It means that output is in JSON format.
  • -Z, –zerocopy : It uses a ‘zero copy’ sendfile() method of sending data. It is important to know that this uses much less CPU.
  • -T, –title str : It will be able to prefix every output line with this string.
  • -F, –file name : xmit/recv the specified file.
  • -A, –affinity n/n,m : it can set CPU affinity.
  • -k, –blockcount #[KMG] : It is the number of blocks (packets) to be able to transmit (instead of -t or -n).
  • -4, –version4 : only use IPv4.
  • -6, –version6 : only use IPv6.
  • -L, –flowlabel : It can set IPv6 flow labels (but is for Linux only).
  • -C, –linux-congestion : It can set congestion control algorithms (Linux and FreeBSD only) (-Z in iPerf2).
  • -d, –debug : emit debugging output. Mainly (perhaps exclusively) of use to developers.
  • -s, –server : iPerf2 is able to handle multiple client requests. iPerf3 will only permit one iperf connection at a time.

What Is Iperf

Iperf is a tool which is used to measure  and tune the network performance. It has client and server functionality and it is able to create data streams to be able to measure the throughput between the two ends in one or both directions. The data stream is able to be TCP which is Transmission Control Protocol or UDP which is User Datagram Protocol.

When iperf is used to test UDP capacity, iperf permits you to be able to specify the datagram size and provides results for the datagram throughput and the packet loss. When iperf is used to test TCP capacity, iperf measures the throughput of the payload.

Leave a Reply

Your email address will not be published. Required fields are marked *