【问题标题】:osx: how do I find the size of the disk i/o cache (write cache, for example)osx:如何找到磁盘 i/o 缓存的大小(例如写入缓存)
【发布时间】:2023-03-13 07:51:01
【问题描述】:

我正在寻找优化我的磁盘 IO,并正在四处寻找磁盘缓存大小。 system_profiler 没有告诉我,我还能看哪里?

编辑:我的程序正在处理整个卷:我正在执行安全擦除,所以我循环遍历卷上的所有块,读取,随机化数据,写入......如果我读/写 4k 块每个 IO 操作整个作业比每个操作读/写单个块要快得多。所以我的问题源于我寻找 r/w 操作的理想大小(就性能而言是理想的:速度)。请不要指出对于擦除程序我不需要读取操作,只是假设我需要。谢谢。

【问题讨论】:

  • 你是指 OSX 的文件系统缓存,还是物理硬盘控制器上的 RAM 芯片?
  • @MSalters:我认为硬件缓存大小是我正在寻找的。我编辑了这个问题以便更具体。谢谢。

标签: macos iokit


【解决方案1】:

Mac OS X 使用统一缓冲区高速缓存。这意味着在内核 VM 对象和文件中它们在某种程度上是相同的,并且用于缓存的可用内存的大小完全取决于系统其余部分的 VM 压力。这也意味着读缓存和写缓存是统一的,如果读缓存中的一个项目被写入它只是被标记为脏,然后在提交更改时写入磁盘。

因此磁盘缓存可能非常小或千兆字节,并且会随着系统的使用而动态变化。因此,试图确定缓存大小并基于它进行优化是一场失败的战斗。你最好看看通知缓存如何更好地运行的事情,比如检查底层设备的最佳 IO 大小,或者识别不应该缓存的数据并使用 F_NOCACHE。

【讨论】:

  • 感谢 Louis 提供了非常丰富的答案。接下来的问题是:如何检测底层设备的最佳 IO 大小?谢谢! \|K
  • @Louis:回复:“从 write() 到闪存芯片”非常好的帖子。感谢您的信息!
  • 最好的办法是使用 statfs() 系统调用并查看返回结构的 f_iosize 成员。
猜你喜欢
  • 2012-03-22
  • 2019-10-26
  • 2011-12-18
  • 2016-08-23
  • 2016-08-23
  • 2010-09-15
  • 2015-08-18
  • 2013-05-07
  • 1970-01-01
相关资源
最近更新 更多