Hello,
Trying to understand the ZFS IO scheduler, because of the async nature it is not
very apparent, can someone give a short explanation for each of these stack
traces and for their frequency
this is the command
dd if=/dev/zero of=/test/test1/trash count=1 bs=1024k;sync
no other IO is happening to the test pool. OS is on a zfs pool (rpool)
I don''t see any zio_vdev_io_start in any of the function stacks, any
idea why?
dtrace -n ''io:::start { @a[stack()] = count(); }''
dtrace: description ''io:::start '' matched 6 probes
genunix`bdev_strategy+0x44
zfs`vdev_disk_io_start+0x2a8
zfs`zio_execute+0x74
genunix`taskq_thread+0x1a4
unix`thread_start+0x4
20
genunix`bdev_strategy+0x44
zfs`vdev_disk_io_start+0x2a8
zfs`zio_execute+0x74
zfs`vdev_queue_io_done+0x84
zfs`vdev_disk_io_done+0x4
zfs`zio_execute+0x74
genunix`taskq_thread+0x1a4
unix`thread_start+0x4
31
genunix`bdev_strategy+0x44
zfs`vdev_disk_io_start+0x2a8
zfs`zio_execute+0x74
zfs`vdev_mirror_io_start+0x1b4
zfs`zio_execute+0x74
zfs`vdev_mirror_io_start+0x1b4
zfs`zio_execute+0x74
genunix`taskq_thread+0x1a4
unix`thread_start+0x4
34
genunix`bdev_strategy+0x44
zfs`vdev_disk_io_start+0x2a8
zfs`zio_execute+0x74
zfs`vdev_mirror_io_start+0x1b4
zfs`zio_execute+0x74
genunix`taskq_thread+0x1a4
unix`thread_start+0x4
45
genunix`bdev_strategy+0x44
zfs`vdev_disk_io_start+0x2a8
zfs`zio_execute+0x74
zfs`vdev_queue_io_done+0x9c
zfs`vdev_disk_io_done+0x4
zfs`zio_execute+0x74
genunix`taskq_thread+0x1a4
unix`thread_start+0x4
53
--
This message posted from opensolaris.org
tester writes:
> Hello,
>
> Trying to understand the ZFS IO scheduler, because of the async nature
> it is not very apparent, can someone give a short explanation for each
> of these stack traces and for their frequency
>
> this is the command
>
> dd if=/dev/zero of=/test/test1/trash count=1 bs=1024k;sync
>
> no other IO is happening to the test pool. OS is on a zfs pool (rpool)
>
>
> I don''t see any zio_vdev_io_start in any of the function stacks,
any idea why?
>
I assume because of tail calls. If you trace
zio_vdev_io_start() you see it being called but (looking at
source) then it tail calls vdev_mirror_io_start() and so disappears from the
stack.
-r
> dtrace -n ''io:::start { @a[stack()] = count(); }''
>
> dtrace: description ''io:::start '' matched 6 probes
>
>
> genunix`bdev_strategy+0x44
> zfs`vdev_disk_io_start+0x2a8
> zfs`zio_execute+0x74
> genunix`taskq_thread+0x1a4
> unix`thread_start+0x4
> 20
>
> genunix`bdev_strategy+0x44
> zfs`vdev_disk_io_start+0x2a8
> zfs`zio_execute+0x74
> zfs`vdev_queue_io_done+0x84
> zfs`vdev_disk_io_done+0x4
> zfs`zio_execute+0x74
> genunix`taskq_thread+0x1a4
> unix`thread_start+0x4
> 31
>
> genunix`bdev_strategy+0x44
> zfs`vdev_disk_io_start+0x2a8
> zfs`zio_execute+0x74
> zfs`vdev_mirror_io_start+0x1b4
> zfs`zio_execute+0x74
> zfs`vdev_mirror_io_start+0x1b4
> zfs`zio_execute+0x74
> genunix`taskq_thread+0x1a4
> unix`thread_start+0x4
> 34
>
> genunix`bdev_strategy+0x44
> zfs`vdev_disk_io_start+0x2a8
> zfs`zio_execute+0x74
> zfs`vdev_mirror_io_start+0x1b4
> zfs`zio_execute+0x74
> genunix`taskq_thread+0x1a4
> unix`thread_start+0x4
> 45
>
> genunix`bdev_strategy+0x44
> zfs`vdev_disk_io_start+0x2a8
> zfs`zio_execute+0x74
> zfs`vdev_queue_io_done+0x9c
> zfs`vdev_disk_io_done+0x4
> zfs`zio_execute+0x74
> genunix`taskq_thread+0x1a4
> unix`thread_start+0x4
> 53
> --
> This message posted from opensolaris.org
> _______________________________________________
> zfs-discuss mailing list
> zfs-discuss at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/zfs-discuss