手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

使用 coLinux 和 openMosix 构建异构集群

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

那么,和 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 的工作方式

openMosix 在 Linux 内核内部运行。他有若干个能够通过 /proc 接口进行控制的参数。为了简化实际的操作,创建了一些用户空间应用程式。openMosix 以分散的(decentralized)方式工作,所以在此拓扑中没有主节点或从节点。这一分散式策略被应用于负载信息交换,并且应用于进程迁移期间。

假如负载均衡算法认为另一个节点的工作负载较小,而且适于迁移进程,那么 openMosix 会透明地将进程迁移到目标节点。进程不能或不应该迁移的原因是多种多样的(使用 pthreads、进行大量磁盘操作、运行期很短)。从用户空间的角度来看,无需修改应用程式代码。任何工作都在内核空间透明地完成。

现在,让我们来研究 coLinux 如何工作(下面的图引用自 coLinux.org)。

图 2. coLinux 内部结构的总体描述(获得了Dan Aloni 的授权,他是 coLinux 首席研发人员和文档编写者)
oLinux 内部结构的总体描述

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 网络层次和网络传输数据流的描述:

  1. 源应用程式(Source Application)
  2. Linux 内核
  3. coLinux 内核驱动程式
  4. coLinux 网络驱动程式
  5. Windows NIC 驱动程式

现在我们来看如何让 coLinux 和 openMosix 进行结合。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!