1. 25 May, 2021 2 commits
    • Felix Lange's avatar
      rlp: optimize big.Int decoding for size <= 32 bytes (#22927) · 4d33de9b
      Felix Lange authored
      This change grows the static integer buffer in Stream to 32 bytes,
      making it possible to decode 256bit integers without allocating a
      temporary buffer.
      
      In the recent commit 088da24e, Stream struct size decreased from 120
      bytes down to 88 bytes. This commit grows the struct to 112 bytes again,
      but the size change will not degrade performance because Stream
      instances are internally cached in sync.Pool.
      
          name             old time/op    new time/op    delta
          DecodeBigInts-8    12.2µs ± 0%     8.6µs ± 4%  -29.58%  (p=0.000 n=9+10)
      
          name             old speed      new speed      delta
          DecodeBigInts-8   230MB/s ± 0%   326MB/s ± 4%  +42.04%  (p=0.000 n=9+10)
      4d33de9b
    • ucwong's avatar
      rlp, tests/fuzzers/bls12381: gofmt (#22937) · 017cf71f
      ucwong authored
      017cf71f
  2. 24 May, 2021 1 commit
  3. 22 May, 2021 2 commits
    • Felix Lange's avatar
      rlp: optimize byte array handling (#22924) · 154ca32a
      Felix Lange authored
      This change improves the performance of encoding/decoding [N]byte.
      
          name                     old time/op    new time/op    delta
          DecodeByteArrayStruct-8     336ns ± 0%     246ns ± 0%  -26.98%  (p=0.000 n=9+10)
          EncodeByteArrayStruct-8     225ns ± 1%     148ns ± 1%  -34.12%  (p=0.000 n=10+10)
      
          name                     old alloc/op   new alloc/op   delta
          DecodeByteArrayStruct-8      120B ± 0%       48B ± 0%  -60.00%  (p=0.000 n=10+10)
          EncodeByteArrayStruct-8     0.00B          0.00B          ~     (all equal)
      154ca32a
    • Felix Lange's avatar
      rlp: use atomic.Value for type cache (#22902) · 0d076d92
      Felix Lange authored
      All encoding/decoding operations read the type cache to find the
      writer/decoder function responsible for a type. When analyzing CPU
      profiles of geth during sync, I found that the use of sync.RWMutex in
      cache lookups appears in the profiles. It seems we are running into
      CPU cache contention problems when package rlp is heavily used
      on all CPU cores during sync.
      
      This change makes it use atomic.Value + a writer lock instead of
      sync.RWMutex. In the common case where the typeinfo entry is present in
      the cache, we simply fetch the map and lookup the type.
      0d076d92
  4. 21 May, 2021 5 commits
  5. 20 May, 2021 1 commit
  6. 19 May, 2021 1 commit
    • Péter Szilágyi's avatar
      eth, p2p/msgrate: move peer QoS tracking to its own package and use it for snap (#22876) · 3e795881
      Péter Szilágyi authored
      This change extracts the peer QoS tracking logic from eth/downloader, moving
      it into the new package p2p/msgrate. The job of msgrate.Tracker is determining
      suitable timeout values and request sizes per peer.
      
      The snap sync scheduler now uses msgrate.Tracker instead of the hard-coded 15s
      timeout. This should make the sync work better on network links with high latency.
      3e795881
  7. 18 May, 2021 5 commits
  8. 17 May, 2021 5 commits
  9. 12 May, 2021 2 commits
  10. 11 May, 2021 5 commits
  11. 10 May, 2021 5 commits
  12. 07 May, 2021 5 commits
  13. 06 May, 2021 1 commit