mirror of
https://github.com/ceph/ceph
synced 2025-02-21 18:17:42 +00:00
os/bluestore: make preferred csum order a function of expected_write_size
Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
parent
d9648dc0dc
commit
0e8294c9aa
@ -6085,7 +6085,7 @@ int BlueStore::_do_write(
|
||||
dout(20) << __func__ << " will do buffered write" << dendl;
|
||||
wctx.buffered = true;
|
||||
}
|
||||
wctx.csum_order = block_size_order;
|
||||
wctx.csum_order = MAX(block_size_order, o->onode.get_preferred_csum_order());
|
||||
|
||||
// compression parameters
|
||||
unsigned alloc_hints = o->onode.alloc_hint_flags;
|
||||
@ -6101,6 +6101,7 @@ int BlueStore::_do_write(
|
||||
(alloc_hints & (CEPH_OSD_ALLOC_HINT_FLAG_IMMUTABLE|
|
||||
CEPH_OSD_ALLOC_HINT_FLAG_APPEND_ONLY)) &&
|
||||
(alloc_hints & CEPH_OSD_ALLOC_HINT_FLAG_RANDOM_WRITE) == 0) {
|
||||
dout(20) << __func__ << " will prefer large blob and csum sizes" << dendl;
|
||||
wctx.comp_blob_size = comp_max_blob_size;
|
||||
wctx.csum_order = min_alloc_size_order;
|
||||
} else {
|
||||
|
@ -837,6 +837,15 @@ void bluestore_onode_t::generate_test_instances(list<bluestore_onode_t*>& o)
|
||||
// FIXME
|
||||
}
|
||||
|
||||
size_t bluestore_onode_t::get_preferred_csum_order() const
|
||||
{
|
||||
uint32_t t = expected_write_size;
|
||||
if (!t) {
|
||||
return 0;
|
||||
}
|
||||
return ctz(expected_write_size);
|
||||
}
|
||||
|
||||
int bluestore_onode_t::compress_extent_map()
|
||||
{
|
||||
if (extent_map.empty())
|
||||
|
@ -596,6 +596,9 @@ struct bluestore_onode_t {
|
||||
expected_write_size(0),
|
||||
alloc_hint_flags(0) {}
|
||||
|
||||
/// get preferred csum chunk size
|
||||
size_t get_preferred_csum_order() const;
|
||||
|
||||
/// find a lextent that includes offset
|
||||
map<uint64_t,bluestore_lextent_t>::iterator find_lextent(uint64_t offset) {
|
||||
map<uint64_t,bluestore_lextent_t>::iterator fp =
|
||||
|
@ -586,6 +586,22 @@ TEST(bluestore_blob_t, csum_bench)
|
||||
}
|
||||
}
|
||||
|
||||
TEST(bluestore_onode_t, get_preferred_csum_order)
|
||||
{
|
||||
bluestore_onode_t on;
|
||||
ASSERT_EQ(0u, on.get_preferred_csum_order());
|
||||
on.expected_write_size = 4096;
|
||||
ASSERT_EQ(12u, on.get_preferred_csum_order());
|
||||
on.expected_write_size = 4096;
|
||||
ASSERT_EQ(12u, on.get_preferred_csum_order());
|
||||
on.expected_write_size = 8192;
|
||||
ASSERT_EQ(13u, on.get_preferred_csum_order());
|
||||
on.expected_write_size = 8192 + 4096;
|
||||
ASSERT_EQ(12u, on.get_preferred_csum_order());
|
||||
on.expected_write_size = 1048576;
|
||||
ASSERT_EQ(20u, on.get_preferred_csum_order());
|
||||
}
|
||||
|
||||
TEST(bluestore_onode_t, find_lextent)
|
||||
{
|
||||
bluestore_onode_t on;
|
||||
|
Loading…
Reference in New Issue
Block a user