使用内核级缓冲写入文件有什么好处

What is the advantage of using kernel level buffering for writing files

提问人:Marco 提问时间:9/18/2023 更新时间:9/19/2023 访问量:49

问:

我目前正在优化我的应用程序的写入速度,并可以设置文件系统缓冲区大小(内核级别)以及缓冲的 I/O 缓冲区大小(用户级别)。我的问题只与写入有关,驱动器上没有一个读取操作。

我读到系统调用内核空间需要很多时间。当在短时间内执行大量系统调用时(例如,当使用小型缓冲区进行缓冲 I/O 时),这将影响整体写入速度。因此,我想增加缓冲 I/O 写入操作的用户级缓冲区大小。我预计在写入文件时仅使用缓冲 I/O 进行缓存时不会降低性能。

在这种情况下,我提出了一个问题,内核级缓冲区会给一个只写入内容但从不从磁盘读取任何内容的应用程序带来什么优势......

缓存 IO linux-kernel 块-device

评论


答:

0赞 stark 9/19/2023 #1

缓存磁盘写入有两个性能优势:

  1. 当多次写入同一个块时,只需要将最终状态写入磁盘,因此可以避免提前写入。

  2. 可以使用单个命令写入多个连续写入,从而减少命令开销。

同样,读缓存有两个主要的性能优势:

  1. 读取块后,它保存在缓存中,因此无需磁盘访问即可完成对同一块的后续读取。

  2. 读取顺序块时,系统可以执行单个大型预读操作,以便无需其他磁盘访问即可完成对新块的后续读取。

评论

0赞 Marco 9/20/2023
但是,在用户空间或内核空间中使用缓冲区机制有什么区别呢?甚至有区别吗?那么,为什么缓冲 I/O 经常与内核级缓存结合使用,并在操作系统中实现呢?
0赞 stark 9/20/2023
这是为了减少系统调用的数量,相对于填充本地缓冲区来说,系统调用的成本很高。
0赞 Marco 9/20/2023
另一方面,这意味着只使用缓冲 I/O 而不是内核级缓冲是件好事,因为将更大的数据块从用户传输到内核空间会减少系统调用?
0赞 stark 9/20/2023
不确定“而不是内核级缓冲”是什么意思。这里没有非此即彼。调用 setvbuf 时,它指的是用户空间缓冲区。查看 stackoverflow.com/q/7044863/1216776