【发布时间】:2015-10-17 22:17:01
【问题描述】:
我正在寻找一种解决方案来检测写入功能如何访问磁盘。我想知道它是顺序访问还是随机访问。我想过在 libC 上打开 write 系统调用并尝试对其进行编辑并计算它是随机访问还是 seq 访问。这可能吗?怎么样?
如果有其他解决方案,我将不胜感激!
【问题讨论】:
标签: random system-calls hard-drive libc sequential
我正在寻找一种解决方案来检测写入功能如何访问磁盘。我想知道它是顺序访问还是随机访问。我想过在 libC 上打开 write 系统调用并尝试对其进行编辑并计算它是随机访问还是 seq 访问。这可能吗?怎么样?
如果有其他解决方案,我将不胜感激!
【问题讨论】:
标签: random system-calls hard-drive libc sequential
我正在寻找一种解决方案来检测写入功能如何访问磁盘。
由于您的问题提到了 libc,我们可以假设您在某个操作系统下运行,而不是在“裸机”系统上运行,在这种情况下,答案是 write 函数无法访问磁盘 完全没有。它只是要求操作系统(最终)将数据写入磁盘。
【讨论】:
您的问题今天可能没有意义,因为在今天的磁盘上,甚至硬件也在逻辑上处理磁盘扇区:两个“连续”磁盘扇区物理上并不接近,因为hard disk 控制器正在重新映射他们。另请阅读SATA。一些控制器甚至能够重新排序待处理的磁盘请求。
顺便说一句,SSD 没有任何物理几何形状(对于扇区),但确实给出了扇区编号的外观。
此外,操作系统内核(尤其是 Linux)正在管理page cache,因此write 通常不会直接写入磁盘。参见例如sync(2) 系统调用。
最后,write(2) 是(在 Linux 和大多数 Unix 上)syscall,并且发生在内核内部。因此,您将无法在 libc 中更改其行为。
另请阅读SMART。
【讨论】: