CI/FT: Adds fault tolerance CI test#11570
Conversation
|
/run |
d5cd60e to
2675908
Compare
- Adds Fault Tolerance CI test using ucx_perftest - Adds 'failover' as endpoint failure mode in ucx_perftest
|
🚫 @william-gallagher-nv — not authorized to trigger a review on this repo. Contact a repo admin to be added to the allowed-users list. |
afec5e0 to
806418f
Compare
|
|
||
| # Run AMO tests | ||
| echo -e "4 -s 4\n8 -s 8" > "$ucx_inst_ptest/msg_atomic" | ||
| echo -e peer "4 -s 4\n8 -s 8" > "$ucx_inst_ptest/msg_atomic" |
There was a problem hiding this comment.
Does not look like a perftest option
| if [[ $word == */*:* ]]; then | ||
| device=${word#*/} | ||
| device=${device%%:*} | ||
| echo "$device" |
There was a problem hiding this comment.
Can we fail if cfg isn’t found? Missing cfg parses as empty, so the final check can pass without seeing any reconfiguration
There was a problem hiding this comment.
I have added a check so that a missing cfg print will fail.
|
|
||
| #define TL_RESOURCE_NAME_NONE "<none>" | ||
| #define TEST_PARAMS_ARGS "t:n:s:W:O:w:D:i:H:oSCIqM:r:E:T:d:x:A:BUem:a:R:lyzL:F:Y:" | ||
| #define TEST_PARAMS_ARGS \ |
There was a problem hiding this comment.
Requiring an argument for -e breaks existing perftest command lines..
There was a problem hiding this comment.
Yes. I have updated the places that run ucx_perftest with -e to use -e peer in test_jenkins.sh. Are there other places that needed to be updated? Or would you prefer an entirely new optional to set error mode failover?
There was a problem hiding this comment.
-e still requires an argument, breaking existing ucx_perftest -e command lines. Updating the in-tree call site does not preserve compatibility for external users.
There was a problem hiding this comment.
maybe implement like this:
- no
-e->none -e [none|peer|failover]where "empty" == "peer" for compatibility
There was a problem hiding this comment.
- no -e -> none
- -e [none|peer|failover] where "empty" == "peer" for compatibility
This approach makes sense and allows perftest to stay compatible with external users. But it doesn't map well to get_opt() handling which seems to either always expects an argument or never does. I'll think about how this approach can be implemented.
There was a problem hiding this comment.
We can use :: to allow an optional argument argument for the -e flag.
#define TEST_PARAMS_ARGS \
"t:n:s:W:O:w:D:i:H:oSCIqM:r:E:T:d:x:A:BUe::m:a:R:lyzL:F:Y:"
The :: implementation is a gnu libc extension that is not required by POSIX. It has the advantage of allowing -e with no argument to map to error handling mode peer. However, it requires merging the flag and the optional argument when an optional argument is used: -epeer or -efailover.
This seems a little awkward and different from the other argument parsing in ucx_perftest. If you think this is OK, let me know.
| ep_params.err_handler.cb = ucp_perf_test_err_handler; | ||
| ep_params.err_handler.arg = NULL; | ||
| ep_params.err_mode = UCP_ERR_HANDLING_MODE_PEER; | ||
| ep_params.err_mode = perf->params.ucp.err_mode; |
There was a problem hiding this comment.
Existing libperf callers set ERR_HANDLING without initializing the new field, so they now get NONE instead of PEER. Can we preserve PEER as the default?
There was a problem hiding this comment.
I think if existing libperf callers set ERR_HANDLING via -e flag with no following value, they will likely get a parser error. I am happy to update any tests that currently use -e to e peer. In order to preserve complete backwards compatibility, we could leave -e for error handling mode peer and use -f for failover mode. It seem more intituitive to me to use -e failover and -e peer instead of -e and -f. But let me know what you prefer.
There was a problem hiding this comment.
Existing direct libperf callers using UCX_PERF_TEST_FLAG_ERR_HANDLING still receive UCP_ERR_HANDLING_MODE_NONE when the new field is zero-initialized. Initializing it in the CLI path does not fix library callers..
Adds handling for detecting a missing protocol reconfiguration print in perftest stdout. Also removes the use of tee in when piping perftest stdout to a file.
| parse_active_devices() { | ||
| file=$1 | ||
| config_cnt=$2 | ||
| found=0 |
|
|
||
| #define TL_RESOURCE_NAME_NONE "<none>" | ||
| #define TEST_PARAMS_ARGS "t:n:s:W:O:w:D:i:H:oSCIqM:r:E:T:d:x:A:BUem:a:R:lyzL:F:Y:" | ||
| #define TEST_PARAMS_ARGS \ |
There was a problem hiding this comment.
-e still requires an argument, breaking existing ucx_perftest -e command lines. Updating the in-tree call site does not preserve compatibility for external users.
| ep_params.err_handler.cb = ucp_perf_test_err_handler; | ||
| ep_params.err_handler.arg = NULL; | ||
| ep_params.err_mode = UCP_ERR_HANDLING_MODE_PEER; | ||
| ep_params.err_mode = perf->params.ucp.err_mode; |
There was a problem hiding this comment.
Existing direct libperf callers using UCX_PERF_TEST_FLAG_ERR_HANDLING still receive UCP_ERR_HANDLING_MODE_NONE when the new field is zero-initialized. Initializing it in the CLI path does not fix library callers..
| ucp_perf_datatype_t recv_datatype; | ||
| size_t am_hdr_size; /* UCP Active Message header size | ||
| (not included in message size) */ | ||
| ucp_err_handling_mode_t err_mode; /* UCP endpoint error handling |
There was a problem hiding this comment.
minor: comment alignment
|
|
||
| #define TL_RESOURCE_NAME_NONE "<none>" | ||
| #define TEST_PARAMS_ARGS "t:n:s:W:O:w:D:i:H:oSCIqM:r:E:T:d:x:A:BUem:a:R:lyzL:F:Y:" | ||
| #define TEST_PARAMS_ARGS \ |
There was a problem hiding this comment.
maybe implement like this:
- no
-e->none -e [none|peer|failover]where "empty" == "peer" for compatibility
| printf(" peer - peer failure error handling\n"); | ||
| printf(" failover - lane failover error handling\n"); |
There was a problem hiding this comment.
I would extend with "none"
What?
Why?
Allows testing of UCX handling of lane failures.