那么,和 VMWare 相比,coLinux 的性能如何呢?我们运行了一个粗略的基准。作为测试,我们选择了来自 Povray 的 Web
站点的 POV-Ray 3.6.1 预编译二进制程式。(POV-Ray 是逼真 3D
图像创建软件的始祖之一,他完全由那些进行大量数字处理的任务构成,很适合我们的测试。)使用 benchmark.ini(包含于 povray
软件包之中)中的默认选项执行那个二进制程式: # povray benchmark.ini。
POV-Ray 在用于 Linux 内核 2.4.26 的 coLinux 上运行。根文档系统使用的是 Gentoo 发行版本。我们使用相同的发行版本在 VMWare 版本 4.5.2 上测试相同的 POV-Ray 二进制程式。下面的表格说明了测试机器使用必要的选项(在 benchmark.ini 给出)完成预定义的场景所需要的时间。
表 1. POV-Ray 运行时间结果
| 平台(POV-Ray 在哪里执行) | 时间(单位为 分钟:秒) |
| 本地 Linux | 39:23 |
| coLinux | 39:26 |
| VMWare | 40:53 |
研究数据表单,您会发现 coLinux 和本地 OS 的速度相差甚少。正如所预期的那样,VMWare 比 coLinux 慢,相差一分钟左右。通过实时地将虚拟机(VM)的指令流翻译给宿主机器, VMWare 能够获得接近本地的速度,但是由于 VMWare 本身在用户空间运行,这可能会引发问题。比如,当 VM 以内核模式执行代码时;为了正确地仿真 VM 的虚拟 CPU,VMWare 必须谨慎地转换内存映射和权限。
现在,我们来看所选择的模拟器 coLinux 和所选择的中间件 openMosix 如何一起工作。
coLinux 和 openMosix 的联合
图 1 向我们展示了 openMosix 的工作方式。
图 1. openMosix 的工作方式
openMosix 在 Linux 内核内部运行。他有若干个能够通过 /proc 接口进行控制的参数。为了简化实际的操作,创建了一些用户空间应用程式。openMosix 以分散的(decentralized)方式工作,所以在此拓扑中没有主节点或从节点。这一分散式策略被应用于负载信息交换,并且应用于进程迁移期间。
假如负载均衡算法认为另一个节点的工作负载较小,而且适于迁移进程,那么 openMosix 会透明地将进程迁移到目标节点。进程不能或不应该迁移的原因是多种多样的(使用 pthreads、进行大量磁盘操作、运行期很短)。从用户空间的角度来看,无需修改应用程式代码。任何工作都在内核空间透明地完成。
现在,让我们来研究 coLinux 如何工作(下面的图引用自 coLinux.org)。
图 2. coLinux 内部结构的总体描述(获得了Dan Aloni 的授权,他是 coLinux 首席研发人员和文档编写者)
Dan Aloni 将 coLinux 描述为一个协作的(cooperative) 且半虚拟的(paravirtualized) Linux 虚拟机。协作指的是他将控制权自主地交还给宿主 OS。半虚拟指的是:除了 CPU 和内存以外, coLinux 内核不需接触任何实际的硬件。这和 VMWare 不同,后者截取访问硬件设备的 I/O 并模拟他。coLinux 感觉像是个单独的 Linux 机器 —— 客户内核的内部结构和宿主内核的内部结构是分开的。
注意,coLinux 由两部分构成:
- 在宿主内核空间运行的 coLinux 内核驱动程式。
- 若干个用户空间后台进程。
coLinux 内核驱动程式的主要工作是:
- 在启动时加载 Linux 客户内核。您能够认为这个功能类似于引导加载器(比如 LILO 或 GRUB)。
- 根据 colinux-daemon 进程的需要执行
ioctl()请求。这个ioctl()调用负责进行客户 OS 和宿主 OS 之间的上下文转换。 - 为来自某些虚拟驱动器(cobd(块设备)、conet(网络)、cocon(控制台))的中断和请求进行代理转发。
在用户空间中,最重要的是部分是 colinux-daemon-process。除了负责触发上下文转换之外,他还要作为 colinux-console-nt 和 colinux-net-daemon 等一些其他后台进程的“管理者”。例如,通过 colinux-console,用户能够查看 Linux 客户的活动控制台的当前显示。当用户在此 colinux-console 的 shell 中输入或执行命令时,colinux-daemon 将会 “包装”他并将其转发给 colinux-driver。要完全理解 coLinux 的内部机制,请访问 coLinux.org。
openMosix 和 coLinux 融合时,没有显著的变化。由于 openMosix 完全位于内核空间,而 coLinux 只是和通常相同引导客户内核映像,并如前所述那样工作。当 openMosix 必须和其他节点通信时,客户内核会去调用一些系统调用。coLinux 截取这些调用,并将数据传递到 coLinux-net-daemon,由他来通过 Windows API 最终将数据发送出去。
下面是对 coLinux 网络层次和网络传输数据流的描述:
- 源应用程式(Source Application)
- Linux 内核
- coLinux 内核驱动程式
- coLinux 网络驱动程式
- Windows NIC 驱动程式
现在我们来看如何让 coLinux 和 openMosix 进行结合。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




