Documentation/networking/rds.rst

Source file repositories/reference/linux-study-clean/Documentation/networking/rds.rst

File Facts

System
Linux kernel
Corpus path
Documentation/networking/rds.rst
Extension
.rst
Size
17024 bytes
Lines
449
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

.. SPDX-License-Identifier: GPL-2.0

===
RDS
===

Overview
========

This readme tries to provide some background on the hows and whys of RDS,
and will hopefully help you find your way around the code.

In addition, please see this email about RDS origins:
http://oss.oracle.com/pipermail/rds-devel/2007-November/000228.html

RDS Architecture
================

RDS provides reliable, ordered datagram delivery by using a single
reliable connection between any two nodes in the cluster. This allows
applications to use a single socket to talk to any other process in the
cluster - so in a cluster with N processes you need N sockets, in contrast
to N*N if you use a connection-oriented socket transport like TCP.

RDS is not Infiniband-specific; it was designed to support different
transports.  The current implementation used to support RDS over TCP as well
as IB.

The high-level semantics of RDS from the application's point of view are

 *	Addressing

	RDS uses IPv4 addresses and 16bit port numbers to identify
	the end point of a connection. All socket operations that involve
	passing addresses between kernel and user space generally
	use a struct sockaddr_in.

	The fact that IPv4 addresses are used does not mean the underlying
	transport has to be IP-based. In fact, RDS over IB uses a
	reliable IB connection; the IP address is used exclusively to
	locate the remote node's GID (by ARPing for the given IP).

	The port space is entirely independent of UDP, TCP or any other
	protocol.

 *	Socket interface

	RDS sockets work *mostly* as you would expect from a BSD
	socket. The next section will cover the details. At any rate,
	all I/O is performed through the standard BSD socket API.
	Some additions like zerocopy support are implemented through
	control messages, while other extensions use the getsockopt/
	setsockopt calls.

	Sockets must be bound before you can send or receive data.
	This is needed because binding also selects a transport and
	attaches it to the socket. Once bound, the transport assignment
	does not change. RDS will tolerate IPs moving around (eg in
	a active-active HA scenario), but only as long as the address
	doesn't move to a different transport.

 *	sysctls

	RDS supports a number of sysctls in /proc/sys/net/rds


Socket Interface
================

  AF_RDS, PF_RDS, SOL_RDS

Annotation

Implementation Notes