On Fri, May 03, 2013 at 10:27:18PM +0400, Stas Sergeev wrote:Line discipline only provides the .poll method, like this:03.05.2013 21:16, Greg KH ÐÐÑÐÑ:I think that's the line dicipline doing this, not select itself.
Sounds like an application is doing a foolish thing and should stop it.Its not.
The app is quering only for _input_ (specifying only read fds
to select). But the select() in linux is implemented the way that
even when it polls for input, it will still call tty_chars_in_buffer()...
It does so only for one char. And the query takes longer thanI don't understand, what do you mean by this? Some drivers just returnThere's no guarantee as to how long select or an ioctl will take, andPreviously, the kernel was not calling to a device at all, so
now that we have fixed another bug, this device is slower.
If you change hardware types to use a different usb to serial chip, that
select call might take 4 times as long. Are we somehow supposed to
change the kernel to "fix" that?
select() was independent of the chip, and it was fast. I was
not aware you changed that willingly.
the value of an internally held number, and don't query the device.
The only way the FTDI driver can determine if the hardware buffer on the
chip way out on the end of the USB cable is empty or not, is to query
it. So the driver now does so.
Because, as I said, this polls for an input, not output...Every character? Why?Sure, but the throughput was not improved by the aforementionedThat's really not a valid test case, as it's nothing that we everNo idea.I asked the customer to comment outWhat exactly is the "problem" being seen?
tty_chars_in_buffer(tty) < WAKEUP_CHARS
line in n_tty.c, and he said that cured his problems,
so I think my guess was right.
Well, I can make a test-case that does 1000000 select() calls
in a loop and time it. This is probably the best I can do.
optimize a serial driver for. Throughput is the proper thing to care
about, right?
patch, so what was the upside of it?
To actually determine how many characters the device has in its buffer.You are adding only 1 char, but the time to query TEMT is
probably longer than to xmit 1 char. So how could it help
in some real scenario? When you done quering TEMT, the
char is actually already sent, so the effect is quite the reverse.
My scenario is:
the app calls select() before xmitting every char.
Don't call select for every character :)How about the "we do not break userspace" rule?