oxidecomputer / oxidecomputer/opte

Recast route caching as an LPM, make multipath decisions locally

Open
#539 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

customer perf
Dominant language
Rust
Stars
77
Forks
11
Avg merge
9d 20h
Merged PRs (30d)
8

Description

As of #499, we have a fairly simple cache in front of calls to next_hop. However, this includes the L4 Hash as part of the lookup key to maintain path diversity between flows, as we route via a chosen underlay device each time. As a result, this is going to have fairly poor scaling characteristics.

See the discussion on that PR: we can vastly reduce the number of entries we need, and cast the lookup as an LPM query. However, to do so we need to:

  • Walk and refresh the entire set of route entries linked in an IRE, which will reimplement some logic from illumos,
  • Locally decide between multiple routes.

Doing so will allow us to maintain a shared route cache of O(sleds), and/or make use of per-packet multipath if we choose to.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with PR #499 and its linked discussion, then trace the cache in front of next_hop and the route entries linked in an IRE. Done means the cache uses an LPM query, the full IRE route set is refreshed, and multipath choices are made locally.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.