#include <stdint.h>
#include <rte_random.h>
#include <rte_debug.h>
#include <rte_cycles.h>
Go to the source code of this file.
|
int | rte_pie_rt_data_init (struct rte_pie *pie) |
| Initialises run-time data.
|
|
int | rte_pie_config_init (struct rte_pie_config *pie_cfg, const uint16_t qdelay_ref, const uint16_t dp_update_interval, const uint16_t max_burst, const uint16_t tailq_th) |
| Configures a single PIE configuration parameter structure.
|
|
static int | rte_pie_enqueue_empty (const struct rte_pie_config *pie_cfg, struct rte_pie *pie, uint32_t pkt_len) |
| Decides packet enqueue when queue is empty.
|
|
static void | _calc_drop_probability (const struct rte_pie_config *pie_cfg, struct rte_pie *pie, uint64_t time) |
| make a decision to drop or enqueue a packet based on probability criteria
|
|
static int | _rte_pie_drop (const struct rte_pie_config *pie_cfg, struct rte_pie *pie) |
| make a decision to drop or enqueue a packet based on probability criteria
|
|
static int | rte_pie_enqueue_nonempty (const struct rte_pie_config *pie_cfg, struct rte_pie *pie, uint32_t pkt_len, const uint64_t time) |
| Decides if new packet should be enqueued or dropped for non-empty queue.
|
|
static int | rte_pie_enqueue (const struct rte_pie_config *pie_cfg, struct rte_pie *pie, const unsigned int qlen, uint32_t pkt_len, const uint64_t time) |
| Decides if new packet should be enqueued or dropped Updates run time data and gives verdict whether to enqueue or drop the packet.
|
|
static void | rte_pie_dequeue (struct rte_pie *pie, uint32_t pkt_len, uint64_t time) |
| PIE rate estimation method Called on each packet departure.
|
|
Proportional Integral controller Enhanced (PIE)
Definition in file rte_pie.h.
◆ RTE_DQ_THRESHOLD
#define RTE_DQ_THRESHOLD 16384 |
Queue length threshold (2^14) to start measurement cycle (bytes)
Definition at line 25 of file rte_pie.h.
◆ RTE_DQ_WEIGHT
#define RTE_DQ_WEIGHT 0.25 |
Weight (RTE_DQ_THRESHOLD/2^16) to compute dequeue rate
Definition at line 26 of file rte_pie.h.
◆ RTE_ALPHA
Weights in drop probability calculations
Definition at line 27 of file rte_pie.h.
◆ RTE_BETA
Weights in drop probability calculations
Definition at line 28 of file rte_pie.h.
◆ RTE_RAND_MAX
#define RTE_RAND_MAX ~0LLU |
Max value of the random number
Definition at line 29 of file rte_pie.h.
◆ rte_pie_rt_data_init()
int rte_pie_rt_data_init |
( |
struct rte_pie * |
pie | ) |
|
Initialises run-time data.
- Parameters
-
pie | [in,out] data pointer to PIE runtime data |
- Returns
- Operation status
- Return values
-
◆ rte_pie_config_init()
int rte_pie_config_init |
( |
struct rte_pie_config * |
pie_cfg, |
|
|
const uint16_t |
qdelay_ref, |
|
|
const uint16_t |
dp_update_interval, |
|
|
const uint16_t |
max_burst, |
|
|
const uint16_t |
tailq_th |
|
) |
| |
Configures a single PIE configuration parameter structure.
- Parameters
-
pie_cfg | [in,out] config pointer to a PIE configuration parameter structure |
qdelay_ref | [in] latency target(milliseconds) |
dp_update_interval | [in] update interval for drop probability (milliseconds) |
max_burst | [in] maximum burst allowance (milliseconds) |
tailq_th | [in] tail drop threshold for the queue (number of packets) |
- Returns
- Operation status
- Return values
-
◆ rte_pie_enqueue_empty()
static int rte_pie_enqueue_empty |
( |
const struct rte_pie_config * |
pie_cfg, |
|
|
struct rte_pie * |
pie, |
|
|
uint32_t |
pkt_len |
|
) |
| |
|
static |
Decides packet enqueue when queue is empty.
Note: packet is never dropped in this particular case.
- Parameters
-
pie_cfg | [in] config pointer to a PIE configuration parameter structure |
pie | [in, out] data pointer to PIE runtime data |
pkt_len | [in] packet length in bytes |
- Returns
- Operation status
- Return values
-
0 | enqueue the packet |
!0 | drop the packet |
If the queue has been idle for a while, turn off PIE and Reset counters
Definition at line 116 of file rte_pie.h.
◆ _calc_drop_probability()
static void _calc_drop_probability |
( |
const struct rte_pie_config * |
pie_cfg, |
|
|
struct rte_pie * |
pie, |
|
|
uint64_t |
time |
|
) |
| |
|
static |
make a decision to drop or enqueue a packet based on probability criteria
- Parameters
-
pie_cfg | [in] config pointer to a PIE configuration parameter structure |
pie | [in, out] data pointer to PIE runtime data |
time | [in] current time (measured in cpu cycles) |
Definition at line 147 of file rte_pie.h.
◆ _rte_pie_drop()
make a decision to drop or enqueue a packet based on probability criteria
- Parameters
-
pie_cfg | [in] config pointer to a PIE configuration parameter structure |
pie | [in, out] data pointer to PIE runtime data |
- Returns
- operation status
- Return values
-
0 | enqueue the packet |
1 | drop the packet |
Definition at line 210 of file rte_pie.h.
◆ rte_pie_enqueue_nonempty()
static int rte_pie_enqueue_nonempty |
( |
const struct rte_pie_config * |
pie_cfg, |
|
|
struct rte_pie * |
pie, |
|
|
uint32_t |
pkt_len, |
|
|
const uint64_t |
time |
|
) |
| |
|
inlinestatic |
Decides if new packet should be enqueued or dropped for non-empty queue.
- Parameters
-
pie_cfg | [in] config pointer to a PIE configuration parameter structure |
pie | [in,out] data pointer to PIE runtime data |
pkt_len | [in] packet length in bytes |
time | [in] current time (measured in cpu cycles) |
- Returns
- Operation status
- Return values
-
0 | enqueue the packet |
1 | drop the packet based on max threshold criterion |
2 | drop the packet based on mark probability criterion |
Definition at line 258 of file rte_pie.h.
◆ rte_pie_enqueue()
static int rte_pie_enqueue |
( |
const struct rte_pie_config * |
pie_cfg, |
|
|
struct rte_pie * |
pie, |
|
|
const unsigned int |
qlen, |
|
|
uint32_t |
pkt_len, |
|
|
const uint64_t |
time |
|
) |
| |
|
inlinestatic |
Decides if new packet should be enqueued or dropped Updates run time data and gives verdict whether to enqueue or drop the packet.
- Parameters
-
pie_cfg | [in] config pointer to a PIE configuration parameter structure |
pie | [in,out] data pointer to PIE runtime data |
qlen | [in] queue length |
pkt_len | [in] packet length in bytes |
time | [in] current time stamp (measured in cpu cycles) |
- Returns
- Operation status
- Return values
-
0 | enqueue the packet |
1 | drop the packet based on drop probability criteria |
Definition at line 325 of file rte_pie.h.
◆ rte_pie_dequeue()
static void rte_pie_dequeue |
( |
struct rte_pie * |
pie, |
|
|
uint32_t |
pkt_len, |
|
|
uint64_t |
time |
|
) |
| |
|
inlinestatic |
PIE rate estimation method Called on each packet departure.
- Parameters
-
pie | [in] data pointer to PIE runtime data |
pkt_len | [in] packet length in bytes |
time | [in] current time stamp in cpu cycles |
Definition at line 349 of file rte_pie.h.