[
https://issues.apache.org/jira/browse/ARROW-6417?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922791#comment-16922791
]
Wes McKinney commented on ARROW-6417:
-------------------------------------
Further down the rabbit hole
0.12.1 perf profile
{code}
- parquet::arrow::FileReader::Impl::ReadSchemaField
- 66.24% parquet::arrow::ColumnReader::NextBatch
- parquet::arrow::PrimitiveImpl::NextBatch
- 66.23% parquet::internal::RecordReader::ReadRecords
- 41.51%
parquet::internal::TypedRecordReader<parquet::DataType<(parquet::Type::type)6>
>::ReadRecordData
- 38.62%
parquet::internal::TypedRecordReader<parquet::DataType<(parquet::Type::type)6>
>::ReadValuesSpaced
- 26.97% arrow::internal::ChunkedBinaryBuilder::Append
- 24.06% arrow::BinaryBuilder::Append
+ 12.78% arrow::BufferBuilder::Append
1.99% arrow::ArrayBuilder::Reserve
1.16% arrow::BufferBuilder::Append@plt
0.52% arrow::ArrayBuilder::Reserve@plt
0.57% arrow::BinaryBuilder::Append@plt
+ 8.34%
parquet::Decoder<parquet::DataType<(parquet::Type::type)6> >::DecodeSpaced
0.53% arrow::internal::ChunkedBinaryBuilder::Append@plt
2.02% parquet::internal::DefinitionLevelsToBitmap
+ 0.86%
parquet::internal::RecordReader::RecordReaderImpl::ReserveValues
+ 24.31%
parquet::internal::TypedRecordReader<parquet::DataType<(parquet::Type::type)6>
>::ReadNewPage
{code}
master / my ARROW-6417 branch
{code}
- 74.04%
parquet::internal::TypedRecordReader<parquet::PhysicalType<(parquet::Type::type)6>
>::ReadRecords
- 49.00%
parquet::internal::TypedRecordReader<parquet::PhysicalType<(parquet::Type::type)6>
>::ReadRecordData
- 45.82%
parquet::internal::ByteArrayChunkedRecordReader::ReadValuesSpaced
- 45.19% parquet::PlainByteArrayDecoder::DecodeArrow
+ 20.92%
arrow::BaseBinaryBuilder<arrow::BinaryType>::ReserveData
7.61% __memmove_avx_unaligned_erms
+ 2.59% arrow::BaseBinaryBuilder<arrow::BinaryType>::Resize
0.77% memcpy@plt
+ 0.63% parquet::DictByteArrayDecoderImpl::DecodeArrow
2.09% parquet::internal::DefinitionLevelsToBitmap
+ 1.07%
parquet::internal::TypedRecordReader<parquet::PhysicalType<(parquet::Type::type)6>
>::ReserveValues
+ 24.32% parquet::SerializedPageReader::NextPage
{code}
Furthermore, jemalloc is show up as taking a lot more time on 5.2.x versus the
older version we had before
master
{code}
+ 24.59% 0.00% python libarrow.so.15.0.0
[.] je_arrow_rallocx
+ 24.58% 0.00% python libarrow.so.15.0.0
[.] je_arrow_private_je_arena_ralloc
+ 24.57% 0.00% python libarrow.so.15.0.0
[.] je_arrow_private_je_large_ralloc
{code}
0.12.1
{code}
+ 8.30% 0.01% python libarrow.so.12.1.0
[.] je_arrow_rallocx
+ 8.28% 0.01% python libarrow.so.12.1.0
[.] je_arrow_private_je_arena_ralloc
{code}
So it seems like the difference in jemalloc versions may be accounting for some
of the performance difference. The other thing that strikes me is that the
UBSAN changes ({{SafeLoadAs}}) are likely introducing performance degradation
because the Parquet BYTE_ARRAY encoding results in mostly unaligned lengths.
cc [~pitrou] [[email protected]] for any thoughts...
> [C++][Parquet] Non-dictionary BinaryArray reads from Parquet format have
> slowed down since 0.11.x
> -------------------------------------------------------------------------------------------------
>
> Key: ARROW-6417
> URL: https://issues.apache.org/jira/browse/ARROW-6417
> Project: Apache Arrow
> Issue Type: Improvement
> Components: C++, Python
> Reporter: Wes McKinney
> Priority: Major
> Labels: pull-request-available
> Attachments: 20190903_parquet_benchmark.py,
> 20190903_parquet_read_perf.png
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> In doing some benchmarking, I have found that binary reads seem to be slower
> from Arrow 0.11.1 to master branch. It would be a good idea to do some basic
> profiling to see where we might improve our memory allocation strategy (or
> whatever the bottleneck turns out to be)
--
This message was sent by Atlassian Jira
(v8.3.2#803003)