You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Prasanth Jayachandran (JIRA)" <ji...@apache.org> on 2016/03/30 00:02:25 UTC

[jira] [Comment Edited] (HIVE-13255) FloatTreeReader.nextVector is expensive

    [ https://issues.apache.org/jira/browse/HIVE-13255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15216925#comment-15216925 ] 

Prasanth Jayachandran edited comment on HIVE-13255 at 3/29/16 10:02 PM:
------------------------------------------------------------------------

3 perf related issues found in FloatTreeReader.nextVector(). 
1) i2l java bytecode found in inner loop. batchSize is long and loop index is int. This inserts integer 2 long casts in inner loop
2) SerializationUtils.readFloat() has 4 invokevirtual whereas a readDouble has only one as readFloat is not buffered
3) The JVM bytecode size for FloatTreeReader.nextVector() is 334 bytes which will prevent this method from being inlined though being hot (has to less than 325 bytes for hot method inlining)

After the patch the bytecode size is reduced to 300 bytes and float reader perf is <10% in perf-map

cc/ [~gopalv]


was (Author: prasanth_j):
3 perf related issues found in FloatTreeReader.nextVector(). 
1) i2l java bytecode found in inner loop. batchSize is long and loop index is int. This inserts integer 2 long casts in inner loop
2) SerializationUtils.readFloat() has 4 invokevirtual whereas a readDouble has only one as readFloat is not buffered
3) The JVM bytecode size for FloatTreeReader.nextVector() is 334 bytes which will prevent this method from being inlined though being hot (has to less than 325 bytes for hot method inlining)

cc/ [~gopalv]

> FloatTreeReader.nextVector is expensive 
> ----------------------------------------
>
>                 Key: HIVE-13255
>                 URL: https://issues.apache.org/jira/browse/HIVE-13255
>             Project: Hive
>          Issue Type: Bug
>          Components: ORC
>    Affects Versions: 2.1.0
>            Reporter: Prasanth Jayachandran
>            Assignee: Prasanth Jayachandran
>         Attachments: HIVE-13255.1.patch, bytecode-size-after.png, bytecode-size-before.png, float-reader-perf.png, q1-bottleneck.png, q1-warm-perf-map.png
>
>
> Some TPCDS queries on 1TB scale shows FloatTreeReader on profile samples. It is most likely because of multiple branching and polymorphic dispatch in FloatTreeReader.nextVector() implementation. See attached image for sampling profile output.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)