]> git.bitcoin.ninja Git - rust-lightning/commit
Prefetch per-direction channel info before looking at the channel
authorMatt Corallo <git@bluematt.me>
Sun, 10 Dec 2023 04:30:09 +0000 (04:30 +0000)
committerMatt Corallo <git@bluematt.me>
Wed, 17 Jul 2024 14:36:57 +0000 (14:36 +0000)
commit1a1d528b88cc1d4f6d23e7a34a3f96a43310e165
treed506baf6a492ab3e8812e5d09170dbefab5c992e
parent524caf31356ce905edec20720b663ec56963ace9
Prefetch per-direction channel info before looking at the channel

In the previous commit, we laid out `ChannelInfo` to ensure most of
the data we cared about was sitting on two adjacent cache lines.
However, this left off the per-direction `ChannelUpdateInfo`, which
is sitting elsewhere.

Here, we try to reduce the cost we pay for accessing those when we
call `ChannelInfo::as_directed` by prefetching them as soon as we
fetch the `ChannelInfo` from the per-channel `HashMap`. We then
check the features for unknown flags, giving the CPU a handful of
instructions to chew on before we actually need the
`ChannelUpdateInfo`.

Sadly, this currently requires unsafe Rust (and is currently only
available on stable for x86), even though the x86 ISA is explicit
that the instruction "does not affect program behavior". Still,
this optimization reduces time taken waiting for the
`ChannelUpdateInfo` to load from ~5% of our routefinding time to
~2.5%, for a net reduction of ~2.5% in routefinding time.
lightning/src/lib.rs
lightning/src/routing/router.rs