Giter Site home page Giter Site logo

iperf-ios's People

Contributors

comradekingu avatar loganmarchione avatar ndfred avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iperf-ios's Issues

Make tests more efficient to run

There are a few tricks on the iperf3 at 40Gbps and above page that could apply to tests on mobile devices too:

  • concurrency is not supported on regular iPerf3 tests, maybe using GCD would make that easier on iOS, or adding bwctl support to target multiple hosts at the same time
  • TCP slow start can skew results, tweak the TCP window or throw away the first 2 seconds of data
  • using sendfile (-Z) instead of read / write system calls might reduce CPU overhead (see disk testing)

Localization

I am saddened that the program is in English only.
I suggest to localize the program.
I am ready to assist in the translation into Russian.
(For example, you can use the service Crowdin or any other. Crowdin is free for Open source projects.)

issue to run application in xcode

When i trying this code in xcode a code error IPFHelpViewController.h file is not found. how to resolve this error? and how to use c file in objective c?

UDP test support

As title, could we support UDP test in the future? That should useful test! Thanks!

Warning when presenting an error

This is what the logs look like:

Warning: Attempt to present <UIAlertController: 0x7fb9aa818e00>  on <IPFTestRunnerViewController: 0x7fb9a9f10fa0> which is already presenting (null)`

Consider tweaking more options

A good iPerf testing article that goes into the different advanced options. Window size and UDP might be interesting to surface in the UI.

Jitter recommendations:

Ideally, jitter should be below 30ms. Packet loss should be no more than 1%, and network latency shouldn’t exceed 150 ms one-way (300 ms return).

Test run with 20 Mbits/s (but unidirectional and single stream) to match a FaceTime connection:

% iperf3 -uc 192.168.6.11 -b 20M
Connecting to host 192.168.6.11, port 5201
[ 5] local 192.168.6.60 port 53073 connected to 192.168.6.11 port 5201
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 2.38 MBytes 20.0 Mbits/sec 1726
[ 5] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1726
[ 5] 2.00-3.00 sec 2.38 MBytes 20.0 Mbits/sec 1727
[ 5] 3.00-4.00 sec 2.38 MBytes 20.0 Mbits/sec 1726
[ 5] 4.00-5.00 sec 2.38 MBytes 20.0 Mbits/sec 1727
[ 5] 5.00-6.00 sec 2.38 MBytes 20.0 Mbits/sec 1726
[ 5] 6.00-7.00 sec 2.38 MBytes 20.0 Mbits/sec 1727
[ 5] 7.00-8.00 sec 2.38 MBytes 20.0 Mbits/sec 1726
[ 5] 8.00-9.00 sec 2.38 MBytes 20.0 Mbits/sec 1727
[ 5] 9.00-10.00 sec 2.38 MBytes 20.0 Mbits/sec 1726


[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 23.8 MBytes 20.0 Mbits/sec 0.000 ms 0/17264 (0%) sender
[ 5] 0.00-10.00 sec 23.8 MBytes 20.0 Mbits/sec 0.210 ms 0/17264 (0%) receiver

iperf Done.

Cannot connect to the server from iPhone app

Issue

"Cannot connect to the server, please check that the server is running"

System

  • UDM-Pro
  • nano-HD AP
  • Three separate networks
    • LAN
    • Guest WiFi
    • IoT WiFi
  • MacBook Pro
  • iPhone XS Max

Steps to Repro

  1. On Mac: Install iperf3 via Homebrew.

  2. Start the server with iperf3 -s -D.

  3. Run iperf -c my-ip.
    All systems go!

  4. With server still running, open the iperf3 app on iPhone

  5. Type in my-ip (the same one as the Mac)

ERROR: "Cannot connect to the server, please check that the server is running" error.

Am I testing this correctly, should I be using my wi-fi network IP? The IP that my iPhone shows for WiFI?

Nothing seems to work but, with not very much documentation, there's a chance I'm screwing something up.

Any help is appreciated. Thanks

Surface herror / perror when iPerf fails

Bugs like #46 and #47 lack diagnostic data that would help understand why tests fail or the app fails to connect to the server, let's see if we can surface herror / perror to give people full context

Error while integrating iperf 3.0 files

Screenshot 2020-10-22 at 2 41 49 PM
Hi,

I am integrating iperf in framework I am developing in objective c for iOS and macOS. After copying source files of iperf3.0 (c files), I am getting error on iOS/macOS system files like NSObject, AppKit.h etc. I am not sure what I am missing. But iperf files showing error for arm64 like in screenshot attached.

Universal Framework Minimum Target:
iOS: 11.0
macOS: 10.11

Shared code for iOS and macOS framework developed mainly in Objective C

Look into licenses

Right now we only have the iperf license in the repo, look at it to see if it is compatible with App Store release and can cover the ObjC code as well, or pick another license.

Feature: Switch between IPv4 and IPv6

As I mostly use the app to compare the speeds of the mobile operators I use, it would be really time-saving to have a option to switch between a test based von IPv4 and IPv6 as a transport protocol. Of course this only makes sense as long as a Hostname with IPv4 and IPv6 address is used for the test.
The CLI-based clients have a similar option while using the -4 and -6 flags and drop a error if the given server does not support IPv4 or IPv6 depending on the given flag.

Keep the test running when in the background

Right now backgrounding the app or locking the phone will just freeze the application even if a test is running. If we end up supporting server mode, that won't run if the app is backgrounded. Adding the flag to prefer Wifi would also help with test reliability.

UI help needed?

Hi Frédéric,

I'd like to help out with testing and work on the UI if needed. I'm a product designer and came across your really useful application! Let me know if and how I can help out.

Lars

Look into the test data the client is sending to the server

Looking at send_results we can see that the client will dump a lot of useful information to the server:

{
"cpu_util_total": 18.970173953262933,
"cpu_util_user": 3.7781612782127576,
"cpu_util_system": 15.191864176430617,
"sender_has_retransmits": -1,
"streams": [{
"id": 1,
"bytes": 155892352,
"retransmits": -1,
"jitter": 0,
"errors": 0,
"packets": 0,
"start_time": 0,
"end_time": 10.000098943710327
}, {
"id": 3,
"bytes": 140762448,
"retransmits": -1,
"jitter": 0,
"errors": 0,
"packets": 0,
"start_time": 0,
"end_time": 10.000101804733276
}, {
"id": 4,
"bytes": 153085904,
"retransmits": -1,
"jitter": 0,
"errors": 0,
"packets": 0,
"start_time": 0,
"end_time": 10.000101804733276
}, {
"id": 5,
"bytes": 108328960,
"retransmits": -1,
"jitter": 0,
"errors": 0,
"packets": 0,
"start_time": 0,
"end_time": 10.000102996826172
}, {
"id": 6,
"bytes": 146596688,
"retransmits": -1,
"jitter": 0,
"errors": 0,
"packets": 0,
"start_time": 0,
"end_time": 10.000102996826172
}]
}

Maybe we can pick some of these up to provide better data in the UI. For reference, this is what the same completed test looked like in the app:

Test

running test doesn't seem to do anything

I am using an Ipad pro running 14.4.1, connecting to a server running on a mac.

Transmit mode upload, streams 1, test duration 10s.

I click start and I get "unknown error 114 running the test". I try again and get the same error. I try again and this time no error.. I just get "..." displayed below.

I wait 10 seconds and nothing happens. I click "Stop", nothing happens.

The server logs indicate it's connecting, but almost nothing is sent:

------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.6 port 5001 connected with 192.168.1.123 port 52998 (peer 112.28467.27250-unk)
[  5] local 192.168.1.6 port 5001 connected with 192.168.1.123 port 52999 (peer 98.30308.30839-unk)
[  6] local 192.168.1.6 port 5001 connected with 192.168.1.123 port 53000
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-62.4 sec  37.0 Bytes  4.75 bits/sec
[  5]  0.0-62.4 sec  37.0 Bytes  4.75 bits/sec
[  6]  0.0-62.4 sec  37.0 Bytes  4.75 bits/sec
[SUM]  0.0-62.4 sec   111 Bytes  14.2 bits/sec

I also tried download, and I got error 114 6 times, and then the "..."

Change the default server to empty

The default server is a public one that is constantly busy, changing it to empty now that we have a help section will be less confusing

Display the BSSID for the access point you are connected to

Good suggestion from an App Store customer review, so we can tell whether we're on 5 GHz or 2.4 GHz. Not sure this is still available today, worth a look:
https://gist.github.com/ethanhuang13/8db697f8254f6f5dffe6d194e5078062

Feature request: display the current BSSID of my iOS device. That would be very useful for knowing on which device (eero in my case), and which band (2.4, 5.2,5.8 ghz) I am currently connected to. That is accessible on iOS because I can see it on another (great) app (Net Analyzer).

Results history

It would be nice to have a results list from previous runs show up so we can compare the results.
Also if we can tag each test run with a location (Mostly to compare with previous or to to understand blind spots etc) it would help I think.

I have a very barebones implementation here
deepumukundan@69b52d1 but it is in Swift. If you are open to having some Swift (Mostly for the UI part), I can polish up the code a bit and add a persistence via Core Data and create a PR back.

UI for the change
IMG_9111

Unknown error 116 running the test

Symptom

When running the iPerf3 test with the default configuration (5 streams and 30s) the test runs fine. However when I increase the duration to 5 min, the test eventually gives the error "Unknown error 116 running the test" for more than half of the test runs and does not complete. This happens whether in 'Upload' or 'Download' transmit mode.

Client

Model Name: iPad (6th generation)
Software Version: iOS 14.3
iPerf 3 WiFi Speed Test Version: 3.6.11

Server

Model Name: Synology VirtualDSM
CPU: INTEL Pentium N3710
DSM Version: DSM 6.2.3-25426 Update 3
Software Version: iperf 3.9 (cJSON 1.7.13)

Server Log

admin@Demo-NAS:/$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from YY::YY:YY:YY:YY, port 57705
[  5] local XX::XX:XX:XX:XX port 5201 connected to YY::YY:YY:YY:YY port 57706
[  8] local XX::XX:XX:XX:XX port 5201 connected to YY::YY:YY:YY:YY port 57707
[ 10] local XX::XX:XX:XX:XX port 5201 connected to YY::YY:YY:YY:YY port 57708
[ 12] local XX::XX:XX:XX:XX port 5201 connected to YY::YY:YY:YY:YY port 57709
[ 14] local XX::XX:XX:XX:XX port 5201 connected to YY::YY:YY:YY:YY port 57710
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  9.85 MBytes  82.5 Mbits/sec                  
[  8]   0.00-1.00   sec  11.0 MBytes  91.8 Mbits/sec                  
[ 10]   0.00-1.00   sec  10.5 MBytes  88.2 Mbits/sec                  
[ 12]   0.00-1.00   sec  11.0 MBytes  92.2 Mbits/sec                  
[ 14]   0.00-1.00   sec  10.6 MBytes  88.5 Mbits/sec                  
[SUM]   0.00-1.00   sec  52.9 MBytes   443 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[Results - Approximately 140 sets]
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5] 146.00-147.00 sec  9.95 MBytes  83.5 Mbits/sec                  
[  8] 146.00-147.00 sec  9.52 MBytes  79.9 Mbits/sec                  
[ 10] 146.00-147.00 sec  10.0 MBytes  83.9 Mbits/sec                  
[ 12] 146.00-147.00 sec  9.63 MBytes  80.7 Mbits/sec                  
[ 14] 146.00-147.00 sec  9.89 MBytes  82.9 Mbits/sec                  
[SUM] 146.00-147.00 sec  49.0 MBytes   411 Mbits/sec                  
iperf3: the client has unexpectedly closed the connection
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

UDP Failure

Attemping to set the protocol to UDP via the method -

set_protocol(test , 2);

Sets all the test protocol items correctly for UDP (analysed through breakpoints). But socket writing always fails, and sometimes mentions No such File or directory exists?

Support server mode

WifiPerfEndPoint does this, it is useful in a test lab setup: you have a few iOS devices with the app open, and a wired central host that can query them all. Adding Bonjour support for discovery would be nice too. This will need socket background mode entitlements, as well as the ability to stop the server / test (see #10).

about iper2 in ios

I can run iperf3 success in iOS, But I cannot run iperf2 in iOS, What should I do to run iperf2 in iOS?

Thanks

3.9 App Store release

Now that we have 3.9 working, we'll need to ship it:

  • get a TestFlight build out
  • check App Store crashes and reviews
  • profile the app
  • update the documentation
  • update the PGO file
  • update the App Store screenshots and videos

Graphing?

Thanks @ndfred for making this! It's the only usable iperf3 app in the entire App Store.

I was wondering if you'd considered a simple line graph to visualize the change over time as you walk around and test speeds from different areas?

I looked at every Objective-C charting library listed at ameizi/awesome-ios-chart and selected the 3 that were most recently updated and have the most stars, as some potential candidates:

JunyiXie/XJYChart
AAChartModel/AAChartKit
ZhipingYang/XYChart

Add a share button

Hi there, nice work, I just love it!
That would be super nice to be able to export results.
The easiest way I can think of is adding a "share" button.

Thanks for your work!

François

Allow interrupting tests

Right now you pick a test duration, hit start and wait until the results come back. I don't know if the protocol supports it, but starting the test and stopping it when you are happy with the results is a better user experience.

tvOS support

Would it be possible to make the app available for Apple TV? I have an Apple TV connected using Ethernet over Power and would like to test the speed using iperf3. That would be also useful validating the speed of the wifi/ethernet on Apple TV with a local network source. Currently only speedtest app is available on Apple TV.

Add a help section

This should describe how to set up a server to run a test, and document the different options

Test runner singleton prevents running multiple tests in parallel

Basically get rid of s_currentTestRunner and pad the iperf_test structure with a IPFTestRunner pointer instead. This isn't a big deal in the current app configuration, where only one test ever runs at a time, but will be an issue for more general purpose usecases.

sendfile crashes

Crashing with SIGSYS on r = sendfile(fromfd, tofd, offset, &sent, NULL, 0);, do older versions of iOS support sendfile? There may be a way to detect that.

Update to iPerf 3.9

This will give us bidirectional tests, but requires changes since it changes the API

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.