加强虚拟内存系统上的介质类型

时间:2018-10-15 08:33:54

标签: c linux operating-system mmu

假设我正在设计一个软件应用程序,该应用程序需要高带宽/低延迟的内存传输才能正常运行。 我的操作系统使用虚拟内存寻址。

是否有一种方法可以将变量(我选择的)强制设置在DDR中而不是位于硬盘驱动器上?

2 个答案:

答案 0 :(得分:1)

您要将虚拟内存交换内存进行了合并:虚拟内存仅表示,进程在其中运行的地址空间是一种抽象,表示一个非常有序的结构,而实际的物理地址空间几乎以混乱的方式被占用。是的,虚拟内存是内存页面交换的一部分,但它不是同义词。

一种实现所需目标的方法是简单地关闭整个系统的页面交换。也可以对虚拟地址空间的特定部分执行此操作。但是在我向您解释该怎么做之前,我需要告诉您以下信息:

您正从错误的角度接近这个问题。您称为DDR的系统主内存库(这只是一种特殊的传输时钟模式,BTW)在整个内存层次结构中只是一个级别。但是实际上,与处理器的计算吞吐量相比,甚至系统主内存也。自从计算机诞生以来,情况就一直如此。这就是为什么计算机具有缓存的原因。少量的快速内存。在现代体系结构上,这些缓存还形成了缓存层次结构层之间的接口。

如果在现代CPU上执行内存操作,则此内存操作将命中高速缓存。如果是读取并且高速缓存很热,则高速缓存将交付,否则它将操作升级到下一层。写入只会在短期内影响缓存,并且只会通过cache eviction或显式memory barriers传播到主内存。

通常,您不想干扰操作系统就虚拟内存管理做出的决定;您几乎无法超越它。如果您有大量数据要以较高的频率访问,那么内存管理器将看到该数据,甚至不考虑分页那部分内存。我想我必须用清晰的话再次写出来:在每个现代OS上,处于活动状态和重复使用的内存区域都不会被调出如果发生交换,那么,因为系统内存不足,并试图弄乱周围的东西。这称为Thrashing,将页面锁定在内存中将无济于事;它所要做的就是强迫操作系统四处走走,并杀死占用内存的进程(可能是您的进程)来获得喘息的空间。

无论如何,如果您真的想将页面锁定到内存中,请查看该mlock(2)系统调用。

答案 1 :(得分:0)

据我所知,当虚拟内存处理内存转换时,没有办法强制将某些变量存储在DDR与HDD中。您可以做的是将操作系统配置为对虚拟内存使用不同类型的辅助存储,例如固态磁盘,HDD等。