37 const double RttStats::ALPHA = 0.125;
40 : m_srtt(RTT_NO_MEASUREMENT)
41 , m_rtt(RTT_NO_MEASUREMENT)
52 m_srtt = computeSrtt(m_srtt, m_rtt);
56 RttStats::computeSrtt(
Rtt previousSrtt,
Rtt currentRtt)
62 return Rtt(ALPHA * currentRtt + (1 - ALPHA) * previousSrtt);
69 : m_isTimeoutScheduled(false)
70 , m_nSilentTimeouts(0)
77 m_measurementExpirationId.cancel();
83 if (!m_isTimeoutScheduled) {
84 m_timeoutEventId = id;
85 m_isTimeoutScheduled =
true;
86 m_lastInterestName = interestName;
89 NDN_THROW(
FaceInfo::Error(
"Tried to schedule a timeout for a face that already has a timeout scheduled"));
94 FaceInfo::cancelTimeoutEvent()
96 m_timeoutEventId.cancel();
97 m_isTimeoutScheduled =
false;
101 FaceInfo::cancelTimeoutEvent(
const Name& prefix)
109 FaceInfo::doesNameMatchLastInterest(
const Name& name)
111 return m_lastInterestName.isPrefixOf(name);
118 auto outRecord = pitEntry->getOutRecord(inFace, 0);
120 if (outRecord == pitEntry->out_end()) {
121 NFD_LOG_TRACE(pitEntry->getInterest() <<
" dataFrom inFace=" << inFace.getId() <<
" no-out-record");
125 time::steady_clock::Duration steadyRtt = time::steady_clock::now() - outRecord->getLastRenewed();
131 <<
" RTT: " << m_rttStats.
getRtt()
132 <<
" SRTT: " << m_rttStats.
getSrtt());
146 : m_isProbingDue(false)
147 , m_hasFirstProbeBeenScheduled(false)
154 auto it = m_fit.find(faceId);
155 if (it != m_fit.end()) {
166 auto it = m_fit.find(faceId);
169 if (it == m_fit.end()) {
170 const auto& pair = m_fit.emplace(faceId,
FaceInfo());
171 info = &pair.first->second;
206 : m_measurements(measurements)
237 BOOST_ASSERT(info !=
nullptr);
248 for (
size_t prefixLen = fibEntry.
getPrefix().size() + 1;
249 me ==
nullptr && prefixLen <= interest.
getName().size(); ++prefixLen) {
250 me = m_measurements.get(interest.getName().getPrefix(prefixLen));
254 BOOST_ASSERT(me !=
nullptr);
260 BOOST_ASSERT(info !=
nullptr);
FaceInfo * getFaceInfo(const fib::Entry &fibEntry, const Interest &interest, FaceId faceId)
const Name & getName() const
void extendFaceInfoLifetime(FaceInfo &info, FaceId faceId)
Represents a Measurements entry.
NamespaceInfo * getNamespaceInfo(const Name &prefix)
void addRttMeasurement(RttEstimator::Duration &durationRtt)
FaceInfo & getOrCreateFaceInfo(const fib::Entry &fibEntry, const Interest &interest, FaceId faceId)
time::duration< double, boost::micro > Rtt
std::pair< T *, bool > insertStrategyInfo(A &&...args)
Insert a StrategyInfo item.
time::microseconds Duration
Scheduler & getScheduler()
Returns the global Scheduler instance for the calling thread.
void cancelTimeoutEvent(const Name &prefix)
FaceInfo & getOrCreateFaceInfo(const fib::Entry &fibEntry, FaceId faceId)
void expireFaceInfo(FaceId faceId)
const Name & getPrefix() const
static constexpr time::microseconds MEASUREMENTS_LIFETIME
Copyright (c) 2014-2015, Regents of the University of California, Arizona Board of Regents...
NamespaceInfo & getOrCreateNamespaceInfo(const fib::Entry &fibEntry, const Interest &interest)
const scheduler::EventId & getMeasurementExpirationEventId()
bool isTimeoutScheduled() const
void recordRtt(const shared_ptr< pit::Entry > &pitEntry, const Face &inFace)
stores stategy information about each face in this namespace
void recordTimeout(const Name &interestName)
FaceInfo * getFaceInfo(const fib::Entry &fibEntry, FaceId faceId)
void setTimeoutEvent(const scheduler::EventId &id, const Name &interestName)
#define NFD_LOG_INIT(name)
static const Rtt RTT_TIMEOUT
uint64_t FaceId
identifies a face
AsfMeasurements(MeasurementsAccessor &measurements)
void setMeasurementExpirationEventId(const scheduler::EventId &id)
void addMeasurement(Duration measure)
Strategy information for each face in a namespace.
Helper class to retrieve and create strategy measurements.
static const Rtt RTT_NO_MEASUREMENT