amansinha100 commented on a change in pull request #1466: DRILL-6381: Add
support for index based planning and execution
URL: https://github.com/apache/drill/pull/1466#discussion_r228357573
##########
File path:
exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/BroadcastExchangePrel.java
##########
@@ -57,7 +57,9 @@ public RelOptCost computeSelfCost(RelOptPlanner planner,
RelMetadataQuery mq) {
final int rowWidth = child.getRowType().getFieldCount() *
DrillCostBase.AVG_FIELD_WIDTH;
final double cpuCost = broadcastFactor * DrillCostBase.SVR_CPU_COST *
inputRows;
- final double networkCost = broadcastFactor *
DrillCostBase.BYTE_NETWORK_COST * inputRows * rowWidth * numEndPoints;
+
+ //we assume localhost network cost is 1/10 of regular network cost
+ final double networkCost = broadcastFactor *
DrillCostBase.BYTE_NETWORK_COST * inputRows * rowWidth * (numEndPoints - 0.9);
Review comment:
@gparai, forgot to respond to this. The cost formula is:
(cost of broadcasting num_bytes to N - 1 nodes) + (cost of local
broadcast to all minor fragments on my own node)
= (C * num_bytes * (N - 1) ) + (C * num_bytes * 0.1) where the 0.1
factor comes from the assumption that local broadcast is 10% network cost of
the remote broadcast.
= C * num_bytes * (N - 0.9)
While the formula seems reasonable, it is biasing the cost in favor of
Broadcast compared to HashPartition. We should re-visit this and ideally a
similar change should be done for HashPartition also. I don't recall the exact
use case which motivated the change.. it may have been the Index Intersection.
I can create a JIRA to re-visit this.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services