qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] block/raw-posix.c:hdev_create() on FreeBSD and in gener


From: M. Warner Losh
Subject: Re: [Qemu-devel] block/raw-posix.c:hdev_create() on FreeBSD and in general
Date: Wed, 20 May 2009 10:24:40 -0600 (MDT)

In message: <address@hidden>
            Christoph Hellwig <address@hidden> writes:
: On Wed, May 20, 2009 at 08:41:24AM -0600, M. Warner Losh wrote:
: > : Also I think we should allow creating the host devices on all supported
: > : operating systems.  For Linux we should use block devices, for FreeBSD
: > : always char devices.  For the other BSDs and Solaris do we allow only
: > : block or also the raw char devices?  Not sure if they actually support
: > : O_DIRECT for block devices nodes which pretty much is a Linux-ism so
: > : for cache=none at least we should probably open the raw nodes..
: > 
: > Other BSDs still have block devices.  O_DIRECT is supported in at
: > least NetBSD (and FreeBSD).
: 
: Well, O_DIRECT on block devices.  On Linux a block device opened with
: O_DIRECT is the equivalent to the traditional BSD raw devices.  My last
: look at freebsd was that there is no support for buffered access to block
: device at all since the removal of the block device nodes.

Well, it depends on what you mean by buffered.  O_DIRECT is supposed
to bypass the buffer cache, at least on FreeBSD:
     O_DIRECT may be used to minimize or eliminate the cache effects of read-
     ing and writing.  The system will attempt to avoid caching the data you
     read or write.  If it cannot avoid caching the data, it will minimize the
     impact the data has on the cache.  Use of this flag can drastically
     reduce performance if not used with care.
so when accessing the device directly, you will still have buffer
cache participation in read/write unless you specify this flag.  In
which case, that's reduced as far as possible.

The main difference between the char devices and the block devices is
that the char devices can only read/write full blocks, while the block
devices used to be able to write 44 bytes at offset 33 if you wanted.

Warner




reply via email to

[Prev in Thread] Current Thread [Next in Thread]