更高效地写入硬盘

Writing to hard disk more efficiently

本文关键字:硬盘 高效      更新时间:2023-10-16

我正在使用std::fstream将图像流写入硬盘。由于大多数硬盘驱动器都有 32MB 的缓存,因此创建一个缓冲区来累积高达 32MB 的图像数据然后写入磁盘是否更有效,还是只将每个图像写入磁盘更有效?

缓存用作读/写缓存,以缓解由于排队引起的问题。以下是我对磁盘的体验:

  1. 如果磁盘不是SSD,那么串行写入比查找文件更好。Seek 是 I/O 性能的杀手锏。
  2. 磁盘通常以扇区大小
  3. 写入。扇区大小通常为 512b 或 4k(较新的磁盘)。尝试一次写入一个扇区的数据。
  4. 捆绑 I/O 始终比多个小型 I/O 快。原因很简单,磁盘上的处理器要刷新的队列较小。
  5. 无论你能从记忆中服务什么,服务。仅在必要时使用磁盘。您始终可以在写入时修改/使缓存条目失效,具体取决于您的可靠性策略。确保不要交换,因此首先,内存缓存大小必须合理。
  6. 如果要执行此 I/O 管理,请确保不要对操作系统页面缓存进行双重缓冲。O_DIRECT为此。
  7. 如果可靠性不是问题,请使用非阻塞。O_NONBLOCK

系统的每个部分,从fstream到磁盘驱动程序,都比您的应用程序更了解特定效率。

如果您尝试过,则无法改进各种缓冲方案,因此请不要打扰。