-
Notifications
You must be signed in to change notification settings - Fork 900
oob/tcp: correctly fallback to the loopback interface #6315
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
oob/tcp: correctly fallback to the loopback interface #6315
Conversation
vir* interfaces are ignored but they prevented from falling back to the loopback interface if needed. Thanks Patrick Begou for reporting this Signed-off-by: Gilles Gouaillardet <[email protected]>
I have no real objection to this PR, but I don't understand how your comment has anything to do with it. We still ignore vir interfaces after this change. FWICT, the only way this change impacts anything is if opal_ifcount is returning a value greater than 1 when only the loopback device is present - which seems incorrect. Or are you saying that someone has virtual interfaces active, but no real ones, and so opal_ifcount is coming back with an incorrect number? |
if a machine only has this PR fixes that. Can you please suggest a better wording ? |
I think perhaps we should ask a different question. If opal_ifcount() is including virtual interfaces, then that implies that we support those - does it not? I'm guessing the TCP BTL might want those virtual interfaces to connect from the host machine to a VM, yes? If so, then shouldn't the oob/tcp also support them so that we can connect to a daemon on the VM? In other words, is the correct answer that:
Another alternative would be to keep both argv arrays (loopbacks separate from non-loopback devices). If the connection is being made to a daemon on my own node, then always just use the loopback array. If the connection is to a daemon on some other node, then use the non-loopback array. Again, it all seems based on why opal_ifcount() is including virtual interfaces. If it shouldn't be doing so, then that would seem the correct fix. If it should be doing so, then oob/tcp probably shouldn't be ignoring them. |
Now I remember ... we disable the virtual interfaces because it is not uncommon they all share the same IP on all the nodes of a cluster. In some cases, we need to use it so we should add yet an other MCA param. |
IIRC, I skipped the virtual interfaces because we would pick them up, but they don't support loopback. Thus, mpirun couldn't use them to send to itself. You raise another good point as well - the problem is that we might need to talk to a daemon in a local VM but also need to talk to daemons on other host machines that include the same virtual interface. I guess the question is: how is the btl/tcp component sorting this out? Can we use their logic here? No point in recreating the wheel, and I'm a little concerned that we might not allow a daemon-to-daemon connection when we would allow proc-to-proc communications. |
We talked about this on the webex today.
|
@bosilca We agreed on the call today to not merge this PR. See #6315 (comment). Do you feel differently? |
No I'm fine either way. It's just that we have here a simple fix for most 'trivial' cases but we prefer to delay without a clear deadline a potential solution . |
@jsquyres My understanding of your previous comment is this PR might break something, and unless I am missing something, I think it does not. Here is the issue the user is facing and this PR fixes
Now the users takes the train and the
If the user did not have My analysis is
I already provided a workaround to the user I definitely agree we have to improve things in a near future, and unless we have a plan/roadmap/deadline for that or this PR does break something, I'd rather merge it and backport it to the release branches in order to fix the issue reported by the user (no more, no less). |
Guess I'm confused. As Jeff documented, we do have a plan/roadmap to go forward - it consists of documenting the very simple MCA parameter solution to the problem. Remember, we are talking about a near-zero population of people experiencing the problem. The MCA solution for v4.0.x is just fine and low risk. The problem with this PR is that we won't know that we broke somebody else until they start complaining about it - and then it's too late. We've been there - this problem of how to handle loopback and virtual interfaces has continued to haunt us over the years. Every time we fix it, we break it. Fixing it for v5 will take more time, but we have agreement on doing it and a rough timetable. It is the long-term correct solution. |
I think I got it now, the short term plan is to do nothing in existing release branches, but instead document
|
We should go ahead and close this as we are not going to use it. Someone can do the recommended documentation if so inclined. |
vir* interfaces are ignored but they prevented from falling
back to the loopback interface if needed.
Thanks Patrick Begou for reporting this
Signed-off-by: Gilles Gouaillardet [email protected]