编写系统调用 C-HDD 顺序访问还是随机访问?

write system call C - HDD Sequential or Random Access ?

我正在寻找一种解决方案来检测写入函数如何访问磁盘。我想知道它是顺序访问还是随机访问。我考虑过在 libC 上打开 write 系统调用并尝试编辑它并计算它是随机访问还是 seq 访问..这可能吗?怎么样?

如果有其他解决方案,我将不胜感激!

I am looking for a solution to detect how's the write function access to the disk.

由于您的问题提到了 libc,我们可以假设您在某些操作系统下 运行,而不是在 "bare metal" 系统上,在这种情况下,答案是 write函数根本不访问磁盘 。它只是要求 OS(最终)将数据写入磁盘。

你的问题今天可能没有意义,因为在今天的磁盘上,即使是硬件也在逻辑上处理磁盘扇区:两个 "consecutive" 磁盘扇区在物理上 附近,因为hard disk controller is remapping them. Read also about SATA。一些控制器甚至能够 重新排序 挂起的磁盘请求。

顺便说一句,SSD 没有任何 物理 几何形状(对于扇区),但确实给出了扇区编号的外观。

此外,操作系统内核(特别是 Linux)正在管理 page cache so a write usually won't write directly the disk. See e.g. the sync(2) 系统调用。

最后,write(2) is (on Linux and most Unixes) a syscall,发生在内核内部。因此,您将无法在 libc.

中更改其行为

另请参阅 SMART