DynamicQueueLimits would be used in conjunction with a producer/consumer type queue (possibly a netdevice queue). More...
#include "dynamic-queue-limits.h"
Public Member Functions | |
DynamicQueueLimits () | |
~DynamicQueueLimits () override | |
int32_t | Available () const override |
Available is called from NotifyTransmittedBytes to calculate the number of bytes that can be passed again to the NetDevice. More... | |
void | Completed (uint32_t count) override |
Record number of completed bytes and recalculate the limit. More... | |
void | Queued (uint32_t count) override |
Record the number of bytes queued. More... | |
void | Reset () override |
Reset queue limits state. More... | |
Public Member Functions inherited from ns3::QueueLimits | |
~QueueLimits () override | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
~Object () override | |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose () |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. More... | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. More... | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. More... | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized () const |
Check if the object has been initialized. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::QueueLimits | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Private Member Functions | |
int32_t | Posdiff (int32_t a, int32_t b) |
Calculates the difference between the two operators and returns the number if positive, zero otherwise. More... | |
Private Attributes | |
uint32_t | m_adjLimit {0} |
limit + num_completed More... | |
uint32_t | m_lastObjCnt {0} |
Count at last queuing. More... | |
TracedValue< uint32_t > | m_limit |
Current limit. More... | |
uint32_t | m_lowestSlack {std::numeric_limits<uint32_t>::max()} |
Lowest slack found. More... | |
uint32_t | m_maxLimit |
Max limit. More... | |
uint32_t | m_minLimit |
Minimum limit. More... | |
uint32_t | m_numCompleted {0} |
Total ever completed. More... | |
uint32_t | m_numQueued {0} |
Total ever queued. More... | |
uint32_t | m_prevLastObjCnt {0} |
Previous queuing cnt. More... | |
uint32_t | m_prevNumQueued {0} |
Previous queue total. More... | |
uint32_t | m_prevOvlimit {0} |
Previous over limit. More... | |
Time | m_slackHoldTime |
Time to measure slack. More... | |
Time | m_slackStartTime {Seconds(0)} |
Time slacks seen. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoDispose () |
Destructor implementation. More... | |
virtual void | DoInitialize () |
Initialize() implementation. More... | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
DynamicQueueLimits would be used in conjunction with a producer/consumer type queue (possibly a netdevice queue).
Such a queue would have these general properties:
1) Objects are queued up to some limit specified as number of objects. 2) Periodically a completion process executes which retires consumed objects. 3) Starvation occurs when limit has been reached, all queued data has actually been consumed, but completion processing has not yet run so queuing new data is blocked. 4) Minimizing the amount of queued data is desirable.
The goal of DynamicQueueLimits is to calculate the limit as the minimum number of objects needed to prevent starvation.
The primary functions of DynamicQueueLimits are: Completed - called at completion time to indicate how many objects were retired from the queue Available - returns how many objects are available to be queued based on the object limit and how many objects are already enqueued Queued - called when objects are enqueued to record number of objects
Definition at line 65 of file dynamic-queue-limits.h.
ns3::DynamicQueueLimits::DynamicQueueLimits | ( | ) |
Definition at line 74 of file dynamic-queue-limits.cc.
References NS_LOG_FUNCTION, and Reset().
|
override |
Definition at line 80 of file dynamic-queue-limits.cc.
References NS_LOG_FUNCTION.
|
overridevirtual |
Available is called from NotifyTransmittedBytes to calculate the number of bytes that can be passed again to the NetDevice.
A negative value means that no packets can be passed to the NetDevice. In this case, NotifyTransmittedBytes stops the transmission queue.
Returns how many bytes can be queued
Implements ns3::QueueLimits.
Definition at line 211 of file dynamic-queue-limits.cc.
References m_adjLimit, m_numQueued, and NS_LOG_FUNCTION.
|
overridevirtual |
Record number of completed bytes and recalculate the limit.
count | the number of completed bytes |
Implements ns3::QueueLimits.
Definition at line 102 of file dynamic-queue-limits.cc.
References m_adjLimit, m_lastObjCnt, m_limit, m_lowestSlack, m_maxLimit, m_minLimit, m_numCompleted, m_numQueued, m_prevLastObjCnt, m_prevNumQueued, m_prevOvlimit, m_slackHoldTime, m_slackStartTime, max, min, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, Posdiff(), and UINTMAX.
|
static |
Get the type ID.
Definition at line 45 of file dynamic-queue-limits.cc.
References DQL_MAX_LIMIT, m_limit, m_maxLimit, m_minLimit, m_slackHoldTime, ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), and ns3::TypeId::SetParent().
|
private |
Calculates the difference between the two operators and returns the number if positive, zero otherwise.
a | First operator. |
b | Second operator. |
Definition at line 228 of file dynamic-queue-limits.cc.
References max, and NS_LOG_FUNCTION.
Referenced by Completed().
|
overridevirtual |
Record the number of bytes queued.
count | the number of bytes queued |
Implements ns3::QueueLimits.
Definition at line 218 of file dynamic-queue-limits.cc.
References DQL_MAX_OBJECT, m_lastObjCnt, m_numQueued, NS_ASSERT, and NS_LOG_FUNCTION.
|
overridevirtual |
Reset queue limits state.
Implements ns3::QueueLimits.
Definition at line 86 of file dynamic-queue-limits.cc.
References m_lastObjCnt, m_limit, m_lowestSlack, m_numCompleted, m_numQueued, m_prevLastObjCnt, m_prevNumQueued, m_prevOvlimit, m_slackStartTime, ns3::Simulator::Now(), NS_LOG_FUNCTION, and UINTMAX.
Referenced by DynamicQueueLimits().
|
private |
limit + num_completed
Definition at line 94 of file dynamic-queue-limits.h.
Referenced by Available(), and Completed().
|
private |
Count at last queuing.
Definition at line 95 of file dynamic-queue-limits.h.
Referenced by Completed(), Queued(), and Reset().
|
private |
Current limit.
Definition at line 98 of file dynamic-queue-limits.h.
Referenced by Completed(), GetTypeId(), and Reset().
|
private |
Lowest slack found.
Definition at line 105 of file dynamic-queue-limits.h.
Referenced by Completed(), and Reset().
|
private |
Max limit.
Definition at line 109 of file dynamic-queue-limits.h.
Referenced by Completed(), and GetTypeId().
|
private |
Minimum limit.
Definition at line 110 of file dynamic-queue-limits.h.
Referenced by Completed(), and GetTypeId().
|
private |
Total ever completed.
Definition at line 99 of file dynamic-queue-limits.h.
Referenced by Completed(), and Reset().
|
private |
Total ever queued.
Definition at line 93 of file dynamic-queue-limits.h.
Referenced by Available(), Completed(), Queued(), and Reset().
|
private |
Previous queuing cnt.
Definition at line 103 of file dynamic-queue-limits.h.
Referenced by Completed(), and Reset().
|
private |
Previous queue total.
Definition at line 102 of file dynamic-queue-limits.h.
Referenced by Completed(), and Reset().
|
private |
Previous over limit.
Definition at line 101 of file dynamic-queue-limits.h.
Referenced by Completed(), and Reset().
|
private |
Time to measure slack.
Definition at line 111 of file dynamic-queue-limits.h.
Referenced by Completed(), and GetTypeId().
Time slacks seen.
Definition at line 106 of file dynamic-queue-limits.h.
Referenced by Completed(), and Reset().