tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: write alignment matters?
On Jun 23, 2011, at 4:36 25AM, Robert Elz wrote:
> Date: Wed, 22 Jun 2011 19:30:55 -0400 (EDT)
> From: der Mouse <mouse%Rodents-Montreal.ORG@localhost>
> Message-ID: <201106222330.TAA28359%Sparkle.Rodents-Montreal.ORG@localhost>
>
> | But the interface is much older than that, and, even if it's not
> | codified, there's a lot of history behind the notion that userland
> | alignment of write() buffers affects, at most, performance, to the
> | point where I consider it part of the interface.
>
> Not on access to raw devices it isn't, and never was - what Erik Fair
> said (Message-id: <5F005E6A-5441-4BEC-BB3C-4A9B79584BFB%netbsd.org@localhost>)
> was 100% correct - if you're using a raw device, it is up to the
> application to meet whatever the requirements of that particular device
> are, because one of the properties of raw devices is that they don't
> do any kind of rebuffering of data (and the driver must not - that is
> a part of the interface contract).
>
> What the rules are vary from device to device, if you don't like this,
> don't use raw devices. If you want to function on a large subset
> (possibly all) raw devices you need to make your code extremely
> pessimistic about what it can do (align to 4K or so boundary, use
> sizes a multiple of 512, and no bigger than 64KB).
>
For fun, I looked at the (online) man pages from 6th Edition Unix,
which is circa 1976. Without exception, the raw disk (hp, hs, rf, rk,
rp), and tape devices (tm only; raw I/O didn't work on ht) required
buffers to be on word boundaries; for the former, the count had to be
a multiple of 512 bytes, and for the tm tape driver the count had to
be even. (See
http://ftp.math.utah.edu/pub///mirrors/minnie.tuhs.org/PDP-11/Trees/V6/usr/man/man4/)
In other words, Erik is right, at least if we're talking historically.
Of course, at least there it's documented. (I took a quick glance
at the code, too -- it did appear to check for erroneous parameters,
though I think it just truncated the count in some drivers.)
--Steve Bellovin, https://www.cs.columbia.edu/~smb
Home |
Main Index |
Thread Index |
Old Index