Total Pageviews

Monday, 10 December 2012

Xen VPS 也可以超售

众所周知,基于 OpenVZ 虚拟化技术的 VPS 是可以超售内存、硬盘空间还有流量的,……,基本上所有的资源都可以超售。

空间商超售内存和硬盘空间是很容易的,他只需要简单的建立一个新的VPS即可,而无需顾忌母鸡上是否还有足够多的内存以及硬盘空间足够用来分配。

Xen 不能超售,这个结论是 Xen 技术用以和 OpenVZ 技术对抗的争论武器之一,特别是在一些人将OpenVZ和Xen做比较的时候。

“OpenVZ 超售系统资源,而Xen则不会,他拥有独立的内存,……,……”。
呃,事实上,并不是这样的。

大约两个星期以前(译者注:2010月11月左右),我从一家位于Asheville NC的VPS主机商(这里不提是谁)处得到了一个VPS。

这是一个基于Xen 技术的VPS,包含了采用64 位的Linux 2.6.32 核心的Ubuntu 10.04 操作系统、512MB内存、25G的硬盘空间以及超过我所需要的流量。价格是非常超值的。

我登陆了并检查到底我被分配到了多少内存……。

    # free
    total       used       free     shared    buffers     cached
    Mem:        543776     535360       8416          0      66516     130504
    -/+ buffers/cache:     338340     205436
    Swap:      1048568        136    1048432

呃,可以看到,我这台新的VPS已经使用了330MB的内存,来,让我们看下到底有哪些进程正在运行。

    # ps aux
    …

    root       204  0.0  0.1  17028   780 ?        S    Oct27   0:00 upstart-udev-bridge –daemon
    102        356  0.0  0.1  23548  1080 ?        Ss   Oct27   0:00 dbus-daemon –system –fork
    root       431  0.0  0.1  21068   788 ?        Ss   Oct27   0:00 cron
    root      3110  0.0  0.5 253832  2992 ?        Sl   Oct28   0:00 /usr/sbin/console-kit-daemon –no-daemon
    root     11037  0.0  0.1  49256  1012 ?        Ss   Oct28   0:00 /usr/sbin/sshd
    root     15427  0.0  0.1  12520   772 ?        S    Oct28   0:00 /usr/sbin/syslogd –no-forward
    root     31231  0.0  0.0  16748   436 ?        S<s  Nov12   0:00 udevd –daemon
    root      5716  0.0  0.6  79100  3772 ?        Ss   01:02   0:00 sshd: root@pts/0
    root      5731  0.0  0.3  19400  2148 pts/0    Ss   01:02   0:00 -bash
    root      5782  0.0  0.1   6072   724 ?        Ss   01:08   0:00 /sbin/getty -8 38400 hvc0
    root      5783  0.0  0.2  15248  1172 pts/0    R+   01:08   0:00 ps –sort=start_time uax

是的,就是他了。这个VPS上没有运行什么特别消耗内存的程序。SSH server,syslogd,cron,就是这些了。那我的330MB内存到底跑到哪里去了?

在了解得更深入之前,先看下这个事实。你可以在基于Xen 的 VPS 上超售内存。这个事实业内人士其实已经知道很多年了,虽然VPS提供商们不愿意去讨论它。这是一种名名叫“ ballooning ”的技术。

从根本上说,其实是使用一种名为“ balloon driver ”的技术,安装在你的 Linux kernel 上。

当 dom0 (通俗地说,也就是母鸡)需要更多内存的时候,母鸡会要求使用 domU (通俗地说,也就是小鸡)的内存,然后系统会把小鸡的内存拨给母鸡使用。

这种情况表现为:小鸡的总内存不变,但是使用内存增加(拨给了母鸡),可用内存减少。

我猜测,这可以解释为什么我的 VPS 在只有少量进程运行的情况下,就会使用了330MB的内存。

我发现了一个有趣的procfs文件:

    # cat /proc/xen/balloon

    Current allocation:   524288 kB

    Requested target:     524288 kB

    Minimum target:       173056 kB

    Maximum target:       532480 kB

    Low-mem balloon:        8192 kB

    High-mem balloon:          0 kB

    Driver pages:            224 kB

我不知道该怎么样去解释这个文件。

他看起来似乎是这个意思:我的VPS(小鸡)要求被分配512MB的内存,并且现在也已经分配了512MB的内存;但同时又有一个最小内存和最大内存,169MB和520MB内存。

这是不是在说,我的真实内存供应其实169MB?剩余的内存都可以被超售?

这其实是一些我不是很熟的技术,但VPS提供商肯定是熟悉的。但有一点可以肯定的是:基于 Xen 技术的 VPS 确实可以超售。