* blkid: excessive random reads probing for ZFS on NTFS filesystem
@ 2011-06-12 19:02 John Lindgren
2011-06-20 11:16 ` Karel Zak
0 siblings, 1 reply; 9+ messages in thread
From: John Lindgren @ 2011-06-12 19:02 UTC (permalink / raw)
To: util-linux
Hi,
I noticed blkid causing a noticeable amount of disk hits while
identifying an NTFS (Win7) partition, and did an strace to find out why
this was. It seems that the probe_zfs() function does a
seek-and-read-41-bytes pattern 64 times in the 130 to 520 KB region of
the partition. This of course is slow on a traditional hard disk, and
seems excessive. I don't know the internals of NTFS or of ZFS. Can
someone with a little more knowledge in this area provide some pointers
as to why this might be happening?
-- John Lindgren
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-12 19:02 blkid: excessive random reads probing for ZFS on NTFS filesystem John Lindgren
@ 2011-06-20 11:16 ` Karel Zak
2011-06-20 11:59 ` John Lindgren
2011-06-20 12:02 ` John Lindgren
0 siblings, 2 replies; 9+ messages in thread
From: Karel Zak @ 2011-06-20 11:16 UTC (permalink / raw)
To: John Lindgren; +Cc: util-linux, Andreas Dilger
On Sun, Jun 12, 2011 at 03:02:48PM -0400, John Lindgren wrote:
> I noticed blkid causing a noticeable amount of disk hits while
> identifying an NTFS (Win7) partition, and did an strace to find out why
> this was. It seems that the probe_zfs() function does a
> seek-and-read-41-bytes pattern 64 times in the 130 to 520 KB region of
> the partition.
Is it really so big problem on traditional HDDs?
> This of course is slow on a traditional hard disk, and
> seems excessive. I don't know the internals of NTFS or of ZFS. Can
> someone with a little more knowledge in this area provide some pointers
> as to why this might be happening?
CC: Andreas who is the code (co)author.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 11:16 ` Karel Zak
@ 2011-06-20 11:59 ` John Lindgren
2011-06-20 12:46 ` Karel Zak
2011-06-20 12:02 ` John Lindgren
1 sibling, 1 reply; 9+ messages in thread
From: John Lindgren @ 2011-06-20 11:59 UTC (permalink / raw)
To: Karel Zak; +Cc: util-linux, Andreas Dilger
On 06/20/2011 07:16 AM, Karel Zak wrote:
> On Sun, Jun 12, 2011 at 03:02:48PM -0400, John Lindgren wrote:
>> I noticed blkid causing a noticeable amount of disk hits while
>> identifying an NTFS (Win7) partition, and did an strace to find out why
>> this was. It seems that the probe_zfs() function does a
>> seek-and-read-41-bytes pattern 64 times in the 130 to 520 KB region of
>> the partition.
> Is it really so big problem on traditional HDDs?
Many traditional HD's are rated with a seek time of ~10 ms (though I
work with older hardware mostly; newer ones may be better). So by a
naive calculation that would make probe_zfs take 0.64 seconds. Now, in
the case of probe_zfs, the seeks have good locality, so in practice it
will not take that long -- provided blkid is the only program accessing
the disk at that time. If the system has some sort of read-ahead
process running during boot (as I do), then locality is lost for both
blkid and the read-ahead process, and you get thrashing.
Also take into consideration that while 64 seeks may not seem excessive
in itself, that is for only one filesystem, and blkid checks something
on the order of 40 different filesystems. (Fortunately none of the
others take anywhere near the number of seeks that zfs_probe does.)
Andreas: As far as implementation, I think the ZFS code could be
improved by parsing the name-value pair list *before* searching for a
valid uberblock, rather than after. I don't have any ZFS filesystems
around to test with, or I would try to do this myself.
-- John
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 11:16 ` Karel Zak
2011-06-20 11:59 ` John Lindgren
@ 2011-06-20 12:02 ` John Lindgren
1 sibling, 0 replies; 9+ messages in thread
From: John Lindgren @ 2011-06-20 12:02 UTC (permalink / raw)
To: Karel Zak; +Cc: util-linux
On 06/20/2011 07:16 AM, Karel Zak wrote:
> CC: Andreas who is the code (co)author.
His sun.com address is not active any more (as you have probably noticed).
-- John
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 11:59 ` John Lindgren
@ 2011-06-20 12:46 ` Karel Zak
2011-06-20 13:05 ` John Lindgren
0 siblings, 1 reply; 9+ messages in thread
From: Karel Zak @ 2011-06-20 12:46 UTC (permalink / raw)
To: John Lindgren; +Cc: util-linux, Andreas Dilger
On Mon, Jun 20, 2011 at 07:59:15AM -0400, John Lindgren wrote:
> On 06/20/2011 07:16 AM, Karel Zak wrote:
> > On Sun, Jun 12, 2011 at 03:02:48PM -0400, John Lindgren wrote:
> >> I noticed blkid causing a noticeable amount of disk hits while
> >> identifying an NTFS (Win7) partition, and did an strace to find out why
> >> this was. It seems that the probe_zfs() function does a
> >> seek-and-read-41-bytes pattern 64 times in the 130 to 520 KB region of
> >> the partition.
> > Is it really so big problem on traditional HDDs?
> Many traditional HD's are rated with a seek time of ~10 ms (though I
> work with older hardware mostly; newer ones may be better). So by a
> naive calculation that would make probe_zfs take 0.64 seconds. Now, in
> the case of probe_zfs, the seeks have good locality, so in practice it
> will not take that long -- provided blkid is the only program accessing
> the disk at that time. If the system has some sort of read-ahead
> process running during boot (as I do), then locality is lost for both
> blkid and the read-ahead process, and you get thrashing.
>
> Also take into consideration that while 64 seeks may not seem excessive
> in itself, that is for only one filesystem, and blkid checks something
> on the order of 40 different filesystems. (Fortunately none of the
> others take anywhere near the number of seeks that zfs_probe does.)
Unfortunately, the old less expensive version of the ZFS detection
code was insufficient. See Andreas' patches:
commit e54a76ca076625b1883ddf0595162eb8de81d5d1
Author: Andreas Dilger <adilger@sun.com>
Date: Wed Feb 17 10:21:27 2010 +0100
commit a1fbeb3df35d1441c4ef64ea7e04c2b1fda38ba2
Author: Andreas Dilger <adilger@sun.com>
Date: Thu Mar 11 15:16:46 2010 +0100
> Andreas: As far as implementation, I think the ZFS code could be
> improved by parsing the name-value pair list *before* searching for a
> valid uberblock, rather than after.
Doesn't depend the position of the list on the position of the valid
uberblock?
> I don't have any ZFS filesystems
> around to test with, or I would try to do this myself.
There is a test image, see tests/ts/blkid/images-fs/zfs.img.bz2
Maybe you can try to move zfs to the end of the probed filesystems
in libblkid/src/superblocks/superblocks.c. It would be better to
probe for exotic and "expensive" filesytems later.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 12:46 ` Karel Zak
@ 2011-06-20 13:05 ` John Lindgren
2011-06-20 14:04 ` Karel Zak
0 siblings, 1 reply; 9+ messages in thread
From: John Lindgren @ 2011-06-20 13:05 UTC (permalink / raw)
To: Karel Zak; +Cc: util-linux, Andreas Dilger
On 06/20/2011 08:46 AM, Karel Zak wrote:
> Unfortunately, the old less expensive version of the ZFS detection
> code was insufficient. See Andreas' patches:
>
> commit e54a76ca076625b1883ddf0595162eb8de81d5d1
> Author: Andreas Dilger <adilger@sun.com>
> Date: Wed Feb 17 10:21:27 2010 +0100
>
> commit a1fbeb3df35d1441c4ef64ea7e04c2b1fda38ba2
> Author: Andreas Dilger <adilger@sun.com>
> Date: Thu Mar 11 15:16:46 2010 +0100
Understood. The older implementation performed a less thorough search
for a valid uberblock, which I would expect to sometimes fail.
>> Andreas: As far as implementation, I think the ZFS code could be
>> improved by parsing the name-value pair list *before* searching for a
>> valid uberblock, rather than after.
> Doesn't depend the position of the list on the position of the valid
> uberblock?
No, it's at a fixed offset of 16k within the vdev label (before the
uberblock array, which is at 128k).
>> I don't have any ZFS filesystems
>> around to test with, or I would try to do this myself.
> There is a test image, see tests/ts/blkid/images-fs/zfs.img.bz2
Okay, thanks.
> Maybe you can try to move zfs to the end of the probed filesystems
> in libblkid/src/superblocks/superblocks.c. It would be better to
> probe for exotic and "expensive" filesytems later.
I did try that; however, blkid checks *all* filesystems, even after it
finds a match, just in case two probes turn up positive. Even passing
"-n nozfs" doesn't actually prevent it from checking for ZFS.
Maybe it would be better to change this behavior and leave the ZFS code
as is?
-- John
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 13:05 ` John Lindgren
@ 2011-06-20 14:04 ` Karel Zak
2011-06-20 14:20 ` John Lindgren
0 siblings, 1 reply; 9+ messages in thread
From: Karel Zak @ 2011-06-20 14:04 UTC (permalink / raw)
To: John Lindgren; +Cc: util-linux, Andreas Dilger
On Mon, Jun 20, 2011 at 09:05:36AM -0400, John Lindgren wrote:
> I did try that; however, blkid checks *all* filesystems, even after it
> finds a match, just in case two probes turn up positive. Even passing
> "-n nozfs" doesn't actually prevent it from checking for ZFS.
The name of the FS in libblkid is zfs_member :-)
blkid -p -o udev -n nozfs_member
Yeah, crazy name, see our TODO file:
- add something like "blkid --list-known" to list all supported
filesystems/raids
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 14:04 ` Karel Zak
@ 2011-06-20 14:20 ` John Lindgren
2011-06-20 14:57 ` Karel Zak
0 siblings, 1 reply; 9+ messages in thread
From: John Lindgren @ 2011-06-20 14:20 UTC (permalink / raw)
To: Karel Zak; +Cc: util-linux, Andreas Dilger
On 06/20/2011 10:04 AM, Karel Zak wrote:
> On Mon, Jun 20, 2011 at 09:05:36AM -0400, John Lindgren wrote:
>> I did try that; however, blkid checks *all* filesystems, even after it
>> finds a match, just in case two probes turn up positive. Even passing
>> "-n nozfs" doesn't actually prevent it from checking for ZFS.
> The name of the FS in libblkid is zfs_member :-)
>
> blkid -p -o udev -n nozfs_member
>
> Yeah, crazy name, see our TODO file:
>
> - add something like "blkid --list-known" to list all supported
> filesystems/raids
>
> Karel
My bad. "-n nozfs_member" does work, so I will add it to my udev rules
locally.
Perhaps a "-q/--quick" option could be added to blkid to allow an early
exit once the first positive match is found? Then more difficult checks
such as ZFS could be moved to the end of the list, as you suggest, with
a performance benefit.
-- John
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: blkid: excessive random reads probing for ZFS on NTFS filesystem
2011-06-20 14:20 ` John Lindgren
@ 2011-06-20 14:57 ` Karel Zak
0 siblings, 0 replies; 9+ messages in thread
From: Karel Zak @ 2011-06-20 14:57 UTC (permalink / raw)
To: John Lindgren; +Cc: util-linux, Andreas Dilger
On Mon, Jun 20, 2011 at 10:20:02AM -0400, John Lindgren wrote:
> On 06/20/2011 10:04 AM, Karel Zak wrote:
> > On Mon, Jun 20, 2011 at 09:05:36AM -0400, John Lindgren wrote:
> >> I did try that; however, blkid checks *all* filesystems, even after it
> >> finds a match, just in case two probes turn up positive. Even passing
> >> "-n nozfs" doesn't actually prevent it from checking for ZFS.
> > The name of the FS in libblkid is zfs_member :-)
> >
> > blkid -p -o udev -n nozfs_member
> >
> > Yeah, crazy name, see our TODO file:
> >
> > - add something like "blkid --list-known" to list all supported
> > filesystems/raids
Implemented,
blkid -k
lists all known filesystems/RAIDs now.
> Perhaps a "-q/--quick" option could be added to blkid to allow an early
> exit once the first positive match is found?
That's dangerous, and many times rejected by udev upstream. The
mainstream distributions rely on the automatic FS detection on many
places. We are not able to control mkfs and partitioning tools, so we
are not sure that the device has been properly wiped and there is
really only one valid superblock. We already have bad experience with
FAT, linux swap, luks, ... some people already lost data.
> Then more difficult checks
> such as ZFS could be moved to the end of the list, as you suggest, with
> a performance benefit.
What about to set to blkid (during boot) greater I/O priority than to
read-ahead?
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-06-20 14:57 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-12 19:02 blkid: excessive random reads probing for ZFS on NTFS filesystem John Lindgren
2011-06-20 11:16 ` Karel Zak
2011-06-20 11:59 ` John Lindgren
2011-06-20 12:46 ` Karel Zak
2011-06-20 13:05 ` John Lindgren
2011-06-20 14:04 ` Karel Zak
2011-06-20 14:20 ` John Lindgren
2011-06-20 14:57 ` Karel Zak
2011-06-20 12:02 ` John Lindgren
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.