[ 
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)

Reply via email to