You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There is a problem with the current example, the peer may stop sending data here if the max buffer size has not been reached before this point and since the callback is executed as part of the stream processing thread, that will block everything.
So we need to:
Find a better flow control mechanism for the example
Decide if we should execute the callback in another goroutine so we ensure we don't block the stream, or, document the fact that users should make sure their code don't block.
Regarding (2) I think we should probably execute the callback in another goroutine since that's consistent with do things in other places, but I have no strong opinion on this matter.
How have you tested the example (suggestion 1)? I have tried it myself and found a few issues. I am still isolating my own code from that example but I would like to see how you tested it to verify for correctness?
It would be interesting to have a runnable example, alone, that you specify what parameters it is supposed to exhibit - then I run that - and I can confirm or deny that it exhibits the same or similar performance.
Without that we are pissing into the dark, with the wind at our face.
E.g. I would be interested in these metrics, from your example:
How did it perform when running between remote peers. Running networking benchmarks against localhost is fine to get a baseline for potential performance but running against remote peers can allow to find timing issues, or bottlenecks that localhost<>localhost transfers may not expose.
When running between remote peers - is all data actually transferred?
Activity
hugoArregui commentedon Sep 25, 2019
CC @enobufs
AeroNotix commentedon Sep 25, 2019
How have you tested the example (suggestion 1)? I have tried it myself and found a few issues. I am still isolating my own code from that example but I would like to see how you tested it to verify for correctness?
hugoArregui commentedon Sep 26, 2019
@AeroNotix I ran it with a 1.5gb file (uncommenting https://github.com/pion/webrtc/blob/topic-test-dc-perf/examples/data-channels-flow-control/main.go#L138 and adding a loop when I wanted more data) and different combinations of max buffer size / queue size / threshold. In this particular case please notice the channel is unreliable (https://github.com/pion/webrtc/blob/topic-test-dc-perf/examples/data-channels-flow-control/main.go#L120), so if you want to try this very same example you may want to set some max retransmits.
AeroNotix commentedon Sep 26, 2019
It would be interesting to have a runnable example, alone, that you specify what parameters it is supposed to exhibit - then I run that - and I can confirm or deny that it exhibits the same or similar performance.
Without that we are pissing into the dark, with the wind at our face.
AeroNotix commentedon Sep 26, 2019
E.g. I would be interested in these metrics, from your example:
Fire OnBufferedAmountLow in a goroutine
Fire OnBufferedAmountLow in a goroutine
Fire OnBufferedAmountLow in a goroutine
Fire OnBufferedAmountLow in a goroutine