Recent measurements, using eintopf as a basis and grokking logs with this program reveals that by volume (bytes) there is a crap-ton of progress traffic going on. As we increase the workers up to 32, the volume even dominates the amount of real data.
Naiad had exactly this problem and instituted several measures for optimizing the traffic, including switching to edge-based transmission where accumulations are only sent out when discrete changes in the global frontier are observed, and aggregation at various levels that makes this even more effective.
We should probably do the same thing... Sigh.
As examples, using four processes each with one worker produces communication channel by counts of
In this case sent messages are relatively small (1024 elements) and the amount of acknowledgement that gets sent around "makes sense" in terms of accounting for the current implementation. But, almost certainly it should be reduced by
A factor of 32 (each worker can accumulate acknowledgements until it receives the indication that all matching input capabilities have been dropped, and their acknowledgements are now what is holding up the system).
A factor of 8 (each worker could use a broadcast channel rather than point-to-point communication).
A factor of 8 (each process could accumulate progress updates locally to make one update per-process).
This would reduce progress traffic fairly massively, and would move us back to a regime where the scaling of the system is limited more by the actual data than the coordination. This is almost certainly part of the reason it is hard to get large-scale computations below millisecond latencies.
Anyone following this issue might be interested in the stopgap #205 which is able to cut back some of the progress tracking overhead. Nothing quantitative yet.
Recent measurements, using eintopf as a basis and grokking logs with this program reveals that by volume (bytes) there is a crap-ton of progress traffic going on. As we increase the workers up to 32, the volume even dominates the amount of real data.
Naiad had exactly this problem and instituted several measures for optimizing the traffic, including switching to edge-based transmission where accumulations are only sent out when discrete changes in the global frontier are observed, and aggregation at various levels that makes this even more effective.
We should probably do the same thing... Sigh.
As examples, using four processes each with one worker produces communication channel by counts of
where
26
is the progress channel and others are data channels.As we increase the workers to 4x8 this increases to
In this case sent messages are relatively small (1024 elements) and the amount of acknowledgement that gets sent around "makes sense" in terms of accounting for the current implementation. But, almost certainly it should be reduced by
This would reduce progress traffic fairly massively, and would move us back to a regime where the scaling of the system is limited more by the actual data than the coordination. This is almost certainly part of the reason it is hard to get large-scale computations below millisecond latencies.