![是否有针对裸块设备的操作系统级缓存?如果是这样,我该如何绕过它?](https://linux22.com/image/213545/%E6%98%AF%E5%90%A6%E6%9C%89%E9%92%88%E5%AF%B9%E8%A3%B8%E5%9D%97%E8%AE%BE%E5%A4%87%E7%9A%84%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%BA%A7%E7%BC%93%E5%AD%98%EF%BC%9F%E5%A6%82%E6%9E%9C%E6%98%AF%E8%BF%99%E6%A0%B7%EF%BC%8C%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E7%BB%95%E8%BF%87%E5%AE%83%EF%BC%9F.png)
如果我直接读写块设备(例如/dev/sda1
),Linux 上是否涉及操作系统级缓存?如果是这样,我该如何绕过它,打开就O_DIRECT
足够了吗?
我正在编写一个简单的基准测试脚本来表征我所拥有的叠瓦式磁记录 (SMR) 驱动器的行为,因此我不想绕过任何驱动器级缓存或重新排序,而只想绕过操作系统正在执行的任何操作。
搜索相关术语给出的很多结果都没有解决这个特定问题,尽管我确实了解到 Solaris 和 FreeBSD 都有磁盘块设备和字符设备,并且块设备被缓冲。在我的 Linux 上,我只看到磁盘的块设备。
答案1
如果我直接读写块设备(例如/dev/sda1),Linux上是否涉及操作系统级缓存?
对于 Linux 来说,是的,绝对如此。
如果是这样,我该如何绕过它,用 O_DIRECT 打开就足够了吗?
对于 Linux 来说肯定是这样。
我对其他 UNIX 一无所知,但我认为大多数也适用于此。