From c4af96ee7ee36315ff87ec89e0aeb411e67ba26c Mon Sep 17 00:00:00 2001 From: Bojan Serafimov Date: Tue, 21 Nov 2023 12:15:49 -0500 Subject: [PATCH] wip --- pageserver/flamegraph.svg | 414 ------------------------------- pageserver/src/bin/pageserver.rs | 4 +- pageserver/src/import_datadir.rs | 7 +- pageserver/src/profiling.rs | 2 +- pageserver/src/tenant/blob_io.rs | 1 - 5 files changed, 7 insertions(+), 421 deletions(-) delete mode 100644 pageserver/flamegraph.svg diff --git a/pageserver/flamegraph.svg b/pageserver/flamegraph.svg deleted file mode 100644 index 869a445d4c..0000000000 --- a/pageserver/flamegraph.svg +++ /dev/null @@ -1,414 +0,0 @@ -Flame Graph Reset ZoomSearch bytes::bytes_mut::BytesMut::extend_from_slice (4 samples, 5.19%)bytes::bytes_mut..core::ptr::drop_in_place<pageserver::repository::Value> (2 samples, 2.60%)core::p..bytes::bytes_mut::shared_v_drop (2 samples, 2.60%)bytes::..tokio::sync::batch_semaphore::Semaphore::add_permits_locked (1 samples, 1.30%)to..core::ptr::drop_in_place<pageserver::tenant::timeline::TimelineWriter> (2 samples, 2.60%)core::p..core::ptr::drop_in_place<tokio::sync::mutex::MutexGuard<()>> (2 samples, 2.60%)core::p..<tokio::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (2 samples, 2.60%)<tokio:..tokio::sync::batch_semaphore::Semaphore::release (1 samples, 1.30%)to..pageserver::tenant::timeline::Timeline::writer::{{closure}} (2 samples, 2.60%)pageser..tokio::sync::mutex::Mutex<T>::lock::{{closure}} (2 samples, 2.60%)tokio::..tokio::sync::mutex::Mutex<T>::lock::{{closure}}::{{closure}} (2 samples, 2.60%)tokio::..tokio::sync::mutex::Mutex<T>::acquire::{{closure}} (2 samples, 2.60%)tokio::..tokio::sync::batch_semaphore::Semaphore::acquire (2 samples, 2.60%)tokio::..core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<pageserver::tenant::storage_layer::inmemory_layer::InMemoryLayerInner>> (1 samples, 1.30%)co..<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (1 samples, 1.30%)<t..tokio::sync::batch_semaphore::Semaphore::release (1 samples, 1.30%)to..core::slice::<impl [T]>::copy_from_slice (1 samples, 1.30%)co..core::intrinsics::copy_nonoverlapping (1 samples, 1.30%)co..pageserver::page_cache::PageWriteGuard::mark_valid (1 samples, 1.30%)pa..alloc::sync::Arc<T>::new (1 samples, 1.30%)al..alloc::boxed::Box<T>::new (1 samples, 1.30%)al..pageserver::tenant::ephemeral_file::EphemeralFile::write_blob::{{closure}} (16 samples, 20.78%)pageserver::tenant::ephemeral_file::EphemeralFile::write_blob::{{closur..pageserver::tenant::ephemeral_file::EphemeralFile::write_blob::{{closure}}::Writer::push_bytes::{{closure}} (11 samples, 14.29%)pageserver::tenant::ephemeral_file::EphemeralFil..pageserver::virtual_file::VirtualFile::write_all_at::{{closure}} (9 samples, 11.69%)pageserver::virtual_file::VirtualFile::..pageserver::virtual_file::VirtualFile::write_at::{{closure}} (9 samples, 11.69%)pageserver::virtual_file::VirtualFile::..pageserver::virtual_file::VirtualFile::with_file::{{closure}} (9 samples, 11.69%)pageserver::virtual_file::VirtualFile::..prometheus::histogram::Histogram::observe_closure_duration (9 samples, 11.69%)prometheus::histogram::Histogram::obser..pageserver::virtual_file::VirtualFile::with_file::{{closure}}::{{closure}} (9 samples, 11.69%)pageserver::virtual_file::VirtualFile::..pageserver::virtual_file::VirtualFile::write_at::{{closure}}::{{closure}} (9 samples, 11.69%)pageserver::virtual_file::VirtualFile::..<std::fs::File as std::os::unix::fs::FileExt>::write_at (9 samples, 11.69%)<std::fs::File as std::os::unix::fs::Fi..std::sys::unix::fs::File::write_at (9 samples, 11.69%)std::sys::unix::fs::File::write_atstd::sys::unix::fd::FileDesc::write_at (9 samples, 11.69%)std::sys::unix::fd::FileDesc::write_at__pwrite64 (9 samples, 11.69%)__pwrite64<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::finish (1 samples, 1.30%)<s..<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (1 samples, 1.30%)<c..<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (1 samples, 1.30%)<c..<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (1 samples, 1.30%)<c..std::collections::hash::map::HashMap<K,V,S>::entry (3 samples, 3.90%)std::collec..hashbrown::rustc_entry::<impl hashbrown::map::HashMap<K,V,S,A>>::rustc_entry (3 samples, 3.90%)hashbrown::..hashbrown::map::make_hash (2 samples, 2.60%)hashbro..core::hash::BuildHasher::hash_one (2 samples, 2.60%)core::h..core::hash::impls::<impl core::hash::Hash for &T>::hash (1 samples, 1.30%)co..<pageserver::repository::Key as core::hash::Hash>::hash (1 samples, 1.30%)<p..core::hash::impls::<impl core::hash::Hash for u32>::hash (1 samples, 1.30%)co..core::hash::Hasher::write_u32 (1 samples, 1.30%)co..<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::write (1 samples, 1.30%)<s..<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (1 samples, 1.30%)<c..<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (1 samples, 1.30%)<c..core::hash::sip::u8to64_le (1 samples, 1.30%)co..<F as core::future::into_future::IntoFuture>::into_future (1 samples, 1.30%)<F..tokio::sync::rwlock::RwLock<T>::write::{{closure}} (2 samples, 2.60%)tokio::..tokio::sync::rwlock::RwLock<T>::write::{{closure}}::{{closure}} (2 samples, 2.60%)tokio::..tokio::sync::batch_semaphore::Semaphore::acquire (1 samples, 1.30%)to..utils::bin_ser::BeSer::ser_into (2 samples, 2.60%)utils::..bincode::config::Options::serialize_into (2 samples, 2.60%)bincode..bincode::internal::serialize_into (2 samples, 2.60%)bincode..serde::ser::impls::<impl serde::ser::Serialize for &T>::serialize (2 samples, 2.60%)serde::..pageserver::repository::_::<impl serde::ser::Serialize for pageserver::repository::Value>::serialize (2 samples, 2.60%)pageser..<&mut bincode::ser::Serializer<W,O> as serde::ser::Serializer>::serialize_newtype_variant (1 samples, 1.30%)<&..<bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::serialize_u32 (1 samples, 1.30%)<b..bincode::ser::Serializer<W,O>::serialize_literal_u32 (1 samples, 1.30%)bi..bincode::byteorder::WriteBytesExt::write_u32 (1 samples, 1.30%)bi..std::io::impls::<impl std::io::Write for &mut W>::write_all (1 samples, 1.30%)st..<smallvec::SmallVec<A> as std::io::Write>::write_all (1 samples, 1.30%)<s..smallvec::SmallVec<A>::extend_from_slice (1 samples, 1.30%)sm..smallvec::SmallVec<A>::insert_from_slice (1 samples, 1.30%)sm..core::intrinsics::copy (1 samples, 1.30%)co..<utils::lsn::Lsn as core::cmp::Ord>::cmp (1 samples, 1.30%)<u..core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (1 samples, 1.30%)co..pageserver::tenant::storage_layer::inmemory_layer::InMemoryLayer::put_value::{{closure}} (26 samples, 33.77%)pageserver::tenant::storage_layer::inmemory_layer::InMemoryLayer::put_value::{{closure}}utils::vec_map::VecMap<K,V>::append_or_update_last (2 samples, 2.60%)utils::..utils::vec_map::VecMap<K,V>::instrument_vec_op (1 samples, 1.30%)ut..utils::vec_map::VecMap<K,V>::append_or_update_last::{{closure}} (1 samples, 1.30%)ut..alloc::vec::Vec<T,A>::push (1 samples, 1.30%)al..alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 1.30%)al..tokio::sync::batch_semaphore::Semaphore::add_permits_locked (1 samples, 1.30%)to..core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<pageserver::tenant::timeline::layer_manager::LayerManager>> (2 samples, 2.60%)core::p..<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (2 samples, 2.60%)<tokio:..tokio::sync::batch_semaphore::Semaphore::release (1 samples, 1.30%)to..<F as core::future::into_future::IntoFuture>::into_future (1 samples, 1.30%)<F..pageserver::pgdatadir_mapping::DatadirModification::commit::{{closure}} (41 samples, 53.25%)pageserver::pgdatadir_mapping::DatadirModification::commit::{{closure}}pageserver::tenant::timeline::TimelineWriter::put::{{closure}} (32 samples, 41.56%)pageserver::tenant::timeline::TimelineWriter::put::{{closure}}pageserver::tenant::timeline::Timeline::put_value::{{closure}} (32 samples, 41.56%)pageserver::tenant::timeline::Timeline::put_value::{{closure}}pageserver::tenant::timeline::Timeline::get_layer_for_write::{{closure}} (6 samples, 7.79%)pageserver::tenant::timel..tokio::sync::rwlock::RwLock<T>::write::{{closure}} (3 samples, 3.90%)tokio::sync..tokio::sync::rwlock::RwLock<T>::write::{{closure}}::{{closure}} (3 samples, 3.90%)tokio::sync..tokio::sync::batch_semaphore::Semaphore::acquire (2 samples, 2.60%)tokio::..core::ptr::drop_in_place<std::sync::rwlock::RwLockReadGuard<std::collections::hash::map::HashMap<pageserver_api::reltag::RelTag,(utils::lsn::Lsn,u32)>>> (5 samples, 6.49%)core::ptr::drop_in_p..<std::sync::rwlock::RwLockReadGuard<T> as core::ops::drop::Drop>::drop (5 samples, 6.49%)<std::sync::rwlock::..std::sys::unix::locks::futex_rwlock::RwLock::read_unlock (5 samples, 6.49%)std::sys::unix::lock..core::sync::atomic::AtomicU32::fetch_sub (5 samples, 6.49%)core::sync::atomic::..core::sync::atomic::atomic_sub (5 samples, 6.49%)core::sync::atomic::..pageserver::pgdatadir_mapping::<impl pageserver::tenant::timeline::Timeline>::get_rel_exists::{{closure}} (6 samples, 7.79%)pageserver::pgdatadir_map..pageserver::pgdatadir_mapping::<impl pageserver::tenant::timeline::Timeline>::get_cached_rel_size (6 samples, 7.79%)pageserver::pgdatadir_map..std::collections::hash::map::HashMap<K,V,S>::get (1 samples, 1.30%)st..hashbrown::map::HashMap<K,V,S,A>::get (1 samples, 1.30%)ha..hashbrown::map::HashMap<K,V,S,A>::get_inner (1 samples, 1.30%)ha..hashbrown::map::make_hash (1 samples, 1.30%)ha..core::hash::BuildHasher::hash_one (1 samples, 1.30%)co..core::hash::impls::<impl core::hash::Hash for &T>::hash (1 samples, 1.30%)co..<pageserver_api::reltag::RelTag as core::hash::Hash>::hash (1 samples, 1.30%)<p..core::hash::impls::<impl core::hash::Hash for u32>::hash (1 samples, 1.30%)co..core::hash::Hasher::write_u32 (1 samples, 1.30%)co..<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::write (1 samples, 1.30%)<s..<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (1 samples, 1.30%)<c..<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (1 samples, 1.30%)<c..<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::c_rounds (1 samples, 1.30%)<c..core::num::<impl u64>::wrapping_add (1 samples, 1.30%)co..pageserver::pgdatadir_mapping::<impl pageserver::tenant::timeline::Timeline>::get_rel_size::{{closure}} (1 samples, 1.30%)pa..pageserver::pgdatadir_mapping::<impl pageserver::tenant::timeline::Timeline>::get_cached_rel_size (1 samples, 1.30%)pa..std::sync::rwlock::RwLock<T>::read (1 samples, 1.30%)st..std::sys::unix::locks::futex_rwlock::RwLock::read (1 samples, 1.30%)st..core::sync::atomic::AtomicU32::compare_exchange_weak (1 samples, 1.30%)co..core::sync::atomic::atomic_compare_exchange_weak (1 samples, 1.30%)co..pageserver::walingest::WalIngest::ingest_decoded_block::{{closure}} (8 samples, 10.39%)pageserver::walingest::WalIngest::..pageserver::walingest::WalIngest::put_rel_wal_record::{{closure}} (8 samples, 10.39%)pageserver::walingest::WalIngest::..pageserver::walingest::WalIngest::handle_rel_extend::{{closure}} (8 samples, 10.39%)pageserver::walingest::WalIngest::..pageserver::pgdatadir_mapping::DatadirModification::put_rel_extend::{{closure}} (1 samples, 1.30%)pa..pageserver::pgdatadir_mapping::DatadirModification::get::{{closure}} (1 samples, 1.30%)pa..pageserver::tenant::timeline::Timeline::get::{{closure}} (1 samples, 1.30%)pa..pageserver::tenant::timeline::Timeline::lookup_cached_page::{{closure}} (1 samples, 1.30%)pa..pageserver::page_cache::PageCache::lookup_materialized_page::{{closure}} (1 samples, 1.30%)pa..pageserver::page_cache::PageCache::try_get_pinned_slot_permit::{{closure}} (1 samples, 1.30%)pa..<tokio::time::timeout::Timeout<T> as core::future::future::Future>::poll (1 samples, 1.30%)<t..tokio::sync::semaphore::Semaphore::acquire_owned::{{closure}} (1 samples, 1.30%)to..<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (1 samples, 1.30%)<t..pageserver::walingest::WalIngest::ingest_heapam_record::{{closure}} (5 samples, 6.49%)pageserver::walinges..core::ptr::drop_in_place<bytes::bytes::Bytes> (1 samples, 1.30%)co..<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (1 samples, 1.30%)<b..bytes::bytes_mut::shared_v_drop (1 samples, 1.30%)by..pageserver::walingest::WalIngest::ingest_record::{{closure}} (59 samples, 76.62%)pageserver::walingest::WalIngest::ingest_record::{{closure}}pageserver::walrecord::decode_wal_record (5 samples, 6.49%)pageserver::walrecor..postgres_ffi::v14::xlog_utils::<impl postgres_ffi::v14::bindings::XLogRecord>::from_bytes (1 samples, 1.30%)po..utils::bin_ser::LeSer::des_from (1 samples, 1.30%)ut..bincode::config::Options::deserialize_from (1 samples, 1.30%)bi..bincode::internal::deserialize_from (1 samples, 1.30%)bi..bincode::internal::deserialize_from_seed (1 samples, 1.30%)bi..bincode::internal::deserialize_from_custom_seed (1 samples, 1.30%)bi..<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (1 samples, 1.30%)<c..postgres_ffi::v14::bindings::_::<impl serde::de::Deserialize for postgres_ffi::v14::bindings::XLogRecord>::deserialize (1 samples, 1.30%)po..<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (1 samples, 1.30%)<&..<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (1 samples, 1.30%)<&..<postgres_ffi::v14::bindings::_::<impl serde::de::Deserialize for postgres_ffi::v14::bindings::XLogRecord>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (1 samples, 1.30%)<p..<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (1 samples, 1.30%)<b..bytes::bytes_mut::BytesMut::set_start (1 samples, 1.30%)by..<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::copy_to_bytes (3 samples, 3.90%)<bytes::byt..bytes::bytes_mut::BytesMut::split_to (2 samples, 2.60%)bytes::..<postgres_ffi::waldecoder::WalStreamDecoder as postgres_ffi::v15::waldecoder_handler::WalStreamDecoderHandler>::complete_record (2 samples, 2.60%)<postgr..crc32c::crc32c_append (2 samples, 2.60%)crc32c:..crc32c::hw_x86_64::crc32c (2 samples, 2.60%)crc32c:..core::iter::traits::iterator::Iterator::fold (1 samples, 1.30%)co..tokio::runtime::scheduler::current_thread::Context::enter (75 samples, 97.40%)tokio::runtime::scheduler::current_thread::Context::entertokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}} (75 samples, 97.40%)tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}tokio::runtime::coop::budget (75 samples, 97.40%)tokio::runtime::coop::budgettokio::runtime::coop::with_budget (75 samples, 97.40%)tokio::runtime::coop::with_budgettokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}} (75 samples, 97.40%)tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}<core::pin::Pin<P> as core::future::future::Future>::poll (75 samples, 97.40%)<core::pin::Pin<P> as core::future::future::Future>::poll<core::pin::Pin<P> as core::future::future::Future>::poll (75 samples, 97.40%)<core::pin::Pin<P> as core::future::future::Future>::pollpageserver::import_datadir::tests::test_basic::{{closure}} (75 samples, 97.40%)pageserver::import_datadir::tests::test_basic::{{closure}}postgres_ffi::waldecoder::WalStreamDecoder::poll_decode (10 samples, 12.99%)postgres_ffi::waldecoder::WalStreamDecoder:..<postgres_ffi::waldecoder::WalStreamDecoder as postgres_ffi::v15::waldecoder_handler::WalStreamDecoderHandler>::poll_decode_internal (10 samples, 12.99%)<postgres_ffi::waldecoder::WalStreamDecoder..bytes::bytes_mut::BytesMut::split_to (1 samples, 1.30%)by..pageserver::tenant::remote_timeline_client::RemoteTimelineClient::launch_queued_tasks::{{closure}} (1 samples, 1.30%)pa..pageserver::tenant::remote_timeline_client::RemoteTimelineClient::perform_upload_task::{{closure}} (1 samples, 1.30%)pa..<pageserver::metrics::MeasuredRemoteOp<F> as core::future::future::Future>::poll (1 samples, 1.30%)<p..pageserver::tenant::remote_timeline_client::upload::upload_timeline_layer::{{closure}} (1 samples, 1.30%)pa..remote_storage::GenericRemoteStorage::upload::{{closure}} (1 samples, 1.30%)re..<core::pin::Pin<P> as core::future::future::Future>::poll (1 samples, 1.30%)<c..<remote_storage::local_fs::LocalFs as remote_storage::RemoteStorage>::upload::{{closure}} (1 samples, 1.30%)<r..tokio::io::util::copy::copy::{{closure}} (1 samples, 1.30%)to..<tokio::io::util::copy::Copy<R,W> as core::future::future::Future>::poll (1 samples, 1.30%)<t..tokio::io::util::copy::CopyBuffer::poll_copy (1 samples, 1.30%)to..tokio::io::util::copy::CopyBuffer::poll_write_buf (1 samples, 1.30%)to..<tokio::io::util::buf_writer::BufWriter<W> as tokio::io::async_write::AsyncWrite>::poll_write (1 samples, 1.30%)<t..<tokio::fs::file::File as tokio::io::async_write::AsyncWrite>::poll_write (1 samples, 1.30%)<t..tokio::runtime::blocking::pool::spawn_mandatory_blocking (1 samples, 1.30%)to..tokio::runtime::blocking::pool::Spawner::spawn_task (1 samples, 1.30%)to..syscall (1 samples, 1.30%)sy..all (77 samples, 100%)import_datadir: (77 samples, 100.00%)import_datadir:std::sys::unix::thread::Thread::new::thread_start (77 samples, 100.00%)std::sys::unix::thread::Thread::new::thread_start<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (77 samples, 100.00%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (77 samples, 100.00%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_oncecore::ops::function::FnOnce::call_once{{vtable.shim}} (77 samples, 100.00%)core::ops::function::FnOnce::call_once{{vtable.shim}}std::thread::Builder::spawn_unchecked_::{{closure}} (77 samples, 100.00%)std::thread::Builder::spawn_unchecked_::{{closure}}std::panic::catch_unwind (77 samples, 100.00%)std::panic::catch_unwindstd::panicking::try (77 samples, 100.00%)std::panicking::trystd::panicking::try::do_call (77 samples, 100.00%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (77 samples, 100.00%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncestd::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}} (77 samples, 100.00%)std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}std::sys_common::backtrace::__rust_begin_short_backtrace (77 samples, 100.00%)std::sys_common::backtrace::__rust_begin_short_backtracetest::run_test::{{closure}} (77 samples, 100.00%)test::run_test::{{closure}}test::run_test::{{closure}} (77 samples, 100.00%)test::run_test::{{closure}}test::run_test_in_process (77 samples, 100.00%)test::run_test_in_processstd::panic::catch_unwind (77 samples, 100.00%)std::panic::catch_unwindstd::panicking::try (77 samples, 100.00%)std::panicking::trystd::panicking::try::do_call (77 samples, 100.00%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (77 samples, 100.00%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncetest::run_test_in_process::{{closure}} (77 samples, 100.00%)test::run_test_in_process::{{closure}}test::__rust_begin_short_backtrace (77 samples, 100.00%)test::__rust_begin_short_backtracecore::ops::function::FnOnce::call_once (77 samples, 100.00%)core::ops::function::FnOnce::call_oncecore::ops::function::FnOnce::call_once (77 samples, 100.00%)core::ops::function::FnOnce::call_oncepageserver::import_datadir::tests::test_basic::{{closure}} (77 samples, 100.00%)pageserver::import_datadir::tests::test_basic::{{closure}}pageserver::import_datadir::tests::test_basic (77 samples, 100.00%)pageserver::import_datadir::tests::test_basictokio::runtime::runtime::Runtime::block_on (77 samples, 100.00%)tokio::runtime::runtime::Runtime::block_ontokio::runtime::scheduler::current_thread::CurrentThread::block_on (77 samples, 100.00%)tokio::runtime::scheduler::current_thread::CurrentThread::block_ontokio::runtime::scheduler::current_thread::CoreGuard::block_on (77 samples, 100.00%)tokio::runtime::scheduler::current_thread::CoreGuard::block_ontokio::runtime::scheduler::current_thread::CoreGuard::enter (77 samples, 100.00%)tokio::runtime::scheduler::current_thread::CoreGuard::entertokio::macros::scoped_tls::ScopedKey<T>::set (77 samples, 100.00%)tokio::macros::scoped_tls::ScopedKey<T>::settokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}} (77 samples, 100.00%)tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}} (77 samples, 100.00%)tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}tokio::runtime::scheduler::current_thread::Context::run_task (2 samples, 2.60%)tokio::..tokio::runtime::scheduler::current_thread::Context::enter (2 samples, 2.60%)tokio::..tokio::runtime::scheduler::current_thread::Context::run_task::{{closure}} (2 samples, 2.60%)tokio::..tokio::runtime::coop::budget (2 samples, 2.60%)tokio::..tokio::runtime::coop::with_budget (2 samples, 2.60%)tokio::..tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}} (2 samples, 2.60%)tokio::..tokio::runtime::task::LocalNotified<S>::run (2 samples, 2.60%)tokio::..tokio::runtime::task::harness::Harness<T,S>::poll (2 samples, 2.60%)tokio::..tokio::runtime::task::harness::Harness<T,S>::poll_inner (2 samples, 2.60%)tokio::..tokio::runtime::task::harness::poll_future (2 samples, 2.60%)tokio::..std::panic::catch_unwind (2 samples, 2.60%)std::pa..std::panicking::try (2 samples, 2.60%)std::pa..std::panicking::try::do_call (2 samples, 2.60%)std::pa..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (2 samples, 2.60%)<core::..tokio::runtime::task::harness::poll_future::{{closure}} (2 samples, 2.60%)tokio::..tokio::runtime::task::core::Core<T,S>::poll (2 samples, 2.60%)tokio::..tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (2 samples, 2.60%)tokio::..tokio::runtime::task::core::Core<T,S>::poll::{{closure}} (2 samples, 2.60%)tokio::..pageserver::task_mgr::task_wrapper::{{closure}} (2 samples, 2.60%)pageser..<tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll (2 samples, 2.60%)<tokio:..tokio::task::task_local::LocalKey<T>::scope_inner (2 samples, 2.60%)tokio::..<tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll::{{closure}} (2 samples, 2.60%)<tokio:..<tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll (2 samples, 2.60%)<tokio:..tokio::task::task_local::LocalKey<T>::scope_inner (2 samples, 2.60%)tokio::..<tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll::{{closure}} (2 samples, 2.60%)<tokio:..<futures_util::future::future::catch_unwind::CatchUnwind<Fut> as core::future::future::Future>::poll (2 samples, 2.60%)<future..std::panic::catch_unwind (2 samples, 2.60%)std::pa..std::panicking::try (2 samples, 2.60%)std::pa..std::panicking::try::do_call (2 samples, 2.60%)std::pa..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (2 samples, 2.60%)<core::..<futures_util::future::future::catch_unwind::CatchUnwind<Fut> as core::future::future::Future>::poll::{{closure}} (2 samples, 2.60%)<future..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::future::future::Future>::poll (2 samples, 2.60%)<core::..<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (2 samples, 2.60%)<tracin..tracing::span::Span::enter (1 samples, 1.30%)tr..tracing::span::Span::do_enter (1 samples, 1.30%)tr..<tracing_subscriber::filter::layer_filters::Filtered<L,F,S> as tracing_subscriber::layer::Layer<S>>::on_enter (1 samples, 1.30%)<t..tracing_subscriber::layer::context::Context<S>::if_enabled_for (1 samples, 1.30%)tr..tracing_subscriber::layer::context::Context<S>::is_enabled_inner (1 samples, 1.30%)tr..core::ptr::drop_in_place<tracing_subscriber::registry::SpanRef<tracing_subscriber::layer::layered::Layered<tracing_subscriber::filter::layer_filters::Filtered<utils::logging::TracingEventCountLayer,tracing_subscriber::filter::env::EnvFilter,tracing_subscriber::layer::layered::Layered<tracing_subscriber::filter::layer_filters::Filtered<alloc::boxed::Box<dyn tracing_subscriber::layer::Layer<tracing_subscriber::registry::sharded::Registry>+core::marker::Sync+core::marker::Send>,tracing_subscriber::filter::env::EnvFilter,tracing_subscriber::registry::sharded::Registry>,tracing_subscriber::registry::sharded::Registry>>,tracing_subscriber::layer::layered::Layered<tracing_subscriber::filter::layer_filters::Filtered<alloc::boxed::Box<dyn tracing_subscriber::layer::Layer<tracing_subscriber::registry::sharded::Registry>+core::marker::Sync+core::marker::Send>,tracing_subscriber::filter::env::EnvFilter,tracing_subscriber::registry::sharded::Registry>,tracing_subscriber::registry::sharded::Registry>>>> (1 samples, 1.30%)co..core::ptr::drop_in_place<tracing_subscriber::registry::sharded::Data> (1 samples, 1.30%)co..core::ptr::drop_in_place<sharded_slab::pool::Ref<tracing_subscriber::registry::sharded::DataInner>> (1 samples, 1.30%)co..<sharded_slab::pool::Ref<T,C> as core::ops::drop::Drop>::drop (1 samples, 1.30%)<s..sharded_slab::page::slot::Guard<T,C>::release (1 samples, 1.30%)sh..sharded_slab::page::slot::Slot<T,C>::release (1 samples, 1.30%)sh..core::sync::atomic::AtomicUsize::compare_exchange (1 samples, 1.30%)co..core::sync::atomic::atomic_compare_exchange (1 samples, 1.30%)co.. \ No newline at end of file diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index c8af06fdfa..f8bf3a6cec 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -677,13 +677,12 @@ fn start_pageserver( signal.name() ); - #[cfg(feature = "profiling")] pageserver::profiling::exit_profiler(&profiler_guard); std::process::exit(111); } - Signal::Quit | Signal::Interrupt | Signal::Terminate => { + Signal::Interrupt | Signal::Terminate => { info!( "Got {}. Terminating gracefully in fast shutdown mode", signal.name() @@ -696,7 +695,6 @@ fn start_pageserver( let bg_remote_storage = remote_storage.clone(); let bg_deletion_queue = deletion_queue.clone(); - #[cfg(feature = "profiling")] pageserver::profiling::exit_profiler(&profiler_guard); BACKGROUND_RUNTIME.block_on(pageserver::shutdown_pageserver( diff --git a/pageserver/src/import_datadir.rs b/pageserver/src/import_datadir.rs index f148d21d9c..bb21713fc0 100644 --- a/pageserver/src/import_datadir.rs +++ b/pageserver/src/import_datadir.rs @@ -655,9 +655,13 @@ mod tests { let started_at = std::time::Instant::now(); // Feed bytes to the decoder + // TODO try feeding in many small chunks let xlogoff: usize = startpoint.segment_offset(WAL_SEGMENT_SIZE); let mut decoder = WalStreamDecoder::new(startpoint, pg_version); - decoder.feed_bytes(&bytes[xlogoff..]); + // decoder.feed_bytes(&bytes[xlogoff..]); + for chunk in bytes[xlogoff..].chunks(50) { + decoder.feed_bytes(chunk); + } println!("decoding {} bytes", bytes.len() - xlogoff); // Decode and ingest wal @@ -674,7 +678,6 @@ mod tests { println!("done in {:?}", duration); drop(prof_guard); - #[cfg(feature = "profiling")] crate::profiling::exit_profiler(&profiler_guard); Ok(()) diff --git a/pageserver/src/profiling.rs b/pageserver/src/profiling.rs index af59b0b491..b6b3658546 100644 --- a/pageserver/src/profiling.rs +++ b/pageserver/src/profiling.rs @@ -83,5 +83,5 @@ mod profiling_impl { None } - // pub fn exit_profiler(profiler_guard: &Option) {} + pub fn exit_profiler(profiler_guard: &Option) {} } diff --git a/pageserver/src/tenant/blob_io.rs b/pageserver/src/tenant/blob_io.rs index 050eeba7fe..760c64663d 100644 --- a/pageserver/src/tenant/blob_io.rs +++ b/pageserver/src/tenant/blob_io.rs @@ -356,7 +356,6 @@ mod tests { round_trip_test::(&blobs).await?; round_trip_test::(&blobs).await?; - #[cfg(feature = "profiling")] crate::profiling::exit_profiler(&profiler_guard); Ok(()) }