From 21e35eeb4e106835cc059205315d94ad0201a921 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Wed, 18 Sep 2024 11:32:05 -0400 Subject: [PATCH] Improve flamegraph profiling instructions (#12521) * Improve flamegraph profiling instructions * Update docs/source/library-user-guide/profiling.md Co-authored-by: kamille <3144148605@qq.com> --------- Co-authored-by: kamille <3144148605@qq.com> --- docs/source/_static/images/flamegraph.svg | 491 ++++++++++++++++++++ docs/source/library-user-guide/profiling.md | 42 +- 2 files changed, 517 insertions(+), 16 deletions(-) create mode 100644 docs/source/_static/images/flamegraph.svg diff --git a/docs/source/_static/images/flamegraph.svg b/docs/source/_static/images/flamegraph.svg new file mode 100644 index 000000000000..951cbb1ff366 --- /dev/null +++ b/docs/source/_static/images/flamegraph.svg @@ -0,0 +1,491 @@ +Flame Graph Reset ZoomSearch datafusion-cli`<tokio::runtime::coop::with_budget::ResetGuard as core::ops::drop::Drop>::drop (16 samples, 0.02%)datafusion-cli`datafusion_cli::main_inner::_{{closure}} (91 samples, 0.11%)datafusion-cli`<tokio::runtime::coop::with_budget::ResetGuard as core::ops::drop::Drop>::drop (69 samples, 0.08%)datafusion-cli`datafusion_cli::exec::exec_from_files::_{{closure}} (19 samples, 0.02%)datafusion-cli`datafusion_cli::exec::exec_and_print::_{{closure}} (101 samples, 0.12%)datafusion-cli`<futures_util::stream::try_stream::try_collect::TryCollect<St,C> as core::future::future::Future>::poll (66 samples, 0.08%)datafusion-cli`<parquet::format::FileMetaData as parquet::thrift::TSerializable>::read_from_in_protocol (13 samples, 0.02%)datafusion-cli`<parquet::format::ColumnChunk as parquet::thrift::TSerializable>::read_from_in_protocol (13 samples, 0.02%)datafusion-cli`datafusion::datasource::file_format::parquet::fetch_parquet_metadata::_{{closure}} (19 samples, 0.02%)datafusion-cli`parquet::file::footer::decode_metadata (17 samples, 0.02%)datafusion-cli`<datafusion::datasource::listing::table::ListingTable as datafusion_catalog::table::TableProvider>::scan::_{{closure}} (23 samples, 0.03%)datafusion-cli`<futures_util::stream::stream::buffered::Buffered<St> as futures_core::stream::Stream>::poll_next (23 samples, 0.03%)datafusion-cli`<futures_util::stream::futures_ordered::FuturesOrdered<Fut> as futures_core::stream::Stream>::poll_next (23 samples, 0.03%)datafusion-cli`<futures_util::stream::futures_unordered::FuturesUnordered<Fut> as futures_core::stream::Stream>::poll_next (23 samples, 0.03%)datafusion-cli`<futures_util::stream::futures_ordered::OrderWrapper<T> as core::future::future::Future>::poll (23 samples, 0.03%)datafusion-cli`<datafusion::datasource::file_format::parquet::ParquetFormat as datafusion::datasource::file_format::FileFormat>::infer_stats::_{{closure}} (23 samples, 0.03%)datafusion-cli`<datafusion::execution::session_state::DefaultQueryPlanner as datafusion::execution::context::QueryPlanner>::create_physical_plan::_{{closure}} (25 samples, 0.03%)datafusion-cli`<datafusion::physical_planner::DefaultPhysicalPlanner as datafusion::physical_planner::PhysicalPlanner>::create_physical_plan::_{{closure}} (25 samples, 0.03%)datafusion-cli`datafusion::physical_planner::DefaultPhysicalPlanner::create_initial_plan::_{{closure}} (24 samples, 0.03%)datafusion-cli`<futures_util::stream::try_stream::try_collect::TryCollect<St,C> as core::future::future::Future>::poll (24 samples, 0.03%)datafusion-cli`<S as futures_core::stream::TryStream>::try_poll_next (24 samples, 0.03%)datafusion-cli`<futures_util::stream::futures_unordered::FuturesUnordered<Fut> as futures_core::stream::Stream>::poll_next (24 samples, 0.03%)datafusion-cli`datafusion::physical_planner::DefaultPhysicalPlanner::map_logical_node_to_physical::_{{closure}} (24 samples, 0.03%)datafusion-cli`<parquet::format::ColumnChunk as parquet::thrift::TSerializable>::read_from_in_protocol (20 samples, 0.02%)datafusion-cli`<parquet::format::FileMetaData as parquet::thrift::TSerializable>::read_from_in_protocol (24 samples, 0.03%)datafusion-cli`<S as futures_core::stream::TryStream>::try_poll_next (36 samples, 0.04%)datafusion-cli`<futures_util::stream::futures_ordered::FuturesOrdered<Fut> as futures_core::stream::Stream>::poll_next (36 samples, 0.04%)datafusion-cli`<futures_util::stream::futures_unordered::FuturesUnordered<Fut> as futures_core::stream::Stream>::poll_next (36 samples, 0.04%)datafusion-cli`<futures_util::stream::futures_ordered::OrderWrapper<T> as core::future::future::Future>::poll (36 samples, 0.04%)datafusion-cli`datafusion::datasource::file_format::parquet::fetch_parquet_metadata::_{{closure}} (35 samples, 0.04%)datafusion-cli`parquet::file::footer::decode_metadata (35 samples, 0.04%)datafusion-cli`<datafusion_cli::catalog::DynamicObjectStoreSchemaProvider as datafusion_catalog::schema::SchemaProvider>::table::_{{closure}} (39 samples, 0.05%)datafusion-cli`<datafusion_catalog::dynamic_file::catalog::DynamicFileSchemaProvider as datafusion_catalog::schema::SchemaProvider>::table::_{{closure}} (39 samples, 0.05%)datafusion-cli`<datafusion::datasource::dynamic_file::DynamicListTableFactory as datafusion_catalog::dynamic_file::catalog::UrlTableFactory>::try_new::_{{closure}} (39 samples, 0.05%)datafusion-cli`datafusion::datasource::listing::table::ListingOptions::infer_schema::_{{closure}} (39 samples, 0.05%)datafusion-cli`<datafusion::datasource::file_format::parquet::ParquetFormat as datafusion::datasource::file_format::FileFormat>::infer_schema::_{{closure}} (39 samples, 0.05%)datafusion-cli`<datafusion_physical_plan::sorts::merge::SortPreservingMergeStream<C> as futures_core::stream::Stream>::poll_next (63 samples, 0.07%)datafusion-cli`<alloc::collections::vec_deque::VecDeque<T,A> as core::clone::Clone>::clone (103 samples, 0.12%)datafusion-cli`mi_malloc_aligned (98 samples, 0.12%)datafusion-cli`<alloc::collections::vec_deque::VecDeque<T,A> as core::clone::Clone>::clone (1,443 samples, 1.69%)libdyld.dylib`tlv_get_addr (57 samples, 0.07%)datafusion-cli`<datafusion_physical_plan::sorts::stream::FieldCursorStream<T> as datafusion_physical_plan::sorts::stream::PartitionedStream>::poll_next (57 samples, 0.07%)datafusion-cli`<datafusion_physical_plan::stream::RecordBatchStreamAdapter<S> as futures_core::stream::Stream>::poll_next (26 samples, 0.03%)datafusion-cli`<futures_util::stream::select_with_strategy::SelectWithStrategy<St1,St2,Clos,State> as futures_core::stream::Stream>::poll_next (57 samples, 0.07%)datafusion-cli`<futures_util::stream::once::Once<Fut> as futures_core::stream::Stream>::poll_next (61 samples, 0.07%)datafusion-cli`tokio::task::join_set::JoinSet<T>::poll_join_next (212 samples, 0.25%)datafusion-cli`tokio::util::idle_notified_set::IdleNotifiedSet<T>::pop_notified (147 samples, 0.17%)datafusion-cli`<futures_util::stream::once::Once<Fut> as futures_core::stream::Stream>::poll_next (361 samples, 0.42%)datafusion-cli`tokio::util::idle_notified_set::IdleNotifiedSet<T>::pop_notified (36 samples, 0.04%)datafusion-cli`<futures_util::stream::stream::filter_map::FilterMap<St,Fut,F> as futures_core::stream::Stream>::poll_next (511 samples, 0.60%)datafusion-cli`tokio::task::join_set::JoinSet<T>::poll_join_next (35 samples, 0.04%)datafusion-cli`<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (88 samples, 0.10%)datafusion-cli`<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (58 samples, 0.07%)datafusion-cli`tokio::runtime::park::clone (39 samples, 0.05%)datafusion-cli`tokio::sync::mpsc::list::Rx<T>::pop (276 samples, 0.32%)datafusion-cli`tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (169 samples, 0.20%)datafusion-cli`tokio::runtime::park::drop_waker (36 samples, 0.04%)datafusion-cli`tokio::sync::mpsc::chan::Rx<T,S>::recv (780 samples, 0.92%)libdyld.dylib`tlv_get_addr (68 samples, 0.08%)datafusion-cli`tokio::sync::mpsc::list::Rx<T>::pop (74 samples, 0.09%)datafusion-cli`tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (52 samples, 0.06%)datafusion-cli`<futures_util::stream::unfold::Unfold<T,F,Fut> as futures_core::stream::Stream>::poll_next (1,241 samples, 1.46%)libdyld.dylib`tlv_get_addr (88 samples, 0.10%)datafusion-cli`<futures_util::stream::select_with_strategy::SelectWithStrategy<St1,St2,Clos,State> as futures_core::stream::Stream>::poll_next (2,014 samples, 2.37%)da..datafusion-cli`tokio::sync::mpsc::chan::Rx<T,S>::recv (32 samples, 0.04%)datafusion-cli`<futures_util::stream::stream::filter_map::FilterMap<St,Fut,F> as futures_core::stream::Stream>::poll_next (90 samples, 0.11%)datafusion-cli`<futures_util::stream::unfold::Unfold<T,F,Fut> as futures_core::stream::Stream>::poll_next (47 samples, 0.06%)datafusion-cli`<datafusion_physical_plan::sorts::stream::FieldCursorStream<T> as datafusion_physical_plan::sorts::stream::PartitionedStream>::poll_next (2,396 samples, 2.81%)da..datafusion-cli`datafusion_physical_plan::sorts::stream::FusedStreams::poll_next (2,284 samples, 2.68%)da..datafusion-cli`futures_util::stream::select::select::round_robin (26 samples, 0.03%)datafusion-cli`datafusion_physical_plan::sorts::merge::SortPreservingMergeStream<C>::maybe_poll_stream (2,570 samples, 3.02%)dat..datafusion-cli`datafusion_physical_plan::sorts::stream::FusedStreams::poll_next (81 samples, 0.10%)datafusion-cli`<datafusion_physical_plan::sorts::merge::SortPreservingMergeStream<C> as futures_core::stream::Stream>::poll_next (4,392 samples, 5.16%)datafu..datafusion-cli`tokio::runtime::park::wake_by_ref (25 samples, 0.03%)datafusion-cli`datafusion_physical_plan::sorts::merge::SortPreservingMergeStream<C>::maybe_poll_stream (36 samples, 0.04%)datafusion-cli`mi_free (86 samples, 0.10%)datafusion-cli`<futures_util::stream::try_stream::try_collect::TryCollect<St,C> as core::future::future::Future>::poll (4,796 samples, 5.63%)datafus..datafusion-cli`tokio::runtime::park::wake_by_ref (23 samples, 0.03%)datafusion-cli`datafusion_cli::exec::exec_from_files::_{{closure}} (5,412 samples, 6.36%)datafusi..datafusion-cli`datafusion_cli::exec::exec_from_lines::_{{closure}} (5,240 samples, 6.15%)datafusi..datafusion-cli`datafusion_cli::exec::exec_and_print::_{{closure}} (5,081 samples, 5.97%)datafusi..datafusion-cli`datafusion_cli::main_inner::_{{closure}} (5,579 samples, 6.55%)datafusio..datafusion-cli`datafusion_cli::exec::exec_from_lines::_{{closure}} (61 samples, 0.07%)datafusion-cli`tokio::runtime::park::CachedParkThread::park (39 samples, 0.05%)datafusion-cli`tokio::runtime::park::Inner::park (62 samples, 0.07%)datafusion-cli`tokio::runtime::park::CachedParkThread::block_on (5,952 samples, 6.99%)datafusio..libdyld.dylib`tlv_get_addr (77 samples, 0.09%)datafusion-cli`tokio::runtime::park::Inner::park (27 samples, 0.03%)datafusion-cli`std::rt::lang_start::_{{closure}} (6,136 samples, 7.21%)datafusion..datafusion-cli`std::sys::backtrace::__rust_begin_short_backtrace (6,136 samples, 7.21%)datafusion..datafusion-cli`datafusion_cli::main (6,136 samples, 7.21%)datafusion..libdyld.dylib`tlv_get_addr (50 samples, 0.06%)datafusion-cli`main (6,137 samples, 7.21%)datafusion..datafusion-cli`std::rt::lang_start_internal (6,137 samples, 7.21%)datafusion..datafusion-cli`mi_arenas_try_purge (51 samples, 0.06%)datafusion-cli`mi_arena_purge (51 samples, 0.06%)libsystem_kernel.dylib`madvise (51 samples, 0.06%)dyld`start (6,193 samples, 7.27%)dyld`startlibdyld.dylib`dyld4::LibSystemHelpers::getenv (56 samples, 0.07%)libsystem_c.dylib`exit (56 samples, 0.07%)libsystem_c.dylib`__cxa_finalize_ranges (56 samples, 0.07%)datafusion-cli`mi_process_done (56 samples, 0.07%)libsystem_kernel.dylib`__exit (47 samples, 0.06%)datafusion-cli`parking_lot::condvar::Condvar::wait_until_internal (21 samples, 0.02%)libsystem_kernel.dylib`__psynch_cvwait (20 samples, 0.02%)datafusion-cli`tokio::runtime::scheduler::multi_thread::park::Parker::park (30 samples, 0.04%)datafusion-cli`tokio::runtime::time::Driver::park_internal (9 samples, 0.01%)datafusion-cli`tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (31 samples, 0.04%)datafusion-cli`<datafusion_functions_aggregate::average::AvgGroupsAccumulator<T,F> as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::merge_batch (32 samples, 0.04%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::accumulate::NullState::accumulate (25 samples, 0.03%)datafusion-cli`<datafusion_functions_aggregate::count::CountGroupsAccumulator as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::merge_batch (12 samples, 0.01%)datafusion-cli`_mi_malloc_generic (18 samples, 0.02%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (19 samples, 0.02%)datafusion-cli`mi_malloc_aligned (12 samples, 0.01%)datafusion-cli`<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (36 samples, 0.04%)datafusion-cli`core::ptr::drop_in_place<datafusion_common::scalar::ScalarValue> (13 samples, 0.02%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (10 samples, 0.01%)datafusion-cli`_mi_malloc_generic (9 samples, 0.01%)datafusion-cli`mi_malloc_aligned (9 samples, 0.01%)libsystem_platform.dylib`_platform_memcmp (28 samples, 0.03%)datafusion-cli`<datafusion_functions_aggregate::min_max::MinAccumulator as datafusion_expr_common::accumulator::Accumulator>::update_batch (179 samples, 0.21%)libsystem_platform.dylib`_platform_memmove (23 samples, 0.03%)datafusion-cli`mi_malloc_aligned (10 samples, 0.01%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::grow_one (27 samples, 0.03%)datafusion-cli`alloc::raw_vec::finish_grow (27 samples, 0.03%)datafusion-cli`core::ptr::drop_in_place<arrow_array::array::byte_array::GenericByteArray<arrow_array::types::GenericBinaryType<i32>>> (11 samples, 0.01%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (22 samples, 0.03%)datafusion-cli`datafusion_common::scalar::ScalarValue::size (27 samples, 0.03%)datafusion-cli`mi_heap_realloc_zero_aligned_at (9 samples, 0.01%)datafusion-cli`arrow_select::take::take_bytes (61 samples, 0.07%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (49 samples, 0.06%)libsystem_platform.dylib`_platform_memmove (40 samples, 0.05%)datafusion-cli`datafusion_common::utils::get_arrayref_at_indices (142 samples, 0.17%)datafusion-cli`core::iter::adapters::try_process (142 samples, 0.17%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (142 samples, 0.17%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (142 samples, 0.17%)datafusion-cli`arrow_select::take::take (142 samples, 0.17%)datafusion-cli`arrow_select::take::take_impl (141 samples, 0.17%)libsystem_platform.dylib`_platform_memmove (77 samples, 0.09%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::grow_one (17 samples, 0.02%)datafusion-cli`alloc::raw_vec::finish_grow (17 samples, 0.02%)libsystem_platform.dylib`_platform_memmove (17 samples, 0.02%)datafusion-cli`datafusion_common::scalar::ScalarValue::size (10 samples, 0.01%)datafusion-cli`<datafusion_common::scalar::ScalarValue as core::convert::TryFrom<&arrow_schema::datatype::DataType>>::try_from (14 samples, 0.02%)datafusion-cli`_mi_free_delayed_block (11 samples, 0.01%)datafusion-cli`mi_find_page (10 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (28 samples, 0.03%)datafusion-cli`_mi_malloc_generic (28 samples, 0.03%)datafusion-cli`<datafusion_functions_aggregate::min_max::Min as datafusion_expr::udaf::AggregateUDFImpl>::accumulator (44 samples, 0.05%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::GroupsAccumulatorAdapter::make_accumulators_if_needed (110 samples, 0.13%)datafusion-cli`datafusion_physical_expr::aggregate::AggregateFunctionExpr::create_accumulator (66 samples, 0.08%)datafusion-cli`_mi_malloc_generic (9 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (10 samples, 0.01%)datafusion-cli`mi_malloc_aligned (13 samples, 0.02%)datafusion-cli`<arrow_array::array::byte_array::GenericByteArray<T> as arrow_array::array::Array>::slice (68 samples, 0.08%)datafusion-cli`mi_malloc_aligned (10 samples, 0.01%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (93 samples, 0.11%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::slice_and_maybe_filter (115 samples, 0.14%)datafusion-cli`mi_free_block_delayed_mt (11 samples, 0.01%)datafusion-cli`<datafusion_functions_aggregate_common::aggregate::groups_accumulator::GroupsAccumulatorAdapter as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::merge_batch (865 samples, 1.02%)libsystem_platform.dylib`_platform_memmove (83 samples, 0.10%)datafusion-cli`<hashbrown::raw::inner::RawTable<T> as datafusion_common::utils::proxy::RawTableAllocExt>::insert_accounted (52 samples, 0.06%)datafusion-cli`hashbrown::raw::inner::RawTable<T,A>::reserve_rehash (32 samples, 0.04%)datafusion-cli`<str as datafusion_common::hash_utils::HashValue>::hash_one (61 samples, 0.07%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (69 samples, 0.08%)libsystem_platform.dylib`_platform_memmove (64 samples, 0.08%)datafusion-cli`datafusion_physical_expr_common::binary_map::ArrowBytesMap<O,V>::insert_if_new (299 samples, 0.35%)libsystem_platform.dylib`_platform_memcmp (13 samples, 0.02%)datafusion-cli`<datafusion_physical_plan::aggregates::group_values::bytes::GroupValuesByes<O> as datafusion_physical_plan::aggregates::group_values::GroupValues>::intern (380 samples, 0.45%)libsystem_platform.dylib`_platform_memmove (62 samples, 0.07%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (13 samples, 0.02%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (13 samples, 0.02%)datafusion-cli`_mi_malloc_generic (13 samples, 0.02%)datafusion-cli`_mi_free_delayed_block (13 samples, 0.02%)datafusion-cli`_mi_page_free (15 samples, 0.02%)datafusion-cli`mi_segment_page_clear (15 samples, 0.02%)datafusion-cli`mi_segment_span_free_coalesce (15 samples, 0.02%)datafusion-cli`mi_segment_span_free (15 samples, 0.02%)datafusion-cli`mi_segment_try_purge (15 samples, 0.02%)datafusion-cli`mi_segment_purge (15 samples, 0.02%)libsystem_kernel.dylib`madvise (15 samples, 0.02%)datafusion-cli`_mi_free_delayed_block (67 samples, 0.08%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (70 samples, 0.08%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (69 samples, 0.08%)datafusion-cli`_mi_malloc_generic (69 samples, 0.08%)datafusion-cli`arrow_data::transform::variable_size::build_extend::_{{closure}} (13 samples, 0.02%)datafusion-cli`arrow_data::transform::utils::extend_offsets (13 samples, 0.02%)datafusion-cli`arrow_data::transform::MutableArrayData::extend (67 samples, 0.08%)libsystem_platform.dylib`_platform_memmove (54 samples, 0.06%)datafusion-cli`arrow_select::concat::concat (146 samples, 0.17%)datafusion-cli`arrow_select::concat::concat_fallback (144 samples, 0.17%)datafusion-cli`arrow_select::concat::concat_batches (164 samples, 0.19%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (10 samples, 0.01%)datafusion-cli`datafusion_physical_plan::coalesce::BatchCoalescer::finish_batch (175 samples, 0.21%)datafusion-cli`core::ptr::drop_in_place<arrow_array::record_batch::RecordBatch> (11 samples, 0.01%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (29 samples, 0.03%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (29 samples, 0.03%)datafusion-cli`_mi_malloc_generic (29 samples, 0.03%)datafusion-cli`_mi_free_delayed_block (29 samples, 0.03%)datafusion-cli`datafusion_physical_plan::coalesce::BatchCoalescer::push_batch (30 samples, 0.04%)datafusion-cli`<datafusion_physical_plan::coalesce_batches::CoalesceBatchesStream as futures_core::stream::Stream>::poll_next (218 samples, 0.26%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::slice_and_maybe_filter (13 samples, 0.02%)datafusion-cli`_mi_free_delayed_block (128 samples, 0.15%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (137 samples, 0.16%)datafusion-cli`_mi_malloc_generic (137 samples, 0.16%)datafusion-cli`mi_malloc_aligned (31 samples, 0.04%)datafusion-cli`<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (182 samples, 0.21%)datafusion-cli`<datafusion_functions_aggregate::min_max::MaxAccumulator as datafusion_expr_common::accumulator::Accumulator>::evaluate (357 samples, 0.42%)datafusion-cli`<datafusion_common::scalar::ScalarValue as core::clone::Clone>::clone (353 samples, 0.41%)libsystem_platform.dylib`_platform_memmove (135 samples, 0.16%)datafusion-cli`core::ptr::drop_in_place<datafusion_common::scalar::ScalarValue> (12 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<datafusion_functions_aggregate_common::aggregate::groups_accumulator::AccumulatorState> (31 samples, 0.04%)datafusion-cli`mi_free_block_mt (11 samples, 0.01%)datafusion-cli`datafusion_common::scalar::ScalarValue::size (16 samples, 0.02%)datafusion-cli`mi_free (12 samples, 0.01%)datafusion-cli`mi_free_block_delayed_mt (53 samples, 0.06%)datafusion-cli`mi_free_block_mt (33 samples, 0.04%)datafusion-cli`<alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::try_fold (555 samples, 0.65%)datafusion-cli`mi_free_generic_mt (17 samples, 0.02%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (27 samples, 0.03%)datafusion-cli`alloc::raw_vec::finish_grow (27 samples, 0.03%)libsystem_platform.dylib`_platform_memmove (24 samples, 0.03%)datafusion-cli`mi_free_block_delayed_mt (9 samples, 0.01%)datafusion-cli`core::iter::adapters::try_process (650 samples, 0.76%)datafusion-cli`alloc::vec::in_place_collect::_<impl alloc::vec::spec_from_iter::SpecFromIter<T,I> for alloc::vec::Vec<T>>::from_iter (647 samples, 0.76%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (16 samples, 0.02%)datafusion-cli`<alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::try_fold (14 samples, 0.02%)datafusion-cli`mi_heap_realloc_zero_aligned_at (9 samples, 0.01%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (43 samples, 0.05%)libsystem_platform.dylib`_platform_memmove (34 samples, 0.04%)datafusion-cli`<arrow_array::array::byte_array::GenericByteArray<T> as core::iter::traits::collect::FromIterator<core::option::Option<Ptr>>>::from_iter (90 samples, 0.11%)datafusion-cli`datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream::set_input_done_and_produce_output (856 samples, 1.01%)datafusion-cli`datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream::emit (856 samples, 1.01%)datafusion-cli`<datafusion_functions_aggregate_common::aggregate::groups_accumulator::GroupsAccumulatorAdapter as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::evaluate (856 samples, 1.01%)datafusion-cli`datafusion_common::scalar::ScalarValue::iter_to_array (206 samples, 0.24%)datafusion-cli`core::iter::adapters::try_process (206 samples, 0.24%)libsystem_platform.dylib`_platform_memmove (104 samples, 0.12%)datafusion-cli`mi_free (20 samples, 0.02%)datafusion-cli`<datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream as futures_core::stream::Stream>::poll_next (2,428 samples, 2.85%)da..datafusion-cli`<datafusion_physical_plan::projection::ProjectionStream as futures_core::stream::Stream>::poll_next (2,437 samples, 2.86%)da..datafusion-cli`<datafusion_physical_plan::coalesce_batches::CoalesceBatchesStream as futures_core::stream::Stream>::poll_next (2,437 samples, 2.86%)da..datafusion-cli`<datafusion_physical_plan::filter::FilterExecStream as futures_core::stream::Stream>::poll_next (2,436 samples, 2.86%)da..datafusion-cli`datafusion_physical_plan::common::spawn_buffered::_{{closure}} (2,439 samples, 2.86%)da..datafusion-cli`<futures_util::stream::try_stream::try_flatten::TryFlatten<St> as futures_core::stream::Stream>::poll_next (2,439 samples, 2.86%)da..datafusion-cli`<S as futures_core::stream::TryStream>::try_poll_next (2,438 samples, 2.86%)da..datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (47 samples, 0.06%)libsystem_platform.dylib`_platform_memmove (39 samples, 0.05%)datafusion-cli`arrow_select::take::take_bytes (79 samples, 0.09%)datafusion-cli`arrow_select::take::take_primitive (9 samples, 0.01%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (261 samples, 0.31%)datafusion-cli`core::iter::adapters::try_process (260 samples, 0.31%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (260 samples, 0.31%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (260 samples, 0.31%)datafusion-cli`arrow_select::take::take (259 samples, 0.30%)datafusion-cli`arrow_select::take::take_impl (257 samples, 0.30%)libsystem_platform.dylib`_platform_memmove (158 samples, 0.19%)datafusion-cli`<datafusion_functions_aggregate::average::AvgGroupsAccumulator<T,F> as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::update_batch (265 samples, 0.31%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::accumulate::NullState::accumulate (263 samples, 0.31%)datafusion-cli`<datafusion_functions_aggregate::count::CountGroupsAccumulator as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::update_batch (122 samples, 0.14%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::accumulate::accumulate_indices (121 samples, 0.14%)datafusion-cli`<datafusion_functions_aggregate::min_max::MinAccumulator as datafusion_expr_common::accumulator::Accumulator>::update_batch (9 samples, 0.01%)datafusion-cli`mi_find_page (13 samples, 0.02%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (20 samples, 0.02%)datafusion-cli`_mi_malloc_generic (20 samples, 0.02%)datafusion-cli`mi_malloc_aligned (22 samples, 0.03%)datafusion-cli`<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (59 samples, 0.07%)datafusion-cli`DYLD-STUB$$memcmp (53 samples, 0.06%)datafusion-cli`arrow_arith::aggregate::min_max_helper (227 samples, 0.27%)datafusion-cli`core::ptr::drop_in_place<datafusion_common::scalar::ScalarValue> (13 samples, 0.02%)datafusion-cli`mi_malloc_aligned (17 samples, 0.02%)libsystem_platform.dylib`_platform_memcmp (395 samples, 0.46%)datafusion-cli`<datafusion_functions_aggregate::min_max::MinAccumulator as datafusion_expr_common::accumulator::Accumulator>::update_batch (913 samples, 1.07%)libsystem_platform.dylib`_platform_memmove (61 samples, 0.07%)datafusion-cli`__rust_dealloc (9 samples, 0.01%)datafusion-cli`_mi_malloc_generic (16 samples, 0.02%)datafusion-cli`mi_find_page (14 samples, 0.02%)datafusion-cli`_mi_heap_realloc_zero (20 samples, 0.02%)datafusion-cli`_mi_page_free (10 samples, 0.01%)datafusion-cli`mi_segment_page_clear (10 samples, 0.01%)datafusion-cli`mi_segment_span_free_coalesce (10 samples, 0.01%)datafusion-cli`mi_segment_span_free (10 samples, 0.01%)datafusion-cli`mi_segment_try_purge (10 samples, 0.01%)datafusion-cli`mi_segment_purge (10 samples, 0.01%)libsystem_kernel.dylib`madvise (10 samples, 0.01%)datafusion-cli`mi_find_page (12 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (17 samples, 0.02%)datafusion-cli`_mi_malloc_generic (17 samples, 0.02%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::grow_one (77 samples, 0.09%)datafusion-cli`alloc::raw_vec::finish_grow (72 samples, 0.08%)libsystem_platform.dylib`_platform_memmove (16 samples, 0.02%)datafusion-cli`_mi_page_free (24 samples, 0.03%)datafusion-cli`mi_segment_page_clear (24 samples, 0.03%)datafusion-cli`mi_segment_span_free_coalesce (24 samples, 0.03%)datafusion-cli`mi_segment_span_free (23 samples, 0.03%)datafusion-cli`mi_segment_try_purge (23 samples, 0.03%)datafusion-cli`mi_segment_purge (23 samples, 0.03%)libsystem_kernel.dylib`madvise (22 samples, 0.03%)datafusion-cli`_mi_heap_realloc_zero (27 samples, 0.03%)datafusion-cli`_mi_malloc_generic (26 samples, 0.03%)datafusion-cli`mi_find_page (26 samples, 0.03%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (44 samples, 0.05%)datafusion-cli`alloc::raw_vec::finish_grow (44 samples, 0.05%)libsystem_platform.dylib`_platform_memmove (15 samples, 0.02%)datafusion-cli`alloc::raw_vec::finish_grow (10 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<arrow_array::array::byte_array::GenericByteArray<arrow_array::types::GenericBinaryType<i32>>> (22 samples, 0.03%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (35 samples, 0.04%)datafusion-cli`datafusion_common::scalar::ScalarValue::size (71 samples, 0.08%)datafusion-cli`DYLD-STUB$$memcpy (10 samples, 0.01%)datafusion-cli`_mi_malloc_generic (9 samples, 0.01%)datafusion-cli`mi_find_page (9 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (10 samples, 0.01%)datafusion-cli`mi_heap_realloc_zero_aligned_at (29 samples, 0.03%)datafusion-cli`mi_heap_malloc_zero_aligned_at_overalloc (16 samples, 0.02%)datafusion-cli`_mi_malloc_generic (16 samples, 0.02%)datafusion-cli`mi_page_fresh_alloc (14 samples, 0.02%)datafusion-cli`mi_segments_page_alloc (14 samples, 0.02%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (352 samples, 0.41%)libsystem_platform.dylib`_platform_memmove (322 samples, 0.38%)datafusion-cli`arrow_select::take::take_bytes (567 samples, 0.67%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (1,437 samples, 1.69%)datafusion-cli`arrow_select::take::take (1,437 samples, 1.69%)datafusion-cli`arrow_select::take::take_impl (1,436 samples, 1.69%)libsystem_platform.dylib`_platform_memmove (859 samples, 1.01%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1,438 samples, 1.69%)datafusion-cli`datafusion_common::utils::get_arrayref_at_indices (1,439 samples, 1.69%)datafusion-cli`core::iter::adapters::try_process (1,439 samples, 1.69%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::grow_one (11 samples, 0.01%)datafusion-cli`alloc::raw_vec::finish_grow (11 samples, 0.01%)libsystem_platform.dylib`_platform_memmove (10 samples, 0.01%)datafusion-cli`<datafusion_common::scalar::ScalarValue as core::convert::TryFrom<&arrow_schema::datatype::DataType>>::try_from (16 samples, 0.02%)datafusion-cli`<datafusion_common::scalar::ScalarValue as core::convert::TryFrom<&arrow_schema::datatype::DataType>>::try_from (9 samples, 0.01%)datafusion-cli`_mi_page_free (37 samples, 0.04%)datafusion-cli`mi_segment_page_clear (37 samples, 0.04%)datafusion-cli`mi_segment_span_free_coalesce (37 samples, 0.04%)datafusion-cli`mi_segment_span_free (36 samples, 0.04%)datafusion-cli`mi_segment_try_purge (36 samples, 0.04%)datafusion-cli`mi_segment_purge (36 samples, 0.04%)libsystem_kernel.dylib`madvise (36 samples, 0.04%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (41 samples, 0.05%)datafusion-cli`_mi_malloc_generic (41 samples, 0.05%)datafusion-cli`mi_find_page (39 samples, 0.05%)datafusion-cli`<datafusion_functions_aggregate::min_max::Min as datafusion_expr::udaf::AggregateUDFImpl>::accumulator (64 samples, 0.08%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::GroupsAccumulatorAdapter::make_accumulators_if_needed (135 samples, 0.16%)datafusion-cli`datafusion_physical_expr::aggregate::AggregateFunctionExpr::create_accumulator (89 samples, 0.10%)datafusion-cli`arrow_buffer::buffer::immutable::Buffer::slice_with_length (9 samples, 0.01%)datafusion-cli`arrow_buffer::buffer::scalar::ScalarBuffer<T>::new (10 samples, 0.01%)datafusion-cli`mi_malloc_aligned (27 samples, 0.03%)datafusion-cli`<arrow_array::array::byte_array::GenericByteArray<T> as arrow_array::array::Array>::slice (92 samples, 0.11%)datafusion-cli`mi_malloc_aligned (12 samples, 0.01%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (123 samples, 0.14%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::slice_and_maybe_filter (142 samples, 0.17%)datafusion-cli`mi_free (20 samples, 0.02%)datafusion-cli`<datafusion_functions_aggregate_common::aggregate::groups_accumulator::GroupsAccumulatorAdapter as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::update_batch (3,755 samples, 4.41%)dataf..libsystem_platform.dylib`_platform_memmove (96 samples, 0.11%)datafusion-cli`DYLD-STUB$$memcmp (19 samples, 0.02%)datafusion-cli`<hashbrown::raw::inner::RawTable<T> as datafusion_common::utils::proxy::RawTableAllocExt>::insert_accounted (65 samples, 0.08%)datafusion-cli`hashbrown::raw::inner::RawTable<T,A>::reserve_rehash (46 samples, 0.05%)datafusion-cli`<str as datafusion_common::hash_utils::HashValue>::hash_one (424 samples, 0.50%)datafusion-cli`mi_heap_realloc_zero_aligned_at (9 samples, 0.01%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (53 samples, 0.06%)libsystem_platform.dylib`_platform_memmove (44 samples, 0.05%)datafusion-cli`datafusion_physical_expr_common::binary_map::ArrowBytesMap<O,V>::insert_if_new (1,298 samples, 1.52%)datafusion-cli`datafusion_common::hash_utils::create_hashes (18 samples, 0.02%)libsystem_platform.dylib`_platform_memcmp (381 samples, 0.45%)datafusion-cli`<datafusion_physical_plan::aggregates::group_values::bytes::GroupValuesByes<O> as datafusion_physical_plan::aggregates::group_values::GroupValues>::intern (1,777 samples, 2.09%)d..libsystem_platform.dylib`_platform_memmove (65 samples, 0.08%)datafusion-cli`<parquet::format::ColumnChunk as parquet::thrift::TSerializable>::read_from_in_protocol (18 samples, 0.02%)datafusion-cli`<parquet::format::FileMetaData as parquet::thrift::TSerializable>::read_from_in_protocol (25 samples, 0.03%)datafusion-cli`<parquet::arrow::async_reader::store::ParquetObjectReader as parquet::arrow::async_reader::AsyncFileReader>::get_metadata::_{{closure}} (43 samples, 0.05%)datafusion-cli`parquet::file::footer::decode_metadata (39 samples, 0.05%)datafusion-cli`<datafusion::datasource::physical_plan::parquet::opener::ParquetOpener as datafusion::datasource::physical_plan::file_stream::FileOpener>::open::_{{closure}} (54 samples, 0.06%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (59 samples, 0.07%)datafusion-cli`alloc::raw_vec::finish_grow (58 samples, 0.07%)libsystem_platform.dylib`_platform_memmove (51 samples, 0.06%)datafusion-cli`parquet::arrow::buffer::offset_buffer::OffsetBuffer<I>::try_push (202 samples, 0.24%)datafusion-cli`parquet::arrow::array_reader::byte_array::ByteArrayDecoderPlain::read (960 samples, 1.13%)libsystem_platform.dylib`_platform_memmove (620 samples, 0.73%)datafusion-cli`parquet::arrow::buffer::offset_buffer::OffsetBuffer<I>::try_push (111 samples, 0.13%)datafusion-cli`parquet::arrow::buffer::offset_buffer::OffsetBuffer<I>::extend_from_dictionary (90 samples, 0.11%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (49 samples, 0.06%)datafusion-cli`alloc::raw_vec::finish_grow (49 samples, 0.06%)libsystem_platform.dylib`_platform_memmove (40 samples, 0.05%)datafusion-cli`parquet::encodings::rle::RleDecoder::get_batch (14 samples, 0.02%)datafusion-cli`parquet::arrow::decoder::dictionary_index::DictIndexDecoder::read (266 samples, 0.31%)libsystem_platform.dylib`_platform_memmove (159 samples, 0.19%)datafusion-cli`parquet::arrow::array_reader::byte_array::ByteArrayDecoderPlain::read (44 samples, 0.05%)libsystem_platform.dylib`_platform_memmove (33 samples, 0.04%)datafusion-cli`<parquet::arrow::array_reader::byte_array::ByteArrayColumnValueDecoder<I> as parquet::column::reader::decoder::ColumnValueDecoder>::set_dict (46 samples, 0.05%)datafusion-cli`snap::decompress::Decoder::decompress (2,824 samples, 3.32%)dat..datafusion-cli`<parquet::compression::snappy_codec::SnappyCodec as parquet::compression::Codec>::decompress (2,966 samples, 3.48%)dat..libsystem_platform.dylib`_platform_memmove (142 samples, 0.17%)datafusion-cli`parquet::file::serialized_reader::decode_page (3,024 samples, 3.55%)data..libsystem_platform.dylib`__bzero (54 samples, 0.06%)libsystem_platform.dylib`__bzero (32 samples, 0.04%)libsystem_platform.dylib`_platform_memmove (43 samples, 0.05%)datafusion-cli`<parquet::file::serialized_reader::SerializedPageReader<R> as parquet::column::page::PageReader>::get_next_page (3,116 samples, 3.66%)data..datafusion-cli`parquet::column::reader::GenericColumnReader<R,D,V>::read_new_page (3,165 samples, 3.72%)data..datafusion-cli`<parquet::arrow::arrow_reader::ParquetRecordBatchReader as core::iter::traits::iterator::Iterator>::next (4,517 samples, 5.31%)datafu..datafusion-cli`<parquet::arrow::array_reader::struct_array::StructArrayReader as parquet::arrow::array_reader::ArrayReader>::read_records (4,509 samples, 5.30%)datafu..datafusion-cli`<parquet::arrow::array_reader::byte_array::ByteArrayReader<I> as parquet::arrow::array_reader::ArrayReader>::read_records (4,508 samples, 5.29%)datafu..datafusion-cli`parquet::arrow::record_reader::GenericRecordReader<V,CV>::read_records (4,508 samples, 5.29%)datafu..datafusion-cli`parquet::column::reader::GenericColumnReader<R,D,V>::read_records (4,508 samples, 5.29%)datafu..datafusion-cli`core::ptr::drop_in_place<parquet::arrow::arrow_reader::ParquetRecordBatchReader> (11 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<parquet::arrow::array_reader::struct_array::StructArrayReader> (11 samples, 0.01%)datafusion-cli`<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (11 samples, 0.01%)datafusion-cli`<futures_util::stream::stream::map::Map<St,F> as futures_core::stream::Stream>::poll_next (4,535 samples, 5.33%)datafus..datafusion-cli`<futures_util::stream::stream::map::Map<St,F> as futures_core::stream::Stream>::poll_next (4,532 samples, 5.32%)datafus..datafusion-cli`<S as futures_core::stream::TryStream>::try_poll_next (4,532 samples, 5.32%)datafus..datafusion-cli`<datafusion::datasource::physical_plan::file_stream::FileStream<F> as futures_core::stream::Stream>::poll_next (4,596 samples, 5.40%)datafus..datafusion-cli`DYLD-STUB$$memcmp (17 samples, 0.02%)datafusion-cli`arrow_ord::cmp::apply_op (201 samples, 0.24%)datafusion-cli`arrow_ord::cmp::compare_op (253 samples, 0.30%)datafusion-cli`arrow_ord::cmp::compare_op::_{{closure}} (252 samples, 0.30%)libsystem_platform.dylib`_platform_memcmp (33 samples, 0.04%)datafusion-cli`<datafusion_physical_expr::expressions::binary::BinaryExpr as datafusion_physical_expr_common::physical_expr::PhysicalExpr>::evaluate (260 samples, 0.31%)datafusion-cli`datafusion_physical_expr_common::datum::apply_cmp (258 samples, 0.30%)datafusion-cli`<arrow_buffer::util::bit_iterator::BitIndexIterator as core::iter::traits::iterator::Iterator>::next (16 samples, 0.02%)datafusion-cli`<arrow_buffer::util::bit_iterator::BitSliceIterator as core::iter::traits::iterator::Iterator>::next (15 samples, 0.02%)datafusion-cli`DYLD-STUB$$memcpy (12 samples, 0.01%)datafusion-cli`arrow_select::filter::FilterBytes<OffsetSize>::extend_idx (117 samples, 0.14%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (63 samples, 0.07%)libsystem_platform.dylib`_platform_memmove (58 samples, 0.07%)datafusion-cli`mi_heap_realloc_zero_aligned_at (15 samples, 0.02%)datafusion-cli`arrow_select::filter::FilterBytes<OffsetSize>::extend_slices (336 samples, 0.39%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (199 samples, 0.23%)libsystem_platform.dylib`_platform_memmove (182 samples, 0.21%)datafusion-cli`datafusion_physical_plan::filter::filter_and_project (1,154 samples, 1.36%)datafusion-cli`arrow_select::filter::filter_record_batch (892 samples, 1.05%)datafusion-cli`core::iter::adapters::try_process (891 samples, 1.05%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (890 samples, 1.05%)datafusion-cli`arrow_select::filter::filter_array (890 samples, 1.05%)datafusion-cli`arrow_select::filter::filter_bytes (889 samples, 1.04%)libsystem_platform.dylib`_platform_memmove (393 samples, 0.46%)datafusion-cli`<datafusion_physical_plan::filter::FilterExecStream as futures_core::stream::Stream>::poll_next (5,753 samples, 6.76%)datafusio..datafusion-cli`arrow_data::transform::variable_size::build_extend::_{{closure}} (62 samples, 0.07%)datafusion-cli`arrow_data::transform::utils::extend_offsets (62 samples, 0.07%)datafusion-cli`arrow_data::transform::MutableArrayData::extend (227 samples, 0.27%)libsystem_platform.dylib`_platform_memmove (165 samples, 0.19%)datafusion-cli`arrow_select::concat::concat_batches (232 samples, 0.27%)datafusion-cli`arrow_select::concat::concat (231 samples, 0.27%)datafusion-cli`arrow_select::concat::concat_fallback (231 samples, 0.27%)datafusion-cli`<datafusion_physical_plan::coalesce_batches::CoalesceBatchesStream as futures_core::stream::Stream>::poll_next (5,987 samples, 7.03%)datafusio..datafusion-cli`datafusion_physical_plan::coalesce::BatchCoalescer::finish_batch (233 samples, 0.27%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (1,376 samples, 1.62%)datafusion-cli`<datafusion_physical_expr::expressions::cast::CastExpr as datafusion_physical_expr_common::physical_expr::PhysicalExpr>::evaluate (1,376 samples, 1.62%)datafusion-cli`datafusion_expr_common::columnar_value::ColumnarValue::cast_to (1,376 samples, 1.62%)datafusion-cli`arrow_cast::cast::string::cast_binary_to_string (1,376 samples, 1.62%)datafusion-cli`arrow_array::array::string_array::_<impl arrow_array::array::byte_array::GenericByteArray<arrow_array::types::GenericStringType<OffsetSize>>>::try_from_binary (1,375 samples, 1.61%)datafusion-cli`<arrow_array::types::GenericStringType<O> as arrow_array::types::ByteArrayType>::validate (1,375 samples, 1.61%)datafusion-cli`core::str::converts::from_utf8 (1,316 samples, 1.55%)datafusion-cli`<datafusion_physical_plan::projection::ProjectionStream as futures_core::stream::Stream>::poll_next (7,365 samples, 8.65%)datafusion-c..datafusion-cli`core::iter::adapters::try_process (1,378 samples, 1.62%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1,378 samples, 1.62%)datafusion-cli`core::ops::function::impls::_<impl core::ops::function::FnOnce<A> for &mut F>::call_once (254 samples, 0.30%)datafusion-cli`core::str::count::char_count_general_case (90 samples, 0.11%)datafusion-cli`core::str::count::do_count_chars (1,371 samples, 1.61%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1,878 samples, 2.21%)d..datafusion-cli`core::ops::function::impls::_<impl core::ops::function::FnOnce<A> for &mut F>::call_once (41 samples, 0.05%)datafusion-cli`<arrow_buffer::buffer::immutable::Buffer as core::iter::traits::collect::FromIterator<T>>::from_iter (1,929 samples, 2.27%)d..datafusion-cli`<arrow_array::array::primitive_array::PrimitiveArray<T> as core::iter::traits::collect::FromIterator<Ptr>>::from_iter (1,932 samples, 2.27%)d..datafusion-cli`<datafusion_functions::unicode::character_length::CharacterLengthFunc as datafusion_expr::udf::ScalarUDFImpl>::invoke (1,935 samples, 2.27%)d..datafusion-cli`datafusion_functions::utils::make_scalar_function::_{{closure}} (1,935 samples, 2.27%)d..datafusion-cli`<datafusion_physical_expr::scalar_function::ScalarFunctionExpr as datafusion_physical_expr_common::physical_expr::PhysicalExpr>::evaluate (1,937 samples, 2.27%)d..datafusion-cli`arrow_array::array::primitive_array::PrimitiveArray<T>::try_unary (24 samples, 0.03%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (18 samples, 0.02%)datafusion-cli`_mi_malloc_generic (18 samples, 0.02%)datafusion-cli`mi_find_page (16 samples, 0.02%)datafusion-cli`_mi_page_free (15 samples, 0.02%)datafusion-cli`mi_segment_page_clear (15 samples, 0.02%)datafusion-cli`mi_segment_span_free_coalesce (15 samples, 0.02%)datafusion-cli`mi_segment_span_free (15 samples, 0.02%)datafusion-cli`mi_segment_try_purge (15 samples, 0.02%)datafusion-cli`mi_segment_purge (15 samples, 0.02%)libsystem_kernel.dylib`madvise (15 samples, 0.02%)datafusion-cli`arrow_cast::cast::cast_numeric_arrays (36 samples, 0.04%)libsystem_platform.dylib`__bzero (11 samples, 0.01%)datafusion-cli`<datafusion_physical_expr::expressions::cast::CastExpr as datafusion_physical_expr_common::physical_expr::PhysicalExpr>::evaluate (1,979 samples, 2.32%)d..datafusion-cli`datafusion_expr_common::columnar_value::ColumnarValue::cast_to (40 samples, 0.05%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (1,994 samples, 2.34%)d..datafusion-cli`datafusion_expr_common::columnar_value::ColumnarValue::into_array (15 samples, 0.02%)datafusion-cli`datafusion_common::scalar::ScalarValue::to_array_of_size (15 samples, 0.02%)datafusion-cli`arrow_array::array::primitive_array::PrimitiveArray<T>::from_value (15 samples, 0.02%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1,995 samples, 2.34%)d..datafusion-cli`core::iter::adapters::try_process (1,995 samples, 2.34%)d..datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1,995 samples, 2.34%)d..datafusion-cli`core::iter::adapters::try_process (1,996 samples, 2.34%)d..datafusion-cli`core::ptr::drop_in_place<arrow_array::array::byte_array::GenericByteArray<arrow_array::types::GenericStringType<i32>>> (9 samples, 0.01%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (9 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<alloc::vec::Vec<alloc::sync::Arc<dyn arrow_array::array::Array>>> (16 samples, 0.02%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (14 samples, 0.02%)datafusion-cli`datafusion_common::scalar::ScalarValue::size (17 samples, 0.02%)datafusion-cli`datafusion_functions_aggregate_common::aggregate::groups_accumulator::slice_and_maybe_filter (19 samples, 0.02%)datafusion-cli`DYLD-STUB$$memcpy (28 samples, 0.03%)datafusion-cli`__rust_dealloc (11 samples, 0.01%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (132 samples, 0.16%)datafusion-cli`arrow_data::data::ArrayDataBuilder::build (452 samples, 0.53%)datafusion-cli`arrow_data::data::ArrayData::validate_values (452 samples, 0.53%)datafusion-cli`core::str::converts::from_utf8 (319 samples, 0.37%)datafusion-cli`<&str as regex::regex::string::Replacer>::no_expansion (50 samples, 0.06%)datafusion-cli`<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (112 samples, 0.13%)datafusion-cli`DYLD-STUB$$memcpy (28 samples, 0.03%)datafusion-cli`core::ptr::drop_in_place<core::iter::adapters::peekable::Peekable<core::iter::adapters::enumerate::Enumerate<regex::regex::string::CaptureMatches>>> (25 samples, 0.03%)datafusion-cli`mi_free (112 samples, 0.13%)datafusion-cli`<&str as regex::regex::string::Replacer>::no_expansion (24 samples, 0.03%)datafusion-cli`regex_automata::util::determinize::next (16 samples, 0.02%)datafusion-cli`regex_automata::hybrid::dfa::Lazy::cache_next_state (37 samples, 0.04%)datafusion-cli`regex_automata::hybrid::regex::Regex::try_search (7,837 samples, 9.20%)datafusion-cl..datafusion-cli`regex_automata::hybrid::search::find_fwd (7,526 samples, 8.84%)datafusion-c..datafusion-cli`regex_automata::hybrid::search::find_fwd (93 samples, 0.11%)datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (76 samples, 0.09%)datafusion-cli`DYLD-STUB$$bzero (46 samples, 0.05%)datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (42,705 samples, 50.16%)datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search..libsystem_platform.dylib`__bzero (54 samples, 0.06%)datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (43,651 samples, 51.27%)datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_sea..datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (43,543 samples, 51.14%)datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_sea..libsystem_platform.dylib`_platform_memset (632 samples, 0.74%)datafusion-cli`regex_automata::meta::strategy::Core::search_slots_nofail (43,848 samples, 51.50%)datafusion-cli`regex_automata::meta::strategy::Core::search_slots_nofaildatafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (51 samples, 0.06%)datafusion-cli`<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (51,998 samples, 61.07%)datafusion-cli`<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::se..datafusion-cli`regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (53 samples, 0.06%)datafusion-cli`_mi_malloc_generic (12 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (16 samples, 0.02%)datafusion-cli`mi_malloc_aligned (108 samples, 0.13%)datafusion-cli`regex_automata::hybrid::regex::Regex::try_search (59 samples, 0.07%)datafusion-cli`regex_automata::meta::strategy::Core::search_slots_nofail (24 samples, 0.03%)datafusion-cli`<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (52,763 samples, 61.97%)datafusion-cli`<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator..libdyld.dylib`tlv_get_addr (32 samples, 0.04%)datafusion-cli`<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (57 samples, 0.07%)datafusion-cli`<regex_automata::meta::strategy::ReverseAnchored as regex_automata::meta::strategy::Strategy>::group_info (28 samples, 0.03%)datafusion-cli`DYLD-STUB$$bzero (23 samples, 0.03%)datafusion-cli`DYLD-STUB$$memcpy (14 samples, 0.02%)datafusion-cli`core::ptr::drop_in_place<core::iter::adapters::peekable::Peekable<core::iter::adapters::enumerate::Enumerate<regex::regex::string::CaptureMatches>>> (158 samples, 0.19%)datafusion-cli`core::ptr::drop_in_place<regex_automata::util::pool::PoolGuard<regex_automata::meta::regex::Cache,alloc::boxed::Box<dyn core::ops::function::Fn<()>+Output = regex_automata::meta::regex::Cache+core::panic::unwind_safe::UnwindSafe+core::marker::Sync+core::panic::unwind_safe::RefUnwindSafe+core::marker::Send>>> (101 samples, 0.12%)datafusion-cli`core::ptr::drop_in_place<regex_automata::util::pool::PoolGuard<regex_automata::meta::regex::Cache,alloc::boxed::Box<dyn core::ops::function::Fn<()>+Output = regex_automata::meta::regex::Cache+core::panic::unwind_safe::UnwindSafe+core::marker::Sync+core::panic::unwind_safe::RefUnwindSafe+core::marker::Send>>> (92 samples, 0.11%)datafusion-cli`mi_free (95 samples, 0.11%)datafusion-cli`_mi_free_delayed_block (34 samples, 0.04%)datafusion-cli`_mi_malloc_generic (62 samples, 0.07%)datafusion-cli`mi_find_page (19 samples, 0.02%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (77 samples, 0.09%)datafusion-cli`mi_malloc_aligned (125 samples, 0.15%)datafusion-cli`regex::find_byte::find_byte (87 samples, 0.10%)datafusion-cli`regex_automata::meta::regex::Regex::create_captures (56 samples, 0.07%)datafusion-cli`_mi_malloc_generic (18 samples, 0.02%)datafusion-cli`mi_find_page (9 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (21 samples, 0.02%)datafusion-cli`mi_malloc_aligned (135 samples, 0.16%)datafusion-cli`regex_automata::util::captures::Captures::all (412 samples, 0.48%)libdyld.dylib`tlv_get_addr (26 samples, 0.03%)datafusion-cli`DYLD-STUB$$memcpy (55 samples, 0.06%)datafusion-cli`regex_automata::util::captures::Captures::interpolate_string_into::_{{closure}} (48 samples, 0.06%)datafusion-cli`regex_automata::util::interpolate::find_cap_ref (74 samples, 0.09%)datafusion-cli`DYLD-STUB$$memcpy (13 samples, 0.02%)datafusion-cli`core::num::_<impl core::str::traits::FromStr for usize>::from_str (32 samples, 0.04%)datafusion-cli`core::str::converts::from_utf8 (15 samples, 0.02%)datafusion-cli`regex_automata::util::captures::Captures::interpolate_string_into::_{{closure}} (154 samples, 0.18%)datafusion-cli`core::num::_<impl core::str::traits::FromStr for usize>::from_str (95 samples, 0.11%)datafusion-cli`regex_automata::util::interpolate::find_cap_ref (302 samples, 0.35%)datafusion-cli`core::str::converts::from_utf8 (94 samples, 0.11%)datafusion-cli`regex_automata::util::interpolate::string (1,197 samples, 1.41%)libsystem_platform.dylib`_platform_memmove (479 samples, 0.56%)datafusion-cli`regex_automata::util::captures::Captures::interpolate_string_into (1,508 samples, 1.77%)d..libsystem_platform.dylib`_platform_memmove (92 samples, 0.11%)datafusion-cli`regex_automata::util::interpolate::string (62 samples, 0.07%)datafusion-cli`regex_automata::hybrid::dfa::Cache::new (16 samples, 0.02%)datafusion-cli`regex_automata::hybrid::dfa::Lazy::init_cache (15 samples, 0.02%)datafusion-cli`regex_automata::util::pool::inner::Pool<T,F>::get_slow (18 samples, 0.02%)datafusion-cli`<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (18 samples, 0.02%)libdyld.dylib`tlv_get_addr (37 samples, 0.04%)libsystem_platform.dylib`__bzero (14 samples, 0.02%)libsystem_platform.dylib`_platform_memmove (215 samples, 0.25%)datafusion-cli`regex::regex::string::Regex::replacen (57,245 samples, 67.23%)datafusion-cli`regex::regex::string::Regex::replacenlibsystem_platform.dylib`_platform_memset (154 samples, 0.18%)datafusion-cli`regex_automata::util::captures::Captures::all (116 samples, 0.14%)datafusion-cli`regex_automata::util::captures::Captures::interpolate_string_into (40 samples, 0.05%)libdyld.dylib`tlv_get_addr (41 samples, 0.05%)datafusion-cli`core::iter::traits::iterator::Iterator::fold (58,157 samples, 68.30%)datafusion-cli`core::iter::traits::iterator::Iterator::foldlibsystem_platform.dylib`_platform_memmove (114 samples, 0.13%)datafusion-cli`_mi_page_free (9 samples, 0.01%)datafusion-cli`mi_segment_page_clear (9 samples, 0.01%)datafusion-cli`_mi_page_free (10 samples, 0.01%)datafusion-cli`mi_segment_page_clear (10 samples, 0.01%)datafusion-cli`mi_segment_span_free_coalesce (10 samples, 0.01%)datafusion-cli`mi_segment_span_free (10 samples, 0.01%)datafusion-cli`mi_segment_try_purge (10 samples, 0.01%)datafusion-cli`mi_segment_purge (10 samples, 0.01%)libsystem_kernel.dylib`madvise (10 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<regex_automata::hybrid::dfa::Cache> (17 samples, 0.02%)datafusion-cli`core::ptr::drop_in_place<regex_automata::meta::regex::Cache> (28 samples, 0.03%)datafusion-cli`core::ptr::drop_in_place<regex_automata::util::pool::Pool<regex_automata::meta::regex::Cache,alloc::boxed::Box<dyn core::ops::function::Fn<()>+Output = regex_automata::meta::regex::Cache+core::panic::unwind_safe::UnwindSafe+core::marker::Sync+core::panic::unwind_safe::RefUnwindSafe+core::marker::Send>>> (36 samples, 0.04%)datafusion-cli`core::ptr::drop_in_place<regex::regex::string::Regex> (38 samples, 0.04%)datafusion-cli`mi_free (128 samples, 0.15%)datafusion-cli`core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (25 samples, 0.03%)datafusion-cli`core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (24 samples, 0.03%)datafusion-cli`regex_automata::meta::wrappers::Hybrid::new (11 samples, 0.01%)datafusion-cli`regex_automata::dfa::onepass::Builder::build_from_nfa (10 samples, 0.01%)datafusion-cli`regex_automata::meta::wrappers::OnePass::new (14 samples, 0.02%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c (19 samples, 0.02%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c (22 samples, 0.03%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c_at_least (21 samples, 0.02%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c_at_least (12 samples, 0.01%)datafusion-cli`DYLD-STUB$$memcpy (32 samples, 0.04%)datafusion-cli`alloc::vec::Vec<T,A>::extend_with (27 samples, 0.03%)datafusion-cli`regex_automata::nfa::thompson::compiler::Utf8Compiler::new (128 samples, 0.15%)datafusion-cli`regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (127 samples, 0.15%)datafusion-cli`<T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (127 samples, 0.15%)libsystem_platform.dylib`_platform_memmove (67 samples, 0.08%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (180 samples, 0.21%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c_cap (158 samples, 0.19%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c (156 samples, 0.18%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c_cap (140 samples, 0.16%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c_at_least (139 samples, 0.16%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::c (138 samples, 0.16%)datafusion-cli`regex_automata::nfa::thompson::nfa::Inner::into_nfa (9 samples, 0.01%)datafusion-cli`regex_automata::nfa::thompson::builder::Builder::build (23 samples, 0.03%)datafusion-cli`regex_automata::nfa::thompson::compiler::Compiler::compile (206 samples, 0.24%)datafusion-cli`regex_automata::meta::strategy::new (259 samples, 0.30%)datafusion-cli`regex_syntax::ast::parse::ParserI<P>::parse_with_comments (26 samples, 0.03%)datafusion-cli`regex_syntax::ast::parse::Parser::parse (28 samples, 0.03%)datafusion-cli`<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (18 samples, 0.02%)datafusion-cli`regex_syntax::hir::translate::Translator::translate (23 samples, 0.03%)datafusion-cli`regex_syntax::ast::visitor::visit (23 samples, 0.03%)datafusion-cli`regex::regex::string::Regex::new (322 samples, 0.38%)datafusion-cli`regex::builders::Builder::build_one_string (322 samples, 0.38%)datafusion-cli`regex_automata::meta::regex::Builder::build (321 samples, 0.38%)datafusion-cli`regex::regex::string::Regex::replacen (75 samples, 0.09%)datafusion-cli`datafusion_functions::regex::regexpreplace::regexp_replace_func (59,574 samples, 69.97%)datafusion-cli`datafusion_functions::regex::regexpreplace::regexp_replace_funclibsystem_platform.dylib`_platform_memmove (344 samples, 0.40%)datafusion-cli`<datafusion_functions::regex::regexpreplace::RegexpReplaceFunc as datafusion_expr::udf::ScalarUDFImpl>::invoke (59,576 samples, 69.97%)datafusion-cli`<datafusion_functions::regex::regexpreplace::RegexpReplaceFunc as datafusion_expr::udf::ScalarUDFImpl..datafusion-cli`<datafusion_physical_expr::scalar_function::ScalarFunctionExpr as datafusion_physical_expr_common::physical_expr::PhysicalExpr>::evaluate (59,578 samples, 69.97%)datafusion-cli`<datafusion_physical_expr::scalar_function::ScalarFunctionExpr as datafusion_physical_expr_common::ph..datafusion-cli`datafusion_physical_plan::aggregates::evaluate_group_by (59,583 samples, 69.98%)datafusion-cli`datafusion_physical_plan::aggregates::evaluate_group_bydatafusion-cli`core::iter::adapters::try_process (59,582 samples, 69.98%)datafusion-cli`core::iter::adapters::try_processdatafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (59,582 samples, 69.98%)datafusion-cli`<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iterdatafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (59,582 samples, 69.98%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_folddatafusion-cli`<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (11 samples, 0.01%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (12 samples, 0.01%)datafusion-cli`_mi_malloc_generic (12 samples, 0.01%)datafusion-cli`mi_page_free_list_extend (9 samples, 0.01%)datafusion-cli`mi_malloc_aligned (13 samples, 0.02%)datafusion-cli`<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (37 samples, 0.04%)datafusion-cli`<datafusion_common::scalar::ScalarValue as core::clone::Clone>::clone (103 samples, 0.12%)libsystem_platform.dylib`_platform_memmove (54 samples, 0.06%)datafusion-cli`mi_malloc_aligned (18 samples, 0.02%)datafusion-cli`<datafusion_functions_aggregate::min_max::MaxAccumulator as datafusion_expr_common::accumulator::Accumulator>::state (140 samples, 0.16%)datafusion-cli`alloc::raw_vec::RawVec<T,A>::grow_one (13 samples, 0.02%)datafusion-cli`alloc::raw_vec::finish_grow (13 samples, 0.02%)libsystem_platform.dylib`_platform_memmove (11 samples, 0.01%)datafusion-cli`<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (15 samples, 0.02%)datafusion-cli`<alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::try_fold (14 samples, 0.02%)datafusion-cli`arrow_buffer::buffer::mutable::MutableBuffer::reallocate (54 samples, 0.06%)libsystem_platform.dylib`_platform_memmove (49 samples, 0.06%)datafusion-cli`<arrow_array::array::byte_array::GenericByteArray<T> as core::iter::traits::collect::FromIterator<core::option::Option<Ptr>>>::from_iter (87 samples, 0.10%)datafusion-cli`mi_free (9 samples, 0.01%)datafusion-cli`core::iter::adapters::try_process (202 samples, 0.24%)datafusion-cli`alloc::vec::in_place_collect::from_iter_in_place (202 samples, 0.24%)datafusion-cli`<alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::try_fold (202 samples, 0.24%)datafusion-cli`datafusion_common::scalar::ScalarValue::iter_to_array (202 samples, 0.24%)datafusion-cli`core::iter::adapters::try_process (202 samples, 0.24%)libsystem_platform.dylib`_platform_memmove (103 samples, 0.12%)datafusion-cli`core::ptr::drop_in_place<datafusion_common::scalar::ScalarValue> (10 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<datafusion_functions_aggregate_common::aggregate::groups_accumulator::AccumulatorState> (21 samples, 0.02%)datafusion-cli`mi_free (11 samples, 0.01%)datafusion-cli`mi_free_block_delayed_mt (24 samples, 0.03%)datafusion-cli`mi_free_block_mt (9 samples, 0.01%)datafusion-cli`<datafusion_functions_aggregate_common::aggregate::groups_accumulator::GroupsAccumulatorAdapter as datafusion_expr_common::groups_accumulator::GroupsAccumulator>::state (492 samples, 0.58%)datafusion-cli`mi_free_generic_mt (9 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<[alloc::vec::Vec<datafusion_common::scalar::ScalarValue>]> (12 samples, 0.01%)datafusion-cli`mi_free (20 samples, 0.02%)datafusion-cli`datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream::set_input_done_and_produce_output (546 samples, 0.64%)datafusion-cli`datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream::emit (546 samples, 0.64%)datafusion-cli`mi_free (16 samples, 0.02%)libsystem_platform.dylib`_platform_memmove (43 samples, 0.05%)datafusion-cli`<datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream as futures_core::stream::Stream>::poll_next (75,562 samples, 88.74%)datafusion-cli`<datafusion_physical_plan::aggregates::row_hash::GroupedHashAggregateStream as futures_core::stream::Stream>::poll_nextdatafusion-cli`<datafusion_physical_plan::repartition::distributor_channels::SendFuture<T> as core::future::future::Future>::poll (11 samples, 0.01%)datafusion-cli`tokio::runtime::task::waker::wake_by_val (9 samples, 0.01%)datafusion-cli`tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle>>::schedule (9 samples, 0.01%)datafusion-cli`tokio::runtime::context::with_scheduler (9 samples, 0.01%)datafusion-cli`mi_free_block_mt (9 samples, 0.01%)datafusion-cli`_mi_os_reset (9 samples, 0.01%)libsystem_kernel.dylib`madvise (9 samples, 0.01%)datafusion-cli`core::ptr::drop_in_place<arrow_array::record_batch::RecordBatch> (13 samples, 0.02%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (13 samples, 0.02%)datafusion-cli`core::ptr::drop_in_place<arrow_array::array::byte_array::GenericByteArray<arrow_array::types::GenericBinaryType<i32>>> (13 samples, 0.02%)datafusion-cli`alloc::sync::Arc<T,A>::drop_slow (13 samples, 0.02%)datafusion-cli`datafusion_physical_plan::repartition::BatchPartitioner::partition_iter (57 samples, 0.07%)datafusion-cli`<str as datafusion_common::hash_utils::HashValue>::hash_one (49 samples, 0.06%)datafusion-cli`datafusion_physical_plan::repartition::RepartitionExec::pull_from_input::_{{closure}} (75,911 samples, 89.15%)datafusion-cli`datafusion_physical_plan::repartition::RepartitionExec::pull_from_input::_{{closure}}datafusion-cli`tokio::runtime::scheduler::multi_thread::worker::Context::run (78,392 samples, 92.07%)datafusion-cli`tokio::runtime::scheduler::multi_thread::worker::Context::rundatafusion-cli`tokio::runtime::scheduler::multi_thread::worker::Context::run_task (78,358 samples, 92.03%)datafusion-cli`tokio::runtime::scheduler::multi_thread::worker::Context::run_taskdatafusion-cli`tokio::runtime::task::harness::Harness<T,S>::poll (78,351 samples, 92.02%)datafusion-cli`tokio::runtime::task::harness::Harness<T,S>::polldatafusion-cli`tokio::runtime::task::harness::Harness<T,S>::poll (78,393 samples, 92.07%)datafusion-cli`tokio::runtime::task::harness::Harness<T,S>::polldatafusion-cli`tokio::runtime::task::core::Core<T,S>::poll (78,393 samples, 92.07%)datafusion-cli`tokio::runtime::task::core::Core<T,S>::polldatafusion-cli`<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll (78,393 samples, 92.07%)datafusion-cli`<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::polldatafusion-cli`tokio::runtime::scheduler::multi_thread::worker::run (78,393 samples, 92.07%)datafusion-cli`tokio::runtime::scheduler::multi_thread::worker::rundatafusion-cli`tokio::runtime::context::runtime::enter_runtime (78,393 samples, 92.07%)datafusion-cli`tokio::runtime::context::runtime::enter_runtimedatafusion-cli`_mi_page_free (30 samples, 0.04%)datafusion-cli`mi_segment_page_clear (30 samples, 0.04%)datafusion-cli`mi_segment_span_free_coalesce (30 samples, 0.04%)datafusion-cli`mi_segment_span_free (30 samples, 0.04%)datafusion-cli`mi_segment_try_purge (30 samples, 0.04%)datafusion-cli`mi_segment_purge (30 samples, 0.04%)libsystem_kernel.dylib`madvise (30 samples, 0.04%)datafusion-cli`_mi_free_delayed_block (31 samples, 0.04%)datafusion-cli`mi_heap_malloc_zero_aligned_at_generic (35 samples, 0.04%)datafusion-cli`_mi_malloc_generic (35 samples, 0.04%)datafusion-cli`core::iter::adapters::try_process (399 samples, 0.47%)datafusion-cli`alloc::vec::in_place_collect::_<impl alloc::vec::spec_from_iter::SpecFromIter<T,I> for alloc::vec::Vec<T>>::from_iter (399 samples, 0.47%)datafusion-cli`<alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::try_fold (399 samples, 0.47%)datafusion-cli`object_store::local::read_range (399 samples, 0.47%)datafusion-cli`std::io::default_read_to_end (363 samples, 0.43%)libsystem_kernel.dylib`read (363 samples, 0.43%)datafusion-cli`std::fs::OpenOptions::_open (47 samples, 0.06%)datafusion-cli`std::sys::pal::unix::fs::File::open_c (47 samples, 0.06%)libsystem_kernel.dylib`__open (47 samples, 0.06%)datafusion-cli`object_store::local::open_file (54 samples, 0.06%)datafusion-cli`<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll (470 samples, 0.55%)datafusion-cli`object_store::local::read_range (12 samples, 0.01%)datafusion-cli`tokio::runtime::blocking::pool::Inner::run (78,880 samples, 92.64%)datafusion-cli`tokio::runtime::blocking::pool::Inner::rundatafusion-cli`tokio::runtime::task::raw::poll (477 samples, 0.56%)datafusion-cli`std::sys::backtrace::__rust_begin_short_backtrace (78,881 samples, 92.64%)datafusion-cli`std::sys::backtrace::__rust_begin_short_backtracedatafusion-cli`std::sys::pal::unix::thread::Thread::new::thread_start (78,882 samples, 92.64%)datafusion-cli`std::sys::pal::unix::thread::Thread::new::thread_startdatafusion-cli`core::ops::function::FnOnce::call_once{{vtable.shim}} (78,882 samples, 92.64%)datafusion-cli`core::ops::function::FnOnce::call_once{{vtable.shim}}datafusion-cli`mi_heap_collect_ex (13 samples, 0.02%)datafusion-cli`_mi_free_delayed_block (11 samples, 0.01%)all (85,146 samples, 100%)libsystem_pthread.dylib`thread_start (78,906 samples, 92.67%)libsystem_pthread.dylib`thread_startlibsystem_pthread.dylib`_pthread_start (78,906 samples, 92.67%)libsystem_pthread.dylib`_pthread_startlibsystem_pthread.dylib`_pthread_exit (22 samples, 0.03%)libsystem_pthread.dylib`_pthread_tsd_cleanup (14 samples, 0.02%)datafusion-cli`_mi_thread_done (14 samples, 0.02%) \ No newline at end of file diff --git a/docs/source/library-user-guide/profiling.md b/docs/source/library-user-guide/profiling.md index c8afe15f25a8..75f2394a22da 100644 --- a/docs/source/library-user-guide/profiling.md +++ b/docs/source/library-user-guide/profiling.md @@ -25,34 +25,44 @@ The section contains examples how to perform CPU profiling for Apache DataFusion ### Building a flamegraph -- [cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph) +[Video: how to CPU profile DataFusion with a Flamegraph](https://youtu.be/2z11xtYw_xs) -Test: +A flamegraph is a visual representation of which functions are being run +You can create flamegraphs in many ways; The instructions below are for +[cargo-flamegraph](https://github.com/flamegraph-rs/flamegraph) which results +in images such as this: -```bash -CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root --unit-test datafusion -- dataframe::tests::test_array_agg +![Flamegraph](../_static/images/flamegraph.svg) + +To create a flamegraph, you need to install the `flamegraph` tool: + +```shell +cargo install flamegraph ``` -Benchmark: +Then you can run the flamegraph tool with the `--` separator to pass arguments +to the binary you want to profile. -```bash -CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root --bench sql_planner -- --bench +Example: Flamegraph for `datafusion-cli` executing `q28.sql`. Note this +must be run as root on Mac OSx to access DTrace. + +```shell +sudo flamegraph -- datafusion-cli -f q28.sq ``` -Open `flamegraph.svg` file with the browser +You can also invoke the flamegraph tool with `cargo` to profile a specific test or benchmark. -- dtrace with DataFusion CLI +Example: Flamegraph for a specific test: ```bash -git clone https://github.com/brendangregg/FlameGraph.git /tmp/fg -cd datafusion-cli -CARGO_PROFILE_RELEASE_DEBUG=true cargo build --release -echo "select * from table;" >> test.sql -sudo dtrace -c './target/debug/datafusion-cli -f test.sql' -o out.stacks -n 'profile-997 /execname == "datafusion-cli"/ { @[ustack(100)] = count(); }' -/tmp/fg/FlameGraph/stackcollapse.pl out.stacks | /tmp/fg/FlameGraph/flamegraph.pl > flamegraph.svg +CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root --unit-test datafusion -- dataframe::tests::test_array_agg ``` -Open `flamegraph.svg` file with the browser +Example: Flamegraph for a benchmark + +```bash +CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root --bench sql_planner -- --bench +``` ### CPU profiling with XCode Instruments