class Simple

Defined at line 1335 of file fidling/gen/sdk/fidl/fuchsia.hardware.network.driver/fuchsia.hardware.network.driver/cpp/fidl/fuchsia.hardware.network.driver/cpp/natural_types.h

Public Methods

void Simple (Storage_ storage)
void Simple (double alpha, int64_t delay_budget, uint16_t intercept, int64_t sample_interval, double variance_threshold)
void Simple ()

Default constructs a |Simple| only if all of its members are default constructible.

Defined at line 1345 of file fidling/gen/sdk/fidl/fuchsia.hardware.network.driver/fuchsia.hardware.network.driver/cpp/fidl/fuchsia.hardware.network.driver/cpp/natural_types.h

void Simple (Simple && )

Defined at line 1348 of file fidling/gen/sdk/fidl/fuchsia.hardware.network.driver/fuchsia.hardware.network.driver/cpp/fidl/fuchsia.hardware.network.driver/cpp/natural_types.h

void Simple (const Simple & other)
int64_t delay_budget ()

Wait time budget at the driver.

This is equivalent to W in Little's Law. More practically, this is an

upper bound for the average time buffers spend waiting in the queue

of the device impl before they are processed by the device interface.

Guidance for driver implementors:

1. If your driver uses a interrupt coalescing timeout, then this W should

just be that or slightly larger to account for the processing time.

2. If your driver does not use moderation, this value can be tuned:

a starting point would be to use (bit rate, MTU, Rx depth) to derive

a W under maximum pressure. As a reference (1Gbps, 1500, 256) leads to

a W of 3.0 ms (256 / (10**9 / 8 / 1500) seconds). It will make little

sense to go any bigger than that and you can decrease it and monitor

for packet drops. You can compare the value against common interrupt

coalescing configurations for reference.

Defaults to server-assigned value if zero.

int64_t & delay_budget ()

Wait time budget at the driver.

This is equivalent to W in Little's Law. More practically, this is an

upper bound for the average time buffers spend waiting in the queue

of the device impl before they are processed by the device interface.

Guidance for driver implementors:

1. If your driver uses a interrupt coalescing timeout, then this W should

just be that or slightly larger to account for the processing time.

2. If your driver does not use moderation, this value can be tuned:

a starting point would be to use (bit rate, MTU, Rx depth) to derive

a W under maximum pressure. As a reference (1Gbps, 1500, 256) leads to

a W of 3.0 ms (256 / (10**9 / 8 / 1500) seconds). It will make little

sense to go any bigger than that and you can decrease it and monitor

for packet drops. You can compare the value against common interrupt

coalescing configurations for reference.

Defaults to server-assigned value if zero.

Simple & delay_budget (int64_t value)

Wait time budget at the driver.

This is equivalent to W in Little's Law. More practically, this is an

upper bound for the average time buffers spend waiting in the queue

of the device impl before they are processed by the device interface.

Guidance for driver implementors:

1. If your driver uses a interrupt coalescing timeout, then this W should

just be that or slightly larger to account for the processing time.

2. If your driver does not use moderation, this value can be tuned:

a starting point would be to use (bit rate, MTU, Rx depth) to derive

a W under maximum pressure. As a reference (1Gbps, 1500, 256) leads to

a W of 3.0 ms (256 / (10**9 / 8 / 1500) seconds). It will make little

sense to go any bigger than that and you can decrease it and monitor

for packet drops. You can compare the value against common interrupt

coalescing configurations for reference.

Defaults to server-assigned value if zero.

uint16_t intercept ()

Number of Rx buffers the device holds regardless of the arrival

rate.

This is the constant offset (`intercept` in

`L = lambda * W + intercept`). `delay_budget` only accounts for

buffers that are in flight because of queueing delay; it cannot

account for buffers a device parks for structural reasons, such as

keeping a fixed size hardware descriptor ring filled or letting

firmware hold a reserve of host buffers. Those buffers are never

returned to the device interface, no matter how slow the traffic is,

so they must be accounted for separately.

Guidance for driver implementors: set this to the number of buffers

the device can hold without completing them. Leaving it at zero

while the device parks buffers will starve the device until

`min_rx_buffers` covers the shortfall.

Note that this is distinct from

[`fuchsia.hardware.network.driver/DeviceImplInfo.min_rx_buffers`],

which is a floor applied to the final target. A floor keeps the

target flat until the rate dependent term grows past it, whereas

`intercept` shifts the whole curve up.

uint16_t & intercept ()

Number of Rx buffers the device holds regardless of the arrival

rate.

This is the constant offset (`intercept` in

`L = lambda * W + intercept`). `delay_budget` only accounts for

buffers that are in flight because of queueing delay; it cannot

account for buffers a device parks for structural reasons, such as

keeping a fixed size hardware descriptor ring filled or letting

firmware hold a reserve of host buffers. Those buffers are never

returned to the device interface, no matter how slow the traffic is,

so they must be accounted for separately.

Guidance for driver implementors: set this to the number of buffers

the device can hold without completing them. Leaving it at zero

while the device parks buffers will starve the device until

`min_rx_buffers` covers the shortfall.

Note that this is distinct from

[`fuchsia.hardware.network.driver/DeviceImplInfo.min_rx_buffers`],

which is a floor applied to the final target. A floor keeps the

target flat until the rate dependent term grows past it, whereas

`intercept` shifts the whole curve up.

Simple & intercept (uint16_t value)

Number of Rx buffers the device holds regardless of the arrival

rate.

This is the constant offset (`intercept` in

`L = lambda * W + intercept`). `delay_budget` only accounts for

buffers that are in flight because of queueing delay; it cannot

account for buffers a device parks for structural reasons, such as

keeping a fixed size hardware descriptor ring filled or letting

firmware hold a reserve of host buffers. Those buffers are never

returned to the device interface, no matter how slow the traffic is,

so they must be accounted for separately.

Guidance for driver implementors: set this to the number of buffers

the device can hold without completing them. Leaving it at zero

while the device parks buffers will starve the device until

`min_rx_buffers` covers the shortfall.

Note that this is distinct from

[`fuchsia.hardware.network.driver/DeviceImplInfo.min_rx_buffers`],

which is a floor applied to the final target. A floor keeps the

target flat until the rate dependent term grows past it, whereas

`intercept` shifts the whole curve up.

Simple & operator= (Simple && )

Defined at line 1349 of file fidling/gen/sdk/fidl/fuchsia.hardware.network.driver/fuchsia.hardware.network.driver/cpp/fidl/fuchsia.hardware.network.driver/cpp/natural_types.h

Simple & operator= (const Simple & other)
bool operator== (const Simple & other)
bool operator!= (const Simple & other)
double alpha ()

This is used to calculate the arrival rate:

`Rate_n = alpha * Sample_n + (1 - alpha) * Rate_(n-1)`

The bigger this value, the more sensitive it is to the latest sample.

Must be in the range (0, 1]. Defaults to server-assigned value if

zero.

double & alpha ()

This is used to calculate the arrival rate:

`Rate_n = alpha * Sample_n + (1 - alpha) * Rate_(n-1)`

The bigger this value, the more sensitive it is to the latest sample.

Must be in the range (0, 1]. Defaults to server-assigned value if

zero.

Simple & alpha (double value)

This is used to calculate the arrival rate:

`Rate_n = alpha * Sample_n + (1 - alpha) * Rate_(n-1)`

The bigger this value, the more sensitive it is to the latest sample.

Must be in the range (0, 1]. Defaults to server-assigned value if

zero.

int64_t sample_interval ()

The sampling interval for estimating packet arrival rate.

Determines how frequently the arrival rate is sampled and updated.

Defaults to server-assigned value if zero.

int64_t & sample_interval ()

The sampling interval for estimating packet arrival rate.

Determines how frequently the arrival rate is sampled and updated.

Defaults to server-assigned value if zero.

Simple & sample_interval (int64_t value)

The sampling interval for estimating packet arrival rate.

Determines how frequently the arrival rate is sampled and updated.

Defaults to server-assigned value if zero.

double variance_threshold ()

The multiple of variance to consider when triggering immediate

buffer requests.

When the current packet arrival rate exceeds the average arrival

rate by more than `variance_threshold` times the variance, the

queue will immediately request additional buffers.

Must be positive. Defaults to server-assigned value if zero.

double & variance_threshold ()

The multiple of variance to consider when triggering immediate

buffer requests.

When the current packet arrival rate exceeds the average arrival

rate by more than `variance_threshold` times the variance, the

queue will immediately request additional buffers.

Must be positive. Defaults to server-assigned value if zero.

Simple & variance_threshold (double value)

The multiple of variance to consider when triggering immediate

buffer requests.

When the current packet arrival rate exceeds the average arrival

rate by more than `variance_threshold` times the variance, the

queue will immediately request additional buffers.

Must be positive. Defaults to server-assigned value if zero.

void Simple (::fidl::internal::DefaultConstructPossiblyInvalidObjectTag )

Friends

class MemberVisitor
class NaturalStructCodingTraits