diff mbox

drivers/char/hvc_console.c: reduce max idle timeout

Message ID 201010271659.o9RGxrMc009847@farm-0002.internal.tilera.com (mailing list archive)
State Changes Requested
Headers show

Commit Message

Chris Metcalf Oct. 27, 2010, 4:54 p.m. UTC
The tile architecture uses this framework for our serial console,
and our users complain that the delay of up to two seconds feels like
the machine has gone non-responsive and is disturbing.  By contrast,
a delay of up to half a second feels like just the normal sort of
delay caused by swapping, network lag, etc. and is not noticeable.
The overhead is obviously not much greater.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
---

I'm happy to push this via the tile tree if the linuxppc-dev folks
want to give me an acked-by, or you can take it into your tree.  Thanks!

 drivers/char/hvc_console.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Alan Cox Oct. 27, 2010, 7:21 p.m. UTC | #1
On Wed, 27 Oct 2010 12:54:27 -0400
Chris Metcalf <cmetcalf@tilera.com> wrote:

> The tile architecture uses this framework for our serial console,

That may be a mistake unless your console is genuinely only capable of
polled input.

Alan
Chris Metcalf Oct. 27, 2010, 7:46 p.m. UTC | #2
On 10/27/2010 3:21 PM, Alan Cox wrote:
> On Wed, 27 Oct 2010 12:54:27 -0400 Chris Metcalf <cmetcalf@tilera.com> wrote:
>> The tile architecture uses this framework for our serial console,
> That may be a mistake unless your console is genuinely only capable of
> polled input.

The console is in fact interrupt-driven within the hypervisor, and data is
buffered there.  However, the current hypervisor console API is only
"write" and "read".  We have a bugzilla to add console interrupts to the
hypervisor API and use them from Linux, but we haven't done it yet.
Michael Ellerman Nov. 2, 2010, 12:35 a.m. UTC | #3
On Wed, 2010-10-27 at 12:54 -0400, Chris Metcalf wrote:
> The tile architecture uses this framework for our serial console,
> and our users complain that the delay of up to two seconds feels like
> the machine has gone non-responsive and is disturbing.  By contrast,
> a delay of up to half a second feels like just the normal sort of
> delay caused by swapping, network lag, etc. and is not noticeable.
> The overhead is obviously not much greater.

It's 4 times greater.

We picked 2 seconds because it gave a reasonable trade off between
responsiveness and load. I'm not convinced that half a second is a
better number.

cheers
Chris Metcalf Nov. 2, 2010, 2:21 a.m. UTC | #4
On 11/1/2010 8:35 PM, Michael Ellerman wrote:
> On Wed, 2010-10-27 at 12:54 -0400, Chris Metcalf wrote:
>> The tile architecture uses this framework for our serial console,
>> and our users complain that the delay of up to two seconds feels like
>> the machine has gone non-responsive and is disturbing.  By contrast,
>> a delay of up to half a second feels like just the normal sort of
>> delay caused by swapping, network lag, etc. and is not noticeable.
>> The overhead is obviously not much greater.
> It's 4 times greater.
>
> We picked 2 seconds because it gave a reasonable trade off between
> responsiveness and load. I'm not convinced that half a second is a
> better number.

Perhaps the tradeoff should be tunable, then?  I think on our architecture
we're willing to pay a higher cost on the core running this task, since we
have many cores; we often have a core that mostly just runs miscellaneous
Linux administrative tasks anyway, so adding a bit more overhead there is
not significant for us.

This issue has caused multiple reports of unresponsiveness from our users,
so I'd be interested in finding a way to strike a balance.  We could use a
config option defaulting to 2 seconds (for example), or something more
dynamic (probably unnecessary).

Let me know your preference, if this sounds plausible, and I'll write up a
proposed patch.  Thanks.
diff mbox

Patch

diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
index 3afd62e..1df5431 100644
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -565,11 +565,11 @@  static int hvc_chars_in_buffer(struct tty_struct *tty)
  * and during console activity we will use a default MIN_TIMEOUT of 10.  When
  * the console is idle, we increase the timeout value on each pass through
  * msleep until we reach the max.  This may be noticeable as a brief (average
- * one second) delay on the console before the console responds to input when
+ * 0.25 second) delay on the console before the console responds to input when
  * there has been no input for some time.
  */
 #define MIN_TIMEOUT		(10)
-#define MAX_TIMEOUT		(2000)
+#define MAX_TIMEOUT		(500)
 static u32 timeout = MIN_TIMEOUT;
 
 #define HVC_POLL_READ	0x00000001