unbuffered I/O in Linux

前端 未结 3 2207
忘掉有多难
忘掉有多难 2021-02-14 09:45

I\'m writing lots and lots of data that will not be read again for weeks - as my program runs the amount of free memory on the machine (displayed with \'free\' or \'top\') drops

3条回答
  •  隐瞒了意图╮
    2021-02-14 10:18

    The closest equivalent to the Windows flags you mention I can think of is to open your file with the open(2) flags O_DIRECT | O_SYNC:

       O_DIRECT (Since Linux 2.4.10)
              Try to minimize cache effects of the I/O to and from this file.  In
              general this will degrade performance, but it is useful in special
              situations, such as when applications do their own caching.  File I/O
              is done directly to/from user space buffers.  The O_DIRECT flag on its
              own makes at an effort to transfer data synchronously, but does not
              give the guarantees of the O_SYNC that data and necessary metadata are
              transferred.  To guarantee synchronous I/O the O_SYNC must be used in
              addition to O_DIRECT.  See NOTES below for further discussion.
    
              A semantically similar (but deprecated) interface for block devices is
              described in raw(8).
    

    Granted, trying to do research on this flag to confirm it's what you want I found this interesting piece telling you that unbuffered I/O is a bad idea, Linus describing it as "brain damaged". According to that you should be using madvise() instead to tell the kernel how to cache pages. YMMV.

提交回复
热议问题