我怎樣才能估計即時吞吐量?例如,以類似於瀏覽器下載文件的方式。這不僅僅是一個平均吞吐量,而是一個瞬時估計,也許是一個'移動平均值'。我正在尋找算法,但您可以在C++中指定它。理想情況下,它不會涉及一個線程(即每秒鐘不斷刷新),而是隻在值被要求時才被評估。吞吐量網絡估計
吞吐量網絡估計
回答
您可以使用指數移動平均線,作爲解釋here,但我會重複計算公式:
accumulator = (alpha * new_value) + (1.0 - alpha) * accumulator
要實現的估計,假設你打算查詢計算每一秒,但是你想要的平均在最後一分鐘。於是,這裏將是獲取估計的一種方法:
struct AvgBps {
double rate_; // The average rate
double last_; // Accumulates bytes added until average is computed
time_t prev_; // Time of previous update
AvgBps() : rate_(0), last_(0), prev_(time(0)) {}
void add (unsigned bytes) {
time_t now = time(0);
if (now - prev_ < 60) { // The update is within the last minute
last_ += bytes; // Accumulate bytes into last
if (now > prev_) { // More than a second elapsed from previous
// exponential moving average
// the more time that has elapsed between updates, the more
// weight is assigned for the accumulated bytes
double alpha = (now - prev_)/60.0;
rate = alpha * last_ + (1 - alpha) * rate;
last_ = 0; // Reset last_ (it has been averaged in)
prev_ = now; // Update prev_ to current time
}
} else { // The update is longer than a minute ago
rate_ = bytes; // Current update is average rate
last_ = 0; // Reset last_
prev_ = now; // Update prev_
}
}
double rate() {
add(0); // Compute rate by doing an update of 0 bytes
return rate_; // Return computed rate
}
};
你應該實際使用,而不是time
單調時鐘。
這可能是我在找的東西,非常感謝。我不知道高級每秒需要多少次查詢吞吐量值,並且它不會處於固定的時間間隔。是否有可能在您訪問時就像計算一樣計算該值,但知道沒有預定義的訪問時間?你還可以更多地評論或解釋你的代碼嗎?我對C++並不擅長,即使寫得很好,也很難爲新手讀書。 – NaomiJO 2012-08-03 13:53:18
@NaomiJO:代碼並不在乎你多久查詢一次或多久更新一次。但是,如果更新的時間超過了上次更新的60秒以上,則只會將當前更新作爲最後一分鐘的速率。 – jxh 2012-08-03 13:59:45
非常感謝您提供的內嵌註釋,請讓我仔細閱讀,如果我還有其他問題,我會盡快與您聯繫。 – NaomiJO 2012-08-03 14:58:18
你可能想要一個boxcar的平均值。
只保留最後n個值,並對它們進行平均。對於每個後續塊,減去最老的並添加最近的塊。請注意,對於浮點值,您可能會收到一些彙總錯誤,在這種情況下,您可能需要重新計算每個m值從頭開始的總數。對於整數值當然,你不需要那樣的東西。
這是一個有趣的想法。我沒有看到有關浮點值的評論。你能否更詳細地解釋可能發生的問題。而'後續的塊'是什麼意思(當沒有數據包被髮送時它是如何刷新的?它是否每x毫秒刷新一次?理想情況下,我寧願只有刷新時纔會刷新數據包(1)發送數據包或2)需要訪問該值,這可以採用內部變量的形式,保存上次訪問的記錄) – NaomiJO 2012-08-03 13:45:59
浮點運算的精度會有輕微的誤差。整數算術是確切的,假設你只處理整數。 http://docs.python.org/tutorial/floatingpoint.html如果使用浮點,我可能會重新計算每n個塊。 – user1277476 2012-08-03 16:36:09
- 1. 計算網絡吞吐量
- 2. TCP網絡吞吐量測量
- 3. 低估DynamoDb吞吐量
- 4. 計算吞吐量
- 5. 在ns3中計算lte網絡模擬中的吞吐量
- 6. 如何計算INET的「吞吐量」示例中的吞吐量?
- 7. Jmeter的吞吐量計算
- 8. NS3吞吐量計算
- 9. JMeter - 吞吐量
- 10. 吞吐量測量
- 11. 如何使用skype測量網絡吞吐量
- 12. 如何在運行時測量網絡吞吐量
- 13. 谷歌計算引擎網絡入口吞吐速度
- 14. TCP吞吐量圖
- 15. 吞吐量措施
- 16. 如何最大化HTTP網絡吞吐量?
- 17. 什麼會降低GKSession的網絡吞吐量?
- 18. 淨 - 讀出當前的網絡接口吞吐量
- 19. 動態計算吞吐量時間段
- 20. 如何計算吞吐量的Hadoop
- 21. 如何根據wireshark計算吞吐量
- 22. 恆定的吞吐量計時器JMeter
- 23. 使用awk腳本計算吞吐量
- 24. iperf如何計算吞吐量
- 25. 寫油門當表吞吐量高,但GSI吞吐量低
- 26. JMeter的吞吐量控制器中的吞吐量影響
- 27. 測量datanode的吞吐量
- 28. 用java低吞吐量
- 29. TCP vs UDP吞吐量
- 30. Jmeter吞吐量的意義
分組網絡中的「瞬時吞吐量」沒有明確的定義。除非是無窮大時,它幾乎總是零。你幾乎可以肯定需要一個平均吞吐量,但是在一個固定的時間週期內(例如最後一分鐘的平均值)。 – MSalters 2012-07-31 08:17:43
好的。這是如何Firefox或其他下載程序的工作? – NaomiJO 2012-08-03 13:48:00
如果他們懶惰。更智能的程序使用更復雜的移動平均線功能,該功能既使用近期平均值,也使用老年平均值,但對最近的平均值給予更多權重。 – MSalters 2012-08-03 14:29:52