问题:
Open读取文件,有设置O_DIRECT,但是实际Read的时候,仍然使用了PageCache,而不是直接操作磁盘,这是为何?
背景:
1: 题主用的是安卓手机,采用eMMC内存,我想对手机的eMMC内存进行压力测试(一直读写数据)
2:eMMC内存有两种模式:Normal模式和Command Queue模式,
3:题主对Normal模式的eMMC内存可以实现直接访问磁盘,对Command Queue模式的eMMC内存,无法直接从磁盘读取数据(采用了PageCache)
4:明明有设置O_DIRECT,Normal模式有直接读取磁盘的信息,而Command Queue模式却不会直接访问磁盘,先访问PageCache
代码
fileReadHandle = open(filePath, O_RDONLY | O_DIRECT | O_NOCTTY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);//获取文件句柄
readLength = read(fileReadHandle,jbArray,length);//Read操作,长度为1024 * 1024 = 1MB
我想要的结果:
如何让我的Read操作直接去访问磁盘设备?为何我的O_DIRECT会失效?