Re: [PATCH tty-next 6/7] n_tty: Only perform wakeups for waiters
From: Peter Hurley <hidden>
Date: 2013-11-24 02:29:26
Also in:
lkml
On 11/23/2013 07:23 PM, One Thousand Gnomes wrote:
On Fri, 22 Nov 2013 10:59:24 -0500 Peter Hurley [off-list ref] wrote:quoted
Only wakeup the _waiting_ reader, polls and/or writer(s). Signed-off-by: Peter Hurley <redacted> --- drivers/tty/n_tty.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c index 8f2356e..aae28a6 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c@@ -275,7 +275,8 @@ static void n_tty_check_unthrottle(struct tty_struct *tty) return; n_tty_set_room(tty); n_tty_write_wakeup(tty->link); - wake_up_interruptible_poll(&tty->link->write_wait, POLLOUT); + if (waitqueue_active(&tty->link->write_wait)) + wake_up_interruptible_poll(&tty->link->write_wait, POLLOUT);Does this actually microbenchmark faster ?
Getting on and off the write_wait queue is actually pretty expensive for the "other" pty (the writer), and the unnecessary wakeup from the reader doesn't help. The other chunks are gratuitous. Regards, Peter Hurley PS - This came up because there is some worst-case behavior that I'm looking into fixing. When the userspace reader is very far behind (say because it's reading char-by-char), it doesn't make sense to keep restarting the input processing worker.