交流 Primo Ramdisk 软件使用过程中遇到的问题以及心得等
这里提供官方的技术支持
-
asd
- 1级用户
- 帖子: 2
- 注册时间: 周日 4月 23, 2023 11:28 am
帖子
由 asd »
请问,为什么使用PrimoCache将硬盘缓存,通过Anvil'Storage工具读可以看到缓存命中率100%,而使用自己写的c++程序read 该硬盘的数据命中率是0
代码: 全选
fopen_s(&f, filename, "rb");
read(pRead, m_hMappingSize, f);
void read(const void* pdata, UINT64 datasize, FILE* f)
{
UINT64 bufsize = datasize;
UINT8* pdataadr = (UINT8*)pdata;
while (bufsize > 1073741824)
{
fread(pdataadr, 1, 1073741824, f);
pdataadr += 1073741824;
bufsize -= 1073741824;
}
fread(pdataadr, 1, bufsize, f);
}
-
Support
- 技术支持组
- 帖子: 2669
- 注册时间: 周日 12月 21, 2008 10:42 am
-
联系:
帖子
由 Support »
文件第一次读取的时候,由于此时没有缓存,PrimoCache是从硬盘读取的。当文件再次读取的时候,由于Windows文件系统缓存已经缓存了该文件,所以不会再发送读请求到硬盘,相应地,PrimoCache也不会收到读取请求。您可以看到此时“读取总计”不会增加。只有Windows文件系统缓存没有该文件时才会发送请求到PrimoCache。Anvil'Storage等工具是测试硬盘性能用的,所以它们发送的IO请求都加了标志,告诉Windows不进行文件系统缓存。
-
asd
- 1级用户
- 帖子: 2
- 注册时间: 周日 4月 23, 2023 11:28 am
帖子
由 asd »
Support 写了: ↑周一 4月 24, 2023 5:45 pm
文件第一次读取的时候,由于此时没有缓存,PrimoCache是从硬盘读取的。当文件再次读取的时候,由于Windows文件系统缓存已经缓存了该文件,所以不会再发送读请求到硬盘,相应地,PrimoCache也不会收到读取请求。您可以看到此时“读取总计”不会增加。只有Windows文件系统缓存没有该文件时才会发送请求到PrimoCache。Anvil'Storage等工具是测试硬盘性能用的,所以它们发送的IO请求都加了标志,告诉Windows不进行文件系统缓存。
非常感谢您的回答,我的需求是使用PrimoRamDisk或者PrimoCache加速我自己程序的读写,但是以PrimoRamDisk为例,我将要通过代码读的文件放在内存映射的硬盘里读,速度并没有加快,请问这应该怎么解决呢?我也尝试过使用ReadFile进行读取,同样速度没有加快。
-
Support
- 技术支持组
- 帖子: 2669
- 注册时间: 周日 12月 21, 2008 10:42 am
-
联系:
帖子
由 Support »
asd 写了: ↑周一 4月 24, 2023 5:54 pm
非常感谢您的回答,我的需求是使用PrimoRamDisk或者PrimoCache加速我自己程序的读写,但是以PrimoRamDisk为例,我将要通过代码读的文件放在内存映射的硬盘里读,速度并没有加快,请问这应该怎么解决呢?我也尝试过使用ReadFile进行读取,同样速度没有加快。
您的文件大概多大呢?文件是程序自己生成的吗?如果是文件是程序自己生成的,那么Ramdisk或PrimoCache应该都能起到作用。
小文件可以用Ramdisk。文件很多内存盘不够覆盖的话,可用PrimoCache并开启延时写入。
您如果是将文件先读出来放到内存盘,后续的读写都是在Windows文件系统中进行,实际都是在内存中进行,此时是看不出太大区别的。此外,如果本身读写数据量不多,肉眼也不会感觉到区别。(当然您可以在程序中统计读写时间)