Hi all, Can someone explain me or give me a link as to how I/O Scheduling is done in ZFS. (Some kind of algo will do). [Extract from <http://www.opensolaris.org/os/community/zfs/whatis/>] [i]The pipeline operates on I/O dependency graphs and provides scoreboarding, priority, deadline scheduling, out-of-order issue and I/O aggregation. [/i][End] I understand deadline I/O scheduling, hope it is the same as in Linux. (http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20IO%20Schedulers.pdf)However, please elaborate on pipelining and other related stuff. Regards, Libin Varghese. This message posted from opensolaris.org
> I understand deadline I/O scheduling, hope it is the same as in Linux.No, the ZFS model is much more powerful. By design, the Linux I/O scheduler lives entirely *below* the block device interface. The problem with this model is that by the time you get down to the scheduler, you''ve lost crucial semantic information about the I/O and its relationship to other I/Os. This greatly limits what the Linux scheduler can do, because all dependencies are expressed via serialization. That is, if the filesystem wants two I/Os to happen in a defined order, it has to issue the first, wait for it to complete, then issue the second. Thus you have two I/O latencies to wait for, when you could have done it with one if you knew the dependency information. The ZFS I/O pipeline is entirely *above* the block device interface. It accepts groups of I/Os in the form of I/O dependency graphs, so you don''t have architecturally-induced latency like Linux. Anything that is not explicitly dependent can be issued concurrently. Moreover, because ZFS is transactional, all I/Os that belong to the same transaction group can be reordered arbitrarily.> However, please elaborate on pipelining and other related stuff.I''ll get into the pipeline stuff in an upcoming blog entry. Jeff
Jeff Bonwick wrote:>>I understand deadline I/O scheduling, hope it is the same as in Linux. >> >> >No, the ZFS model is much more powerful. > >By design, the Linux I/O scheduler lives entirely *below* the block >device interface. The problem with this model is that by the time >you get down to the scheduler, you''ve lost crucial semantic information >about the I/O and its relationship to other I/Os. > >This greatly limits what the Linux scheduler can do, because all >dependencies are expressed via serialization. That is, if the >filesystem wants two I/Os to happen in a defined order, it has to >issue the first, wait for it to complete, then issue the second. >Thus you have two I/O latencies to wait for, when you could have >done it with one if you knew the dependency information. > >The ZFS I/O pipeline is entirely *above* the block device interface. >It accepts groups of I/Os in the form of I/O dependency graphs, >so you don''t have architecturally-induced latency like Linux. >Anything that is not explicitly dependent can be issued concurrently. >Moreover, because ZFS is transactional, all I/Os that belong to >the same transaction group can be reordered arbitrarily. > >This means that deadline I/O scheduling is above the block device interface. So can we implement other forms of scheduling at this level, like the anticipatory I/O scheduling, complete fair queuing I/O scheduling, etc. Being a newbie into I/O scheduling, would like to get my hands dirty with the other scheduling algo''s. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.opensolaris.org/pipermail/zfs-discuss/attachments/20060129/76f31283/attachment.html>
Jeff Bonwick wrote:>>I understand deadline I/O scheduling, hope it is the same as in Linux. >> >> >No, the ZFS model is much more powerful. > >By design, the Linux I/O scheduler lives entirely *below* the block >device interface. The problem with this model is that by the time >you get down to the scheduler, you''ve lost crucial semantic information >about the I/O and its relationship to other I/Os. > >This greatly limits what the Linux scheduler can do, because all >dependencies are expressed via serialization. That is, if the >filesystem wants two I/Os to happen in a defined order, it has to >issue the first, wait for it to complete, then issue the second. >Thus you have two I/O latencies to wait for, when you could have >done it with one if you knew the dependency information. > >The ZFS I/O pipeline is entirely *above* the block device interface. >It accepts groups of I/Os in the form of I/O dependency graphs, >so you don''t have architecturally-induced latency like Linux. >Anything that is not explicitly dependent can be issued concurrently. >Moreover, because ZFS is transactional, all I/Os that belong to >the same transaction group can be reordered arbitrarily. > >This means that deadline I/O scheduling is above the block device interface. So can we implement other forms of scheduling at this level, like the anticipatory I/O scheduling, complete fair queuing I/O scheduling, etc. Being a newbie into I/O scheduling, would like to get my hands dirty with the other scheduling algo''s. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.opensolaris.org/pipermail/zfs-discuss/attachments/20060130/465851d2/attachment.html>