Direct I/O under Linux

Eric Lowe (ELowe@SYSTRAN.com)
Mon, 29 Mar 1999 11:04:34 -0500


This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------_=_NextPart_001_01BE79FD.D6965D00
Content-Type: text/plain;
charset="iso-8859-1"

As a FibreChannel device driver developer, I've found it necessary to
implement Direct I/O under the 2.2 kernel. It is simply impossible to get a
device to reach 100MB/second sustained throughput without some way to
directly access user pages.

I've written a good deal of code to do this, but have one question. Is
there a way to get the symbols from mm/memory.c? I want to be able to get
to the function make_pages_present() (or the function it calls) in order to
bring in potentially swapped pages before locking them. My workaround 'til
now (which works) is to do a copy_from_user() to copy the first byte of each
page in if pte_present() returns false. I would prefer to include a
less-hackish approach in the final release driver (which is close to being
finished). After I'm satisfied my code doesn't stink, I'll release it to
anyone else who wants to use it.

The main reason I'm crying for the function in memory.c is that a
requirement of this driver project (company imposed) is that we don't
distribute kernel patches, since some of our customers are timid when it
comes to modifying their kernels (e.g. they won't go any further than a
dynamically loadable module, let alone "patching their kernel").

Any comments/suggestions/etc?

--
Eric Lowe
elowe@systran.com
Software Engineer Co-op, Systran Corporation
937-252-5601 x330

------_=_NextPart_001_01BE79FD.D6965D00 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> Direct I/O under Linux

As a FibreChannel device driver developer, I've found = it necessary to implement Direct I/O under the 2.2 kernel.  It is = simply impossible to get a device to reach 100MB/second sustained = throughput without some way to directly access user pages.

I've written a good deal of code to do this, but have = one question.  Is there a way to get the symbols from = mm/memory.c?  I want to be able to get to the function = make_pages_present() (or the function it calls) in order to bring in = potentially swapped pages before locking them.  My workaround 'til = now (which works) is to do a copy_from_user() to copy the first byte of = each page in if pte_present() returns false.  I would prefer to = include a less-hackish approach in the final release driver (which is = close to being finished).  After I'm satisfied my code doesn't = stink, I'll release it to anyone else who wants to use it.

The main reason I'm crying for the function in = memory.c is that a requirement of this driver project (company imposed) = is that we don't distribute kernel patches, since some of our customers = are timid when it comes to modifying their kernels (e.g. they won't go = any further than a dynamically loadable module, let alone = "patching their kernel").

Any comments/suggestions/etc?

--
Eric Lowe
elowe@systran.com
Software Engineer Co-op, Systran Corporation
937-252-5601 x330

------_=_NextPart_001_01BE79FD.D6965D00--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/