mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-24 15:16:40 +00:00
Minor cleanup. More efficient push() operation for RingBuffer
This commit is contained in:
parent
0faa655b83
commit
f8005b88ad
@ -161,11 +161,9 @@ public:
|
||||
{
|
||||
delete _throughputSamples;
|
||||
delete _latencySamples;
|
||||
delete _qualitySamples;
|
||||
delete _packetValiditySamples;
|
||||
_throughputSamples = NULL;
|
||||
_latencySamples = NULL;
|
||||
_qualitySamples = NULL;
|
||||
_packetValiditySamples = NULL;
|
||||
}
|
||||
|
||||
@ -580,7 +578,6 @@ public:
|
||||
* @param now Current time
|
||||
*/
|
||||
inline void processBackgroundPathMeasurements(int64_t now, const int64_t peerId) {
|
||||
// Compute path stability
|
||||
if (now - _lastPathQualityComputeTime > ZT_PATH_QUALITY_COMPUTE_INTERVAL) {
|
||||
Mutex::Lock _l(_statistics_m);
|
||||
_lastPathQualityComputeTime = now;
|
||||
@ -606,8 +603,6 @@ public:
|
||||
// Compute the quality product
|
||||
_lastComputedStability = pdv_contrib + latency_contrib + throughput_disturbance_contrib;
|
||||
_lastComputedStability *= 1 - _packetErrorRatio;
|
||||
_qualitySamples->push(_lastComputedStability);
|
||||
|
||||
// Prevent QoS records from sticking around for too long
|
||||
std::map<uint64_t,uint64_t>::iterator it = _outQoSRecords.begin();
|
||||
while (it != _outQoSRecords.end()) {
|
||||
@ -650,7 +645,6 @@ public:
|
||||
inline void prepareBuffers() {
|
||||
_throughputSamples = new RingBuffer<uint64_t>(ZT_PATH_QUALITY_METRIC_WIN_SZ);
|
||||
_latencySamples = new RingBuffer<uint32_t>(ZT_PATH_QUALITY_METRIC_WIN_SZ);
|
||||
_qualitySamples = new RingBuffer<float>(ZT_PATH_QUALITY_METRIC_WIN_SZ);
|
||||
_packetValiditySamples = new RingBuffer<bool>(ZT_PATH_QUALITY_METRIC_WIN_SZ);
|
||||
memset(_ifname, 0, 16);
|
||||
memset(_addrString, 0, sizeof(_addrString));
|
||||
@ -704,7 +698,6 @@ private:
|
||||
|
||||
RingBuffer<uint64_t> *_throughputSamples;
|
||||
RingBuffer<uint32_t> *_latencySamples;
|
||||
RingBuffer<float> *_qualitySamples;
|
||||
RingBuffer<bool> *_packetValiditySamples;
|
||||
};
|
||||
|
||||
|
@ -678,8 +678,8 @@ private:
|
||||
bool _linkIsRedundant;
|
||||
bool _remotePeerMultipathEnabled;
|
||||
|
||||
uint64_t _lastAggregateStatsReport;
|
||||
uint64_t _lastAggregateAllocation;
|
||||
int64_t _lastAggregateStatsReport;
|
||||
int64_t _lastAggregateAllocation;
|
||||
|
||||
char _interfaceListStr[256]; // 16 characters * 16 paths in a link
|
||||
};
|
||||
|
@ -37,7 +37,7 @@
|
||||
namespace ZeroTier {
|
||||
|
||||
/**
|
||||
* A revolving (ring) buffer.
|
||||
* A circular buffer
|
||||
*
|
||||
* For fast handling of continuously-evolving variables (such as path quality metrics).
|
||||
* Using this, we can maintain longer sliding historical windows for important path
|
||||
@ -169,7 +169,12 @@ public:
|
||||
if (count() == size) {
|
||||
consume(1);
|
||||
}
|
||||
write(&value, 1);
|
||||
const size_t first_chunk = std::min((size_t)1, size - end);
|
||||
*(buf + end) = value;
|
||||
end = (end + first_chunk) % size;
|
||||
if (begin == end) {
|
||||
wrap = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user