[LU-153] Clients cannot connect to servers with 2 IB cards until "lctl ping" is done from server to clients Created: 24/Mar/11 Updated: 01/Apr/19 Resolved: 21/Jul/11 |
|
| Status: | Resolved |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | Lustre 2.0.0 |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Minor |
| Reporter: | Diego Moreno (Inactive) | Assignee: | Liang Zhen (Inactive) |
| Resolution: | Won't Fix | Votes: | 0 |
| Labels: | None | ||
| Environment: |
RHEL 6.0 GA, ofed1.5.2, Lustre 2.0.0.1, Mellanox QDR Ib cards |
||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| Severity: | 3 | ||||||||
| Epic: | lnet, lustre-2_0, multirail, ping | ||||||||
| Rank (Obsolete): | 8540 | ||||||||
| Description |
|
Clients are not able to connect to server interfaces when there are two IB cards (and two lnets) configured on servers. We have a workaround consisting on "lctl ping" from servers to both lnets on every client. After that clients are able to connect to servers. Once clients are mounted we see the problem if we run the "df -h /lustre" command on clients (obvious cause running this command client needs to contact OSSs). At first we try to ping every interface on server: client> lctl ping 10.50.0.7@o2ib0 => No response client>dmesg Then we ping client's interface (client has only one if) on both lnets: server> lctl ping 10.50.0.50@o2ib0 => OK And problem is solved, "df -h /lustre" will run correctly and all "lctl ping" from client to server's interface will work fine. IPoIB ping command is working fine, we don't have DDR infiniband drivers running on our machines and we already tried a network configuration using ip2nets. Here you have our ip2nets config (note that all machines in the [7-10] range are servers, with two IB cards, one lnet on every one, and all the rest of the machines are clients with only one IB interface and two lnets on every one): [root@berlin5 ~]# cat /sys/module/lnet/parameters/ip2nets So, it seems like clients are not able to choose between one of the interfaces on servers but once server has 'pinged' clients, these ones are now able to choose the right interface. Do you think this could be an OFED bug? Maybe an lnet bug? |
| Comments |
| Comment by Liang Zhen (Inactive) [ 24/Mar/11 ] |
|
it looks like a LNet bug to me, I will look into it very soon |
| Comment by Sebastien Buisson (Inactive) [ 22/Apr/11 ] |
|
Hi, Bad news on this, because CEA is now experiencing this issue on one of their cluster, but the problem is the workaround that consists in 'lctl pinging' all interfaces does not scale. So they are blocked, and this is why I would like to change this ticket's priority to Blocker. Could you please have a look at this very soon? TIA, |
| Comment by Liang Zhen (Inactive) [ 22/Apr/11 ] |
|
Could you please provide ifconfig output and routing table of the server? Also, which OFED version and kernel version are you using? Thanks |
| Comment by Diego Moreno (Inactive) [ 22/Apr/11 ] |
|
Hi Liang, On server's side:
On client's side:
Do you need any other information? |
| Comment by Peter Jones [ 22/Apr/11 ] |
|
Sorry, but, while this is undoubtedly an important issue for CEA, this is not a general enough issue to be a 2.1 blocker. |
| Comment by Liang Zhen (Inactive) [ 22/Apr/11 ] |
|
It would be a little helpful if you can "echo +neterror > > /proc/sys/lnet/printk" on both server and the client, and reproduce it to get o2iblnd error message on both sides (very likely, you will see nothing on server side). Actually, I remember other people got into similar trouble while having multiple interfaces with same netmask and in the same subnet, and the problem disappeared after change them to different subnets. Would it be possible to change one of those address and make two interfaces in separated subnets and with different netmask? If this can help, it could be an issue of OFED although I'm not sure. |
| Comment by Diego Moreno (Inactive) [ 26/Apr/11 ] |
|
Hi Liang, I'll try everything you propose on your last comment. However, having two interfaces in separated subnets won't be possible on our configuration as our clients, which have only one interface, need to access both interfaces on servers, that's why they are in the same subnet. One possibility could be to configure an alias interface on every client with the new subnet but I don't know if this works on lustre... |
| Comment by Diego Moreno (Inactive) [ 29/Apr/11 ] |
|
Hi, Putting both interfaces in different subnets made the trick. If I want to have my clients connecting to both interfaces then I need to create an IP alias on every client because my clients have only one IB interface, is this a problem in lustre? I also get the traces you asked me when both cards are in the same subnet. In dmesg I only obtained the next two lines: Lustre: 40750:0:(lib-move.c:1028:lnet_post_send_locked()) Dropping message for 12345-60.64.1.32@o2ib1: peer not alive So I also obtained debug daemon lines. The activated traces are: info, neterror, net, warning, nettrace, error and emerg. See lctl_ping_debug attachment. Then do you think this is an issue with OFED and not with lnet? Thanks, |
| Comment by Diego Moreno (Inactive) [ 29/Apr/11 ] |
|
Debug traces when lctl ping doesn't work in a multirail context with both interfaces in the same subnet. |
| Comment by Sebastien Buisson (Inactive) [ 04/May/11 ] |
|
Hi, I tried two alternatives to the client IP alias (servers still have their 2 IB interfaces on 2 different subnets):
Both work at the IP level, but fail at the LNET level (ie 'ping' is OK, but 'lctl ping' is not). So it seems to work only when the client has an IPoIB address in the same subnet as the OSTs it wants to reach. Moreover, can you confirm it is safe to run Lustre clients with IP aliases? TIA, |
| Comment by Liang Zhen (Inactive) [ 04/May/11 ] |
|
from the log, the client got IB_CM_REJ_INVALID_SERVICE_ID from server, which means it thought there is no listener on server, I suspect it's because ARP flux, could you please try to set this and reload o2iblnd? sysctl -w net.ipv4.conf.ib0.arp_ignore=1 If this can't resolve the problem, could you try to see if the client can reach server if server has only one NI (i.e: only start LNet with o2ib0(ib0), then shutdown and try with o2ib1(ib1)) I don't know whether it's safe to use IP aliases for o2iblnd, but I can try to find out if none of previous ways can give us more hints. Thanks |
| Comment by Sebastien Buisson (Inactive) [ 05/May/11 ] |
|
Hi, I tested the two proposals from Liang. My first tests consisted in tuning the ARP parameters, but it had no effect. My second test was to configure one IPoIB on the client (60.64.x.x/16), only one IPoIB on the server (61.64.1.x/16), add a route in the IP routing table of the client so that the TCP connection is working. In this configuration, the 'lctl ping' was not working. So, unless the client has an IPoIB address in the same subnet as the OST to reach, the connection seems to be blocked by a bug. Sebastien. |
| Comment by Liang Zhen (Inactive) [ 06/May/11 ] |
|
Sebatien, It's very weird if it can't work even server only has one ipoib interface, have tried both interfaces on server (i.e: only with ib0 and only with ib1)? we can see this from release note of OFED: 2. Known Issues The correct setting of a multi-homed IPoIB host is achieved by using a sysctl -w net.ipv4.conf.ib0.arp_ignore=1 Or, globally, sysctl -w net.ipv4.conf.all.arp_ignore=1 To learn more about the arp_ignore parameter, see Could you please try a few more things: client $ tcpdump -c 3 -nni ib0 arp 4. collect output of: client $ tcpdump -c 3 -nni ib0 arp 5. please clear arp cache on client by "arp -d servername 10.50.0.7" and "arp -d servername 10.50.1.7" (or you have a better way) 6. ping both interfaces of server and collect "arp -na" again on client 7. reload o2iblnd on both client and server to see whether this can work 8. if it still can't help, please add those sysctl to /etc/sysctl.conf and reboot client and server to see how it works Anyway, if these things can help, I don't really want previous logs/information, but if they still can't, we have to get those information for the next step survey. Thanks |
| Comment by Diego Moreno (Inactive) [ 25/May/11 ] |
|
Hi, Finally I could make what you wrote in your previous comment: In fact, we are having problems with the arp table. When we run 'arping' from client to server we get not only one arp address but 2, so the client is not able to have a proper arp table. 15:04:36.258634 ARP, Request who-has 60.64.0.31 (00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff) tell 0.0.0.0, length 56 If we set 'arp_ignore=1' then one of the interfaces don't reply to standard ping requests (it's not always the same interface), so we still have the problem. It's like if only one interface can reply. Also, as a consequence, routing is not well done from server to client as the client is connecting to a bad interface and not to the good one. It's definitively an OFED bug, do you agree? So, by the moment, the only available solution is to have an alias ip on client and 2 different subnets, but this cannot be easy to do in a cluster with more than 4000 nodes... |
| Comment by Liang Zhen (Inactive) [ 14/Jun/11 ] |
|
sorry I didn't see the last comment, I agree that it's not something we can fix inside o2iblnd and I don't have a better suggestion to help you make it easier, Liang |
| Comment by Diego Moreno (Inactive) [ 16/Jun/11 ] |
|
I think we agree this is an bug in OFED stack. We can close this bug and up to OFED resolution we'll use an ib alias device on each client. Thanks, |
| Comment by Peter Jones [ 21/Jul/11 ] |
|
As per Bull, they have a workaround for this OFED bug |
| Comment by Cory Spitz [ 24/Jun/14 ] |
|
Does anyone know what OFED the bug was fixed, if ever? Diego, did you or anyone report this bug to OFA? |