Skip to content

Common data sending may be fully parallel #334

Open
@mschubert

Description

@mschubert

Currently, the idea of using 3 ZeroMQ's IO threads to send messages from the master to its workers is that 3 workers will be served in parallel, and as soon as one message send is complete then the next one starts.

That may not be true. With an example similar to this:

common = runif(1e8) # 700 Mb
clustermq::Q(mean, i=1:10, n_jobs=10, const=list(x=common), log_worker=T)
# check the logs for call waits, they should be staggered

we observed all workers processing their first call with the almost identical delay (wait in logs).

# cat *.log | grep 'call 1'
2024-10-07 08:47:51.170754 | > call 1 (68.241s wait)
2024-10-07 08:47:50.077038 | > call 1 (67.155s wait)
2024-10-07 08:47:50.502426 | > call 1 (67.577s wait)
2024-10-07 08:47:50.975683 | > call 1 (68.048s wait)
2024-10-07 08:47:45.277124 | > call 1 (62.356s wait)
2024-10-07 08:47:50.786405 | > call 1 (67.859s wait)
2024-10-07 08:47:48.356261 | > call 1 (65.435s wait)
2024-10-07 08:47:51.202221 | > call 1 (68.269s wait)
2024-10-07 08:47:51.098968 | > call 1 (68.169s wait)
2024-10-07 08:47:49.407605 | > call 1 (66.486s wait)

The wait time here should be staggered, and under 30 seconds (1 Gbit, 3 sends in parallel) for the first worker.

We should never send common data to all workers in parallel, as this will saturate a slow network interface in case of using many workers, and not leave enough bandwidth for other communication.

Related: #213

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions