<div dir="ltr">Hi All,<br><br>Just wondering if someone can give us some insight into the logic that ksocklnd uses to decide which connections to make.<br><br>There&#39;s not so much in the Lustre operations manual about it, but the impression I get from reading around is that if we have:<br>


<br>options lnet networks=tcp0(eth0,eth1)<br><br>on all of our
dual-connected hosts, then they will load-balance by making multiple
connections between clients and servers.&nbsp; Indeed, they do.&nbsp; However, I
would have expected 4 TCP connection bundles (i.e. 12 connections)
(eth[0,1]&lt;-&gt;eth[0,1]), but we actually get two (i.e. 6
connections) (eth0&lt;-&gt;eth0 and eth1&lt;-&gt;eth1).&nbsp; How does
lustre know which combinations to use???<br>

<br>Some important points about our setup:<br>- This is a shared network segment <a href="http://172.16.0.0/16" target="_blank">172.16.0.0/16</a><br>- Three switches (LeftSwitch&lt;-&gt;TopSwitch&lt;-&gt;<div dir="ltr">RightSwitch)<br>

- all dual connected hosts are connected to both LeftSwitch and RightSwitch<br>
- clients network interfaces are 172.16.4.x/16 (eth0,leftswitch) and 172.16.5.x/16 (eth1,rightswitch)<br>- OSS/MDS network interfaces are 172.16.0.x/16 (eth0,leftswitch) and 172.16.1.x/16 (eth1,rightswitch)<br>- to get good routing, we have static routes configured as such, on all dual-connect machines:<br>

Kernel IP routing table<br>Destination&nbsp;&nbsp;&nbsp;&nbsp; Gateway&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Genmask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags&nbsp;&nbsp; MSS Window&nbsp; irtt Iface<br>
<a href="http://172.16.4.0/" target="_blank">172.16.4.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://0.0.0.0/" target="_blank">0.0.0.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://255.255.255.0/" target="_blank">255.255.255.0</a>&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 eth0<br>

<a href="http://172.16.5.0/" target="_blank">172.16.5.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://0.0.0.0/" target="_blank">0.0.0.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://255.255.255.0/" target="_blank">255.255.255.0</a>&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 eth1<br>


<a href="http://172.16.0.0/" target="_blank">172.16.0.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://0.0.0.0/" target="_blank">0.0.0.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://255.255.255.0/" target="_blank">255.255.255.0</a>&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 eth0<br>

<a href="http://172.16.1.0/" target="_blank">172.16.1.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://0.0.0.0/" target="_blank">0.0.0.0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://255.255.255.0/" target="_blank">255.255.255.0</a>&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 eth1<br>


(i.e. all traffic between clients and servers shouldn&#39;t traverse TopSwitch, notwithstanding occasional ugly arp issues)<br><br>So
lustre has done the right thing in connecting eth0&lt;-&gt;eth0 and
eth1&lt;-&gt;eth1 in this case.&nbsp; But how does it know?&nbsp; Does the client
connect to both server addresses and throw away any connections
originating from the same address?&nbsp; Is there some check of the return
path?<br>

<br>My motive here is that I also have a set of singly-connected
machines, and want to have their traffic balanced across both server
networks (single connect machines come in via topswitch).&nbsp; Right now,
these clients all connect to the eth0 address (172.16.0.x) on all OSSes
and the MDS.&nbsp; All the traffic goes via leftswitch, and my peak
bandwidth to a single OSS is therefore 1 gigabit, and the disks are
capable of more than that.&nbsp; What if my single connect client was a
10gig NIC?&nbsp; Or lots of 1gig single connect clients?&nbsp; It seems that we
are getting it wrong in these cases.<br>

<br>I understand the issues with routing return traffic from the OSS -
I am happy/planning to configure source-based routing on the server
nodes, but I only want to go to the effort once I understand whatever
black magic ksocklnd is doing to decide which connections it should
make!&nbsp; If I go ahead and configure the source routing, will we end up
with two connections being made from a client with a single IP?<br>

<br>Thanks for your help,<br><br>Tim</div></div>