C ++读/写 - RamDisk vs RAM [关闭]

Posted

技术标签:

【中文标题】C ++读/写 - RamDisk vs RAM [关闭]【英文标题】:C++ read/write - RamDisk vs RAM [closed] 【发布时间】:2014-06-02 10:09:50 【问题描述】:

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

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

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

【问题讨论】:

Ramdisk 是一种将数据存储在 RAM 中的虚拟 HDD。你认为它会给你带来 12GB 的空间吗? 您可以制作一个 12 GB 的文件并使用 mmap() 来写入/读取它的片段。您必须在其上编写一个聪明的对象/内存管理器以实现透明使用。 您可能刚刚发现,操作系统比您更善于弄清楚如何有效地使用 RAM。这是意料之中的,这是他们的工作。 【参考方案1】:

对于 RAM 磁盘较慢的原因,我可以想到两个原因。

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

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

【讨论】:

现代操作系统实现了一种称为统一缓冲区缓存的东西,这基本上意味着使用相同的机制来实现交换支持的私有内存和内存映射文件(在后一种情况下没有文件系统开销) .因此,读取和写入 mmap-ed 文件与使用分配的内存具有相同的 CPU 缓存单元化。

以上是关于C ++读/写 - RamDisk vs RAM [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

vs2005中的mediaplayer控件想手动添加播放的视频url要在啥事件中操作?代码怎么写?

VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发?

VSCode无法使用freopen文件输入输出

使用 Bluez 的 C/C++ BLE 读/写示例

有没有C语言的对xml文件读写操作的API

使用C直接读/写磁盘[重复]