VIOS跟VIOSL有什么区别?

VIOS跟VIOSL有什么区别?,第1张

VIOS和VIOSL都是IBM公司的虚拟化 *** 作系统,用于在IBM Power Systems服务器上运行虚拟机。它们的区别在于:

VIOS是Virtual I/O Server的缩写,是IBM Power Systems服务器上的标准虚拟化 *** 作系统。而VIOSL是VIOS Lite的缩写,是一种轻量级的VIOS版本,专门用于运行少量虚拟机的环境。

VIOS拥有更多的功能和配置选项,比如支持多个虚拟网络适配器、多个虚拟SCSI适配器等。而VIOSL则只支持最基本的虚拟化功能,例如虚拟网络适配器和虚拟SCSI适配器。

VIOS需要独立的硬件资源,例如磁盘、网络适配器等,而VIOSL可以与其他 *** 作系统共享硬件资源,例如磁盘和网络适配器。

总的来说,VIOS是更完整、功能更强大的虚拟化 *** 作系统,适用于需要大量虚拟机和高级配置的环境。而VIOSL则更适合小型环境,或者只需要基本虚拟化功能的场景。

环境和配置

测试环境有一个 IBM Flex System® 组成,该系统有多个 IBM Flex System x240 计算节点和两个基于 IBM POWER7 处理器的节点(一个 Flex System p260 和一个 Flex System p460)。出于本项目的目的,我使用一个 Flex system x240 计算节点来交叉编译 Apache httpd 和 PostgreSQL。构建二进制程序后,我将它们转移到 Flex System p460 计算节点。图 7 显示了 IBM Flex System 测试环境的布局图。

图 7. IBM Flex System 测试环境

以下是我的系统配置、 *** 作系统级别和其他与系统设置相关的信息。

Flex System x240 计算节点

用于交叉编译二进制程序的 Intel 节点仅需要足够的处理能力和内存,以便能够构建 Power 二进制程序。配置如下:

基于内核的虚拟机 (KVM) 管理程序 Red Hat 6.5

32 个处理器

64 GB 内存

IBM Storwize® V7000 存取区域网络 (SAN) 连接磁盘

KVM Guest 系统

Red Hat Enterprise Linux 6.5

4 个处理器

16 GB 内存

一个 virtio 磁盘:100 GB

一个配置为 br0 的虚拟网络接口卡 (NIC)

所有其他 KVM Guest 系统都已关闭,以消除破坏环境的任何可能性。

Flex System p440 计算节点

Flex System p440 计算节点包含多个逻辑分区 (LPAR),其中一个配置为测试服务器。PowerLinux 服务器配置如下:

IBM PowerVM® 来宾

Red Hat Enterprise Linux 6.5

8 个处理器(专用)

32 GB 内存

Storwize V7000 SAN 连接磁盘 (50 GB)

通过虚拟 I/O 服务器 (VIOS) 共享的以太网适配器

LPAR 配置

最小内存:256 MB

目标内存:32 GB

最大内存:64 GB

最少处理器数:8

目标处理器数:8

最大处理器数:32

处理模式:专用

专用内存

虚拟以太网适配器(通过 VIOS 建立)

适配器 ID:2

VLAN ID:1

需要此适配器来激活虚拟服务器:已选择

以下是我运行的其他一些命令:

# ppc64_cpu --frequency

min:3.56 GHz (cpu 28)

max:3.56 GHz (cpu 4)

avg:3.56 GHz

# ppc64_cpu --cores-present

Number of cores present = 8

# sysctl.conf

kernel.sem = 250 32000 3212288

使用 toolchain 构建应用程序

通常,构建开源发行版的过程是一个迭代过程。如果您很幸运的话,该过程可能已构建完成。不幸的是,因为大多数开源发行版都构建于 x86 服务器之上,所以在尝试为不同架构(比如 IBM Power 架构)构建它们时可能遇到问题。

如果在 Power 上构建开源包时遇到问题,只需在互联网上搜索类似情形,查看这些已报告的问题是否与您的经历密切相关。如果是相关的,那么在大多数情况下,您可以找到如何解决该问题的建议。

对我而言,尽管为配置脚本选择正确参数后,postgresql 很好地构建完成了,但 apache httpd 没那么幸运。接下来的几节将介绍为 Power 架构构建 apache httpd 所需的修复程序。

交叉编译器经验

编写本文时,我使用的交叉编译器版本是一个仅供 IBM 内部使用的版本,它专为修复我在测试期间遇到的一个错误而构建。读者可以下载 AT 7.0-5 版,它是最新的交叉编译器(在发表本文时),拥有接下来的几段中描述的错误的修复程序。

在我尝试交叉编译 apr-1.5.1 源代码发行版时,我看到了以下编译器消息。

"sorry - this program has been built without plugin support"

按照我在互联网上搜索可能的帮助和解决方案的建议,我找到多个链接提到编译器需要使用 “plugin enabled” 选项来构建。我向 toolchain 支持小组报告了此问题,toolchain 维护人员很快就回复了我,为我提供了一个使用 plugin enabled 选项构建的修改版本。请注意,toolchain 的交叉编译器和原生编译器版本都需要使用 plugin enabled 选项构建。我能够在获得拥有该修复程序的 toolchain 版本后继续工作。

这是我使用 PowerLinux toolchain 的第一次经历。

交叉编译 httpd 2.4.3

要交叉编译 Apache httpd,需要使用另外 3 个包。它们是:apr、apr-util 和 pcre。找到下载最新包的位置后,开始使用 toolchain 交叉编译器在 x86 服务器上构建它们。

我构建 apr-1.5.1 时遇到的问题是构建 gen_test_char.o 模块。请参阅 ASF Bugzilla – 错误 51257 了解有关的更多细节。我修改了 Makefile.in 文件(如下所示)并运行 buildconf 脚本,以便将更改包含在配置脚本中。

对 Makefile.in 的修改如下所示:

[root@stgisv240 apr-1.5.1]# diff -u Makefile.in ../../apr-1.5.1/Makefile.in

--- Makefile.in 2014-03-17 10:10:26.000000000 -0500

+++ ../../apr-1.5.1/Makefile.in 2014-07-03 13:36:11.125013781 -0500

@@ -46,7 +46,6 @@

CLEAN_TARGETS = apr-config.out apr.exp exports.c export_vars.c .make.dirs build/apr_rules.out tools/gen_test_char@EXEEXT@ - tools/gen_test_char.o tools/gen_test_char.lo \

include/private/apr_escape_test_char.h

DISTCLEAN_TARGETS = config.cache config.log config.status include/apr.h include/arch/unix/apr_private.h @@ -132,10 +131,9 @@

make_tools_dir:

$(APR_MKDIR) tools

-OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)

-tools/gen_test_char.lo: make_tools_dir

-tools/gen_test_char@EXEEXT@:$(OBJECTS_gen_test_char)

- $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)

+tools/gen_test_char@EXEEXT@: make_tools_dir

+tools/gen_test_char@EXEEXT@: tools/gen_test_char.c

+ $(BUILD_CC) $(CFLAGS_FOR_BUILD) $<-o $@

include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@

$(APR_MKDIR) include/private

修改 Makefile.in 文件后,我运行 buildconf 来创建了一个新配置脚本。下一段将介绍用于配置脚本的参数和变量。顺便说一下,我是根据其他尝试在其他平台(比如 ARM)上交叉编译 Apache httpd 及其组件的开发人员的建议,为配置脚本选择配置参数的。

以下是我在 x86 服务器上运行 apr-1.5.1 组件的配置脚本时,使用的参数和环境变量。

# Config script using Power Linux toolchain on x86

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux ac_cv_file__dev_zero=no

ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

BUILD_CC=gcc make install

我在 Power 服务器上了略加修改的相同发行版。请注意,用于 Power 服务器的 PowerLinux toolchain 使用了具有类似命名的可执行程序,比如从原生 cpp 和 binutils 包安装的 cpp 和 ld。修改脚本中的 CPP 和 LD 变量,如下所示。确保 Power toolchain 的路径首先传入您的 PATH 环境中。

以下是我在 Power 服务器上运行 apr-1.5.1 的配置脚本时使用的参数和环境变量。

# Config script using PowerLinux toolchain on Power

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=cpp # Note the difference

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=ld # Note the difference

STRIP=powerpc64-linux-strip

#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"

#LDFLAGS=-L$SYSROOT/lib

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local/apr ac_cv_file__dev_zero=no

ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

ac_cv_struct_rlimit=yes

BUILD_CC=gcc make install

以下是我在 x86 服务器上运行 apr-util-1.5.3 组件的配置脚本时使用的参数和环境变量。

# Configure script for apr-util-1.5.3 on x86

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux --with-

apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no

apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

以下是我在 Power 服务器上运行 apr-util-1.5.3 组件的配置脚本时使用的参数和环境变量。

# Configure script for apr-util-1.5.3 on Power

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local/apr --host=powerpc64-linux --with-

apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no

apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

以下是我在 x86 服务器上运行 httpd 组件的配置脚本时使用的参数和环境变量。

# Configure script for httpd 2.4.3 on x86

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no --with-

pcre=/tmp/usr/local/bin/pcre-config --with-apr=/tmp/usr/local/apr --with-mpm=worker--

with-apr-util=/tmp/usr/local/apr/bin/apu-1-config

以下是我在 Power 服务器上运行 httpd 组件的配置脚本时使用的参数和环境变量。

# Configure script for httpd 2.4.3 on Power

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=cpp

AS=powerpc64-linux-as

#ASCPP=powerpc-apm-linux-gnu-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

#CXXCPP=powerpc-apm-linux-gnu-cpp

CXX=powerpc64-linux-c++

LD=/opt/at7.0-5-rc1/bin/ld

STRIP=powerpc64-linux-strip

#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"

#LDFLAGS=-L$SYSROOT/lib

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no--with-

pcre=/home/usr/local/bin/pcre-config --with-apr=/home/usr/local/apr --with-mpm=worker--

with-apr-util=/home/usr/local/apr/bin/apu-1-config

交叉编译 PostgreSQL 9.4.3

不同于之前构建 httpd 所需的源代码发行版,我在交叉编译 PostgreSQL 时未遇到问题。PostgreSQL 是使用以下配置脚本来构建的。

以下是我在 x86 服务器上运行 PostgresSQL 的配置脚本时使用的参数和环境变量。

# Configure script for postgresql-9.3.4 on x86

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

D=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local --host=powerpc64-linux --without-readline --without-zlib

与 Apache 配置脚本一样,您可以注意到针对 Power 服务器 toolchain 使用了具有类似命名的可执行程序,比如从原生 cpp和 binutils 包安装的 cpp 和 ld。修改脚本中的 CPP 和 LD 变量,如下所示。确保 toolchain 的路径首先传入您的 PATH 环境中。

以下是我在 Power 服务器上运行 PostgresSQL 的配置脚本时使用的参数和环境变量。

# Configure script for postgresql-9.3.4 on Power

CC=powerpc64-linux-gcc

CPP=cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local --host=powerpc64-linux --without-readline --without-zlib

结束语

toolchain 交叉编译器的实际价值在于,开发人员可在他们熟悉的开发平台上(在大多数情况下是 x86)编译和构建 Power Architecture 应用程序。从我们的用例中可以看到,toolchain 可生成像原生编译的应用程序一样高效地执行的二进制可执行程序和库。而且,交叉编译的库与原生编译的应用程序兼容。最后但同样重要的是,交叉编译的应用程序可在本地调试以及使用 gdb 调试器远程调试。

PowerLinux toolchain 与在 x86 平台上使用原生 Linux toolchain 没什么不同。希望本文能让读者很好地了解 PowerLinux toolchain 的特性和功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11529688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存