go-ethereum/p2p
Felix Lange 7194c847b6
p2p/rlpx: reduce allocation and syscalls (#22899)
This change significantly improves the performance of RLPx message reads
and writes. In the previous implementation, reading and writing of
message frames performed multiple reads and writes on the underlying
network connection, and allocated a new []byte buffer for every read.

In the new implementation, reads and writes re-use buffers, and perform
much fewer system calls on the underlying connection. This doubles the
theoretically achievable throughput on a single connection, as shown by
the benchmark result:

    name             old speed      new speed       delta
    Throughput-8     70.3MB/s ± 0%  155.4MB/s ± 0%  +121.11%  (p=0.000 n=9+8)

The change also removes support for the legacy, pre-EIP-8 handshake encoding.
As of May 2021, no actively maintained client sends this format.
2021-05-27 10:19:13 +02:00
..
discover p2p/discover/v4wire: use optional RLP field for EIP-868 seq (#22842) 2021-05-18 11:48:41 +02:00
dnsdisc p2p/dnsdisc: fix crash when iterator closed before first call to Next (#22906) 2021-05-20 09:24:41 +02:00
enode p2p/enode: avoid crashing for invalid IP (#21981) 2020-12-09 20:21:31 +01:00
enr p2p/enr: fix decoding of incomplete lists (#22484) 2021-03-11 15:09:25 +01:00
msgrate eth, p2p/msgrate: move peer QoS tracking to its own package and use it for snap (#22876) 2021-05-19 14:09:03 +02:00
nat p2p/nat: skip TestUPNP in non-CI environments if discover fails (#22877) 2021-05-25 22:37:30 +02:00
netutil p2p/discover: implement v5.1 wire protocol (#21647) 2020-10-14 12:28:17 +02:00
nodestate les: move client pool to les/vflux/server (#22495) 2021-04-06 20:42:50 +02:00
rlpx p2p/rlpx: reduce allocation and syscalls (#22899) 2021-05-27 10:19:13 +02:00
simulations cmd/utils: don't enumerate USB unless --usb is set (#22130) 2021-01-13 11:14:36 +01:00
tracker p2p/tracker: only reschedule wake if previous didn't run 2021-04-27 21:47:59 +03:00
dial_test.go p2p: new dial scheduler (#20592) 2020-02-13 11:10:03 +01:00
dial.go p2p: add 0 port check in dialer (#21008) 2020-05-11 18:11:17 +03:00
message_test.go p2p: move rlpx into separate package (#21464) 2020-09-22 10:17:39 +02:00
message.go eth: implement eth66 (#22241) 2021-02-18 18:54:29 +02:00
metrics.go eth/protocols, prp/tracker: add support for req/rep rtt tracking (#22608) 2021-04-22 11:42:46 +03:00
peer_error.go p2p: fix some golint warnings (#16577) 2018-05-08 13:08:43 +02:00
peer_test.go p2p: move rlpx into separate package (#21464) 2020-09-22 10:17:39 +02:00
peer.go eth: unregister peer only when handler exits (#22908) 2021-05-25 22:20:36 +02:00
protocol.go cmd/devp2p, p2p: dial using node iterator, discovery crawler (#20132) 2019-10-29 17:08:57 +02:00
server_test.go p2p: move rlpx into separate package (#21464) 2020-09-22 10:17:39 +02:00
server.go p2p: fix minor typo and remove fd parameter in checkInboundConn (#22547) 2021-03-24 13:18:29 +01:00
transport_test.go p2p: move rlpx into separate package (#21464) 2020-09-22 10:17:39 +02:00
transport.go p2p/rlpx: reduce allocation and syscalls (#22899) 2021-05-27 10:19:13 +02:00
util_test.go p2p: new dial scheduler (#20592) 2020-02-13 11:10:03 +01:00
util.go p2p: new dial scheduler (#20592) 2020-02-13 11:10:03 +01:00