sstables/mx/writer: yield after writing a cell
With the goal of avoiding stalls on writing large collections, like
below:
++[0#1/1 100%] addr=0x5422d1e total=32 count=1 avg=32:
| seastar::backtrace<seastar::backtrace_buffer::append_backtrace_oneline()::{lambda(seastar::frame)#1}> at ./build/release/seastar/./seastar/include/seastar/util/backtrace.hh:85
++ - addr=0x541b6d4:
| seastar::backtrace_buffer::append_backtrace_oneline at ./build/release/seastar/./seastar/src/core/reactor.cc:811
| (inlined by) seastar::print_with_backtrace at ./build/release/seastar/./seastar/src/core/reactor.cc:838
++ - addr=0x541afb7:
| seastar::internal::cpu_stall_detector::generate_trace at ./build/release/seastar/./seastar/src/core/reactor.cc:1479
++ - addr=0x541b86c:
| seastar::internal::cpu_stall_detector::maybe_report at ./build/release/seastar/./seastar/src/core/reactor.cc:1214
| (inlined by) seastar::internal::cpu_stall_detector::on_signal at ./build/release/seastar/./seastar/src/core/reactor.cc:1234
| (inlined by) seastar::reactor::block_notifier at ./build/release/seastar/./seastar/src/core/reactor.cc:1548
/opt/scylladb/libreloc/libc.so.6: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f83d43b9b4b0ed5c2bd0a1613bf33e08ee054c93, for GNU/Linux 3.2.0, not stripped
++ - addr=/opt/scylladb/libreloc/libc.so.6+0x1a28f:
| sigpending at ??:0
++ - addr=0x1760bf6:
| std::basic_string_view<signed char, std::char_traits<signed char> >::remove_prefix at /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/string_view:302
| (inlined by) managed_bytes_basic_view<(mutable_view)0>::remove_prefix at ././utils/managed_bytes.hh:421
| (inlined by) _Z11read_simpleIlTk14FragmentedView24managed_bytes_basic_viewIL12mutable_view0EEET_RT0_ at ././utils/fragment_range.hh:365
| (inlined by) _ZL9get_fieldIlTk14FragmentedView24managed_bytes_basic_viewIL12mutable_view0EEQsr3stdE12is_trivial_vIT_EES3_T0_j at ././mutation/atomic_cell.hh:62
| (inlined by) atomic_cell_type::timestamp at ././mutation/atomic_cell.hh:103
| (inlined by) basic_atomic_cell_view<(mutable_view)0>::timestamp at ././mutation/atomic_cell.hh:232
| (inlined by) sstables::mc::writer::write_cell at ./sstables/mx/writer.cc:1101
| (inlined by) sstables::mc::writer::write_collection(bytes_ostream&, clustering_key_prefix const*, column_definition const&, collection_mutation_view, sstables::mc::writer::row_time_properties const&, bool)::$_0::operator() at ./sstables/mx/writer.cc:1233
| (inlined by) collection_mutation_view::with_deserialized<sstables::mc::writer::write_collection(bytes_ostream&, clustering_key_prefix const*, column_definition const&, collection_mutation_view, sstables::mc::writer::row_time_properties const&, bool)::$_0> at ././mutation/collection_mutation.hh:97
| (inlined by) sstables::mc::writer::write_collection at ./sstables/mx/writer.cc:1221
++ - addr=0x1677af3:
| sstables::mc::writer::write_cells at ./sstables/mx/writer.cc:1261
| (inlined by) sstables::mc::writer::write_row_body at ./sstables/mx/writer.cc:1287
| (inlined by) sstables::mc::writer::write_clustered at ./sstables/mx/writer.cc:1377
| (inlined by) _ZN8sstables2mc6writer15write_clusteredI14clustering_rowQ9ClusteredIT_EEEvRKS4_9tombstone at ./sstables/mx/writer.cc:766
| (inlined by) sstables::mc::writer::consume at ./sstables/mx/writer.cc:1425
Putting the yield in write_cell() instead of in write_collection() means
that writing any row benefits from the added yield point in the middle.
Refs: SCYLLADB-964
Closes scylladb/scylladb#28948
This commit is contained in:
committed by
Patryk Jędrzejczak
parent
475220b9c9
commit
54bddeb3b5
@@ -1221,6 +1221,8 @@ void writer::write_cell(bytes_ostream& writer, const clustering_key_prefix* clus
|
||||
_c_stats.update_local_deletion_time(std::numeric_limits<int>::max());
|
||||
}
|
||||
_sst.get_stats().on_cell_write();
|
||||
|
||||
thread::maybe_yield();
|
||||
}
|
||||
|
||||
void writer::write_liveness_info(bytes_ostream& writer, const row_marker& marker) {
|
||||
|
||||
Reference in New Issue
Block a user