Sirikata
|
CSFQODPFlowScheduler tracks all active flows and uses a CSFQ-style approach to enforce fairness over those flows. More...
#include <CSFQODPFlowScheduler.hpp>
CSFQODPFlowScheduler tracks all active flows and uses a CSFQ-style approach to enforce fairness over those flows.
typedef std::tr1::unordered_map<ObjectPair, FlowInfo, ObjectPair::Hasher> Sirikata::CSFQODPFlowScheduler::FlowMap [private] |
Sirikata::CSFQODPFlowScheduler::CSFQODPFlowScheduler | ( | SpaceContext * | ctx, |
ForwarderServiceQueue * | parent, | ||
ServerID | sid, | ||
uint32 | serv_id, | ||
uint32 | max_size, | ||
LocationService * | loc | ||
) |
References mTotalUsedWeight, and NUM_DOWNSTREAM.
Sirikata::CSFQODPFlowScheduler::~CSFQODPFlowScheduler | ( | ) | [virtual] |
References CSFQLOG, Sirikata::CSFQODPFlowScheduler::ObjectPair::dest, mFlows, RECEIVER, SENDER, Sirikata::CSFQODPFlowScheduler::ObjectPair::source, Sirikata::UUID::toString(), Sirikata::CSFQODPFlowScheduler::FlowInfo::usedWeight, Sirikata::Logging::warn, and Sirikata::CSFQODPFlowScheduler::FlowInfo::weight.
bool Sirikata::CSFQODPFlowScheduler::empty | ( | ) | const [virtual] |
void Sirikata::CSFQODPFlowScheduler::estimateAlpha | ( | int32 | packet_size, |
Time & | arrival_time, | ||
double | label, | ||
bool | dropped | ||
) | [private] |
References _Ka_double, Sirikata::SimpleRateEstimator::estimate_rate(), Sirikata::RateEstimator::get(), KALPHA, mAcceptedRate, mAlpha, mAlphaWindowed, mArrivalRate, mCongested, mCongestionStartTime, mCongestionWindow, minCongestedAlpha(), mKAlphaReductionsLeft, Sirikata::ODPFlowScheduler::mReceiverCapacity, Sirikata::ODPFlowScheduler::mReceiverTotalWeight, Sirikata::ODPFlowScheduler::mSenderCapacity, Sirikata::ODPFlowScheduler::mSenderTotalWeight, mTotalUsedWeight, queueExceedsLowWaterMark(), RECEIVER, and SENDER.
Referenced by push().
int Sirikata::CSFQODPFlowScheduler::flowCount | ( | ) | const [private] |
References mFlows.
Referenced by minCongestedAlpha().
const CSFQODPFlowScheduler::Type & Sirikata::CSFQODPFlowScheduler::front | ( | ) | const [virtual] |
Implements Sirikata::ODPFlowScheduler.
References mNeedsNotification, mQueue, mQueueBuffer, Sirikata::CSFQODPFlowScheduler::QueuedMessage::msg, and Sirikata::SizedThreadSafeQueue< T, ResourceMonitor, Superclass >::pop().
Referenced by pop().
CSFQODPFlowScheduler::Type & Sirikata::CSFQODPFlowScheduler::front | ( | ) | [virtual] |
CSFQODPFlowScheduler::FlowInfo * Sirikata::CSFQODPFlowScheduler::getFlow | ( | const ObjectPair & | new_packet_pair, |
const OSegEntry & | src_info, | ||
const OSegEntry & | dst_info, | ||
const Time & | t | ||
) | [private] |
References Sirikata::CSFQODPFlowScheduler::ObjectPair::dest, getObjectWeightRegion(), mFlows, mTotalActiveWeight, mTotalUsedWeight, Sirikata::ODPFlowScheduler::mWeightCalculator, NUM_DOWNSTREAM, Sirikata::CSFQODPFlowScheduler::ObjectPair::source, and Sirikata::RegionWeightCalculator::weight().
Referenced by push().
BoundingBox3f Sirikata::CSFQODPFlowScheduler::getObjectWeightRegion | ( | const UUID & | objid, |
const OSegEntry & | sid | ||
) | const [private] |
References Sirikata::LocationService::bounds(), Sirikata::LocationService::contains(), Sirikata::SpaceContext::cseg(), CSFQLOG, Sirikata::LocationService::currentPosition(), Sirikata::AggregateBoundingInfo::fullBounds(), Sirikata::SpaceContext::id(), Sirikata::ODPFlowScheduler::mContext, mLoc, Sirikata::OSegEntry::radius(), Sirikata::OSegEntry::server(), Sirikata::CoordinateSegmentation::serverRegion(), and Sirikata::Logging::warn.
Referenced by getFlow().
double Sirikata::CSFQODPFlowScheduler::minCongestedAlpha | ( | ) | const [inline, private] |
References flowCount(), Sirikata::RateEstimator::get(), and mCapacityRate.
Referenced by estimateAlpha().
References mTotalActiveWeight.
Referenced by push().
CSFQODPFlowScheduler::Type Sirikata::CSFQODPFlowScheduler::pop | ( | ) | [virtual] |
Implements Sirikata::ODPFlowScheduler.
References Sirikata::SimpleRateEstimator::estimate_rate(), front(), mCapacityRate, Sirikata::ODPFlowScheduler::mContext, mQueueBuffer, Sirikata::CSFQODPFlowScheduler::QueuedMessage::msg, Sirikata::Context::recentSimTime(), and Sirikata::CSFQODPFlowScheduler::QueuedMessage::size().
bool Sirikata::CSFQODPFlowScheduler::push | ( | Sirikata::Protocol::Object::ObjectMessage * | msg, |
const OSegEntry & | source_entry, | ||
const OSegEntry & | dest_entry | ||
) | [virtual] |
Implements Sirikata::ODPFlowScheduler.
References _edge, _Kf_double, Sirikata::ODPFlowScheduler::createMessageFromODP(), Sirikata::RateEstimator::estimate_rate(), estimateAlpha(), Sirikata::RateEstimator::get(), getFlow(), mAlpha, mArrivalRate, Sirikata::ODPFlowScheduler::mContext, Sirikata::ODPFlowScheduler::mDestServer, mKAlphaReductionsLeft, mNeedsNotification, mPushMutex, mQueue, Sirikata::ODPFlowScheduler::mReceiverCapacity, Sirikata::ODPFlowScheduler::mReceiverTotalWeight, Sirikata::ODPFlowScheduler::mSenderCapacity, Sirikata::ODPFlowScheduler::mSenderTotalWeight, Sirikata::CSFQODPFlowScheduler::QueuedMessage::msg, mSumEstimatedArrivalRates, mTotalUsedWeight, normalizedFlowWeight(), Sirikata::ODPFlowScheduler::notifyPushFront(), NUM_DOWNSTREAM, Sirikata::SizedThreadSafeQueue< T, ResourceMonitor, Superclass >::push(), Sirikata::randFloat(), Sirikata::CSFQODPFlowScheduler::FlowInfo::rate, RECEIVER, Sirikata::Context::recentSimTime(), SENDER, TRACE_DROP, Sirikata::CSFQODPFlowScheduler::FlowInfo::usedWeight, and Sirikata::CSFQODPFlowScheduler::FlowInfo::weight.
bool Sirikata::CSFQODPFlowScheduler::queueExceedsLowWaterMark | ( | ) | const [inline, private] |
Referenced by estimateAlpha().
void Sirikata::CSFQODPFlowScheduler::removeFlow | ( | const ObjectPair & | packet_pair | ) | [private] |
virtual uint32 Sirikata::CSFQODPFlowScheduler::size | ( | ) | const [inline, virtual] |
float Sirikata::CSFQODPFlowScheduler::totalActiveWeight | ( | ) | [virtual] |
Implements Sirikata::ODPFlowScheduler.
References mTotalActiveWeight.
float Sirikata::CSFQODPFlowScheduler::totalReceiverUsedWeight | ( | ) | [virtual] |
Implements Sirikata::ODPFlowScheduler.
References mTotalUsedWeight, and RECEIVER.
float Sirikata::CSFQODPFlowScheduler::totalSenderUsedWeight | ( | ) | [virtual] |
Implements Sirikata::ODPFlowScheduler.
References mTotalUsedWeight, and SENDER.
Referenced by estimateAlpha().
double Sirikata::CSFQODPFlowScheduler::mAlpha [private] |
Referenced by estimateAlpha(), and push().
double Sirikata::CSFQODPFlowScheduler::mAlphaWindowed [private] |
Referenced by estimateAlpha().
Referenced by estimateAlpha(), and push().
Referenced by minCongestedAlpha(), and pop().
bool Sirikata::CSFQODPFlowScheduler::mCongested [private] |
Referenced by estimateAlpha().
Referenced by estimateAlpha().
Referenced by estimateAlpha().
Referenced by flowCount(), getFlow(), removeFlow(), and ~CSFQODPFlowScheduler().
int Sirikata::CSFQODPFlowScheduler::mKAlphaReductionsLeft [private] |
Referenced by estimateAlpha(), and push().
Referenced by getObjectWeightRegion().
Sirikata::AtomicValue<bool> Sirikata::CSFQODPFlowScheduler::mNeedsNotification [mutable, private] |
boost::mutex Sirikata::CSFQODPFlowScheduler::mPushMutex [private] |
Referenced by push().
Sirikata::SizedThreadSafeQueue<QueuedMessage> Sirikata::CSFQODPFlowScheduler::mQueue [mutable, private] |
QueuedMessage Sirikata::CSFQODPFlowScheduler::mQueueBuffer [mutable, private] |
double Sirikata::CSFQODPFlowScheduler::mSumEstimatedArrivalRates [private] |
Referenced by push().
double Sirikata::CSFQODPFlowScheduler::mTotalActiveWeight [private] |
Referenced by getFlow(), normalizedFlowWeight(), removeFlow(), and totalActiveWeight().
double Sirikata::CSFQODPFlowScheduler::mTotalUsedWeight[NUM_DOWNSTREAM] [private] |
Referenced by CSFQODPFlowScheduler(), estimateAlpha(), getFlow(), push(), removeFlow(), totalReceiverUsedWeight(), and totalSenderUsedWeight().