perfsonar / owamp

A tool for performing one-way or two-way active measurements
Apache License 2.0
70 stars 30 forks source link

Twping send speed issue #61

Open McRender opened 4 years ago

McRender commented 4 years ago

I was wondering what the packet send interval limitations are in twping. I am trying to reach a send interval below 1 ms. I therefore used the following command to test the limits and made a few observations I can not explain:

twping -c 2600 -s 1400 -i 0.001f -L 0.5 localhost

When using the "fix offset" I'll get a lot of dropped packets. When using the exponentially distributed pseudo-random quantity I don't see any lost packets (but in general higher RTT compared to the fix offset).

So I've decided to have a closer look at the source code and found the following code block:

https://github.com/perfsonar/owamp/blob/6f365d93f047295546b6f30680518819f6d83630/owamp/endpoint.c#L3480-L3485

Especially the following statement does somehow limit the send interval time to 1 ms: https://github.com/perfsonar/owamp/blob/6f365d93f047295546b6f30680518819f6d83630/owamp/endpoint.c#L3483

I've tried to lower this value to 0.5 ms but my max RTT will increase significantly doing so. Is there an explanation for this 1 ms limitation or how can I increase the packet send time to shorter intervals than 1ms?

Would love to hear from you.

vvidic commented 4 years ago

On Fri, Sep 06, 2019 at 03:33:33AM -0700, McRender wrote:

https://github.com/perfsonar/owamp/blob/6f365d93f047295546b6f30680518819f6d83630/owamp/endpoint.c#L3480-L3485

Especially the following statement does somehow limit the send interval time to 1 ms: https://github.com/perfsonar/owamp/blob/6f365d93f047295546b6f30680518819f6d83630/owamp/endpoint.c#L3483

I've tried to lower this value to 0.5 ms but my max RTT will increase significantly doing so. Is there an explanation for this 1 ms limitation or how can I increase the packet send time to shorter intervals than 1ms?

We did improve that part at one point, but it might still have problems sending and receiving at a rate of 1000+ packets per second. Not sure if the the line you mentioned is the problem (SKIP_SEND should probably be renamed to SEND_NEXT). For high packet rates it might be necessary to rewrite this function to use two threads or some event library (libev) or function.

-- Valentin

McRender commented 4 years ago

Hi Valentin, thanks for the quick info. Correct me if I am wrong, so you are saying that with this implementation of the TWAMP standard it is "currently" not possible to achieve higher send rates than 1000 packets per second?

I am not an expert in network (server and client) development but according to this blog post, it should be possible to achieve over a million packets per second with UDP. In his naive first approach, he was able to send over 370k packets per second on one single thread :-).

What I am trying to do, is to simulate some data patterns (constant flow, variations in send intervals ...) with UDP and measure the round trip time of this pattern to gain some insight of my network performance in means of latency, jitter and so on. I think TWAMP would be a very good candidate for doing so since it is standardized and even responders are available in some network hardware (Juniper, Cisco...).

Let me know if you have some more information on where to look for improvements in the code or even better when you already have plans for doing so. Thanks in advance for your update...

Stephan