38 #define MAX_UINT (0xffffffff)
39 #define DEC_FACTOR ((1 << 16) - param[TELEM_TEMPLATE_UPDATE_FACTOR])
40 #define CNP_DEC_FACTOR ((1 << 16) - 2 * param[TELEM_TEMPLATE_UPDATE_FACTOR])
41 #define NACK_DEC_FACTOR ((1 << 16) - 5 * param[TELEM_TEMPLATE_UPDATE_FACTOR])
42 #define ABORT_TIME (300000)
43 #define TX_RATE_TH (52428)
44 #define HIGH_UTIL_THRESHOLD (55704)
45 #define HIGH_UTIL_DEC_FACTOR \
46 ((1 << 16) - 2 * param[TELEM_TEMPLATE_UPDATE_FACTOR])
47 #define HIGH_UTIL_CNP_DEC_FACTOR \
48 ((1 << 16) - 4 * param[TELEM_TEMPLATE_UPDATE_FACTOR])
51 #define HIGH_UTIL_NACK_DEC_FACTOR \
52 ((1 << 16) - 10 * param[TELEM_TEMPLATE_UPDATE_FACTOR])
89 static inline uint32_t
getBW_GBps(uint32_t *param)
106 uint32_t param_num = 0;
107 uint32_t counter_num = 0;
185 static inline uint32_t
algorithm_core(uint32_t norm_tx_rate, uint32_t qlen_256B, uint32_t cur_rate, uint32_t *param)
236 rtt_till_now += UINT32_MAX;
238 if (rtt_meas_psn == 0) {
253 results->
rate = cur_rate;
281 results->
rate = cur_rate;
293 uint32_t switch_tx_bytes = *((uint32_t *)(rtt_raw_data + 4));
294 uint32_t switch_tx_timestamp = *((uint32_t *)(rtt_raw_data + 8));
295 uint32_t qlen_256B = telem_extra.
qlen;
304 uint32_t delta_timestamp_ns = switch_tx_timestamp - last_switch_tx_timestamp;
306 if (
unlikely(switch_tx_timestamp < last_switch_tx_timestamp))
308 uint32_t delta_tx = switch_tx_bytes - last_tx_bytes;
310 if (
unlikely(switch_tx_bytes < last_tx_bytes))
312 uint32_t delta_tx_256bytes = delta_tx >> 8;
316 if (norm_tx_rate > (1 << 16))
317 norm_tx_rate = (1 << 16);
318 cur_rate =
algorithm_core(norm_tx_rate, qlen_256B, cur_rate, param);
322 results->
rate = cur_rate;
350 results->
rate = cur_rate;
371 results->
rate = cur_rate;
411 uint32_t ev_type = ev_attr.
ev_type;
412 uint32_t cur_rate = telem_template_ctx->
cur_rate;
431 results->
rate = cur_rate;
438 const uint32_t *new_param_values,
444 if ((new_param_values ==
NULL) || (params ==
NULL))
doca_telemetry_exporter_timestamp_t timestamp
DOCA_STABLE doca_pcc_dev_error_t doca_pcc_dev_algo_init_counter(uint32_t algo_idx, uint32_t counter_id, uint32_t max_value, uint32_t permissions, uint32_t counter_desc_size, uint64_t counter_desc_addr)
Initialize a single counter for an algo.
DOCA_STABLE doca_pcc_dev_error_t doca_pcc_dev_algo_init_param(uint32_t algo_idx, uint32_t param_id, uint32_t default_value, uint32_t max_value, uint32_t min_value, uint32_t permissions, uint32_t param_desc_size, uint64_t param_desc_addr)
Initialize a single parameter for an algo.
DOCA_STABLE doca_pcc_dev_error_t doca_pcc_dev_algo_init_metadata(uint32_t algo_idx, const struct doca_pcc_dev_algo_meta_data *user_def, uint32_t param_num, uint32_t counter_num)
Initialize the algo database.
doca_pcc_dev_error_t
API functions return status.
@ DOCA_PCC_DEV_STATUS_FAIL
DOCA_EXPERIMENTAL FORCE_INLINE unsigned char * doca_pcc_dev_get_rtt_raw_data(doca_pcc_dev_event_t *event)
Returns the user defined event data.
DOCA_STABLE FORCE_INLINE doca_pcc_dev_event_general_attr_t doca_pcc_dev_get_ev_attr(doca_pcc_dev_event_t *event)
For all events, return structure with general information such as event type, subtype,...
DOCA_STABLE FORCE_INLINE uint32_t doca_pcc_dev_get_timestamp(doca_pcc_dev_event_t *event)
For all events, timestamp of this event.
#define doca_pcc_dev_mult(a, b)
mult wrapper
#define doca_pcc_dev_fxp_recip(a_fp)
fixed point 16b reciprocal
#define doca_pcc_dev_fxp_mult(a, b)
fixed point 16b mult
#define DOCA_PCC_DEV_TX_FLAG_RTT_REQ_SENT
TX Flag: RTT packet sent.
#define DOCA_PCC_DEV_MAX_RATE
Max rate in rate limiter fixed point.
@ DOCA_PCC_DEV_EVNT_ROCE_TX
@ DOCA_PCC_DEV_EVNT_ROCE_CNP
@ DOCA_PCC_DEV_EVNT_ROCE_NACK
#define UPDATE_FACTOR_MAX
telem_template_flags_t flags
uint32_t last_switch_tx_timestamp
uint8_t rtt_req_to_rtt_sent
static const volatile char telem_template_param_new_flow_rate_desc[]
static uint32_t algorithm_core(uint32_t norm_tx_rate, uint32_t qlen_256B, uint32_t cur_rate, uint32_t *param)
static const volatile char telem_template_param_max_delay_desc[]
static void telem_template_handle_roce_tx(doca_pcc_dev_event_t *event, uint32_t cur_rate, cc_ctxt_telem_template_t *ccctx, doca_pcc_dev_results_t *results)
static void telem_template_handle_roce_nack(doca_pcc_dev_event_t *event, uint32_t cur_rate, cc_ctxt_telem_template_t *ccctx, doca_pcc_dev_results_t *results)
static const volatile char telem_template_counter_tx_desc[]
@ TELEM_TEMPLATE_COUNTER_NUM
@ TELEM_TEMPLATE_COUNTER_RTT_EVENT
@ TELEM_TEMPLATE_COUNTER_TX_EVENT
enum @32 telem_template_counter_t
static void telem_template_handle_roce_cnp(doca_pcc_dev_event_t *event, uint32_t cur_rate, cc_ctxt_telem_template_t *ccctx, doca_pcc_dev_results_t *results)
static const volatile char telem_template_param_ai_desc[]
@ TELEM_TEMPLATE_BASE_QLEN
@ TELEM_TEMPLATE_UPDATE_FACTOR
@ TELEM_TEMPLATE_MAX_DELAY
@ TELEM_TEMPLATE_MIN_RATE
@ TELEM_TEMPLATE_PORT_BW_G
@ TELEM_TEMPLATE_PARAM_NUM
@ TELEM_TEMPLATE_NEW_FLOW_RATE
static const volatile char telem_template_param_update_factor_desc[]
static const volatile char telem_template_param_min_rate_desc[]
void telem_template_algo(doca_pcc_dev_event_t *event, uint32_t *param, uint32_t *counter, doca_pcc_dev_algo_ctxt_t *algo_ctxt, doca_pcc_dev_results_t *results)
doca_pcc_dev_error_t telem_template_set_algo_params(uint32_t param_id_base, uint32_t param_num, const uint32_t *new_param_values, uint32_t *params)
static const volatile char telem_template_counter_rtt_desc[]
static void telem_template_handle_new_flow(doca_pcc_dev_event_t *event, uint32_t cur_rate, uint32_t *param, cc_ctxt_telem_template_t *ccctx, doca_pcc_dev_results_t *results)
static uint32_t getBW_GBps(uint32_t *param)
Get the BW in GBps.
const volatile char telem_template_desc[]
static const volatile char telem_template_param_base_rtt_desc[]
void telem_template_init(uint32_t algo_idx)
static void telem_template_handle_roce_rtt(doca_pcc_dev_event_t *event, uint32_t cur_rate, uint32_t *param, cc_ctxt_telem_template_t *ccctx, doca_pcc_dev_results_t *results)