All of lore.kernel.org
 help / color / mirror / Atom feed
* selective block polling and preadv2/pwritev2 revisited
@ 2015-12-24 14:14 ` Christoph Hellwig
  0 siblings, 0 replies; 20+ messages in thread
From: Christoph Hellwig @ 2015-12-24 14:14 UTC (permalink / raw)
  To: viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, axboe-b10kYP2dOMg
  Cc: milosz-B5zB6C1i6pkAvxtiuMwx3w,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA,
	linux-block-u79uwXL29TY76Z2rM5mHXA,
	linux-api-u79uwXL29TY76Z2rM5mHXA

This series allows to selectively enable/disable polling for completions
in the block layer [1] on a per-I/O basis.  For this it resurrects the
preadv2/pwritev2 syscalls that Milosz prepared a while ago (and which
are much simpler now due to VFS changes that happened in the meantime).
That approach also had a man page update prepared, which I will resubmit
with the current flags once this series makes it in.

Polling for block I/O is important to reduce the latency on flash and
post-flash storage technologies.  On the fastest NVMe controller I have
access to it almost halves latencies from over 7 microseconds to about 4
microseonds.  But it only is usesful if we actually care for the latency
of this particular I/O, and generally is a waste if enabled for all I/O
to a given device.  This series uses the per-I/O flags in preadv2/pwritev2
to control this behavior.  The alternative would be a new O_* flag set
at open time or using fcntl, but this is still to corse-grained for some
applications and we're starting to run out out of open flags.

Note that there are plenty of other use cases for preadv2/pwritev2 as well,
but I'd like to concentrate on this one for now.  Example are: non-blocking
reads (the original purpose), per-I/O O_SYNC, user space support for T10
DIF/DIX applications tags and probably some more.

[1] only supported for NVMe at the moment.

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2016-01-07 14:41 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-24 14:14 selective block polling and preadv2/pwritev2 revisited Christoph Hellwig
2015-12-24 14:14 ` Christoph Hellwig
     [not found] ` <1450966464-6847-1-git-send-email-hch-jcswGhMUV9g@public.gmane.org>
2015-12-24 14:14   ` [PATCH 1/6] vfs: pass a flags argument to vfs_readv/vfs_writev Christoph Hellwig
2015-12-24 14:14     ` Christoph Hellwig
2015-12-24 14:14   ` [PATCH 2/6] vfs: vfs: Define new syscalls preadv2,pwritev2 Christoph Hellwig
2015-12-24 14:14     ` Christoph Hellwig
2015-12-24 14:14   ` [PATCH 3/6] x86: wire up preadv2 and pwritev2 Christoph Hellwig
2015-12-24 14:14     ` Christoph Hellwig
2016-01-04 14:58   ` selective block polling and preadv2/pwritev2 revisited Sagi Grimberg
2016-01-04 14:58     ` Sagi Grimberg
     [not found]     ` <568A889E.4020204-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-01-04 16:39       ` Christoph Hellwig
2016-01-04 16:39         ` Christoph Hellwig
     [not found]         ` <20160104163949.GA17409-jcswGhMUV9g@public.gmane.org>
2016-01-06 17:01           ` Sagi Grimberg
2016-01-06 17:01             ` Sagi Grimberg
2016-01-06 22:49             ` Martin K. Petersen
     [not found]               ` <yq1h9iqiary.fsf-+q57XtR/GgMb6DWv4sQWN6xOck334EZe@public.gmane.org>
2016-01-07 14:41                 ` Sagi Grimberg
2016-01-07 14:41                   ` Sagi Grimberg
2015-12-24 14:14 ` [PATCH 4/6] vfs: add the RWF_HIPRI flag for preadv2/pwritev2 Christoph Hellwig
2015-12-24 14:14 ` [PATCH 5/6] direct-io: only use block polling if explicitly requested Christoph Hellwig
2015-12-24 14:14 ` [PATCH 6/6] blk-mq: enable polling support by default Christoph Hellwig

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.