为什么QEMU不能使用linux内存缓冲内存?

为什么QEMU不能使用linux内存缓冲内存?

我的系统没有交换区,内存为 16 GB。

据我所知,Linux 动态分配缓冲区内存分配,具体取决于系统中有多少可用 RAM。

此时此刻,这是以下输出free -h

              total        used        free      shared  buff/cache   available
Mem:            14G        2,2G         10G        336M        2,3G         10G
Swap:            0B          0B          0B

这意味着我将拥有 10 GB,再加上大约 2 GB(缓冲区/缓存),可以在需要时使用。

但当我执行 QEMU 时,我只能指定最多 10G 的 RAM;那是对的吗?我可以做些什么来使这 2 GB 可用吗?

谢谢。

答案1

我相信您可能会因free -h输出舍入可用空间而遇到问题。尝试检查它-h,看看到底有多少字节是可用的,然后设置qemu使用该限制内的某些内容(给自己一点空间)。

另一方面,如果您尝试将所有可用 RAM 用于虚拟机,我强烈建议您启用交换空间。拥有交换区比内存耗尽并挂起要好。

我会尽可能多地保留可用空间,因为磁盘交换会占用大量时间。

(对于将来访问此内容的任何人:请参阅http://www.linuxatemyram.com/为什么您应该能够使用超过 10 GiB。缓冲区/高速缓存区域可提高性能,但当程序需要更多 RAM 时会自动释放。)

答案2

缓冲区/缓存将随着您使用系统而增长,除非内存用于其他目的。它们用于提高性能,但当内存用于其他目的时,空间就会被释放。

看起来应该能够为 QEMU 分配最多 11 GB 的空间,尽管如果没有交换文件我就无法分配。有了足够大的交换文件,您应该能够分配给 QEMU 超过 16GB。如果您的服务器内存不足,性能将受到极大影响。

另一个重要的价值是共享。如果您有多个虚拟机,QEMU 可能为其代码提供一些共享内存。无论有多少进程使用共享内存,都只需要一份共享内存的副本。

相关内容