From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1M6oeH-0002tw-5I for qemu-devel@nongnu.org; Wed, 20 May 2009 12:28:09 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1M6oeB-0002sK-TV for qemu-devel@nongnu.org; Wed, 20 May 2009 12:28:08 -0400 Received: from [199.232.76.173] (port=36781 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M6oeB-0002sH-O3 for qemu-devel@nongnu.org; Wed, 20 May 2009 12:28:03 -0400 Received: from bsdimp.com ([199.45.160.85]:51538 helo=harmony.bsdimp.com) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1M6oeB-00030I-4i for qemu-devel@nongnu.org; Wed, 20 May 2009 12:28:03 -0400 Date: Wed, 20 May 2009 10:24:40 -0600 (MDT) Message-Id: <20090520.102440.2069461709.imp@bsdimp.com> Subject: Re: [Qemu-devel] block/raw-posix.c:hdev_create() on FreeBSD and in general From: "M. Warner Losh" In-Reply-To: <20090520150320.GA2844@lst.de> References: <20090520080723.GA2957@lst.de> <20090520.084124.1715680382.imp@bsdimp.com> <20090520150320.GA2844@lst.de> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: hch@lst.de Cc: nolan@sigbus.net, qemu-devel@nongnu.org In message: <20090520150320.GA2844@lst.de> Christoph Hellwig 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