Flow allocator with bandwidth reservation#91
Conversation
|
Hi @vmaffione, do you want me to do some refactoring and cleanup before doing a code review? |
|
Yes if you want your code to be merged. You can have a commit introducing the changes affecting existing functionalities, and another one that actually introduces the bwres mechanism. Also you need to fix integration tests (see "Details" on the travis info above). |
|
Okay, I'll start working on it. |
a01ca11 to
bfced06
Compare
|
Hopefully this looks okay, let me know if you want any more changes. |
|
Thanks, I'll let you know asap. |
|
I've fixed the issues you've mentioned. The pipeline fails, which seems to be related to this bug. Would it be possible to upgrade the gcc version used in the pipeline? |
|
Thanks a lot. Take your time. |
|
I'll submit another PR after this one adding all the config-generated files to gitignore, is that okay? |
|
Yes, feel free to open that whenever you want. That one can go in immediately. |
|
Pushed an amended commit fixing the constructor issue. |
vmaffione
left a comment
There was a problem hiding this comment.
First round of review.
Still need to look at the core logic.
|
I am done for now, but since the change is complex and I already dropped many comments, I would like to give a further pass once you address my comments. A general question: I assume (and it looks like) the implementation follows the guidelines that we agreed on the "Bw allocation scheme" google doc. Can you confirm? One big thing that is missing in this pull request is an integration test, maybe something similar to |
|
I see, in that case I will start working on the issues. Yes, the implementation should be consistent with the final version of the scheme we agreed on in the google doc. The test scenario used 5 nodes, I should be able to find the demonstrator config as well as possibly some scripts I used to test the implementation. I will begin by creating an integration test. |
|
Excellent, thanks. Feel free to add the demonstrator config file to the example if you think it is in shape. |
|
Hi Vincenzo, I hope you're doing well. Sorry for the long delay; I've started working on the PR again. I've resolved all the comments where I worked in your changes, except the one with |
|
Hi, |
|
I've pushed a partial integration test, based on (Ignore the build error, I'll look into that.) |
Implements a FA and a Routing policy that is bandwidth-aware. A flow request is accepted only if there is enough bandwidth available. Each flow is guaranteed to have access to the bandwidth it requested during the whole duration of the flow.
|
I can't reproduce the compilation error with local gcc 5.5.0 (nor the system 9.2.0). I thought rebasing onto current master would help but no luck. What I find curious is that the reconfigure function is practically identical with the |
With QEMU interfaces are virtio-net or e1000, and not veth. |
Look at the includes. I think you are missing at least |
| if (f.second->lower_ipcp_id != (rl_ipcp_id_t)RL_IPCP_ID_NONE) { | ||
| continue; | ||
| } |
There was a problem hiding this comment.
This was the offending part, seems like I misunderstood your original comment.
Does the current version make sense?
If we don't have a lower_ipcp_id, we try to look it up (and possibly return early), else we use the value we already have from the iterator.
There was a problem hiding this comment.
I think you should invert the logic:
if (f.second->lower_ipcp_id == (rl_ipcp_id_t)RL_IPCP_ID_NONE) {
continue;
}
The lower ipcp id of a lower flow is not something that you try to look up. Either it's there (since when the NeighFlow object was built), or it will never be there.
Btw, lower ipcp id will be always valid if you don't enable the reliable-n-flows parameter.
I'll try to rephrase my original comment. Since you run a loop with the goal of calling lf->set_bw_total() and lf->set_bw_free(), I think you should check that you actually called that, i.e. check that after the loop bw_free and bw_total are not 0. What happens for a normal IPCP that has a normal IPCP as an N-1-DIF (supporting diff)? In this case I think you would have bw_free and bw_total set to 0. How do you behave in this case? If this case is not supported yet, you should probably prevent the installation of the bwres policy for normal IPCPs that are not running over shims.
There was a problem hiding this comment.
Yes, this case is not supported yet. I'll look into preventing the policy from being installed.
|
I've added a working integration test. However, it seems that if a node is both the endpoint of a flow and the Raft leader, it gets the Additionally, due to having to test with 10Gbps interfaces, I converted the bandwidth values in the policy to 64 bits else it would overflow.
|
|
There is a different raft log for each component of each IPCP. For example
/tmp/ceft-aa-18-myname.IPCP
is the log for the address allocator of IPCP 18 (on some host).
Il giorno ven 10 apr 2020 alle ore 13:05 Michal Koutenský <
[email protected]> ha scritto:
… Am I correct in assuming the Raft logs in /tmp should be the same for all
the nodes?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#91 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABFRFQLX7LTB7FRMNTN24X3RL34OTANCNFSM4HQGOHBA>
.
--
Vincenzo
|
Yes, bandwidth in bps must be 4 bits.
No, that's simply an issue. The spec struct is already 64 bits (
|
No description provided.