Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Socklnd Overview

1
Gliffy Diagram
namesocklnd_overview
pagePin84
Gliffy Diagram
namesock-tx-rx
pagePin

Network Interface Management

LNet calls ksock_startup()  on every lnet_ni  created either dynamically when called via lnetctl or via module parameters on initial startup.

A ksock_net block is created and assigned to the lnet_ni.ni_data field. On all APIs call from LNet to the socklnd this field is used to pull up the ksock_net.

Of particular interest is the ksock_net.ksock_interface. This is an array of LNET_INTERFACES_NUM length. This is so because of the legacy tcp bonding feature. There could be multiple interfaces assigned to one ksock_net. However, since Multi-Rail feature manages the multiple network interfaces per network, there is no need to continue supporting tcp bonding.

Once a ksock_net block is created it's added on the global network list, ksocknal_data.ksnd_nets.

This list is traversed when adding a new network. If the interface being added is already being used by one of the configured networks, then we do not need to create a set of scheduler threads. However, if it's a new interface then we'll increase the number of scheduler threads, as long as we stay below the maximum number of configured scheduler interfaces. This is so we can aid in processing the transmits and receives on the new interface.

Scheduler threads are created per CPT and they are intended to serve transmit and receive operations.

Peer and Connection Management