Skip to content

Conversation

@hawkw
Copy link
Member

@hawkw hawkw commented Jul 18, 2025

Based on a suggestion from @mkeeter, this branch adds an adapter that implements minicbor::encode::write::Write for a cursor into a writable lease. This lets us avoid double-buffering in the read_ereports path, where we would previously encode each ereport into the receive buffer, and then copy the contents of that into the lease if there is space for it. The new approach avoids the memcpy, and also doesn't encode the ereport in the case where there isn't space left for it.

I implemented the lease-writer adapter thing in a separate minicbor-lease crate, as I was hoping it would be useful elsewhere...but I'm not actually sure if it will be, now that I think of it: the IPC for delivering an ereport to packrat leases the data from the caller, so callers will just encode into a normal buffer they own. Ah well.

@hawkw hawkw requested review from cbiffle and mkeeter July 18, 2025 19:26
@hawkw
Copy link
Member Author

hawkw commented Jul 18, 2025

@mkeeter Not sure whether you'd prefer to review this as its own PR or if I should just go ahead and merge it straight into #2126 --- whatever you'd prefer works for me!

@mkeeter
Copy link
Collaborator

mkeeter commented Jul 18, 2025

I'd vote to keep it separate! Review to come (either this afternoon or Monday)

@hawkw
Copy link
Member Author

hawkw commented Jul 18, 2025

@mkeeter opened an upstream issue to make the minicbor API less annoying: twittner/minicbor#36

Base automatically changed from eliza/snitch-again to master August 13, 2025 16:39
@hawkw hawkw force-pushed the eliza/minicbor-lease branch from 69f16ef to 70e0623 Compare August 13, 2025 21:43
Comment on lines +166 to +168
[patch.crates-io]
# See https://gitlab.com/robigalia/ssmarshal/-/merge_requests/2
ssmarshal = { git = "https://gitlab.com/de-vri-es/ssmarshal", rev = "10e90cbe389c8f07c52815857551a051946881ab" }
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is necessary due to ssmarshal no longer compiling with Rust 2024, as when the edition is Rust 2024, serde will require core::error::Error implementations for error types, and ssmarshal doesn't have those.

Since the last commit to ssmarshal's main branch was 8 years ago, I'm not convinced this PR gets merged any time soon. It would probably be worth getting rid of our ssmarshal deps at some point, since Hubpack is basically the same thing but more featureful...

@hawkw hawkw requested a review from mkeeter August 29, 2025 18:41
@hawkw hawkw merged commit 55fecdf into master Aug 29, 2025
135 checks passed
@hawkw hawkw deleted the eliza/minicbor-lease branch August 29, 2025 21:12
rusty1968 pushed a commit to rusty1968/hubris that referenced this pull request Sep 17, 2025
…puter#2164)

Based on [a suggestion][1] from @mkeeter, this branch adds an adapter
that implements `minicbor::encode::write::Write` for a cursor into a
writable lease. This lets us avoid double-buffering in the
`read_ereports` path, where we would previously encode each ereport into
the receive buffer, and then copy the contents of that into the lease if
there is space for it. The new approach avoids the memcpy, and also
doesn't encode the ereport in the case where there isn't space left for
it.

I implemented the lease-writer adapter thing in a separate
`minicbor-lease` crate, as I was hoping it would be useful
elsewhere...but I'm not actually sure if it will be, now that I think of
it: the IPC for delivering an ereport to packrat leases the data _from_
the caller, so callers will just encode into a normal buffer they own.
Ah well.

[1]:
oxidecomputer#2126 (comment)
clockdomain pushed a commit to clockdomain/hubris that referenced this pull request Sep 26, 2025
…puter#2164)

Based on [a suggestion][1] from @mkeeter, this branch adds an adapter
that implements `minicbor::encode::write::Write` for a cursor into a
writable lease. This lets us avoid double-buffering in the
`read_ereports` path, where we would previously encode each ereport into
the receive buffer, and then copy the contents of that into the lease if
there is space for it. The new approach avoids the memcpy, and also
doesn't encode the ereport in the case where there isn't space left for
it.

I implemented the lease-writer adapter thing in a separate
`minicbor-lease` crate, as I was hoping it would be useful
elsewhere...but I'm not actually sure if it will be, now that I think of
it: the IPC for delivering an ereport to packrat leases the data _from_
the caller, so callers will just encode into a normal buffer they own.
Ah well.

[1]:
oxidecomputer#2126 (comment)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants