• 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
typecache.go 7.09 KB