summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorJoseph Henry <josephjah@gmail.com>2018-06-13 14:50:37 -0700
committerJoseph Henry <josephjah@gmail.com>2018-06-13 14:50:37 -0700
commitf8005b88adfe93af477528bec748882da8fa9bea (patch)
tree6c7390e572483b9e0bb8c1ab9923e84ab3478e6d /node
parent0faa655b834be45d379c84769604b5c43f734650 (diff)
downloadinfinitytier-f8005b88adfe93af477528bec748882da8fa9bea.tar.gz
infinitytier-f8005b88adfe93af477528bec748882da8fa9bea.zip
Minor cleanup. More efficient push() operation for RingBuffer
Diffstat (limited to 'node')
-rw-r--r--node/Path.hpp7
-rw-r--r--node/Peer.hpp4
-rw-r--r--node/RingBuffer.hpp9
3 files changed, 9 insertions, 11 deletions
diff --git a/node/Path.hpp b/node/Path.hpp
index e0426323..30655877 100644
--- a/node/Path.hpp
+++ b/node/Path.hpp
@@ -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;
};
diff --git a/node/Peer.hpp b/node/Peer.hpp
index 21e8cbf2..9361f665 100644
--- a/node/Peer.hpp
+++ b/node/Peer.hpp
@@ -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
};
diff --git a/node/RingBuffer.hpp b/node/RingBuffer.hpp
index 32ae037c..e8d0d238 100644
--- a/node/RingBuffer.hpp
+++ b/node/RingBuffer.hpp
@@ -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;
+ }
}
/**