应该给 Xen Dom0 和 DomU 配置多大内存?

Xen Dom0 需要多大内存来支持各个 DomU 的正常运行要看具体情况,没有一个 magic formula (神奇公式)可以参考;而 Xen DomU 需要多大内存能正常运行则主要取决于运行在 DomU 上的 Guest OS 及应用的需求。

DomU

给 DomU 安排内存较简单,主要看什么样的 Guest 操作系统以及上面跑什么样的应用,复杂的图形桌面系统、还是简单的 Web 服务器,这里有一些操作系统厂商提供的推荐配置:

  • 根据 Ubuntu 官方文档 推荐的最小内存配置,运行 Ubuntu 9.04 Desktop 版本和 GNOME/KDE 等完整桌面图形系统,最小建议 384MB,我试过 256MB,可以运行,速度也可以,但是可用内存剩下不多,已经开始频繁 swap 了;如果使用中量级窗口管理器,像 xfce,最小建议 192MB;使用类似 fvwm/fluxbox/twm/icewm 等轻量级窗口管理器或者完全使用命令行,最小建议 64MB. 运行 Ubuntu 9.04 Server 版本,不用 GUI,最小安装,完全当作服务器使用,最小可以小到 32MB,不过 VPSee 推荐至少 64MB 才可以运行一个由 mysql/php/nginx 支持的小网站、博客。
  • 运行 CentOS 5.3 需要的内存要多一些,不用 GUI,最小安装,完全当作服务器使用,RedHat 推荐最小内存是 256MB;VPSee 推荐最小建议 128MB,我试过 64MB 虽然可以运行,但是明显感到慢,使用 yum 升级就能感觉到,就不用提 mysql/php/nginx 了,就算能运行起来也没多大实际意义。
  • Debian 5.0 的内存需求和 Ubuntu 类似,稍微可以偏低一些。
  • Gentoo 官方推荐最小 64MB,但是每次升级系统都需要编译,即使可以在 64MB 下安装运行意义也不大,因为每次升级软加包都需要下载代码编译,编译需要消耗大量 CPU 和内存。这也是 VPSee 不推荐在小 VPS 上使用 Gentoo 的原因。
  • Freebsd 官方推荐最小 24MB,同样的主要看应用,对于一个 mysql/php/nginx 应用,VPSee 推荐 64MB.

Dom0

为 Dom0 配置内存要稍微复杂一些,配置多了 DomU 可使用的内存就少了,配置少了就会担心 Dom0 不够用。有效限制 Dom0 的内存大小还有助于安全。假设 Dom0 本身不做任何其他的应用(当然也不包括 GUI)。如何分配内存让 Dom0 的内存最小而且又能最有效的管理那些 DomU 呢? Running Xen: A Hands-on Guide to the Art of Virtualization 这本书介绍了一些有用的经验,给 Dom0 分配多大内存没有一般公式可循,只能提供一些经验参考:

  1. 首先看 Dom0 上运行的 OS 对内存的需求怎么样,比如:Dom0 上如果跑的是 CentOS,这样 Dom0 通常最低需要 128MB,如果是 Debian 可能最低需要 64MB;
  2. 再看看需要一些什么样的服务,比如可能会在 Dom0 上运行 DNS/DHCP/SSH 之类的服务来支持 DomU;
  3. 可能需要在 Dom0 上做一些日常维护,比如:备份、管理 DomU、升级、运行一些 shell script、检查日志等,这会需要一些内存运行;
  4. DomU 与外界网络通信需要与 Xen 虚拟出来的网卡打交道,比如:bridge,routing,firewall 什么的,Dom0 要管理这些需要消耗一些内存;
  5. 为了保障安全,最好最小化 Dom0 的功能,最小化安装,只启动必须的服务,让 Dom0 只负责管理 DomU,最小化的策略还可以增加整个服务器的安全性。

举个实例,对于一个 2G 的双核机器来说,如果 Dom0 只是用来管理 DomU,给 Dom0 配置 128-256MB的内存就可以了,剩下的内存可以分出10-15个 128MB 的 DomU.

评论 (8 Comments)

  1. 为什么centos占用内存比ubuntu,debian,gentoo都大?

  2. 这和不同 linux 发行版本之间默认安装的东西有关,比如:centos 默认安装了很多东西,默认启动的后台服务也多一些。

  3. xen运行一段时间后,在物理机(debian)上使用free查看内存大小,比实际内存少了几G,请问这样是否是正常的情况?

  4. 嗯,正常情况。因为 dom0 分出的内存给了 domU.

  5. 哥,有个问题想问问你。
    在dom0里如何去写domU的内存?
    这个问题已经困扰我很久了,百思不得其解
    还望哥指教一下啊。
    谢谢

  6. @Anonymous
    dom0 不能简单的读和写 domu 的内存,dom0 和 domu 共享内存可以通过 grant table,其使用接口可以看源代码 include/xen/grant_table.h,你也可以看看 blkfront 和 blkback 两个驱动程序,看看是怎么实现的。

  7. 你好,请问可以通过什么方式?让在dom0下使用free看到的内存是真实的(整个系统的内存使用率)

  8. @yao
    使用 xm top 呢?

发表评论