Macro for moving average
PATCH 24/29 Macro for moving average
The moving average computation occurs so frequently in the CCID 3 code that it merits a macro of its own.
Committer note: changed the patch to have it as an inline that returns the new
value, keeping the logic.
Signed-off-by Gerrit Renker <[email protected]>
Acked-by Ian McDonald <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- net/dccp/ccids/ccid3.c | 8 +++----- net/dccp/ccids/lib/tfrc.h | 11 +++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-)
net/dccp/ccids/ccid3.c +3 -5
@@ -183,7 +183,7 @@ static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) {const u16 old_s = hctx->ccid3hctx_s; - hctx->ccid3hctx_s = old_s =0 ? len : (9 * old_s + len) /10 ; + hctx->ccid3hctx_s =tfrc_ewma (hctx->ccid3hctx_s, len,9 );if (hctx->ccid3hctx_s != old_s)ccid3_update_send_interval (hctx);
@@ -474,8 +474,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)* * q is a constant, RFC 3448 recommends 0.9 */ - hctx->ccid3hctx_rtt = hctx->ccid3hctx_rtt =0 ? r_sample - : (9 * hctx->ccid3hctx_rtt + r_sample) /10 ; + hctx->ccid3hctx_rtt =tfrc_ewma (hctx->ccid3hctx_rtt, r_sample,9 );/* * Update allowed sending rate as per draft rfc3448bis, 4.2/4.3
@@ -724,8 +723,7 @@ static inline void ccid3_hc_rx_update_s(struct ccid3_hc_rx_sock *hcrx, int len)if (unlikely (len =0 ))/* don't update on empty packets (e.g. ACKs) */ ccid3_pr_debug ("Packet payload length is 0 - not updating\n" );else - hcrx->ccid3hcrx_s = hcrx->ccid3hcrx_s =0 ? len : - (9 * hcrx->ccid3hcrx_s + len) /10 ; + hcrx->ccid3hcrx_s =tfrc_ewma (hcrx->ccid3hcrx_s, len,9 ); }static void ccid3_hc_rx_send_feedback (struct sock *sk)
net/dccp/ccids/lib/tfrc.h +11 -0
@@ -37,6 +37,17 @@ static inline u32 scaled_div32(u64 a, u32 b)return result; } +/** +* Exponentially weighted moving average +* @weight: Weight to be used as damping factor, in units of 1/10 +*/ +static inline u32 tfrc_ewma (const u32 val,const u32 newval,const u8 weight) +{ +if (val !=0 ) +return (weight * val + (10 - weight) * newval) /10 ; +return newval; +} +extern u32 tfrc_calc_x (u16 s,u32 R ,u32 p);extern u32 tfrc_calc_x_reverse_lookup (u32 fvalue);
Signature · 1 line
1.5.0.6
Thanks a lot for the review & improving it. There is at least one more use of this function, and it is now much better to read. Glad about it.
| The moving average computation occurs so frequently in the CCID 3 code that | it merits a macro of its own. | | Committer note: changed the patch to have it as an inline that returns the new | value, keeping the logic. |