From owner-freebsd-hackers@FreeBSD.ORG Sun Nov 20 04:58:17 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C35F1106564A; Sun, 20 Nov 2011 04:58:17 +0000 (UTC) (envelope-from tim@kientzle.com) Received: from monday.kientzle.com (99-115-135-74.uvs.sntcca.sbcglobal.net [99.115.135.74]) by mx1.freebsd.org (Postfix) with ESMTP id 9C92E8FC17; Sun, 20 Nov 2011 04:58:17 +0000 (UTC) Received: (from root@localhost) by monday.kientzle.com (8.14.4/8.14.4) id pAK4wGCL076489; Sun, 20 Nov 2011 04:58:16 GMT (envelope-from tim@kientzle.com) Received: from [192.168.2.119] (CiscoE3000 [192.168.1.65]) by kientzle.com with SMTP id 74gg7fpwxgq332x8q97n6z4qy2; Sun, 20 Nov 2011 04:58:16 +0000 (UTC) (envelope-from tim@kientzle.com) Mime-Version: 1.0 (Apple Message framework v1251.1) Content-Type: text/plain; charset=us-ascii From: Tim Kientzle In-Reply-To: <20111118203122.GA9508@freebsd.org> Date: Sat, 19 Nov 2011 20:58:16 -0800 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20111115202450.GA73512@freebsd.org> <20111116102239.GA2687@britannica.bec.de> <20111116131428.GA40723@freebsd.org> <20111116232152.GC21793@britannica.bec.de> <20111117002438.GA55931@freebsd.org> <201111172055.pAHKtZso061118@triton8.kn-bremen.de> <20111118203122.GA9508@freebsd.org> To: Alexander Best X-Mailer: Apple Mail (2.1251.1) Cc: freebsd-hackers@freebsd.org, Juergen Lock Subject: Re: easy way to determine if a stream or fd is seekable X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Nov 2011 04:58:17 -0000 On Nov 18, 2011, at 12:31 PM, Alexander Best wrote: > On Fri Nov 18 11, Tim Kientzle wrote: >>=20 >> Take a look at=20 >>=20 >> = http://libarchive.googlecode.com/svn/trunk/libarchive/archive_read_open_fi= lename.c >>=20 >> Especially the comments about detecting "disk-like" devices. >> I rewrote a bunch of this code to introduce an explicit >> notion of "strategy" so that we could optimize access >> to a variety of different devices. >>=20 >> This code has a notion of "disk-like" file descriptors and >> some optimizations for such. There are some comments >> in there outlining similar optimizations that could be made >> for "tape-like" or "socket-like" devices. >=20 > great you posted that file as reference. i believe most of the stuff = done there > should actually be done within lseek(). Libarchive runs on a lot of systems other than FreeBSD. FreeBSD is not the only Unix-like system with this issue, so that code isn't going to go out of libarchive regardless. If you think those same ideas can be used in dd or hd to speed them up, please send your patches. The key point: You cannot unconditionally call lseek() to skip over data. Instead, treat lseek() as an optimization that can be used under some circumstances. The question then becomes one of figuring out when that optimization can be enabled. Tim