rds: check for excessive looping in rds_send_xmit
Original commit from 2011 updated to include a change by Yuval Shaia <yuval.shaia@oracle.com> that adds a new statistic counter "send_stuck_rm" to capture the messages looping exessively in the send path. Signed-off-by: Gerd Rausch <gerd.rausch@oracle.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
55c70ca00c
Коммит
11740ef448
|
@ -717,7 +717,7 @@ struct rds_statistics {
|
||||||
uint64_t s_cong_send_blocked;
|
uint64_t s_cong_send_blocked;
|
||||||
uint64_t s_recv_bytes_added_to_socket;
|
uint64_t s_recv_bytes_added_to_socket;
|
||||||
uint64_t s_recv_bytes_removed_from_socket;
|
uint64_t s_recv_bytes_removed_from_socket;
|
||||||
|
uint64_t s_send_stuck_rm;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* af_rds.c */
|
/* af_rds.c */
|
||||||
|
|
|
@ -145,6 +145,7 @@ int rds_send_xmit(struct rds_conn_path *cp)
|
||||||
LIST_HEAD(to_be_dropped);
|
LIST_HEAD(to_be_dropped);
|
||||||
int batch_count;
|
int batch_count;
|
||||||
unsigned long send_gen = 0;
|
unsigned long send_gen = 0;
|
||||||
|
int same_rm = 0;
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
batch_count = 0;
|
batch_count = 0;
|
||||||
|
@ -200,6 +201,17 @@ restart:
|
||||||
|
|
||||||
rm = cp->cp_xmit_rm;
|
rm = cp->cp_xmit_rm;
|
||||||
|
|
||||||
|
if (!rm) {
|
||||||
|
same_rm = 0;
|
||||||
|
} else {
|
||||||
|
same_rm++;
|
||||||
|
if (same_rm >= 4096) {
|
||||||
|
rds_stats_inc(s_send_stuck_rm);
|
||||||
|
ret = -EAGAIN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If between sending messages, we can send a pending congestion
|
* If between sending messages, we can send a pending congestion
|
||||||
* map update.
|
* map update.
|
||||||
|
|
|
@ -78,6 +78,7 @@ static const char *const rds_stat_names[] = {
|
||||||
"cong_send_blocked",
|
"cong_send_blocked",
|
||||||
"recv_bytes_added_to_sock",
|
"recv_bytes_added_to_sock",
|
||||||
"recv_bytes_freed_fromsock",
|
"recv_bytes_freed_fromsock",
|
||||||
|
"send_stuck_rm",
|
||||||
};
|
};
|
||||||
|
|
||||||
void rds_stats_info_copy(struct rds_info_iterator *iter,
|
void rds_stats_info_copy(struct rds_info_iterator *iter,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче