216 lines
5.6 KiB
ReStructuredText
216 lines
5.6 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
=================
|
||
|
Linux Kernel TIPC
|
||
|
=================
|
||
|
|
||
|
Introduction
|
||
|
============
|
||
|
|
||
|
TIPC (Transparent Inter Process Communication) is a protocol that is specially
|
||
|
designed for intra-cluster communication. It can be configured to transmit
|
||
|
messages either on UDP or directly across Ethernet. Message delivery is
|
||
|
sequence guaranteed, loss free and flow controlled. Latency times are shorter
|
||
|
than with any other known protocol, while maximal throughput is comparable to
|
||
|
that of TCP.
|
||
|
|
||
|
TIPC Features
|
||
|
-------------
|
||
|
|
||
|
- Cluster wide IPC service
|
||
|
|
||
|
Have you ever wished you had the convenience of Unix Domain Sockets even when
|
||
|
transmitting data between cluster nodes? Where you yourself determine the
|
||
|
addresses you want to bind to and use? Where you don't have to perform DNS
|
||
|
lookups and worry about IP addresses? Where you don't have to start timers
|
||
|
to monitor the continuous existence of peer sockets? And yet without the
|
||
|
downsides of that socket type, such as the risk of lingering inodes?
|
||
|
|
||
|
Welcome to the Transparent Inter Process Communication service, TIPC in short,
|
||
|
which gives you all of this, and a lot more.
|
||
|
|
||
|
- Service Addressing
|
||
|
|
||
|
A fundamental concept in TIPC is that of Service Addressing which makes it
|
||
|
possible for a programmer to chose his own address, bind it to a server
|
||
|
socket and let client programs use only that address for sending messages.
|
||
|
|
||
|
- Service Tracking
|
||
|
|
||
|
A client wanting to wait for the availability of a server, uses the Service
|
||
|
Tracking mechanism to subscribe for binding and unbinding/close events for
|
||
|
sockets with the associated service address.
|
||
|
|
||
|
The service tracking mechanism can also be used for Cluster Topology Tracking,
|
||
|
i.e., subscribing for availability/non-availability of cluster nodes.
|
||
|
|
||
|
Likewise, the service tracking mechanism can be used for Cluster Connectivity
|
||
|
Tracking, i.e., subscribing for up/down events for individual links between
|
||
|
cluster nodes.
|
||
|
|
||
|
- Transmission Modes
|
||
|
|
||
|
Using a service address, a client can send datagram messages to a server socket.
|
||
|
|
||
|
Using the same address type, it can establish a connection towards an accepting
|
||
|
server socket.
|
||
|
|
||
|
It can also use a service address to create and join a Communication Group,
|
||
|
which is the TIPC manifestation of a brokerless message bus.
|
||
|
|
||
|
Multicast with very good performance and scalability is available both in
|
||
|
datagram mode and in communication group mode.
|
||
|
|
||
|
- Inter Node Links
|
||
|
|
||
|
Communication between any two nodes in a cluster is maintained by one or two
|
||
|
Inter Node Links, which both guarantee data traffic integrity and monitor
|
||
|
the peer node's availability.
|
||
|
|
||
|
- Cluster Scalability
|
||
|
|
||
|
By applying the Overlapping Ring Monitoring algorithm on the inter node links
|
||
|
it is possible to scale TIPC clusters up to 1000 nodes with a maintained
|
||
|
neighbor failure discovery time of 1-2 seconds. For smaller clusters this
|
||
|
time can be made much shorter.
|
||
|
|
||
|
- Neighbor Discovery
|
||
|
|
||
|
Neighbor Node Discovery in the cluster is done by Ethernet broadcast or UDP
|
||
|
multicast, when any of those services are available. If not, configured peer
|
||
|
IP addresses can be used.
|
||
|
|
||
|
- Configuration
|
||
|
|
||
|
When running TIPC in single node mode no configuration whatsoever is needed.
|
||
|
When running in cluster mode TIPC must as a minimum be given a node address
|
||
|
(before Linux 4.17) and told which interface to attach to. The "tipc"
|
||
|
configuration tool makes is possible to add and maintain many more
|
||
|
configuration parameters.
|
||
|
|
||
|
- Performance
|
||
|
|
||
|
TIPC message transfer latency times are better than in any other known protocol.
|
||
|
Maximal byte throughput for inter-node connections is still somewhat lower than
|
||
|
for TCP, while they are superior for intra-node and inter-container throughput
|
||
|
on the same host.
|
||
|
|
||
|
- Language Support
|
||
|
|
||
|
The TIPC user API has support for C, Python, Perl, Ruby, D and Go.
|
||
|
|
||
|
More Information
|
||
|
----------------
|
||
|
|
||
|
- How to set up TIPC:
|
||
|
|
||
|
http://tipc.io/getting_started.html
|
||
|
|
||
|
- How to program with TIPC:
|
||
|
|
||
|
http://tipc.io/programming.html
|
||
|
|
||
|
- How to contribute to TIPC:
|
||
|
|
||
|
- http://tipc.io/contacts.html
|
||
|
|
||
|
- More details about TIPC specification:
|
||
|
|
||
|
http://tipc.io/protocol.html
|
||
|
|
||
|
|
||
|
Implementation
|
||
|
==============
|
||
|
|
||
|
TIPC is implemented as a kernel module in net/tipc/ directory.
|
||
|
|
||
|
TIPC Base Types
|
||
|
---------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/subscr.h
|
||
|
:internal:
|
||
|
|
||
|
.. kernel-doc:: net/tipc/bearer.h
|
||
|
:internal:
|
||
|
|
||
|
.. kernel-doc:: net/tipc/name_table.h
|
||
|
:internal:
|
||
|
|
||
|
.. kernel-doc:: net/tipc/name_distr.h
|
||
|
:internal:
|
||
|
|
||
|
.. kernel-doc:: net/tipc/bcast.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Bearer Interfaces
|
||
|
----------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/bearer.c
|
||
|
:internal:
|
||
|
|
||
|
.. kernel-doc:: net/tipc/udp_media.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Crypto Interfaces
|
||
|
----------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/crypto.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Discoverer Interfaces
|
||
|
--------------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/discover.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Link Interfaces
|
||
|
--------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/link.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC msg Interfaces
|
||
|
-------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/msg.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Name Interfaces
|
||
|
--------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/name_table.c
|
||
|
:internal:
|
||
|
|
||
|
.. kernel-doc:: net/tipc/name_distr.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Node Management Interfaces
|
||
|
-------------------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/node.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Socket Interfaces
|
||
|
----------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/socket.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Network Topology Interfaces
|
||
|
--------------------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/subscr.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Server Interfaces
|
||
|
----------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/topsrv.c
|
||
|
:internal:
|
||
|
|
||
|
TIPC Trace Interfaces
|
||
|
---------------------
|
||
|
|
||
|
.. kernel-doc:: net/tipc/trace.c
|
||
|
:internal:
|