Files
mirror_zfs/include/sys
Alexander Motin 8469b5aac0 Another set of vdev queue optimizations.
Switch FIFO queues (SYNC/TRIM) and active queue of vdev queue from
time-sorted AVL-trees to simple lists.  AVL-trees are too expensive
for such a simple task.  To change I/O priority without searching
through the trees, add io_queue_state field to struct zio.

To not check number of queued I/Os for each priority add vq_cqueued
bitmap to struct vdev_queue.  Update it when adding/removing I/Os.
Make vq_cactive a separate array instead of struct vdev_queue_class
member.  Together those allow to avoid lots of cache misses when
looking for work in vdev_queue_class_to_issue().

Introduce deadline of ~0.5s for LBA-sorted queues.  Before this I
saw some I/Os waiting in a queue for up to 8 seconds and possibly
more due to starvation.  With this change I no longer see it.  I
had to slightly more complicate the comparison function, but since
it uses all the same cache lines the difference is minimal.  For a
sequential I/Os the new code in vdev_queue_io_to_issue() actually
often uses more simple avl_first(), falling back to avl_find() and
avl_nearest() only when needed.

Arrange members in struct zio to access only one cache line when
searching through vdev queues.  While there, remove io_alloc_node,
reusing the io_queue_node instead.  Those two are never used same
time.

Remove zfs_vdev_aggregate_trim parameter.  It was disabled for 4
years since implemented, while still wasted time maintaining the
offset-sorted tree of TRIM requests.  Just remove the tree.

Remove locking from txg_all_lists_empty().  It is racy by design,
while 2 pair of locks/unlocks take noticeable time under the vdev
queue lock.

With these changes in my tests with volblocksize=4KB I measure vdev
queue lock spin time reduction by 50% on read and 75% on write.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
Sponsored by:	iXsystems, Inc.
Closes #14925
2023-06-27 09:09:48 -07:00
..
2022-05-10 10:18:51 -07:00
2022-05-25 09:18:49 -07:00
2021-06-07 09:02:47 -07:00
2023-06-15 10:49:03 -07:00
2023-06-15 10:49:03 -07:00
2023-01-25 11:30:24 -08:00
2023-01-10 13:39:22 -08:00
2023-05-11 16:06:36 -07:00
2023-03-10 11:59:53 -08:00
2023-03-14 15:25:50 -07:00
2023-05-09 09:03:10 -07:00
2017-10-11 16:54:48 -04:00
2021-06-10 10:42:31 -06:00
2019-06-19 09:48:12 -07:00
2022-07-11 14:16:13 -07:00
2023-06-09 12:40:55 -07:00
2022-09-06 09:43:21 -07:00
2022-10-20 11:57:15 -07:00
2018-02-08 15:28:18 -08:00
2022-10-29 13:05:11 -07:00
2023-05-25 13:51:53 -07:00
2022-06-29 14:08:54 -07:00
2020-07-03 11:05:50 -07:00
2023-06-27 09:09:48 -07:00
2023-01-05 09:31:55 -08:00