35 #pragma clang diagnostic ignored "-Wunused-parameter"
40 #define FF32BIT (0xffffffff)
41 #define DEC_FACTOR ((1 << 16) - param[RTT_TEMPLATE_UPDATE_FACTOR])
42 #define CNP_DEC_FACTOR ((1 << 16) - 2 * param[RTT_TEMPLATE_UPDATE_FACTOR])
43 #define NACK_DEC_FACTOR ((1 << 16) - 5 * param[RTT_TEMPLATE_UPDATE_FACTOR])
44 #define ABORT_TIME (300000)
45 #define BW_MB_DEFAULT_FXP16 (BW_MB_DEFAULT << 16)
46 #define NP_RX_RATE_TH (58982)
47 #define HIGH_UTIL_THRESHOLD (55704)
48 #define HIGH_UTIL_DEC_FACTOR \
49 ((1 << 16) - 2 * param[RTT_TEMPLATE_UPDATE_FACTOR])
50 #define HIGH_UTIL_CNP_DEC_FACTOR \
51 ((1 << 16) - 4 * param[RTT_TEMPLATE_UPDATE_FACTOR])
53 #define HIGH_UTIL_NACK_DEC_FACTOR \
54 ((1 << 16) - 10 * param[RTT_TEMPLATE_UPDATE_FACTOR])
95 uint32_t param_num = 0;
96 uint32_t counter_num = 0;
180 uint8_t is_high_util,
181 uint32_t norm_np_rx_rate)
199 #ifdef DOCA_PCC_NP_RX_RATE
250 rtt_till_now += UINT32_MAX;
252 if (rtt_meas_psn == 0) {
267 results->
rate = cur_rate;
295 results->
rate = cur_rate;
306 #ifdef DOCA_PCC_NP_RX_RATE
308 uint32_t start_rtt = *((uint32_t *)(rtt_raw_data));
318 int32_t rtt = end_rtt - start_rtt;
326 #ifdef DOCA_PCC_SAMPLE_TX_BYTES
327 uint8_t is_high_tx_util =
330 uint8_t is_high_tx_util = 0;
333 #ifdef DOCA_PCC_NP_RX_RATE
334 uint32_t norm_np_rx_rate = (1 << 16);
335 uint32_t np_rx_bytes = *((uint32_t *)(rtt_raw_data + 4));
336 uint32_t delta_np_rx_bytes = np_rx_bytes - ccctx->last_np_rx_bytes;
337 if (ccctx->last_np_rx_bytes > np_rx_bytes) {
340 ccctx->last_np_rx_bytes = np_rx_bytes;
341 uint32_t delta_np_rx_256bytes = delta_np_rx_bytes >> 8;
343 uint32_t np_rx_bytes_timestamp_us = *((uint32_t *)(rtt_raw_data + 8));
344 uint32_t delta_np_rx_bytes_timestamp_us = np_rx_bytes_timestamp_us - ccctx->last_np_rx_bytes_timestamp_us;
345 if (ccctx->last_np_rx_bytes_timestamp_us > np_rx_bytes_timestamp_us) {
346 delta_np_rx_bytes_timestamp_us +=
FF32BIT;
348 ccctx->last_np_rx_bytes_timestamp_us = np_rx_bytes_timestamp_us;
351 uint32_t np_rx_rate =
358 uint32_t norm_np_rx_rate = (1 << 16);
361 cur_rate =
algorithm_core(ccctx, rtt, cur_rate, param, is_high_tx_util, norm_np_rx_rate);
365 results->
rate = cur_rate;
392 results->
rate = cur_rate;
412 results->
rate = cur_rate;
451 uint32_t ev_type = ev_attr.
ev_type;
452 uint32_t cur_rate = rtt_template_ctx->
cur_rate;
471 results->
rate = cur_rate;
478 const uint32_t *new_param_values,
485 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_STABLE FORCE_INLINE uint32_t doca_pcc_dev_get_rtt_req_recv_timestamp(doca_pcc_dev_event_t *event)
For RTT events only, the time when RTT request is received.
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 uint32_t doca_pcc_dev_get_rtt_req_send_timestamp(doca_pcc_dev_event_t *event)
For RTT events only, the time when RTT request is sent.
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
@ RTT_TEMPLATE_COUNTER_RTT_EVENT
@ RTT_TEMPLATE_COUNTER_NUM
@ RTT_TEMPLATE_COUNTER_TX_EVENT
static void rtt_template_handle_roce_rtt(doca_pcc_dev_event_t *event, uint32_t cur_rate, uint32_t *param, cc_ctxt_rtt_template_t *ccctx, doca_pcc_dev_results_t *results)
@ RTT_TEMPLATE_UPDATE_FACTOR
@ RTT_TEMPLATE_NEW_FLOW_RATE
#define HIGH_UTIL_DEC_FACTOR
const volatile char rtt_template_desc[]
#define BW_MB_DEFAULT_FXP16
#define HIGH_UTIL_NACK_DEC_FACTOR
void rtt_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)
static const volatile char rtt_template_param_min_rate_desc[]
static const volatile char rtt_template_counter_tx_desc[]
#define HIGH_UTIL_THRESHOLD
static void rtt_template_handle_roce_cnp(doca_pcc_dev_event_t *event, uint32_t cur_rate, cc_ctxt_rtt_template_t *ccctx, doca_pcc_dev_results_t *results)
static const volatile char rtt_template_param_ai_desc[]
static void rtt_template_handle_roce_nack(doca_pcc_dev_event_t *event, uint32_t cur_rate, cc_ctxt_rtt_template_t *ccctx, doca_pcc_dev_results_t *results)
static void rtt_template_handle_new_flow(doca_pcc_dev_event_t *event, uint32_t cur_rate, uint32_t *param, cc_ctxt_rtt_template_t *ccctx, doca_pcc_dev_results_t *results)
static void rtt_template_handle_roce_tx(doca_pcc_dev_event_t *event, uint32_t cur_rate, cc_ctxt_rtt_template_t *ccctx, doca_pcc_dev_results_t *results)
static uint32_t algorithm_core(cc_ctxt_rtt_template_t *ccctx, uint32_t rtt, uint32_t cur_rate, uint32_t *param, uint8_t is_high_util, uint32_t norm_np_rx_rate)
doca_pcc_dev_error_t rtt_template_set_algo_params(uint32_t param_id_base, uint32_t param_num, const uint32_t *new_param_values, uint32_t *params)
enum @31 rtt_template_counter_t
static const volatile char rtt_template_counter_rtt_desc[]
static const volatile char rtt_template_param_update_factor_desc[]
static const volatile char rtt_template_param_max_delay_desc[]
#define HIGH_UTIL_CNP_DEC_FACTOR
static const volatile char rtt_template_param_base_rtt_desc[]
void rtt_template_init(uint32_t algo_idx)
static const volatile char rtt_template_param_new_flow_rate_desc[]
#define UPDATE_FACTOR_MAX
uint8_t rtt_req_to_rtt_sent
rtt_template_flags_t flags