C++ 读/写 - RamDisk 与 RAM

标签 c++ performance memory memory-management ramdisk

<分区>

我使用的是 Ubuntu 32 位。 - 我的应用程序需要将传入数据存储在 RAM 中(因为我需要对传入数据进行大量搜索并计算一些东西)。 - 我需要将数据保存 X 秒 => 所以我需要分配 12GB 的内存。 (客户要求) - 我正在使用 Ubuntu 32 BIT(并且不想使用 Ubuntu 64 BIT) - 所以我正在使用 Ram Disk 来保存传入的数据并在其上进行搜索。 (所以我可以在32位系统上使用12GB的Ram)

当我使用 2GB 分配内存(而不是 12GB)测试应用程序时,我发现当我将数据写入数据库时​​,使用 RAM 时 CPU 的性能优于使用 RAM DISK 时的性能(15% VS 17% CPU使用率) 但是当我测试查询时(如果我正在使用 RAM 磁盘,它会读取大量数据/或文件)我看到了巨大的不同(20% 对 80% 的 CPU 使用率)。

我不明白为什么会有很大的差异? RAM 和 RAM DISK 都在 RAM 上工作?不 ?我可以做些什么来获得更好的性能吗?

最佳答案

关于为什么 RAM 磁盘速度较慢,我可以想到两个原因。

  1. 有了 RAMDisk,我们可以使用 RAM 作为文件介质,但我们仍然有使用文件系统的开销。这涉及使用其他形式的间接访问或复制访问数据的系统调用。直接访问内存就是这样。

  2. 内存访问往往很快,因为我们经常可以在处理器缓存中找到我们要找的东西。这避免了我们直接从较慢的 RAM 读取数据。如果没有其他原因,使用 RAMDisk 可能无法在相同程度上使用处理器缓存,它需要系统调用。

关于C++ 读/写 - RamDisk 与 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23992079/

相关文章:

java - 任务结束后如何从 Apache POI 工作簿中释放内存?

c++ - 使用宏访问 C 中的结构成员名称

c++ - 获取二进制文件的最后 n 位

c++ - 为什么在 VS2008 中使用旧版 C++ win32 项目“编辑并继续”对我不起作用?

c++ - VS 2013 errorC3861 PeekMessage等和errorC2065 WNDCLASSEX

sql-server - 在 SQL Server 上监控什么

mysql - SQL 性能 - 联合和子选择

java - 为什么32位CPU/OS/Java上的Tomcat 7比64位上的Tomcat 7慢得多?

c - 运算符 [] 的正确输入数据类型是什么?

javascript - 使用 src 引用 Javascript 或直接将其注入(inject) HEAD 在性能和内存占用方面的差异