From 7bb727c1532a158fe94a90362fcfbd83b45fe8de Mon Sep 17 00:00:00 2001 From: shosseinimotlagh Date: Mon, 9 Feb 2026 13:11:22 -0800 Subject: [PATCH] Fix perf issue by increasing log chunk size and changing chunk selector policy Make logstore chunk size adjuastable --- conanfile.py | 2 +- src/lib/home_blks_config.fbs | 3 +++ src/lib/homeblks_impl.cpp | 4 ++-- src/lib/volume/volume_chunk_selector.cpp | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/conanfile.py b/conanfile.py index 46388ec..eb9449f 100644 --- a/conanfile.py +++ b/conanfile.py @@ -9,7 +9,7 @@ class HomeBlocksConan(ConanFile): name = "homeblocks" - version = "5.0.6" + version = "5.0.7" homepage = "https://github.com/eBay/HomeBlocks" description = "Block Store built on HomeStore" diff --git a/src/lib/home_blks_config.fbs b/src/lib/home_blks_config.fbs index eee66e8..0b94f90 100644 --- a/src/lib/home_blks_config.fbs +++ b/src/lib/home_blks_config.fbs @@ -21,6 +21,9 @@ table HomeBlksSettings{ // homestore dataservice chunk size; hs_data_chunk_size_mb: uint32 = 2048; + + // homestore Logstore chunk size; + hs_journal_chunk_size_mb: uint32 = 2048; } root_type HomeBlksSettings; diff --git a/src/lib/homeblks_impl.cpp b/src/lib/homeblks_impl.cpp index 27dae43..62354ab 100644 --- a/src/lib/homeblks_impl.cpp +++ b/src/lib/homeblks_impl.cpp @@ -352,7 +352,7 @@ void HomeBlocksImpl::init_homestore() { {HS_SERVICE::META, hs_format_params{.dev_type = HSDevType::Fast, .size_pct = 9.0}}, {HS_SERVICE::LOG, hs_format_params{ - .dev_type = HSDevType::Fast, .size_pct = 45.0, .num_chunks = 0, .chunk_size = 32 * Mi}}, + .dev_type = HSDevType::Fast, .size_pct = 45.0, .num_chunks = 0, .chunk_size = HB_DYNAMIC_CONFIG(hs_journal_chunk_size_mb) * Mi}}, {HS_SERVICE::INDEX, hs_format_params{.dev_type = HSDevType::Fast, .size_pct = 45.0, @@ -373,7 +373,7 @@ void HomeBlocksImpl::init_homestore() { homestore::hs()->format_and_start({ {HS_SERVICE::META, hs_format_params{.dev_type = run_on_type, .size_pct = 5.0}}, {HS_SERVICE::LOG, - hs_format_params{.dev_type = run_on_type, .size_pct = 10.0, .num_chunks = 0, .chunk_size = 32 * Mi}}, + hs_format_params{.dev_type = run_on_type, .size_pct = 10.0, .num_chunks = 0, .chunk_size = HB_DYNAMIC_CONFIG(hs_journal_chunk_size_mb) * Mi}}, {HS_SERVICE::INDEX, hs_format_params{.dev_type = run_on_type, .size_pct = 5.0, diff --git a/src/lib/volume/volume_chunk_selector.cpp b/src/lib/volume/volume_chunk_selector.cpp index 010048e..2aff6a9 100644 --- a/src/lib/volume/volume_chunk_selector.cpp +++ b/src/lib/volume/volume_chunk_selector.cpp @@ -144,8 +144,8 @@ homestore::cshared< Chunk > VolumeChunkSelector::select_chunk(homestore::blk_cou if (*volc->m_next_chunk_index >= num_active_chunks) { *volc->m_next_chunk_index = 0; } auto chunk = volc->m_chunks[*volc->m_next_chunk_index]; - *volc->m_next_chunk_index = ((*volc->m_next_chunk_index) + 1); if (chunk && chunk->available_blks() > 0) { return chunk->get_internal_chunk(); } + *volc->m_next_chunk_index = ((*volc->m_next_chunk_index) + 1); } LOGT("Waiting to allocate more chunks active={} total={}", volc->num_active_chunks.load(),