请问,为什么对于自己写的C++read文件程序PrimoCache不能够缓存命中

交流 Primo Ramdisk 软件使用过程中遇到的问题以及心得等
这里提供官方的技术支持
回复
asd
1级用户
1级用户
帖子: 2
注册时间: 周日 4月 23, 2023 11:28 am

请问,为什么对于自己写的C++read文件程序PrimoCache不能够缓存命中

帖子 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
技术支持组
技术支持组
帖子: 2652
注册时间: 周日 12月 21, 2008 10:42 am
联系:

Re: 请问,为什么对于自己写的C++read文件程序PrimoCache不能够缓存命中

帖子 Support »

文件第一次读取的时候,由于此时没有缓存,PrimoCache是从硬盘读取的。当文件再次读取的时候,由于Windows文件系统缓存已经缓存了该文件,所以不会再发送读请求到硬盘,相应地,PrimoCache也不会收到读取请求。您可以看到此时“读取总计”不会增加。只有Windows文件系统缓存没有该文件时才会发送请求到PrimoCache。Anvil'Storage等工具是测试硬盘性能用的,所以它们发送的IO请求都加了标志,告诉Windows不进行文件系统缓存。
Primo Ramdisk | PrimoCache
Romex Software 技术支持组
asd
1级用户
1级用户
帖子: 2
注册时间: 周日 4月 23, 2023 11:28 am

Re: 请问,为什么对于自己写的C++read文件程序PrimoCache不能够缓存命中

帖子 asd »

Support 写了: 周一 4月 24, 2023 5:45 pm 文件第一次读取的时候,由于此时没有缓存,PrimoCache是从硬盘读取的。当文件再次读取的时候,由于Windows文件系统缓存已经缓存了该文件,所以不会再发送读请求到硬盘,相应地,PrimoCache也不会收到读取请求。您可以看到此时“读取总计”不会增加。只有Windows文件系统缓存没有该文件时才会发送请求到PrimoCache。Anvil'Storage等工具是测试硬盘性能用的,所以它们发送的IO请求都加了标志,告诉Windows不进行文件系统缓存。
非常感谢您的回答,我的需求是使用PrimoRamDisk或者PrimoCache加速我自己程序的读写,但是以PrimoRamDisk为例,我将要通过代码读的文件放在内存映射的硬盘里读,速度并没有加快,请问这应该怎么解决呢?我也尝试过使用ReadFile进行读取,同样速度没有加快。
头像
Support
技术支持组
技术支持组
帖子: 2652
注册时间: 周日 12月 21, 2008 10:42 am
联系:

Re: 请问,为什么对于自己写的C++read文件程序PrimoCache不能够缓存命中

帖子 Support »

asd 写了: 周一 4月 24, 2023 5:54 pm 非常感谢您的回答,我的需求是使用PrimoRamDisk或者PrimoCache加速我自己程序的读写,但是以PrimoRamDisk为例,我将要通过代码读的文件放在内存映射的硬盘里读,速度并没有加快,请问这应该怎么解决呢?我也尝试过使用ReadFile进行读取,同样速度没有加快。
您的文件大概多大呢?文件是程序自己生成的吗?如果是文件是程序自己生成的,那么Ramdisk或PrimoCache应该都能起到作用。
小文件可以用Ramdisk。文件很多内存盘不够覆盖的话,可用PrimoCache并开启延时写入。

您如果是将文件先读出来放到内存盘,后续的读写都是在Windows文件系统中进行,实际都是在内存中进行,此时是看不出太大区别的。此外,如果本身读写数据量不多,肉眼也不会感觉到区别。(当然您可以在程序中统计读写时间)
Primo Ramdisk | PrimoCache
Romex Software 技术支持组
回复