Repository: spark
Updated Branches:
  refs/heads/branch-1.6 05dbc2846 -> 663a492f0


[SPARK-14242][CORE][NETWORK] avoid copy in compositeBuffer for frame decoder

## What changes were proposed in this pull request?
In this patch, we set the initial `maxNumComponents` to `Integer.MAX_VALUE` 
instead of the default size ( which is 16) when allocating `compositeBuffer` in 
`TransportFrameDecoder` because `compositeBuffer` will introduce too many 
memory copies underlying if `compositeBuffer` is with default 
`maxNumComponents` when the frame size is large (which result in many transport 
messages). For details, please refer to 
[SPARK-14242](https://issues.apache.org/jira/browse/SPARK-14242).

## How was this patch tested?
spark unit tests and manual tests.
For manual tests, we can reproduce the performance issue with following code:
`sc.parallelize(Array(1,2,3),3).mapPartitions(a=>Array(new Array[Double](1024 * 
1024 * 50)).iterator).reduce((a,b)=> a).length`
It's easy to see the performance gain, both from the running time and CPU usage.

Author: Zhang, Liye <liye.zh...@intel.com>

Closes #12038 from liyezhang556520/spark-14242.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/663a492f
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/663a492f
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/663a492f

Branch: refs/heads/branch-1.6
Commit: 663a492f0651d757ea8e5aeb42107e2ece429613
Parents: 05dbc28
Author: Zhang, Liye <liye.zh...@intel.com>
Authored: Thu Mar 31 20:17:52 2016 -0700
Committer: Davies Liu <davies....@gmail.com>
Committed: Mon Apr 11 19:25:10 2016 -0700

----------------------------------------------------------------------
 .../java/org/apache/spark/network/util/TransportFrameDecoder.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/663a492f/network/common/src/main/java/org/apache/spark/network/util/TransportFrameDecoder.java
----------------------------------------------------------------------
diff --git 
a/network/common/src/main/java/org/apache/spark/network/util/TransportFrameDecoder.java
 
b/network/common/src/main/java/org/apache/spark/network/util/TransportFrameDecoder.java
index a466c72..5b011bb 100644
--- 
a/network/common/src/main/java/org/apache/spark/network/util/TransportFrameDecoder.java
+++ 
b/network/common/src/main/java/org/apache/spark/network/util/TransportFrameDecoder.java
@@ -141,7 +141,7 @@ public class TransportFrameDecoder extends 
ChannelInboundHandlerAdapter {
     }
 
     // Otherwise, create a composite buffer.
-    CompositeByteBuf frame = buffers.getFirst().alloc().compositeBuffer();
+    CompositeByteBuf frame = 
buffers.getFirst().alloc().compositeBuffer(Integer.MAX_VALUE);
     while (remaining > 0) {
       ByteBuf next = nextBufferForFrame(remaining);
       remaining -= next.readableBytes();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to