ParaStation provides its own communication protocol for Ethernet, called p4sock. This protocol is designed for extremely fast and reliable communication within a closed and homogeneous compute cluster environment.
The protocol implements a reliable, connection-oriented communication layer, especially designed for very low overhead. As a result, it delivers very low latencies.
The p4sock protocol is encapsulated within the kernel module p4sock.ko. This module is loaded on system startup or whenever the ParaStation daemon psid(8) starts up and the p4sock protocol is enabled within the configuration file parastation.conf(5).
The p4sock.ko module inserts a number of
entries within the /proc
filesystem. All
ParaStation entries are located within the subdirectory
/proc/sys/ps4
. Three different
subdirectories, listed below, are available.
To read a value, e.g. just type
# cat /proc/sys/ps4/state/connections
to get the number of currently open connections. To modify a value, for e.g. type
# echo 10 > /proc/sys/ps4/state/ResendTimeout
to set the new value for ResendTimeout
.
Within this state
directory, various
entries showing protocol counters.
All these entries, except polling
, are
read only!
HZ:
reads the number of timer
interrupts per second for this kernel ("jiffies").
A jiffy is the base unit for system timers, used by the Linux kernel. So all timeouts within the kernel are based on this timer resolution. On kernels with version 2.4, this it typically 100Hz (= 10ms). But there are kernel versions available, e.g. for newer SuSE Linux versions, which include patches to change this to a much higher value!
connections:
reads the current number of open
connections.
polling:
returns the current value
for the polling flag: 0 = never poll, 1 = poll if
otherwise idle (number of runable processes < number
of CPUs), 2 = always poll. Writing this value will
immediately change the polling strategy.
recv_net_ack:
number of received
ACKs.
recv_net_ctrl:
number of received
control packets (ACK, NACK, SYN, SYNACK, ...).
recv_net_data:
number of received
data packets.
recv_net_nack:
number of received
NACKs.
recv_user:
number of packets
delivered to application buffers.
send_net_ack:
number of sent ACKs.
send_net_ctrl:
number of sent
control packets.
send_net_data:
number of sent data
packets.
send_net_nack:
number of sent
NACKs.
send_user:
number of packets sent
by the application.
sockets:
number of open sockets
connecting to the ParaStation protocol module.
timer_ack:
number of expired
delayed ACK timers.
timer_resend:
number of expired
resend timers.
Within this directory, all Ethernet related parameters for the ParaStation p4sock protocol are grouped. All these entries can be read and written, newly written values will be used immediately.
AckDelay:
maximum delay in "jiffies"
for ACK messages. If no message is sent within this time
frame, where an ACK for already received packets can be
"hooked up", a single ACK message will generated.
Must be less then ResendTimeout
.
MaxAcksPending:
maximum number of
pending ACK messages until an "urgent" ACK messages will
be sent.
MaxDevSendQSize:
maximum number of
entries of the (protocol internal) send queue to the
network device.
MaxMTU:
maximum packet size used
for network packets. For sending packets, the minimum of
MaxMTU
and service specific MTU
will be used.
MaxRecvQSize:
size of the protocol
internal receive queue.
MaxResend:
Number of retries until
a connection is declared as dead.
MaxSendQSize:
size of the protocol
internal send queue.
ResendTimeout:
delay in "jiffies"
for resending packets not acknowledged up to now. Must
be greater then AckDelay
.
The command p4stat can be used to list open sockets and network connections of the p4sock protocol.
$ /opt/parastation/bin/p4stat -s Socket #0 : Addr: <00><00><00><00><00><'........' last_idx 0 refs 2 Socket #1 : Addr: <70><6f><72><74><33><'port384.' last_idx 0 refs 10 Socket #2 : Addr: <70><6f><72><74><31><'port144.' last_idx 0 refs 10 $ /opt/parastation/bin/p4stat -n net_idx SSeqNo SWindow RSeqNo RWindow lusridx lnetidx rnetidx snq rnq refs 84 30107 30467 30109 30468 84 84 230 0 0 2 85 30106 30466 30106 30465 85 85 231 0 0 2 86 30107 30467 30109 30468 86 86 84 0 0 2 87 30106 30466 30106 30465 87 87 85 0 0 2 88 30107 30467 30109 30468 88 88 217 0 0 2 89 30106 30466 30106 30465 89 89 218 0 0 2 90 30106 30466 30106 30465 90 90 220 0 0 2 91 30106 30466 30106 30465 91 91 221 0 0 2 92 30001 30361 30003 30362 92 92 232 0 0 2 93 30001 30361 30003 30362 93 93 219 0 0 2 94 30000 30000 30001 30360 94 94 233 0 0 2 95 30000 30000 30001 30360 95 95 222 0 0 2 96 30000 30000 30001 30360 96 96 222 0 0 2
This command shows some protocol internal parameters, like open connections, sequence numbers, reference counters, etc. For more information, see p4stat(8).