<!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>