Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

use bytemuck for disk bucket restart #33371

Merged
merged 1 commit into from
Sep 22, 2023

Conversation

jeffwashington
Copy link
Contributor

Problem

Speeding up restart.
Reusing disk index files on start.

Summary of Changes

Use bytemuck for manipulations.
Improve test.

Fixes #

@codecov
Copy link

codecov bot commented Sep 22, 2023

Codecov Report

Merging #33371 (7a2aa13) into master (97d53be) will increase coverage by 0.0%.
The diff coverage is 77.7%.

@@           Coverage Diff           @@
##           master   #33371   +/-   ##
=======================================
  Coverage    81.9%    81.9%           
=======================================
  Files         797      797           
  Lines      216013   216018    +5     
=======================================
+ Hits       177039   177047    +8     
+ Misses      38974    38971    -3     

Copy link
Contributor

@HaoranYi HaoranYi left a comment

Choose a reason for hiding this comment

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

lgtm

// In order to safely guarantee Header is Pod, it cannot have any padding.
const _: () = assert!(
std::mem::size_of::<Header>() == std::mem::size_of::<u128>() * 2,
"Header cannot have any padding"
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: the error message is not accurate.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I suppose it could be more clear if I said no automatic padding can be added to the header. Thoughts?

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe, just say "incorrect size of header struct" generally.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done in next pr

// In order to safely guarantee Header is Pod, it cannot have any padding.
const _: () = assert!(
std::mem::size_of::<OneIndexBucket>() == std::mem::size_of::<u128>() * 2,
"Header cannot have any padding"
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: inaccurate error message.

@jeffwashington jeffwashington merged commit d2464d9 into solana-labs:master Sep 22, 2023
SwenSchaeferjohann pushed a commit to ananas-block/solana that referenced this pull request Sep 23, 2023
Switch confirmed_unrooted_slots from Vec<_> to HashSet<_> (solana-labs#33311)

The container is only used to check for inclusion of slots with
the .contains() method. This method is O(n) on a Vec<_> but O(1) on a
HashSet<_>.

add Restart structs for disk index (solana-labs#33361)

use bytemuck for disk bucket restart (solana-labs#33371)

disk bucket: init restart path (solana-labs#33375)

simple cleanup in bucket map (solana-labs#33376)

add disk bucket get_restart_file (solana-labs#33373)

* add disk bucket get_restart_file

* add get_restartable_buckets

pass RestartableBucket through disk index (solana-labs#33377)

data bucket holds RestartableBucket (solana-labs#33381)

Feature - better error codes for tx lamport check (solana-labs#33343)

Replaces `TransactionError::InstructionError(0, InstructionError::UnbalancedInstruction)` with `TransactionError::UnbalancedTransaction`.

Co-authored-by: Alexander Meißner <AlexanderMeissner@gmx.net>

DiskIdx: reuse disk bucket file if possible (solana-labs#33379)

diskidx: stats for created vs reused (solana-labs#33385)

solana-program - altbn128: add g1 & g2 compression

still fixing tests for point of infinity

feat: proof compression syscall working

add rust test to ci

remove prints

added c test

added sycall pricing

fixed ci checks

refactored altbn128 and compression
jeffwashington added a commit to jeffwashington/solana that referenced this pull request Sep 25, 2023
#[repr(C)]
pub(crate) struct Header {
/// version of this file. Differences here indicate the file is not usable.
version: u64,
/// number of buckets these files represent.
buckets: usize,
buckets: u64,
/// u8 representing how many entries to search for during collisions.
/// If this is different, then the contents of the index file's contents are likely not as helpful.
max_search: u8,
/// padding to get header to u128 aligned
_dummy: [u8; 15],
Copy link
Contributor

Choose a reason for hiding this comment

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

As a nit, this padding doesn't change the alignment of the Header. Since the field with the largest alignment is a u64, the alignment will always be 8 bytes regardless of the amount of padding bytes.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants