Skip to content

Commit bfff750

Browse files
committed
os/bluestore: Make write_v2 calculate affected range
This reduces size for dirty_range and need_reshard range. Signed-off-by: Adam Kupczyk <[email protected]>
1 parent bda481b commit bfff750

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

src/os/bluestore/BlueStore.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17656,9 +17656,13 @@ int BlueStore::_do_write_v2(
1765617656
BlueStore::Writer wr(this, txc, &wctx, o);
1765717657
uint64_t start = p2align(offset, min_alloc_size);
1765817658
uint64_t end = p2roundup(offset + length, min_alloc_size);
17659+
wr.left_affected_range = start;
17660+
wr.right_affected_range = end;
1765917661
std::tie(wr.left_shard_bound, wr.right_shard_bound) =
1766017662
o->extent_map.fault_range_ex(db, start, end - start);
1766117663
wr.do_write(offset, bl);
17664+
o->extent_map.dirty_range(wr.left_affected_range, wr.right_affected_range - wr.left_affected_range);
17665+
o->extent_map.maybe_reshard(wr.left_affected_range, wr.right_affected_range);
1766217666
return r;
1766317667
}
1766417668

src/os/bluestore/Writer.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,12 +558,14 @@ inline void BlueStore::Writer::_place_extent_in_blob(
558558
// we can just expand existing Extent
559559
ex->length += map_end - map_begin;
560560
dout(20) << __func__ << " expanded extent " << ex->print(pp_mode) << dendl;
561+
left_affected_range = std::min(left_affected_range, ex->logical_offset);
561562
} else {
562563
// disjointed, new extent needed
563564
Extent *le = new Extent(
564565
map_begin, in_blob_offset, map_end - map_begin, ex->blob);
565566
dout(20) << __func__ << " new extent " << le->print(pp_mode) << dendl;
566567
onode->extent_map.extent_map.insert(*le);
568+
left_affected_range = std::min(left_affected_range, le->logical_offset);
567569
}
568570
} else if (ex->logical_offset >= map_end) {
569571
// we are adding to left side of target
@@ -574,12 +576,14 @@ inline void BlueStore::Writer::_place_extent_in_blob(
574576
ex->blob_offset -= (map_end - map_begin);
575577
ex->length += (map_end - map_begin);
576578
dout(20) << __func__ << " expanded extent " << ex->print(pp_mode) << dendl;
579+
right_affected_range = std::max(right_affected_range, ex->logical_end());
577580
} else {
578581
// disjointed, new extent needed
579582
Extent *le = new Extent(
580583
map_begin, in_blob_offset, map_end - map_begin, ex->blob);
581584
dout(20) << __func__ << " new extent " << le->print(pp_mode) << dendl;
582585
onode->extent_map.extent_map.insert(*le);
586+
right_affected_range = std::max(right_affected_range, le->logical_end());
583587
}
584588
}
585589
}
@@ -1404,8 +1408,6 @@ void BlueStore::Writer::do_write(
14041408
_collect_released_allocated();
14051409
// update statfs
14061410
txc->statfs_delta += statfs_delta;
1407-
onode->extent_map.dirty_range(location, data_end-location);
1408-
onode->extent_map.maybe_reshard(location, data_end);
14091411
// note: compress extent is not needed; _try_reuse_allocated_* joins extents if possible
14101412
// in other cases new blobs cannot be joined with existing ones
14111413
dout(25) << "result: " << std::endl << onode->print(pp_mode) << dendl;

src/os/bluestore/Writer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ class BlueStore::Writer {
7070
volatile_statfs statfs_delta;
7171
uint32_t left_shard_bound; // if sharding is in effect,
7272
uint32_t right_shard_bound; // do not cross this line
73-
73+
uint32_t left_affected_range;
74+
uint32_t right_affected_range;
7475
private:
7576
BlueStore* bstore;
7677
TransContext* txc;

0 commit comments

Comments
 (0)