<aside> 💡
The table below provides a quick validation summary of the main experiment results before going through the detailed setup and scenarios.
</aside>
| Feature/Experiment | Status | Summary |
|---|---|---|
| Delivery delay regression | ✅ Validated | No obvious regression observed with QUIC or YAMUX. |
| Priority queue behavior | ✅ Validated | Medium/Low queues drop on overflow; High queue overflow disconnects peers. |
| Control traffic reliability | ✅ Validated | High-priority control traffic remains active while Low queue is under pressure. |
| Slow peer penalty | ✅ Validated | Penalty is applied on drops and decays after traffic stops. |
| Parameter sensitivity | ✅ Validated | decay = 0.2 looks safer for bursts; decay = 0.9 looks more aggressive. |
Score impact with weight -0.05 |
✅ Validated | Recoverable bursts cause only temporary score disturbance. |
| Uplink-limited sender behavior | ⚠️ Issue found | Sender-side uplink bottlenecks can falsely penalize healthy remote peers. |
This page presents the experiment scenarios and results for testing the new priority queue features introduced.
The tested PR is:
https://github.com/vacp2p/nim-libp2p/pull/2429
The main feature to evaluate is the new outbound PubSub priority queue system. With this change, outbound PubSub traffic is split into three priority queues:
| Queue | Traffic type | Expected behavior |
|---|---|---|
| High priority | Control messages and subscriptions | If the queue overflows, the peer is disconnected |
| Medium priority | Local publishes | If the queue overflows, messages are dropped |
| Low priority | Relayed messages and IWANT-response traffic | If the queue overflows, messages are dropped |
A slowPeerPenalty mechanism is also added for peers that repeatedly overflow Medium or Low queues. This penalty can eventually lead to pruning, depending on the value of slowPeerPenaltyWeight, because this parameter controls how much the penalty affects the global peer score.
The related parameters are important for interpreting the results:
| Parameter | Role |
|---|---|
slowPeerPenaltyWeight |
Controls how strongly the slow peer penalty affects the global peer score |
slowPeerPenaltyThreshold |
Defines the threshold after which the penalty starts affecting the score |
slowPeerPenaltyDecay |
Controls how quickly the penalty is reduced over time |
In other words, the penalty does not affect the global score before it passes slowPeerPenaltyThreshold. Once it passes the threshold, the impact on the score depends on slowPeerPenaltyWeight. Then, over time, slowPeerPenaltyDecay controls how fast the accumulated penalty is removed.
With that in mind, and based on the validation request, the main objectives of these experiments are to:
<aside> 💡
slowPeerPenaltyWeight = 0.0, Medium/Low overflow should not affect the global peer score;slowPeerPenaltyWeight = -0.05, repeated Medium/Low overflow can affect the global score and can eventually lead to pruning;slowPeerPenalty is applied and decays over time;slowPeerPenaltyWeight, slowPeerPenaltyThreshold, and slowPeerPenaltyDecay are too aggressive.
</aside>For the purpose of these tests, a new test node and a new publisher were added.
The code and Dockerfiles are available here: https://github.com/vacp2p/dst-libp2p-test-node/tree/Mamoutou/gossip_queues