Commit 9bd80b60 authored by Allan Stephens's avatar Allan Stephens Committed by Paul Gortmaker

tipc: Improve accuracy of link transmit queue maximum size statistic

Enhances TIPC's unicast and broadcast link code to update the transmit
queue maximum size counter in a single place, namely the routine that
adds messages to the queue. This ensures that the maximum size statistic
reported for unicast links is completely accurate, rather than being
partially based on statistical sampling.

The changes to link.h are just documenting the roles of the variables.
Signed-off-by: default avatarAllan Stephens <Allan.Stephens@windriver.com>
Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
parent 9f54b545
...@@ -418,8 +418,6 @@ int tipc_bclink_send_msg(struct sk_buff *buf) ...@@ -418,8 +418,6 @@ int tipc_bclink_send_msg(struct sk_buff *buf)
else else
bclink_set_last_sent(); bclink_set_last_sent();
if (bcl->out_queue_size > bcl->stats.max_queue_sz)
bcl->stats.max_queue_sz = bcl->out_queue_size;
bcl->stats.queue_sz_counts++; bcl->stats.queue_sz_counts++;
bcl->stats.accu_queue_sz += bcl->out_queue_size; bcl->stats.accu_queue_sz += bcl->out_queue_size;
......
...@@ -246,9 +246,6 @@ static void link_timeout(struct link *l_ptr) ...@@ -246,9 +246,6 @@ static void link_timeout(struct link *l_ptr)
l_ptr->stats.accu_queue_sz += l_ptr->out_queue_size; l_ptr->stats.accu_queue_sz += l_ptr->out_queue_size;
l_ptr->stats.queue_sz_counts++; l_ptr->stats.queue_sz_counts++;
if (l_ptr->out_queue_size > l_ptr->stats.max_queue_sz)
l_ptr->stats.max_queue_sz = l_ptr->out_queue_size;
if (l_ptr->first_out) { if (l_ptr->first_out) {
struct tipc_msg *msg = buf_msg(l_ptr->first_out); struct tipc_msg *msg = buf_msg(l_ptr->first_out);
u32 length = msg_size(msg); u32 length = msg_size(msg);
...@@ -824,7 +821,10 @@ static void link_add_to_outqueue(struct link *l_ptr, ...@@ -824,7 +821,10 @@ static void link_add_to_outqueue(struct link *l_ptr,
l_ptr->last_out = buf; l_ptr->last_out = buf;
} else } else
l_ptr->first_out = l_ptr->last_out = buf; l_ptr->first_out = l_ptr->last_out = buf;
l_ptr->out_queue_size++; l_ptr->out_queue_size++;
if (l_ptr->out_queue_size > l_ptr->stats.max_queue_sz)
l_ptr->stats.max_queue_sz = l_ptr->out_queue_size;
} }
/* /*
...@@ -867,9 +867,6 @@ int tipc_link_send_buf(struct link *l_ptr, struct sk_buff *buf) ...@@ -867,9 +867,6 @@ int tipc_link_send_buf(struct link *l_ptr, struct sk_buff *buf)
/* Packet can be queued or sent: */ /* Packet can be queued or sent: */
if (queue_size > l_ptr->stats.max_queue_sz)
l_ptr->stats.max_queue_sz = queue_size;
if (likely(!tipc_bearer_congested(l_ptr->b_ptr, l_ptr) && if (likely(!tipc_bearer_congested(l_ptr->b_ptr, l_ptr) &&
!link_congested(l_ptr))) { !link_congested(l_ptr))) {
link_add_to_outqueue(l_ptr, buf, msg); link_add_to_outqueue(l_ptr, buf, msg);
......
...@@ -196,18 +196,12 @@ struct link { ...@@ -196,18 +196,12 @@ struct link {
u32 bearer_congs; u32 bearer_congs;
u32 deferred_recv; u32 deferred_recv;
u32 duplicates; u32 duplicates;
u32 max_queue_sz; /* send queue size high water mark */
/* for statistical profiling of send queue size */ u32 accu_queue_sz; /* used for send queue size profiling */
u32 queue_sz_counts; /* used for send queue size profiling */
u32 max_queue_sz; u32 msg_length_counts; /* used for message length profiling */
u32 accu_queue_sz; u32 msg_lengths_total; /* used for message length profiling */
u32 queue_sz_counts; u32 msg_length_profile[7]; /* used for msg. length profiling */
/* for statistical profiling of message lengths */
u32 msg_length_counts;
u32 msg_lengths_total;
u32 msg_length_profile[7];
} stats; } stats;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment