From 6f116128ccfbaf2b736496546e6e3274ddbece2d Mon Sep 17 00:00:00 2001 From: Yueh-Hsuan Chiang Date: Mon, 11 Dec 2023 12:42:45 -0800 Subject: [PATCH 1/2] [TieredStorage] Improve comments for HOT_ACCOUNT_ALIGNMENT --- accounts-db/src/tiered_storage/hot.rs | 26 ++++++++++++------------- accounts-db/src/tiered_storage/index.rs | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/accounts-db/src/tiered_storage/hot.rs b/accounts-db/src/tiered_storage/hot.rs index e365b638dff3f3..64aa2cf83f797a 100644 --- a/accounts-db/src/tiered_storage/hot.rs +++ b/accounts-db/src/tiered_storage/hot.rs @@ -35,13 +35,15 @@ const MAX_HOT_PADDING: u8 = 7; /// The maximum allowed value for the owner index of a hot account. const MAX_HOT_OWNER_OFFSET: OwnerOffset = OwnerOffset((1 << 29) - 1); -/// The alignment for HotAccountOffset. It is also a multiplier for converting -/// HotAccountOffset to the internal hot account offset that increases the maximum -/// size of a hot accounts file. -pub(crate) const HOT_ACCOUNT_OFFSET_ALIGNMENT: usize = 8; +/// The alignment for hot accounts. This alignment serves duo purposes. +/// First, it allows hot accounts to be directly accessed when the underlying +/// file is mmapped. In addition, as all hot accounts are aligned, it allows +/// each hot accounts file to handle more accounts with the same number of +/// bytes in HotAccountOffset. +pub(crate) const HOT_ACCOUNT_ALIGNMENT: usize = 8; /// The maximum supported offset for hot accounts storage. -const MAX_HOT_ACCOUNT_OFFSET: usize = u32::MAX as usize * HOT_ACCOUNT_OFFSET_ALIGNMENT; +const MAX_HOT_ACCOUNT_OFFSET: usize = u32::MAX as usize * HOT_ACCOUNT_ALIGNMENT; #[bitfield(bits = 32)] #[repr(C)] @@ -78,22 +80,20 @@ impl HotAccountOffset { )); } - // Hot accounts are aligned based on HOT_ACCOUNT_OFFSET_ALIGNMENT. - if offset % HOT_ACCOUNT_OFFSET_ALIGNMENT != 0 { + // Hot accounts are aligned based on HOT_ACCOUNT_ALIGNMENT. + if offset % HOT_ACCOUNT_ALIGNMENT != 0 { return Err(TieredStorageError::OffsetAlignmentError( offset, - HOT_ACCOUNT_OFFSET_ALIGNMENT, + HOT_ACCOUNT_ALIGNMENT, )); } - Ok(HotAccountOffset( - (offset / HOT_ACCOUNT_OFFSET_ALIGNMENT) as u32, - )) + Ok(HotAccountOffset((offset / HOT_ACCOUNT_ALIGNMENT) as u32)) } /// Returns the offset to the account. fn offset(&self) -> usize { - self.0 as usize * HOT_ACCOUNT_OFFSET_ALIGNMENT + self.0 as usize * HOT_ACCOUNT_ALIGNMENT } } @@ -552,7 +552,7 @@ pub mod tests { .map(|address| AccountIndexWriterEntry { address, offset: HotAccountOffset::new( - rng.gen_range(0..u32::MAX) as usize * HOT_ACCOUNT_OFFSET_ALIGNMENT, + rng.gen_range(0..u32::MAX) as usize * HOT_ACCOUNT_ALIGNMENT, ) .unwrap(), }) diff --git a/accounts-db/src/tiered_storage/index.rs b/accounts-db/src/tiered_storage/index.rs index 0921bf6259cead..dc9764416a43c5 100644 --- a/accounts-db/src/tiered_storage/index.rs +++ b/accounts-db/src/tiered_storage/index.rs @@ -120,7 +120,7 @@ mod tests { super::*, crate::tiered_storage::{ file::TieredStorageFile, - hot::{HotAccountOffset, HOT_ACCOUNT_OFFSET_ALIGNMENT}, + hot::{HotAccountOffset, HOT_ACCOUNT_ALIGNMENT}, }, memmap2::MmapOptions, rand::Rng, @@ -146,7 +146,7 @@ mod tests { .map(|address| AccountIndexWriterEntry { address, offset: HotAccountOffset::new( - rng.gen_range(0..u32::MAX) as usize * HOT_ACCOUNT_OFFSET_ALIGNMENT, + rng.gen_range(0..u32::MAX) as usize * HOT_ACCOUNT_ALIGNMENT, ) .unwrap(), }) From 531e7931525528920c620eab8d6a1145854bd60d Mon Sep 17 00:00:00 2001 From: Yueh-Hsuan Chiang Date: Mon, 11 Dec 2023 15:49:46 -0800 Subject: [PATCH 2/2] -> The byte alignment for hot accounts --- accounts-db/src/tiered_storage/hot.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accounts-db/src/tiered_storage/hot.rs b/accounts-db/src/tiered_storage/hot.rs index 64aa2cf83f797a..3cec73c1dc3a5c 100644 --- a/accounts-db/src/tiered_storage/hot.rs +++ b/accounts-db/src/tiered_storage/hot.rs @@ -35,7 +35,7 @@ const MAX_HOT_PADDING: u8 = 7; /// The maximum allowed value for the owner index of a hot account. const MAX_HOT_OWNER_OFFSET: OwnerOffset = OwnerOffset((1 << 29) - 1); -/// The alignment for hot accounts. This alignment serves duo purposes. +/// The byte alignment for hot accounts. This alignment serves duo purposes. /// First, it allows hot accounts to be directly accessed when the underlying /// file is mmapped. In addition, as all hot accounts are aligned, it allows /// each hot accounts file to handle more accounts with the same number of