0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Thread IO: a little bit faster RX repeat

This commit is contained in:
Maria Matejka 2024-06-08 20:06:52 +02:00
parent f516d7cfe9
commit 661193cf98
2 changed files with 13 additions and 2 deletions

View File

@ -21,6 +21,7 @@ extern _Thread_local struct birdloop *this_birdloop;
/* Check that the task has enough time to do a bit more */
_Bool task_still_in_limit(void);
_Bool task_before_halftime(void);
#define MAYBE_DEFER_TASK(target, event, fmt, args...) do { \
if (!task_still_in_limit()) { \

View File

@ -543,9 +543,14 @@ sockets_fire(struct birdloop *loop)
if (rev & POLLIN)
/* Read just one packet and request repeat. */
if ((s == loop->sock_active) && s->rx_hook)
if (sk_read(s, rev))
while ((s == loop->sock_active) && s->rx_hook)
if (!task_before_halftime())
{
repeat++;
break;
}
else if (!sk_read(s, rev))
break;
if (s != loop->sock_active)
continue;
@ -1356,6 +1361,11 @@ _Bool task_still_in_limit(void)
return ns_now() < account_last + this_thread->max_loop_time_ns;
}
_Bool task_before_halftime(void)
{
return ns_now() < account_last + this_thread->max_loop_time_ns / 2;
}
/*
* Birdloop