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/API: Support endpoint performance evaluation #6403

Merged
merged 1 commit into from
May 11, 2021

Conversation

gleon99
Copy link
Contributor

@gleon99 gleon99 commented Feb 25, 2021

What

Support querying performance of an endpoint, by message length and operation type.
At the first stage, a constant bandwidth is returned, regardless of the given params.
In the future, more precise bandwidth calculation will be implemented.

Why ?

Allow users to retrieve bandwidth information per-endpoint.

*
* This enumeration defines all available UCP operations.
*/
typedef enum ucp_ep_op {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Maybe using ucp_feature would be appropriate here, instead of creating a new enum? Unsure about that..

Copy link
Contributor

Choose a reason for hiding this comment

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

let's use ucp_ep_operation_t

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Are you sure?
My logic was to be consistent with types like ucp_op_attr_t, ucp_atomic_fetch_op_t, etc. - which use _op_ and not _operation_.

Copy link
Contributor

Choose a reason for hiding this comment

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

ok 👍

Copy link
Contributor

Choose a reason for hiding this comment

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

@gleon99 maybe rename to ucp_ep_op_type_t
UCP_OP_TYPE_TAG
and
ucp_ep_op_type_t op_type in the struct?

because TAG is {tag_send,tag_send_sync}; RMA is {put,get} - each value is >1 specific op

* This enumeration defines all available UCP operations.
*/
typedef enum ucp_ep_op {
UCP_OP_TAG, /**< Tag matching */
Copy link
Contributor

Choose a reason for hiding this comment

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

UCP_OPERATION_TAG

Comment on lines 370 to 371
UCP_OP_AMO32, /**< 32-bit atomic operations */
UCP_OP_AMO64 /**< 64-bit atomic operations */
Copy link
Contributor

Choose a reason for hiding this comment

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

UCP_OPERATION_ATOMIC

*/
enum ucp_ep_perf_attr_field {
/** Enables @ref ucp_ep_perf_attr_t::message_size */
UCP_EP_ATTR_FIELD_MESSAGE_SIZE = UCS_BIT(0),
Copy link
Contributor

Choose a reason for hiding this comment

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

UCP_EP_PERF_ATTR_FIELD_MESSAGE_SIZE


/** Enables @ref ucp_ep_perf_attr_t::bandwidth */
UCP_EP_ATTR_FIELD_BANDWIDTH = UCS_BIT(4)
};
Copy link
Contributor

Choose a reason for hiding this comment

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

ucp_ep_perf_attr_field_t

*
* This enumeration defines all available UCP operations.
*/
typedef enum ucp_ep_op {
Copy link
Contributor

Choose a reason for hiding this comment

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

let's use ucp_ep_operation_t

Comment on lines 1257 to 1261
/**
* Bandwidth this endpoint is able to provide.
* This field is set by the UCP layer.
*/
double bandwidth;
Copy link
Contributor

Choose a reason for hiding this comment

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

instead of bandwidth: we can provide estimated to deliver the message
this will encompass both bw and latency
user can calc size/time to get bw

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Do you mean a time estimate (i.e bw / size) ?

@gleon99
Copy link
Contributor Author

gleon99 commented Mar 2, 2021

@yosefe , fixed CR comments.

uct_ep_op_t operation;

/**
* Estimated time required to send a message of a given size on this endpoint.
Copy link
Contributor

Choose a reason for hiding this comment

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

pls add time is in seconds

Comment on lines 342 to 345
iface_attr = ucp_worker_iface_get_attr(worker, max_bandwidth_rsc_index);
attr->estimated_time = ucp_tl_iface_latency(context,
&iface_attr->latency) +
attr->message_size / max_bandwidth;
Copy link
Contributor

Choose a reason for hiding this comment

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

pls beautify (use local var, indent, etc)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added local vars.

Comment on lines 331 to 334
rsc_index = key->lanes[lane].rsc_index;
wiface = worker->ifaces[rsc_index];
bandwidth = ucp_tl_iface_bandwidth(context,
&wiface->attr.bandwidth);
Copy link
Contributor

Choose a reason for hiding this comment

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

weird indent

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Why? The indent is on the first char after the (.

Copy link
Contributor

Choose a reason for hiding this comment

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

i mean, too many spaces before =

attr.message_size = 1000;
result = ucp_ep_perf_query(ep, &attr);
EXPECT_EQ(result, UCS_OK);
EXPECT_GT(attr.estimated_time, 0);
Copy link
Contributor

Choose a reason for hiding this comment

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

EXPECT_LT(attr.estimated_time, 30);

UCP_OP_RMA, /**< Remote memory access */
UCP_OP_AMO32, /**< 32-bit atomic operations */
UCP_OP_AMO64 /**< 64-bit atomic operations */
} uct_ep_op_t;
Copy link
Contributor

Choose a reason for hiding this comment

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

STREAM is missing here

*
* @return Error code as defined by @ref ucs_status_t
*/
ucs_status_t ucp_ep_perf_query(ucp_ep_h ep, ucp_ep_perf_attr_t *attr);
Copy link
Contributor

Choose a reason for hiding this comment

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

maybe use ucp_ep_query name to be able to extend this in the future? Otherwise we will have to introduce new call if want to query non-perf attrs

Copy link
Contributor

Choose a reason for hiding this comment

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

I agree. we already made some plans to query an ep for the client-server case to retrieve an ep's local connected sockaddr and the remote sockaddr it's connected to.
if we dont use ucp_ep_query now, we would need to have different functions to querying different ep attrs.

Copy link
Contributor

@yosefe yosefe Mar 3, 2021

Choose a reason for hiding this comment

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

There is a difference between ucp_ep_query and ucp_ep_perf_query: in perf_query, the user would pass input parameters (memory types, length, operation) for which the performance should be retrieved.
IMO it would be weird to mix those input parameters along with general ep query, and better have 2 separate functions.

Copy link
Contributor

Choose a reason for hiding this comment

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

then maybe avoid using 'query' in the name here?
you dont think it can be confusing for a user to have 2 ucp ep API querying functions? ucp_ep_query and ucp_ep_perf_query

Copy link
Contributor

Choose a reason for hiding this comment

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

the user would pass input parameters (memory types, length, operation) for which the performance should be retrieved.

maybe use struct to combine them?

Copy link
Contributor

Choose a reason for hiding this comment

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

maybe use struct to combine them?

That struct will also need to have field mask

then maybe avoid using 'query' in the name here?

agree it would be better, unfortunately I can't thing of a good name, maybe something like ucp_ep_estimate_perf or ucp_ep_eval_perf ?

ucp_ep_calc_perf?
ucp_ep_eval_perf sounds good to me.

Copy link
Contributor

Choose a reason for hiding this comment

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

@gleon99 WDYT about ucp_ep_eval_perf?
i think we should sync the UCT API with same name as we decide here

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sounds good. Maybe ucp_ep_estimate_perf? "estimation" is perhaps more accurate here, as the function estimates performance and returns an estimate, rather than evaluating it. But I'm ok with _eval_ as well.

Copy link
Contributor

Choose a reason for hiding this comment

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

ok, let's use estimate

Copy link
Contributor

Choose a reason for hiding this comment

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

@yosefe let's discuss offline. This does look like a query interface and I'm still not sure why want separate perf API. I do think it is the right functionality to have we just need to flush out the API

Comment on lines 320 to 321
ucp_rsc_index_t rsc_index = 0, max_bandwidth_rsc_index = 0;
double bandwidth = 0, max_bandwidth = 0;
Copy link
Contributor

Choose a reason for hiding this comment

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

plz moved initialized vars to the very beginning of the func

Comment on lines 1230 to 1255
uint64_t field_mask;

/**
* Message size to use for determining performance.
* This field must be initialized by the caller.
*/
size_t message_size;

/**
* Local memory type to use for determining performance.
* This field must be initialized by the caller.
*/
ucs_memory_type_t local_memory_type;

/**
* Remote memory type to use for determining performance.
* Relevant only for operations that have remote memory access.
* This field must be initialized by the caller.
*/
ucs_memory_type_t remote_memory_type;

/**
* Operation to report performance for.
* This field must be initialized by the caller.
*/
uct_ep_op_t operation;
Copy link
Contributor

Choose a reason for hiding this comment

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

what is required to be set to get estimated_time? Can i omit some or all input params? What would UCX use then?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

At the first phase (current implementation), only message_size is used for time calculation. {local,remote}_message_size and operation are here just for future compatibility, but actually they can be safely removed here and added back in a later commit, when their values would really be used.

@yosefe - shall I explicitly mention that in code comments, or remove these vars at all?

Copy link
Contributor

Choose a reason for hiding this comment

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

i think defaults are worth mentioning for the optional fields

Copy link
Contributor

Choose a reason for hiding this comment

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

Since this is in/out structure, it is really challenging to figure out what is input and what is output.

Copy link
Contributor

@shamisp shamisp Mar 7, 2021

Choose a reason for hiding this comment

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

Since this is extendable, I would suggest to remove what is not going to be implemented in a near term (before next release) and we will add as it is gets implemented. This way it also aligns better with your gtest, which tests only the message size.

Copy link
Contributor

Choose a reason for hiding this comment

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

so this means - keep only message size (input) and time (output) for now

@@ -368,7 +368,8 @@ typedef enum ucp_ep_op {
UCP_OP_AM, /**< Active messge */
UCP_OP_RMA, /**< Remote memory access */
UCP_OP_AMO32, /**< 32-bit atomic operations */
UCP_OP_AMO64 /**< 64-bit atomic operations */
UCP_OP_AMO64, /**< 64-bit atomic operations */
Copy link
Contributor

Choose a reason for hiding this comment

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

we should have only ATOMIC, not AMO32/64
since there is a "size" field

ucp_lane_index_t lane;
ucp_worker_iface_t *wiface;
uct_iface_attr_t *iface_attr;
ucp_rsc_index_t rsc_index = 0, max_bandwidth_rsc_index = 0;
double bandwidth = 0, max_bandwidth = 0;
double constant_estimated_time, variable_estimated_time;
Copy link
Contributor

Choose a reason for hiding this comment

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

maybe can use ucs_linear_func_t

Comment on lines 317 to 318
double bandwidth = 0, max_bandwidth = 0;
ucp_rsc_index_t rsc_index = 0, max_bandwidth_rsc_index = 0;
Copy link
Contributor

Choose a reason for hiding this comment

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

do we really need to initialize all of these?

@gleon99
Copy link
Contributor Author

gleon99 commented Mar 7, 2021

bot:pipe:retest

*
* @return Error code as defined by @ref ucs_status_t
*/
ucs_status_t ucp_ep_estimate_perf(ucp_ep_h ep, ucp_ep_perf_attr_t *attr);
Copy link
Contributor

Choose a reason for hiding this comment

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

Why limit the query just for performance ?

Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor

Choose a reason for hiding this comment

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

perf offline discussion with @shamisp, suggest to rename this API to ucp_ep_assess_perf.
@tonycurtis WDYT?

Copy link
Contributor

Choose a reason for hiding this comment

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

My first thought was "eval" might be better, and that's already been suggested.

(The comment needs updating too if that's not a W.I.P. and you could put "estimate" there if you think it would be helpful)

Copy link
Contributor

Choose a reason for hiding this comment

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

@shamisp are you ok with ucp_ep_evaluate_perf?

Copy link
Contributor

Choose a reason for hiding this comment

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

👍

Copy link
Contributor

Choose a reason for hiding this comment

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

@gleon99 can you pls rename (and docs, if needed) to ucp_ep_evaluate_perf?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@yosefe , done

@gleon99
Copy link
Contributor Author

gleon99 commented Mar 10, 2021

@yosefe , is this one still blocked?

@yosefe
Copy link
Contributor

yosefe commented Mar 10, 2021

@shamisp can you pls take a look?

@yosefe yosefe added the API label Mar 15, 2021
Copy link
Contributor

@yosefe yosefe left a comment

Choose a reason for hiding this comment

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

why added test/gtest/ucp/test_ucp_worker_query.cc ?

*
* This enumeration defines all available UCP operations.
*/
typedef enum ucp_ep_op {
Copy link
Contributor

Choose a reason for hiding this comment

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

@gleon99 maybe rename to ucp_ep_op_type_t
UCP_OP_TYPE_TAG
and
ucp_ep_op_type_t op_type in the struct?

because TAG is {tag_send,tag_send_sync}; RMA is {put,get} - each value is >1 specific op

src/ucp/api/ucp.h Outdated Show resolved Hide resolved
src/ucp/api/ucp.h Outdated Show resolved Hide resolved
src/ucp/api/ucp.h Outdated Show resolved Hide resolved
test/gtest/ucp/test_ucp_ep.cc Show resolved Hide resolved
@yosefe
Copy link
Contributor

yosefe commented Mar 19, 2021

bot:pipe:retest

@yosefe
Copy link
Contributor

yosefe commented Mar 25, 2021

@shamisp @tonycurtis can you pls take a look?

* @ingroup UCP_ENDPOINT
* @brief UCP performance endpoint attributes.
*
* The structure defines the attributes which characterize
Copy link
Contributor

Choose a reason for hiding this comment

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

which -> that

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed

@shamisp shamisp changed the title UCP/API: Support endpoint query UCP/API: Support endpoint performance evaluation Mar 25, 2021
UCP_OP_TYPE_RMA, /**< Remote memory access */
UCP_OP_TYPE_ATOMIC, /**< Atomic operations */
UCP_OP_TYPE_STREAM /**< Stream */
} ucp_ep_op_type_t;
Copy link
Contributor

Choose a reason for hiding this comment

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

Almost identical to

enum ucp_feature {

Copy link
Contributor

Choose a reason for hiding this comment

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

it's not exactly the same, and unfortunately we can't change UCP_FEATURE_xx, but on other hand it would not exactly fit perf query API

* on this endpoint.
* This field is set by the @ref ucp_ep_evaluate_perf function.
*/
double estimated_time;
Copy link
Contributor

Choose a reason for hiding this comment

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

@yosefe maybe we should separate in and out arg ? this looks a bit odd. There is also enable mask for this field. What happens if the enable bit is not set but the function is called ?

Copy link
Contributor

@yosefe yosefe Mar 25, 2021

Choose a reason for hiding this comment

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

What happens if the enable bit is not set but the function is called?

Then this field will not be written to by the function

@shamisp
Copy link
Contributor

shamisp commented Mar 25, 2021 via email

@yosefe
Copy link
Contributor

yosefe commented Mar 25, 2021

And if we add another [in] field we will have in/out fields interleaving each other.

It's possible, but IMO this is not a significant issue, but on the other hand - adding another structure and bitfield will add more "API burden". We are documenting for each field whether it's "in" or "out".

@tonycurtis which one do you think is better from user perspective: separate "in" and "out" structures with separate bitmasks, or put all in/out params in same struct?

@gleon99
Copy link
Contributor Author

gleon99 commented Apr 13, 2021

@tonycurtis , @shamisp - can comment please?

@tonycurtis
Copy link
Contributor

For clarity's sake, a const parameter with the request, and another parameter with the result does seem less potentially confusing.

@gleon99
Copy link
Contributor Author

gleon99 commented May 3, 2021

@yosefe - fixed according to @tonycurtis comment. Notice that I separated the args of ucp_ep_evaluate_perf to const ucp_ep_evaluate_perf_request_t *request, ucp_ep_evaluate_perf_result_t *result.

typedef enum ucp_ep_perf_attr_field {
/** Enables @ref ucp_ep_perf_attr_t::message_size */
UCP_EP_PERF_ATTR_FIELD_MESSAGE_SIZE = UCS_BIT(0),
typedef enum ucp_ep_perf_request_field {
Copy link
Contributor

Choose a reason for hiding this comment

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

for consistency, it should be
ucp_ep_perf_param_field - for input
ucp_ep_perf_attr_field - for output

@gleon99
Copy link
Contributor Author

gleon99 commented May 5, 2021

@yosefe , fixed request,result -> param,attr everywhere.

@gleon99
Copy link
Contributor Author

gleon99 commented May 5, 2021

@yosefe - squashed.

@yosefe
Copy link
Contributor

yosefe commented May 6, 2021

@tonycurtis @shamisp can you check again the latest version?

*/
typedef enum {
UCP_OP_TYPE_TAG, /**< Tag matching */
UCP_OP_TYPE_AM, /**< Active messge */
Copy link
Contributor

Choose a reason for hiding this comment

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

message

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed

* Local memory type to use for determining performance.
* This field must be initialized by the caller.
*/
ucs_memory_type_t local_memory_type;
Copy link
Contributor

Choose a reason for hiding this comment

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

the field is not user by the implementation and not tested by unit test. Why we introduce it now ?

Copy link
Contributor

Choose a reason for hiding this comment

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

We want to allow applications to pass more information to UCP, so future implementations of the UCX library will be able to make a more accurate performance estimation. IMO it is better than requiring application developers to keep updating their codes and pass additional parameters.

Copy link
Contributor

Choose a reason for hiding this comment

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

But we are ignoring this parameter and don't test it..I don't see why would anybody use it.

Copy link
Contributor

Choose a reason for hiding this comment

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

do you think it would be better to remove this from API until it's really implemented?

Copy link
Contributor

Choose a reason for hiding this comment

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

If we don't implement it and test it, it makes more sense to remove it. It can be easy added later on.

* Relevant only for operations that have remote memory access.
* This field must be initialized by the caller.
*/
ucs_memory_type_t remote_memory_type;
Copy link
Contributor

Choose a reason for hiding this comment

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

the field is not user by the implementation and not tested by unit test. Why we introduce it now ?

* Message size to use for determining performance.
* This field must be initialized by the caller.
*/
size_t message_size;
Copy link
Contributor

Choose a reason for hiding this comment

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

I have question about "must be initialized by the caller". Does caller must initialized the field or we can leave it empty (aka corresponding field_mask is not set?)

Copy link
Contributor

Choose a reason for hiding this comment

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

"must be initialized by the caller" means that the field must be initialized, and the corresponding field in field_mask should be set. Do we need to clarify it in the doc?

Copy link
Contributor

@shamisp shamisp May 6, 2021

Choose a reason for hiding this comment

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

Looking at implementation - if you don't set the field, it does not cause any failure. So it appears that you don't must to set the field, it just does not return any useful information.

Copy link
Contributor

Choose a reason for hiding this comment

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

you are right.
@gleon99 we need to fail with invalid param if message_size not passed

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed

* Operation type to report performance for.
* This field must be initialized by the caller.
*/
ucp_ep_op_type_t op_type;
Copy link
Contributor

Choose a reason for hiding this comment

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

the field is not user by the implementation and not tested by unit test. Why we introduce it now ?

@gleon99
Copy link
Contributor Author

gleon99 commented May 9, 2021

@yosefe , fixed.

@@ -376,7 +367,7 @@ typedef enum ucp_ep_perf_attr_field {
*/
typedef enum {
UCP_OP_TYPE_TAG, /**< Tag matching */
UCP_OP_TYPE_AM, /**< Active messge */
UCP_OP_TYPE_AM, /**< Active message */
Copy link
Contributor

Choose a reason for hiding this comment

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

we should probably remove this enum

@gleon99
Copy link
Contributor Author

gleon99 commented May 10, 2021

@yosefe , squashed.

@yosefe
Copy link
Contributor

yosefe commented May 10, 2021

@shamisp can you pls look again?

attr->estimated_time = estimated_time.c + estimated_time.m;
}

return UCS_OK;
Copy link
Contributor

Choose a reason for hiding this comment

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

@yosefe If UCP_EP_PERF_ATTR_FIELD_ESTIMATED_TIME and UCP_EP_PERF_PARAM_FIELD_MESSAGE_SIZE are not set, shell we return UCS_ERR_INVALID_PARAM ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@shamisp , done.

/* Skip CM lanes for banwidth calculation */
continue;
}
if (!(attr->field_mask & UCP_EP_PERF_ATTR_FIELD_ESTIMATED_TIME) ||
Copy link
Contributor

Choose a reason for hiding this comment

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

minor: can use ucs_test_all_flags

Comment on lines 349 to 354
ucs_assert(max_bandwidth > 0);
iface_attr = ucp_worker_iface_get_attr(worker, max_bandwidth_rsc_index);
estimated_time.c = ucp_tl_iface_latency(context, &iface_attr->latency);
estimated_time.m = param->message_size / max_bandwidth;
attr->estimated_time = estimated_time.c + estimated_time.m;
Copy link
Contributor

Choose a reason for hiding this comment

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

  1. maybe remove assert?
  2. indent = on column

@gleon99
Copy link
Contributor Author

gleon99 commented May 11, 2021

@yosefe , fixed.

@gleon99
Copy link
Contributor Author

gleon99 commented May 11, 2021

@yosefe , squashed.

@yosefe
Copy link
Contributor

yosefe commented May 11, 2021

bot:pipe:retest

@yosefe yosefe merged commit 9abf1fc into openucx:master May 11, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants