2006-11-10 05:44:14

by Jonathan Day

[permalink] [raw]
Subject: Zero-copy question

Hi,

I'm working on a problem involving zero-copy between
an external device and physical memory, where the
total length of data is not known in advance, where
allowance must be made for non-contiguous pages in
physical memory and where any number of simultaneous
channels can be going in parallel.

Whilst I am waiting for suitable medication to arrive,
I've been trying to figure out a way in which this
problem can be solved.

My first question would be: has anyone already solved
this, thus saving my sanity? When I've looked up
zero-copy, the main reference I've found is for moving
data from fixed storage to a network. This is useful,
but doesn't quite solve the problem at hand, as you
never need more than a page at a time, so don't have
memory fragmentation to contend with.

My second question is then: assuming that zero-copy in
these situations has been deemed a Bad Idea for
whatever reason, what is the fastest method of doing
bi-directional transfers? (Feel free to assume some
logic on the device.)

Finally, I'd be interested in hearing the opinions of
Linux kernel developers on using structured memory
groups in the kernel for parallel I/O of this kind,
abandoning the zero-copy approach. Although I know a
fair number of kernel projects, I don't know of one
that uses SMGs - am I missing some obvious ones or is
there a known reason for avoiding the SMG approach?

Jonathan Day




____________________________________________________________________________________
Want to start your own business?
Learn how on Yahoo! Small Business.
http://smallbusiness.yahoo.com/r-index