<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Andreas,</p>
<p>Thank you for your reply. I am not asking about the Hybrid I/O
feature. A bit more on that later. I am asking about the
oti_dio_pages ( Direct I/O ) path through the OSS. With some
experimentation last night I was able to confirm that an OSS uses
Direct I/O when the incoming client request is 8MB or greater. On
the system I am running on ( clients version 2.14 and server
version as reported by pminfo is lustre.sys.version=2
lustre.sys.build=0_ddn218 ) it appears that the reads and writes
use the server cache when the user requests are less that 8MB and
using non-rotational OSTs. The OSS could have been configured
this way. I will check with admin next week.</p>
<p>Back to Hybrid I/O. It concerns me that there is no mechanism is
user space that will allow a client application to specify legacy
client-side buffering on a per-file basis, independent of request
size. I envision plenty of cases where a client application is
running dedicated on a 1TB memory client node, which leaves 500
MB for Lustre caching, and the application is doing large request
I/O to a file that is under 500MB. The client application would
now be subject to Hybrid's direct I/O even though the entire file
could be buffer cached on the client. Am I misunderstanding
something here?</p>
<p>Thanks again,</p>
<p>John</p>
<div class="moz-cite-prefix">On 1/9/2026 7:02 PM, Andreas Dilger
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:6BE982D1-69BC-46CC-8D4F-8A40BA47703E@thelustrecollective.com">
<pre wrap="" class="moz-quote-pre">Hi John,
are you asking about the Hybrid IO feature in 2.16+ Lustre releases,
or something else?
There is a client-side "llite.*.hybrid_io" parameter that can enable/disable Hybrid IO on a client completely, and the
llite.*.hybrid_io_write_threshold_bytes and
llite.*.hybrid_io_read_threshold_bytes can be used to tune the
IO size threshold where IO changes between buffered and direct.
Applications can of course use open(O_DIRECT) to use DIO instead of
buffered IO.
As for the server-side non-buffered IO path, this is controlled by
the osd-ldiskfs.*.readcache_max_io_mb and .writethrough_max_io_mb
parameters, both default to 8 MiB. Note that flash (non-rotational)
OSTs disable read and write cache entirely by default, since NVMe
devices are typically fast enough to handle incoming IO.
I don't think there is any way for clients to fetch these parameters
directly, since they are more a property of the OST than the client.
Cheers, Andreas
On Jan 9, 2026, at 14:32, John Bauer <<a class="moz-txt-link-abbreviated" href="mailto:bauerj@iodoctors.com">bauerj@iodoctors.com</a> <a class="moz-txt-link-rfc2396E" href="mailto:bauerj@iodoctors.com"><mailto:bauerj@iodoctors.com></a>> wrote:
</pre>
<blockquote type="cite">
<pre wrap="" class="moz-quote-pre">
Hello all,
Is the a way to determine what size a client I/O request must be to trigger the OSS to use the Large File ( non-buffered ) I/O path? Is this configurable?
Is there a way for a client-side application to trigger this behavior independent of the I/O size?
</pre>
</blockquote>
<pre wrap="" class="moz-quote-pre">
---
Andreas Dilger
Principal Lustre Architect
<a class="moz-txt-link-abbreviated" href="mailto:adilger@thelustrecollective.com">adilger@thelustrecollective.com</a>
</pre>
</blockquote>
</body>
</html>