|
@@ -84,7 +84,8 @@ struct ksock_sched { /* per scheduler state */
|
|
|
struct list_head kss_zombie_noop_txs; /* zombie noop tx list */
|
|
|
wait_queue_head_t kss_waitq; /* where scheduler sleeps */
|
|
|
int kss_nconns; /* # connections assigned to
|
|
|
- * this scheduler */
|
|
|
+ * this scheduler
|
|
|
+ */
|
|
|
struct ksock_sched_info *kss_info; /* owner of it */
|
|
|
};
|
|
|
|
|
@@ -110,15 +111,19 @@ struct ksock_interface { /* in-use interface */
|
|
|
|
|
|
struct ksock_tunables {
|
|
|
int *ksnd_timeout; /* "stuck" socket timeout
|
|
|
- * (seconds) */
|
|
|
+ * (seconds)
|
|
|
+ */
|
|
|
int *ksnd_nscheds; /* # scheduler threads in each
|
|
|
- * pool while starting */
|
|
|
+ * pool while starting
|
|
|
+ */
|
|
|
int *ksnd_nconnds; /* # connection daemons */
|
|
|
int *ksnd_nconnds_max; /* max # connection daemons */
|
|
|
int *ksnd_min_reconnectms; /* first connection retry after
|
|
|
- * (ms)... */
|
|
|
+ * (ms)...
|
|
|
+ */
|
|
|
int *ksnd_max_reconnectms; /* ...exponentially increasing to
|
|
|
- * this */
|
|
|
+ * this
|
|
|
+ */
|
|
|
int *ksnd_eager_ack; /* make TCP ack eagerly? */
|
|
|
int *ksnd_typed_conns; /* drive sockets by type? */
|
|
|
int *ksnd_min_bulk; /* smallest "large" message */
|
|
@@ -126,9 +131,11 @@ struct ksock_tunables {
|
|
|
int *ksnd_rx_buffer_size; /* socket rx buffer size */
|
|
|
int *ksnd_nagle; /* enable NAGLE? */
|
|
|
int *ksnd_round_robin; /* round robin for multiple
|
|
|
- * interfaces */
|
|
|
+ * interfaces
|
|
|
+ */
|
|
|
int *ksnd_keepalive; /* # secs for sending keepalive
|
|
|
- * NOOP */
|
|
|
+ * NOOP
|
|
|
+ */
|
|
|
int *ksnd_keepalive_idle; /* # idle secs before 1st probe
|
|
|
*/
|
|
|
int *ksnd_keepalive_count; /* # probes */
|
|
@@ -137,20 +144,26 @@ struct ksock_tunables {
|
|
|
int *ksnd_peertxcredits; /* # concurrent sends to 1 peer
|
|
|
*/
|
|
|
int *ksnd_peerrtrcredits; /* # per-peer router buffer
|
|
|
- * credits */
|
|
|
+ * credits
|
|
|
+ */
|
|
|
int *ksnd_peertimeout; /* seconds to consider peer dead
|
|
|
*/
|
|
|
int *ksnd_enable_csum; /* enable check sum */
|
|
|
int *ksnd_inject_csum_error; /* set non-zero to inject
|
|
|
- * checksum error */
|
|
|
+ * checksum error
|
|
|
+ */
|
|
|
int *ksnd_nonblk_zcack; /* always send zc-ack on
|
|
|
- * non-blocking connection */
|
|
|
+ * non-blocking connection
|
|
|
+ */
|
|
|
unsigned int *ksnd_zc_min_payload; /* minimum zero copy payload
|
|
|
- * size */
|
|
|
+ * size
|
|
|
+ */
|
|
|
int *ksnd_zc_recv; /* enable ZC receive (for
|
|
|
- * Chelsio TOE) */
|
|
|
+ * Chelsio TOE)
|
|
|
+ */
|
|
|
int *ksnd_zc_recv_min_nfrags; /* minimum # of fragments to
|
|
|
- * enable ZC receive */
|
|
|
+ * enable ZC receive
|
|
|
+ */
|
|
|
};
|
|
|
|
|
|
struct ksock_net {
|
|
@@ -174,9 +187,11 @@ struct ksock_nal_data {
|
|
|
int ksnd_nnets; /* # networks set up */
|
|
|
struct list_head ksnd_nets; /* list of nets */
|
|
|
rwlock_t ksnd_global_lock; /* stabilize peer/conn
|
|
|
- * ops */
|
|
|
+ * ops
|
|
|
+ */
|
|
|
struct list_head *ksnd_peers; /* hash table of all my
|
|
|
- * known peers */
|
|
|
+ * known peers
|
|
|
+ */
|
|
|
int ksnd_peer_hash_size; /* size of ksnd_peers */
|
|
|
|
|
|
int ksnd_nthreads; /* # live threads */
|
|
@@ -187,11 +202,14 @@ struct ksock_nal_data {
|
|
|
atomic_t ksnd_nactive_txs; /* #active txs */
|
|
|
|
|
|
struct list_head ksnd_deathrow_conns; /* conns to close:
|
|
|
- * reaper_lock*/
|
|
|
+ * reaper_lock
|
|
|
+ */
|
|
|
struct list_head ksnd_zombie_conns; /* conns to free:
|
|
|
- * reaper_lock */
|
|
|
+ * reaper_lock
|
|
|
+ */
|
|
|
struct list_head ksnd_enomem_conns; /* conns to retry:
|
|
|
- * reaper_lock*/
|
|
|
+ * reaper_lock
|
|
|
+ */
|
|
|
wait_queue_head_t ksnd_reaper_waitq; /* reaper sleeps here */
|
|
|
unsigned long ksnd_reaper_waketime; /* when reaper will wake
|
|
|
*/
|
|
@@ -201,18 +219,21 @@ struct ksock_nal_data {
|
|
|
int ksnd_stall_tx; /* test sluggish sender
|
|
|
*/
|
|
|
int ksnd_stall_rx; /* test sluggish
|
|
|
- * receiver */
|
|
|
-
|
|
|
+ * receiver
|
|
|
+ */
|
|
|
struct list_head ksnd_connd_connreqs; /* incoming connection
|
|
|
- * requests */
|
|
|
+ * requests
|
|
|
+ */
|
|
|
struct list_head ksnd_connd_routes; /* routes waiting to be
|
|
|
- * connected */
|
|
|
+ * connected
|
|
|
+ */
|
|
|
wait_queue_head_t ksnd_connd_waitq; /* connds sleep here */
|
|
|
int ksnd_connd_connecting; /* # connds connecting
|
|
|
*/
|
|
|
time64_t ksnd_connd_failed_stamp;/* time stamp of the
|
|
|
* last failed
|
|
|
- * connecting attempt */
|
|
|
+ * connecting attempt
|
|
|
+ */
|
|
|
time64_t ksnd_connd_starting_stamp;/* time stamp of the
|
|
|
* last starting connd
|
|
|
*/
|
|
@@ -221,10 +242,11 @@ struct ksock_nal_data {
|
|
|
spinlock_t ksnd_connd_lock; /* serialise */
|
|
|
|
|
|
struct list_head ksnd_idle_noop_txs; /* list head for freed
|
|
|
- * noop tx */
|
|
|
+ * noop tx
|
|
|
+ */
|
|
|
spinlock_t ksnd_tx_lock; /* serialise, g_lock
|
|
|
- * unsafe */
|
|
|
-
|
|
|
+ * unsafe
|
|
|
+ */
|
|
|
};
|
|
|
|
|
|
#define SOCKNAL_INIT_NOTHING 0
|
|
@@ -304,9 +326,11 @@ struct ksock_conn {
|
|
|
struct list_head ksnc_list; /* stash on peer's conn list */
|
|
|
struct socket *ksnc_sock; /* actual socket */
|
|
|
void *ksnc_saved_data_ready; /* socket's original
|
|
|
- * data_ready() callback */
|
|
|
+ * data_ready() callback
|
|
|
+ */
|
|
|
void *ksnc_saved_write_space; /* socket's original
|
|
|
- * write_space() callback */
|
|
|
+ * write_space() callback
|
|
|
+ */
|
|
|
atomic_t ksnc_conn_refcount;/* conn refcount */
|
|
|
atomic_t ksnc_sock_refcount;/* sock refcount */
|
|
|
struct ksock_sched *ksnc_scheduler; /* who schedules this connection
|
|
@@ -315,7 +339,8 @@ struct ksock_conn {
|
|
|
__u32 ksnc_ipaddr; /* peer's IP */
|
|
|
int ksnc_port; /* peer's port */
|
|
|
signed int ksnc_type:3; /* type of connection, should be
|
|
|
- * signed value */
|
|
|
+ * signed value
|
|
|
+ */
|
|
|
unsigned int ksnc_closing:1; /* being shut down */
|
|
|
unsigned int ksnc_flip:1; /* flip or not, only for V2.x */
|
|
|
unsigned int ksnc_zc_capable:1; /* enable to ZC */
|
|
@@ -323,9 +348,11 @@ struct ksock_conn {
|
|
|
|
|
|
/* reader */
|
|
|
struct list_head ksnc_rx_list; /* where I enq waiting input or a
|
|
|
- * forwarding descriptor */
|
|
|
+ * forwarding descriptor
|
|
|
+ */
|
|
|
unsigned long ksnc_rx_deadline; /* when (in jiffies) receive times
|
|
|
- * out */
|
|
|
+ * out
|
|
|
+ */
|
|
|
__u8 ksnc_rx_started; /* started receiving a message */
|
|
|
__u8 ksnc_rx_ready; /* data ready to read */
|
|
|
__u8 ksnc_rx_scheduled; /* being progressed */
|
|
@@ -338,7 +365,8 @@ struct ksock_conn {
|
|
|
lnet_kiov_t *ksnc_rx_kiov; /* the page frags */
|
|
|
union ksock_rxiovspace ksnc_rx_iov_space; /* space for frag descriptors */
|
|
|
__u32 ksnc_rx_csum; /* partial checksum for incoming
|
|
|
- * data */
|
|
|
+ * data
|
|
|
+ */
|
|
|
void *ksnc_cookie; /* rx lnet_finalize passthru arg
|
|
|
*/
|
|
|
ksock_msg_t ksnc_msg; /* incoming message buffer:
|
|
@@ -346,14 +374,16 @@ struct ksock_conn {
|
|
|
* whole struct
|
|
|
* V1.x message is a bare
|
|
|
* lnet_hdr_t, it's stored in
|
|
|
- * ksnc_msg.ksm_u.lnetmsg */
|
|
|
-
|
|
|
+ * ksnc_msg.ksm_u.lnetmsg
|
|
|
+ */
|
|
|
/* WRITER */
|
|
|
struct list_head ksnc_tx_list; /* where I enq waiting for output
|
|
|
- * space */
|
|
|
+ * space
|
|
|
+ */
|
|
|
struct list_head ksnc_tx_queue; /* packets waiting to be sent */
|
|
|
- struct ksock_tx *ksnc_tx_carrier; /* next TX that can carry a LNet
|
|
|
- * message or ZC-ACK */
|
|
|
+ struct ksock_tx *ksnc_tx_carrier; /* next TX that can carry a LNet
|
|
|
+ * message or ZC-ACK
|
|
|
+ */
|
|
|
unsigned long ksnc_tx_deadline; /* when (in jiffies) tx times out
|
|
|
*/
|
|
|
int ksnc_tx_bufnob; /* send buffer marker */
|
|
@@ -361,7 +391,8 @@ struct ksock_conn {
|
|
|
int ksnc_tx_ready; /* write space */
|
|
|
int ksnc_tx_scheduled; /* being progressed */
|
|
|
unsigned long ksnc_tx_last_post; /* time stamp of the last posted
|
|
|
- * TX */
|
|
|
+ * TX
|
|
|
+ */
|
|
|
};
|
|
|
|
|
|
struct ksock_route {
|
|
@@ -370,20 +401,24 @@ struct ksock_route {
|
|
|
struct ksock_peer *ksnr_peer; /* owning peer */
|
|
|
atomic_t ksnr_refcount; /* # users */
|
|
|
unsigned long ksnr_timeout; /* when (in jiffies) reconnection
|
|
|
- * can happen next */
|
|
|
+ * can happen next
|
|
|
+ */
|
|
|
long ksnr_retry_interval; /* how long between retries */
|
|
|
__u32 ksnr_myipaddr; /* my IP */
|
|
|
__u32 ksnr_ipaddr; /* IP address to connect to */
|
|
|
int ksnr_port; /* port to connect to */
|
|
|
unsigned int ksnr_scheduled:1; /* scheduled for attention */
|
|
|
unsigned int ksnr_connecting:1; /* connection establishment in
|
|
|
- * progress */
|
|
|
+ * progress
|
|
|
+ */
|
|
|
unsigned int ksnr_connected:4; /* connections established by
|
|
|
- * type */
|
|
|
+ * type
|
|
|
+ */
|
|
|
unsigned int ksnr_deleted:1; /* been removed from peer? */
|
|
|
unsigned int ksnr_share_count; /* created explicitly? */
|
|
|
int ksnr_conn_count; /* # conns established by this
|
|
|
- * route */
|
|
|
+ * route
|
|
|
+ */
|
|
|
};
|
|
|
|
|
|
#define SOCKNAL_KEEPALIVE_PING 1 /* cookie for keepalive ping */
|
|
@@ -391,7 +426,8 @@ struct ksock_route {
|
|
|
struct ksock_peer {
|
|
|
struct list_head ksnp_list; /* stash on global peer list */
|
|
|
unsigned long ksnp_last_alive; /* when (in jiffies) I was last
|
|
|
- * alive */
|
|
|
+ * alive
|
|
|
+ */
|
|
|
lnet_process_id_t ksnp_id; /* who's on the other end(s) */
|
|
|
atomic_t ksnp_refcount; /* # users */
|
|
|
int ksnp_sharecount; /* lconf usage counter */
|
|
@@ -408,7 +444,8 @@ struct ksock_peer {
|
|
|
struct list_head ksnp_tx_queue; /* waiting packets */
|
|
|
spinlock_t ksnp_lock; /* serialize, g_lock unsafe */
|
|
|
struct list_head ksnp_zc_req_list; /* zero copy requests wait for
|
|
|
- * ACK */
|
|
|
+ * ACK
|
|
|
+ */
|
|
|
unsigned long ksnp_send_keepalive; /* time to send keepalive */
|
|
|
lnet_ni_t *ksnp_ni; /* which network */
|
|
|
int ksnp_n_passive_ips; /* # of... */
|
|
@@ -429,7 +466,8 @@ extern struct ksock_tunables ksocknal_tunables;
|
|
|
#define SOCKNAL_MATCH_NO 0 /* TX can't match type of connection */
|
|
|
#define SOCKNAL_MATCH_YES 1 /* TX matches type of connection */
|
|
|
#define SOCKNAL_MATCH_MAY 2 /* TX can be sent on the connection, but not
|
|
|
- * preferred */
|
|
|
+ * preferred
|
|
|
+ */
|
|
|
|
|
|
struct ksock_proto {
|
|
|
/* version number of protocol */
|