Repository navigation
Add basic rateless codec support - #102
joe-calderon-ditto wants to merge 10 commits into
Conversation
|
I've been looking through the changes you made and overall it looks like it's pretty much on the right track. So - great job on figuring that stuff out as the logic of my code is definitely not obvious with a lot of cruft from it's development history as research code to get the protocol operation sorted out. I do have a couple of initial questions/comments:
|
ae61d13 to
fe49501
Compare
|
Thanks for taking the time to look through this. I will address (1) and (3) in a follow up commit. You are 100% spot on (2) we can leave as a future refinement. For (4), I'm obviously biased towards nanorq, I recently added a lightweight core interface that would work well with norm, but I'm concerned about complicating the build system too much. I planned to take a closer look at integration approaches after we hashed this pr out. |
|
(1) and (3) are addressed. I realized |
|
Still looking over the stuff you've added. Need a little time to understand what the FecLayout stuff is all about and the memory barrier added to the normMessage.cpp file for that, etc. I wasn't familiar with the sync_syncrhonize() call and don't yet understand why that's needed versus a mutex or something? If you want to share any "cliff notes" on that, that would be helpful. |
|
The synchronization might not be needed at all, I was just trying ensure safe updates to |
|
I will take a look at it. The ProtoMutex class in ProtoThread should work. It's a very thin wrapper around pthread mutexes on Unix and Critical Sections on Windows that are both pretty lightweight. The protoThread.cpp file hasn't been included in the build since the ProtoDispatcher has all the same mechanisms built into it since it predated the creation of the ProtoThread class. The plan is to eventually have ProtoDispatcher just use some of the ProtoThread stuff but that refactoring hasn't been done yet. At a glance the synchronization call may be a little heavier weight than needed and when I did a search on that there were some recommendations to use some newer APIs than that. I think protecting the FEC Codec Registry held by the instance could be protected by a mutex to avoid a writer changing things while a reader is accessing it. FYI - from your rename of one of your commits I see you may some other improvements in the works. I am also working on some new congestion control enhancements to include a BBR-like delay-based mechanism that can hopefully approach the performance of the ECN-based mode without the dependency on ECN enabled routers in the path |
Hello,
This PR adds basic support for a rateless codec, working toward the RaptorQ / non-systematic codec support discussed in #7.
What's included
normApi.h/normApi.cppto enable and configure it.examples/normRatelessTest.cppexample demonstrating the feature.Notes
NormTelemetryso rateless encoders could implement their own rate control for both proactive and reactive parity using metrics provided by norm.If the interface looks ok, I can follow this pr with an actual implementation of a rateless codec.