Skip to content

Commit 20897e8

Browse files
committed
EL: add some discovery metrics to check disv4/5 performance
1 parent c030b05 commit 20897e8

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

execution_chain/networking/discoveryv4/kademlia.nim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ type
4141
Node* = ref object
4242
node*: ENode
4343
id*: NodeId
44+
fromDiscv5*: bool
4445

4546
RoutingTable = object
4647
thisNode: Node

execution_chain/networking/eth1_discovery.nim

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ type
4747
discv5: DiscV5
4848
compatibleForkId: CompatibleForkIdProc
4949

50+
declareCounter disc_incoming_packets, "Number of incoming packets on discovery port", labels = ["type"]
51+
declareCounter discv5_nodes_discovered, "Number of nodes discovered via discv5", labels = ["type"]
52+
declareCounter discv4_nodes_discovered, "Number of nodes discovered via discv4"
53+
5054
#------------------------------------------------------------------------------
5155
# Private functions
5256
#------------------------------------------------------------------------------
@@ -65,6 +69,7 @@ func to(node: NodeV5, _: type NodeV4): ENodeResult[NodeV4] =
6569
let v4 = NodeV4(
6670
id: node.id,
6771
node: ?ENode.fromEnr(node.record),
72+
fromDiscv5: true,
6873
)
6974
ok(v4)
7075

@@ -90,8 +95,15 @@ proc processClient(
9095
if discv4.isErr:
9196
# unhandled buf will be handled by discv5
9297
let addrv5 = raddr.to(AddressV5)
93-
proto.discv5.receiveV5(addrv5, buf).isOkOr:
94-
debug "Discovery receive error", discv4=discv4.error, discv5=error
98+
let res = proto.discv5.receiveV5(addrv5, buf)
99+
if res.isErr:
100+
debug "Discovery receive error", discv4=discv4.error, discv5=res.error, address=addrv5
101+
disc_incoming_packets.inc(labelValues = ["spam"])
102+
else:
103+
disc_incoming_packets.inc(labelValues = ["discv5"])
104+
105+
else:
106+
disc_incoming_packets.inc(labelValues = ["discv4"])
95107

96108
func eligibleNode(proto: Eth1Discovery, rec: Record): bool =
97109
# Filter out non `eth` node
@@ -198,15 +210,18 @@ proc lookupRandomNode*(proto: Eth1Discovery, queue: AsyncQueue[NodeV4]) {.async:
198210
if proto.discv4.isNil.not:
199211
let nodes = await proto.discv4.lookupRandom()
200212
for node in nodes:
213+
discv4_nodes_discovered.inc()
201214
await queue.addLast(node)
202215

203216
if proto.discv5.isNil.not:
204217
let nodes = await proto.discv5.queryRandom()
205218
for node in nodes:
219+
discv5_nodes_discovered.inc()
206220
if not proto.eligibleNode(node.record):
207221
continue
208222
let v4 = node.to(NodeV4).valueOr:
209223
continue
224+
discv5_nodes_discovered.inc(labelValues = ["eligible"])
210225
await queue.addLast(v4)
211226

212227
proc getRandomBootnode*(proto: Eth1Discovery): Opt[NodeV4] =

execution_chain/networking/p2p_metrics.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ export
1717

1818
declarePublicGauge rlpx_connected_peers, "Number of connected peers in the pool"
1919

20-
declarePublicCounter rlpx_connect_success, "Number of successfull rlpx connects"
20+
declarePublicCounter rlpx_connect_success, "Number of successfull rlpx connects", labels = ["discversion"]
2121

2222
declarePublicCounter rlpx_connect_failure,
23-
"Number of rlpx connects that failed", labels = ["reason"]
23+
"Number of rlpx connects that failed", labels = ["reason", "discversion"]
2424

2525
declarePublicCounter rlpx_accept_success, "Number of successful rlpx accepted peers"
2626

execution_chain/networking/peer_pool.nim

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,17 @@ proc connect[Network](p: PeerPoolRef[Network], remote: Node): Future[PeerRef[Net
126126
# TODO: Probably should move all this logic to rlpx.nim
127127
if res.isOk():
128128
rlpx_connect_success.inc()
129+
if remote.fromDiscv5:
130+
rlpx_connect_success.inc(labelValues = ["discv5"])
131+
else:
132+
rlpx_connect_success.inc(labelValues = ["discv4"])
129133
return res.get()
130134
else:
131135
rlpx_connect_failure.inc()
132-
rlpx_connect_failure.inc(labelValues = [$res.error])
136+
if remote.fromDiscv5:
137+
rlpx_connect_failure.inc(labelValues = [$res.error, "discv5"])
138+
else:
139+
rlpx_connect_failure.inc(labelValues = [$res.error, "discv4"])
133140
case res.error():
134141
of UselessRlpxPeerError:
135142
p.addSeen(remote.id, SeenTableTimeUselessPeer)

0 commit comments

Comments
 (0)