Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement various progress modes #39

Merged
merged 1 commit into from
Mar 4, 2021
Merged

Implement various progress modes #39

merged 1 commit into from
Mar 4, 2021

Conversation

vchuravy
Copy link
Member

@vchuravy vchuravy commented Mar 1, 2021

No description provided.

src/UCX.jl Outdated Show resolved Hide resolved
@codecov-io
Copy link

codecov-io commented Mar 3, 2021

Codecov Report

Merging #39 (f6d1c47) into master (d06ae15) will increase coverage by 3.26%.
The diff coverage is 84.05%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master      #39      +/-   ##
==========================================
+ Coverage   61.23%   64.49%   +3.26%     
==========================================
  Files           6        7       +1     
  Lines         632      738     +106     
==========================================
+ Hits          387      476      +89     
- Misses        245      262      +17     
Impacted Files Coverage Δ
src/UCX.jl 81.30% <81.81%> (-0.13%) ⬇️
src/idle.jl 88.00% <88.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d06ae15...f6d1c47. Read the comment docs.

In order to reliably and timely make progress within UCX the user is
responsible for occasionally call `progess` on the UCX worker.
Originally I used a Julia `Timer` object to gurantee progress especially
in the context of asymmetric communication, e.g. active messages.
The `Timer` object would trigger ever millisecond resulting in a much
higher latency, following that I implemented the polling interface using
the WAKEUP feature, but that turns of support for shared memory openucx/ucx#5322
and turned out to have relativly high overhead in a pure latency test
on the order of ~20microseconds. I experimented with two other modes
(1) the busy waiting mode, but that is using unfair scheduling and might
livelock and libuv `Idle`. Idle callbacks are a bit odd, but seem to work well
everytime Julia ticks the event loop libuv will call the progress function.
The performanc of busy waiting seems to degrade with multiple threads,
while the idler performs well, but I have not yet performed a whole system
comparision.
@vchuravy vchuravy merged commit 58eab8e into master Mar 4, 2021
@vchuravy vchuravy deleted the vc/polling_test branch March 4, 2021 02:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants