Overview of sprint 78 & sprint 79
Documentation
We reviewed the technical report, we closed a number of issues:
- RollBack claimed to sometimes contain a header
- Is BlockFetch mini-protocol inclusive in the argument range?
- Wrong colors in figure 3.7 of network-spec
- Document CBOR encoding of Local TX-Submission mini-protocol
- Document Local Tx-Monitor mini-protocol
- Links to implemented mini-protocols are obsolete
This was done in the Network Spec Update PR, we also fixed many grammar & spelling errors network-spec: language.
SRV Record Support
We worked on SRV records support by ouroboros-network
, issue
#2780, PR 5018. We will merge it after reuasble
diffusion.
Quering Network State through Node-to-Client Protocol
The aim is to make P2P network stake available through the Local State Query Mini-Protocol.
We opened a draft PR, also see the issue, where we mentioned all the branches where the work is progressing. See below for more technical details.
Extensible Ouroboros Network Diffusion Stack
The work stream reached the review phase. See issue#5016.
Tx-Submission
The Consensus team agreed to implement needed mempool performance optimisations and is making progress on them. See ouroboros-consensus#1359.
Ouroboros-Network-0.19 Release
We cut ouroboros-network-0.19
and 0.19.1
releases.
Configuration Changes for Block Propagation Times
Block propagation times are influenced by the number of TCP round trips required to transmit a block.
In mid-December, we published a post discussing configuration changes to the Linux IP stack. These adjustments involved increasing the initial TCP congestion window to 42 segments and ensuring that the congestion window remained open for idle connections.
IOG applied these changes to four stake pools located in Brazil, South Africa, Dubai, and Japan around December 15th.
The Cardano Foundation manages a standard peer-to-peer (P2P) node in Paris, which operates without manual connections to other Cardano Foundation nodes or IOG nodes. After implementing the configuration changes, we noted a statistically significant improvement in the propagation times for blocks larger than 10 segments (about 14,480 bytes) produced by IOG's pools.
Block Size (bytes) | Improvement (ms) |
---|---|
14,480 - 28,960 | -132 to -78 |
28,960 - 57,920 | -197 to -130 |
>57,920 | -255 to -176 |
These results demonstrate that a Stake Pool Operator (SPO) can enhance the propagation times of their own pool's blocks by applying config changes targeting TCP's congestion window.
Low-level summary
Querying Network State through Node-to-Client Protocol
In the first interaction, we will make it possible to query the node-to-node
state
through LocalStateQuery
mini-protocol (part of the node-to-client protocol).
data ConnectionManagerState peeraddr = ConnectionManagerState {
connectionMap :: Map (ConnectionId peeraddr) AbstractState,
-- ^ map of connections, without outbound connections in
-- `ReservedOutboundSt` state.
registeredOutboundConnections :: Set peeraddr
-- ^ set of outbound connections in the `ReserverdOutboundSt` state.
}
deriving (Eq, Show)
data InboundState peeraddr = InboundState {
remoteHotSet :: !(Set (ConnectionId peeraddr)),
remoteWarmSet :: !(Set (ConnectionId peeraddr)),
remoteColdSet :: !(Set (ConnectionId peeraddr)),
remoteIdleSet :: !(Set (ConnectionId peeraddr))
}
deriving (Eq, Show)
data OutboundState peeraddr = OutboundState {
coldPeers :: Set peeraddr,
warmPeers :: Set peeraddr,
hotPeers :: Set peeraddr
}
deriving (Eq, Show)
data NetworkState peeraddr = NetworkState {
connectionManagerState :: ConnectionManagerState peeraddr,
inboundGovernorState :: InboundState peeraddr,
outboundGovernorState :: OutboundState peeraddr
}
deriving (Eq, Show)