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

UCP/PERF: Use final sync up for all UCP ucx_perftest tests #10425

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

iyastreb
Copy link
Contributor

@iyastreb iyastreb commented Jan 16, 2025

What?

Users complain on too optimistic performance reports provided by some ucx_perftest tests (e.g. ucp_put_bw), especially visible on huge messages and low iteration count. The root cause is the absence of synchronisation between client and server at the end of the test execution. This synchronisation was added (#10310) only for some tests: (UCX_PERF_CMD_TAG, UCX_PERF_CMD_TAG_SYNC, UCX_PERF_CMD_AM). It should be extended to others

Why?

There is a discrepancy between client and server final perf result, which is especially visible with pipeline protocols, but it occurs also with many others. On the client side we measure time needed to send all the messages, and with pipeline protocol we essentially measure the time needed to send message to the remote bounce buffer. With default window size of 32 we see an initial performance spike on the client side, but with larger amount of iterations the client and server results are converging to the same value due to implicit synchronisation between send/recv.
Workaround: increase iteration count (-n 1000) or decrease window size (-O 1)

How?

The fix is to send ack message from receiver to the sender at the end of processing, to confirm that all messages were received. For now we only fix the final report, while intermediate reports may still have a discrepancy.

Tested manually by running all UCP STREAM_UNI tests with sync up message

@iyastreb iyastreb force-pushed the ucp/perf/use-sync-up-for-all-ucp-tests branch from a86c6f9 to fad3334 Compare January 17, 2025 07:15

return (CMD == UCX_PERF_CMD_TAG) || (CMD == UCX_PERF_CMD_TAG_SYNC) ||
(CMD == UCX_PERF_CMD_AM);
return !m_perf.params.ucp.is_daemon_mode;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it ok that for UCX_PERF_TEST_TYPE_STREAM_UNI with UCX_PERF_CMD_PUT progress is not invoked on the receiver?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentional since put should be a one-sided operation that does not require target side progress


return (CMD == UCX_PERF_CMD_TAG) || (CMD == UCX_PERF_CMD_TAG_SYNC) ||
(CMD == UCX_PERF_CMD_AM);
return !m_perf.params.ucp.is_daemon_mode;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentional since put should be a one-sided operation that does not require target side progress

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.

4 participants