编写系统调用 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。
我正在寻找一种解决方案来检测写入函数如何访问磁盘。我想知道它是顺序访问还是随机访问。我考虑过在 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。