serialqueue: Rename stalled_bytes stat to upcoming_bytes

The stalled_bytes counter refers to the number of bytes that are not
yet eligible for transmission.  However, the naming leads to confusion
as it could be interpretted as an inability to transmit data.  Rename
to upcoming_bytes to try to avoid that confusion.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2023-03-29 18:24:32 -04:00
parent acca55b074
commit 22ee889f41
2 changed files with 19 additions and 16 deletions

View File

@ -8,6 +8,9 @@ All dates in this document are approximate.
## Changes ## Changes
20230407: The `stalled_bytes` counter in the log and in the
`printer.mcu.last_stats` field has been renamed to `upcoming_bytes`.
20230304: The `SET_TMC_CURRENT` command now properly adjusts the globalscaler 20230304: The `SET_TMC_CURRENT` command now properly adjusts the globalscaler
register for drivers that have it. This removes a limitation where on tmc5160, register for drivers that have it. This removes a limitation where on tmc5160,
the currents could not be raised higher with `SET_TMC_CURRENT` than the the currents could not be raised higher with `SET_TMC_CURRENT` than the

View File

@ -30,7 +30,7 @@
#include "serialqueue.h" // struct queue_message #include "serialqueue.h" // struct queue_message
struct command_queue { struct command_queue {
struct list_head stalled_queue, ready_queue; struct list_head upcoming_queue, ready_queue;
struct list_node node; struct list_node node;
}; };
@ -59,7 +59,7 @@ struct serialqueue {
double srtt, rttvar, rto; double srtt, rttvar, rto;
// Pending transmission message queues // Pending transmission message queues
struct list_head pending_queues; struct list_head pending_queues;
int ready_bytes, stalled_bytes, need_ack_bytes, last_ack_bytes; int ready_bytes, upcoming_bytes, need_ack_bytes, last_ack_bytes;
uint64_t need_kick_clock; uint64_t need_kick_clock;
struct list_head notify_queue; struct list_head notify_queue;
// Received messages // Received messages
@ -458,7 +458,7 @@ build_and_send_command(struct serialqueue *sq, uint8_t *buf, int pending
if (len + qm->len > MESSAGE_MAX - MESSAGE_TRAILER_SIZE) if (len + qm->len > MESSAGE_MAX - MESSAGE_TRAILER_SIZE)
break; break;
list_del(&qm->node); list_del(&qm->node);
if (list_empty(&cq->ready_queue) && list_empty(&cq->stalled_queue)) if (list_empty(&cq->ready_queue) && list_empty(&cq->upcoming_queue))
list_del(&cq->node); list_del(&cq->node);
memcpy(&buf[len], qm->msg, qm->len); memcpy(&buf[len], qm->msg, qm->len);
len += qm->len; len += qm->len;
@ -523,10 +523,10 @@ check_send_command(struct serialqueue *sq, int pending, double eventtime)
uint64_t min_stalled_clock = MAX_CLOCK, min_ready_clock = MAX_CLOCK; uint64_t min_stalled_clock = MAX_CLOCK, min_ready_clock = MAX_CLOCK;
struct command_queue *cq; struct command_queue *cq;
list_for_each_entry(cq, &sq->pending_queues, node) { list_for_each_entry(cq, &sq->pending_queues, node) {
// Move messages from the stalled_queue to the ready_queue // Move messages from the upcoming_queue to the ready_queue
while (!list_empty(&cq->stalled_queue)) { while (!list_empty(&cq->upcoming_queue)) {
struct queue_message *qm = list_first_entry( struct queue_message *qm = list_first_entry(
&cq->stalled_queue, struct queue_message, node); &cq->upcoming_queue, struct queue_message, node);
if (ack_clock < qm->min_clock) { if (ack_clock < qm->min_clock) {
if (qm->min_clock < min_stalled_clock) if (qm->min_clock < min_stalled_clock)
min_stalled_clock = qm->min_clock; min_stalled_clock = qm->min_clock;
@ -534,7 +534,7 @@ check_send_command(struct serialqueue *sq, int pending, double eventtime)
} }
list_del(&qm->node); list_del(&qm->node);
list_add_tail(&qm->node, &cq->ready_queue); list_add_tail(&qm->node, &cq->ready_queue);
sq->stalled_bytes -= qm->len; sq->upcoming_bytes -= qm->len;
sq->ready_bytes += qm->len; sq->ready_bytes += qm->len;
} }
// Update min_ready_clock // Update min_ready_clock
@ -714,7 +714,7 @@ serialqueue_free(struct serialqueue *sq)
&sq->pending_queues, struct command_queue, node); &sq->pending_queues, struct command_queue, node);
list_del(&cq->node); list_del(&cq->node);
message_queue_free(&cq->ready_queue); message_queue_free(&cq->ready_queue);
message_queue_free(&cq->stalled_queue); message_queue_free(&cq->upcoming_queue);
} }
pthread_mutex_unlock(&sq->lock); pthread_mutex_unlock(&sq->lock);
pollreactor_free(sq->pr); pollreactor_free(sq->pr);
@ -728,7 +728,7 @@ serialqueue_alloc_commandqueue(void)
struct command_queue *cq = malloc(sizeof(*cq)); struct command_queue *cq = malloc(sizeof(*cq));
memset(cq, 0, sizeof(*cq)); memset(cq, 0, sizeof(*cq));
list_init(&cq->ready_queue); list_init(&cq->ready_queue);
list_init(&cq->stalled_queue); list_init(&cq->upcoming_queue);
return cq; return cq;
} }
@ -738,7 +738,7 @@ serialqueue_free_commandqueue(struct command_queue *cq)
{ {
if (!cq) if (!cq)
return; return;
if (!list_empty(&cq->ready_queue) || !list_empty(&cq->stalled_queue)) { if (!list_empty(&cq->ready_queue) || !list_empty(&cq->upcoming_queue)) {
errorf("Memory leak! Can't free non-empty commandqueue"); errorf("Memory leak! Can't free non-empty commandqueue");
return; return;
} }
@ -784,12 +784,12 @@ serialqueue_send_batch(struct serialqueue *sq, struct command_queue *cq
return; return;
qm = list_first_entry(msgs, struct queue_message, node); qm = list_first_entry(msgs, struct queue_message, node);
// Add list to cq->stalled_queue // Add list to cq->upcoming_queue
pthread_mutex_lock(&sq->lock); pthread_mutex_lock(&sq->lock);
if (list_empty(&cq->ready_queue) && list_empty(&cq->stalled_queue)) if (list_empty(&cq->ready_queue) && list_empty(&cq->upcoming_queue))
list_add_tail(&cq->node, &sq->pending_queues); list_add_tail(&cq->node, &sq->pending_queues);
list_join_tail(msgs, &cq->stalled_queue); list_join_tail(msgs, &cq->upcoming_queue);
sq->stalled_bytes += len; sq->upcoming_bytes += len;
int mustwake = 0; int mustwake = 0;
if (qm->min_clock < sq->need_kick_clock) { if (qm->min_clock < sq->need_kick_clock) {
sq->need_kick_clock = 0; sq->need_kick_clock = 0;
@ -925,13 +925,13 @@ serialqueue_get_stats(struct serialqueue *sq, char *buf, int len)
" bytes_retransmit=%u bytes_invalid=%u" " bytes_retransmit=%u bytes_invalid=%u"
" send_seq=%u receive_seq=%u retransmit_seq=%u" " send_seq=%u receive_seq=%u retransmit_seq=%u"
" srtt=%.3f rttvar=%.3f rto=%.3f" " srtt=%.3f rttvar=%.3f rto=%.3f"
" ready_bytes=%u stalled_bytes=%u" " ready_bytes=%u upcoming_bytes=%u"
, stats.bytes_write, stats.bytes_read , stats.bytes_write, stats.bytes_read
, stats.bytes_retransmit, stats.bytes_invalid , stats.bytes_retransmit, stats.bytes_invalid
, (int)stats.send_seq, (int)stats.receive_seq , (int)stats.send_seq, (int)stats.receive_seq
, (int)stats.retransmit_seq , (int)stats.retransmit_seq
, stats.srtt, stats.rttvar, stats.rto , stats.srtt, stats.rttvar, stats.rto
, stats.ready_bytes, stats.stalled_bytes); , stats.ready_bytes, stats.upcoming_bytes);
} }
// Extract old messages stored in the debug queues // Extract old messages stored in the debug queues