Details
-
Bug
-
Resolution: Fixed
-
Major
-
None
-
Lustre 2.11.0
-
None
-
3
-
9223372036854775807
Description
The LNet router checker needs to ping the interface defined in the route table, but MR can choose a different interface for those pings.
As a result the router can end up marking some interfaces down because they aren't seeing any traffic in the check_interval + router ping timeout window.
This causes routes to be considered down because of asymmetric route failure detection.
Reproduced on a three node VM.
Router:
sles15build01:/tmp # lctl list_nids 192.168.2.20@tcp99 192.168.2.20@tcp1 192.168.2.20@tcp sles15build01:~ # lnetctl route show -v sles15build01:~ # lnetctl peer show -v peer: - primary nid: 192.168.2.22@tcp99 Multi-Rail: True peer ni: - nid: 192.168.2.22@tcp1 state: up max_ni_tx_credits: 8 available_tx_credits: 8 min_tx_credits: 7 tx_q_num_of_buf: 0 available_rtr_credits: 8 min_rtr_credits: 7 refcount: 1 statistics: send_count: 22 recv_count: 22 drop_count: 0 - nid: 192.168.2.22@tcp99 state: up max_ni_tx_credits: 8 available_tx_credits: 8 min_tx_credits: 7 tx_q_num_of_buf: 0 available_rtr_credits: 8 min_rtr_credits: 7 refcount: 1 statistics: send_count: 18 recv_count: 18 drop_count: 0 - primary nid: 192.168.2.21@tcp Multi-Rail: True peer ni: - nid: 192.168.2.21@tcp state: up max_ni_tx_credits: 8 available_tx_credits: 8 min_tx_credits: 7 tx_q_num_of_buf: 0 available_rtr_credits: 8 min_rtr_credits: 7 refcount: 1 statistics: send_count: 41 recv_count: 41 drop_count: 0 sles15build01:~ #
Client:
sles15c01:/tmp # lctl list_nids 192.168.2.22@tcp99 192.168.2.22@tcp1 sles15c01:/tmp # lctl show_route net tcp hops 4294967295 gw 192.168.2.20@tcp1 up pri 0 sles15c01:/tmp # sles15c01:~ # lnetctl route show -v route: - net: tcp gateway: 192.168.2.20@tcp1 hop: -1 priority: 0 state: up sles15c01:~ # lnetctl peer show -v peer: - primary nid: 192.168.2.20@tcp99 Multi-Rail: True peer ni: - nid: 192.168.2.20@tcp1 state: up max_ni_tx_credits: 8 available_tx_credits: 8 min_tx_credits: 7 tx_q_num_of_buf: 0 available_rtr_credits: 8 min_rtr_credits: 8 refcount: 4 statistics: send_count: 23 recv_count: 23 drop_count: 0 - nid: 192.168.2.20@tcp99 state: NA max_ni_tx_credits: 8 available_tx_credits: 8 min_tx_credits: 7 tx_q_num_of_buf: 0 available_rtr_credits: 8 min_rtr_credits: 8 refcount: 1 statistics: send_count: 18 recv_count: 18 drop_count: 0 - nid: 192.168.2.20@tcp state: NA max_ni_tx_credits: 0 available_tx_credits: 0 min_tx_credits: 0 tx_q_num_of_buf: 0 available_rtr_credits: 0 min_rtr_credits: 0 refcount: 2 statistics: send_count: 0 recv_count: 0 drop_count: 0 - primary nid: 192.168.2.21@tcp Multi-Rail: True peer ni: - nid: 192.168.2.21@tcp state: NA max_ni_tx_credits: 0 available_tx_credits: 0 min_tx_credits: 0 tx_q_num_of_buf: 0 available_rtr_credits: 0 min_rtr_credits: 0 refcount: 2 statistics: send_count: 0 recv_count: 0 drop_count: 0 sles15c01:~ #
Server:
sles15s01:/tmp # lctl list_nids 192.168.2.21@tcp sles15s01:/tmp # lctl show_route net tcp1 hops 4294967295 gw 192.168.2.20@tcp up pri 0 net tcp99 hops 4294967295 gw 192.168.2.20@tcp down pri 0 sles15s01:~ # lnetctl route show -v route: - net: tcp1 gateway: 192.168.2.20@tcp hop: -1 priority: 0 state: up - net: tcp99 gateway: 192.168.2.20@tcp hop: -1 priority: 0 state: up sles15s01:~ # lnetctl peer show -v peer: - primary nid: 192.168.2.20@tcp99 Multi-Rail: True peer ni: - nid: 192.168.2.20@tcp state: up max_ni_tx_credits: 8 available_tx_credits: 8 min_tx_credits: 7 tx_q_num_of_buf: 0 available_rtr_credits: 8 min_rtr_credits: 8 refcount: 5 statistics: send_count: 42 recv_count: 42 drop_count: 0 - nid: 192.168.2.20@tcp99 state: NA max_ni_tx_credits: 0 available_tx_credits: 0 min_tx_credits: 0 tx_q_num_of_buf: 0 available_rtr_credits: 0 min_rtr_credits: 0 refcount: 2 statistics: send_count: 0 recv_count: 0 drop_count: 0 - nid: 192.168.2.20@tcp1 state: NA max_ni_tx_credits: 0 available_tx_credits: 0 min_tx_credits: 0 tx_q_num_of_buf: 0 available_rtr_credits: 0 min_rtr_credits: 0 refcount: 2 statistics: send_count: 0 recv_count: 0 drop_count: 0 - primary nid: 192.168.2.22@tcp99 Multi-Rail: True peer ni: - nid: 192.168.2.22@tcp99 state: NA max_ni_tx_credits: 0 available_tx_credits: 0 min_tx_credits: 0 tx_q_num_of_buf: 0 available_rtr_credits: 0 min_rtr_credits: 0 refcount: 2 statistics: send_count: 0 recv_count: 0 drop_count: 0 - nid: 192.168.2.22@tcp1 state: NA max_ni_tx_credits: 0 available_tx_credits: 0 min_tx_credits: 0 tx_q_num_of_buf: 0 available_rtr_credits: 0 min_rtr_credits: 0 refcount: 2 statistics: send_count: 0 recv_count: 0 drop_count: 0 sles15s01:~ #
Here we see the router checker thread on the client needs to ping the @tcp1 nid but lnet_select_pathway() chooses a different nid for the router.
00000400:00000200:2.0:1531326577.044094:0:29632:0:(router.c:1099:lnet_ping_router_locked()) Check: 12345-192.168.2.20@tcp1 00000400:00000200:2.0:1531326577.044100:0:29632:0:(lib-move.c:3251:LNetGet()) LNetGet -> 12345-192.168.2.20@tcp1 00000400:00000200:2.0:1531326577.044213:0:29632:0:(lib-move.c:2172:lnet_select_pathway()) TRACE: 192.168.2.22@tcp99(192.168.2.22@tcp99:<?>) -> 192.168.2.20@tcp99(192.168.2.20@tcp1:192.168.2.20@tcp99) : GET