Linux – 使用磁盘作为 RAM

Linux – 使用磁盘作为 RAM

我有一台虚拟机,其中有一个进程消耗了大量内存(~200GB)。某种内存数据库。我需要在标准笔记本电脑上运行它,但我无法重新编译它或查看代码。

我已经添加了 256GB 的交换空间,pri=32767/etc/fstab它无法足够快地加载数据库(24 小时后卡在 4GB;似乎不再增长)。vm.swappiness=100/etc/sysctl.conf

(编辑:我克隆了机器,将 RAM 从 256GB 更改为 4GB,添加了硬盘,将其格式化为 ext4,并创建了一个大小为 256GB 的交换文件(dd -> mkswap -> swapon...))

为什么它停止生长了?

我怀疑速度缓慢是由于它是一个交换空间,因此操作系统正忙于“交换”(加载->空间不足->决定交换什么...)。

我正在寻找一种“添加更多内存”但让操作系统将其视为普通内存的方法。或者我的交换配置有误?

我知道这会影响性能,但是对我来说是可以接受的。

VM 是 CentOS 6。

答案1

看着http://www.corsair.com/en-us/blog/2015/september/ddr3_vs_ddr4_generational,内存带宽约为 4 GB/s(文章有点旧,但我们以这个数字作为参考),无论是写入还是读取。

然后,对于硬盘,顺序操作的带宽大约为 100 MB / s(http://www.buildcomputers.net/hard-disk-speed.html)对于随机访问来说,带宽要小得多。

因此,即使软件以顺序方式访问内存,RAM 也会快 40 倍。但是,软件的内存访问很可能非常随机,到处都是小块,这使得 RAM 的整体性能高得多。

然后还有一个问题,即交换实际上如何工作。处理器访问数据的每个操作都必须使用 RAM 来存储数据。如果数据不在内存中,那么 RAM 的一部分将被交换到 HDD,而所需的部分将从 HDD 读取到内存中。当 RAM 中有太多“热”数据时,就会不断进行交换,从而导致您所描述的情况。

处理器不可能直接将HDD用作RAM,因为寻址和接口完全不同。

相关内容