Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2029953
  • 博文数量: 593
  • 博客积分: 20034
  • 博客等级: 上将
  • 技术积分: 6779
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 14:07
文章分类

全部博文(593)

文章存档

2016年(1)

2011年(101)

2010年(80)

2009年(10)

2008年(102)

2007年(16)

2006年(283)

我的朋友

分类: LINUX

2008-11-11 00:50:47

IBM POWER5™ 和 POWER5+™ 系统提供了非常优秀的虚拟化能力。通过阅读本文,您将理解影响运行 SUSE Linux® Enterprise Server (SLES) 10 的 IBM POWER5 系统虚拟化性能的因素,并学习如何使用一些可以帮助诊断和解决性能问题的工具。您还将看到几个如何测试和改进性能的例子。

SUSE Linux Enterprise Server (SLES) 10 操作系统中支持的 IBM System p™ 虚拟化特性包括虚拟 SCSI(VSCSI)和虚拟 LAN(VLAN)。VSCSI 和 VLAN 都提供了一些可以改进系统性能的配置和调优参数。本文着重介绍了一些调优建议,并展示了一些可以为性能监测和虚拟化性能问题诊断提供数据的评测工具特性。 有关初始设置和配置的信息,请参看 参考资料

对 VSCSI 进行调优的主要方法是选择正确的 I/O 调度程序。您可以为 VSCSI 服务器驱动器和/或 VSCSI 客户机驱动器选择 I/O 调度程序。所选择的调度程序应该要适合驱动器上的任务负载。默认安装使用的是 anticipatory I/O 调度程序。对于 VSCSI 服务器驱动器来说,最好的 I/O 调度程序是 noop。

可以使用的 I/O 调度程序包括:

  • noop —— fifo 排队
  • anticipatory —— 预期调度
  • deadline
  • cfq —— 始终公平排队

要确定正在使用的是哪个 I/O 调度程序,可以查询 /sys 文件系统中的内容。例如,在 SLES 10 上,可以使用下面的命令:

cat /sys/block//queue/scheduler
^use drive of interest

For example using drive sda:
cat /sys/block/sda/queue/scheduler
[noop] anticipatory deadline cfq

在这个例子中,使用的正是 [noop] 调度程序。您可以向上面例子中给出的文件中回转一个值来实时修改 I/O 调度程序。您也可以通过向 /etc/yaboot.conf 添加一行内容在引导时修改调度器,例如:

append = "elevator=noop"

SLES 10 通用的版本有一个 VSCSI 功能方面的 bug。用户可以从 SUSE Linux 门户(请参看 参考资料)获得 SLES 10 最新的内核更新(2.6.16.21-025-ppc 或更新版本)。这个更新包括了一些补丁修正。

iostat 命令是 sysstat 包中的一部分,可以通过 SUSE 中的 yast 实用工具获得。

  1. 启动 yast。
  2. 选择 software
  3. 选择 software management
  4. 查找 sysstat
  5. 高亮显示 systat 包裹。
  6. 选择 accept 操作。
  7. 按照提示,加载需要的安装盘。

运行 iostat -x 命令会提供很多有关对物理设备和虚拟设备进行读写流量的信息。要查看手册页,请参看 参考资料iostat 列的定义。

为了诊断与虚拟 SCSI 磁盘有关的性能问题,需要理解 VSCSI 的系统配置。您需要知道虚拟设备与物理硬件之间是如何映射的。

对 一个物理 SCSI 磁盘上所有磁盘分区进行操作的总和必须在物理 SCSI 设备的处理能力之内。首先,要查看一下对物理设备的需求。然后,如果对物理设备的需求很高,就查看一下对于每个分区的需求。还要根据需要调整虚拟设备到物 理设备的映射,以使对设备操作的需求在物理硬件的处理能力之内。这种调整需要修改虚拟设备到物理设备的映射,或者修改或添加硬件。

考虑这样一个 VSCSI 服务器的例子,它有一个名为 sdc 的 SCSI 磁盘,被划分成 3 个分区: (sdc1sdc2sdc3),每个分区都进行了虚拟化。在客户机使用虚拟化的分区时,都会被作为一个单独的驱动器使用。 iostat 工具显示对驱动器磁盘的使用情况。iostat 可以在客户机使用 sdc1sdc2sdc3 时对它们的使用情况进行度量。最好的方法是在 VSCSI 服务器上首先运行 iostat 来显示对 sdc 的总体使用情况。然后在每个客户机上运行 iostat 获取对分区 sdc1sdc2sdc3 的利用情况。



虚拟 SCSI 例子

下面让我们来看一个度量示例,它显示了为什么需要理解物理磁盘到虚拟磁盘的映射方式。如 图 1 所示, VIO 服务器从 sda 引导。VIO 服务器然后会对 sdbsdc 上的 3 个分区进行虚拟化。VIO 客户机从 sda 上引导,然后会将这 3 个虚拟分区作为 sdbsdcsdd 进行挂载。

本例的任务负载是由 Flexible File System Benchmark (FFSB)(请参看 参考资料 下载这个工具)提供的,它是一个开源工具,很容易配置来提供各种读/写、顺序/随机操作模式,还可以使用其他一些线程选项。对于本例来说,FFSB 被配置用来对客户机磁盘 sdbsdcsdd 的性能进行评测。大型顺序读操作是对 sdb 磁盘进行的。小型随机读操作是对 sdc 磁盘进行的。顺序写操作是对 sdd 磁盘的,如 清单 1 所示。 iostat 工具可以度量这些行为的结果。这个测试首先在每个磁盘上单独运行,然后在这 3 个磁盘上并行运行。

清单 1 给出了对 sdb 执行大型顺序读操作时 iostat 的结果。



                
avg-cpu: %user %nice %system %iowait %steal %idle
0.30 0.00 6.35 93.30 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s
sda 0.00 0.45 0.10 0.10 0.80 4.80 0.40
sdb 1.17 0.80 173.36 0.40 82818.59 11.19 41409.30
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Device: wkB/s avgrq-sz avgqu-sz await svctm %util
sda 2.40 28.00 0.00 5.00 5.00 0.10
sdb 5.60 476.68 102.99 592.19 5.75 100.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00

清单 2 给出了对在 sdc 上执行小型随机读操作时 iostat 的输出结果。



                
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.95 99.00 0.00 0.05

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s
sda 0.00 0.45 0.00 0.10 0.00 4.80 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.80 98.85 0.40 2390.80 11.19 1195.40
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Device: wkB/s avgrq-sz avgqu-sz await svctm %util
sda 2.40 48.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00
sdc 5.60 8.03 31.56 105.50 3.34 100.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00

最后,清单 3 给出了对 sdd 执行随机写操作时 iostat 的结果。



                
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.00 98.95 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s
sda 0.00 0.45 0.10 0.55 0.80 8.40 0.40
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 27.69 0.00 455.97 0.00 3866.87 0.00

Device: wkB/s avgrq-sz avgqu-sz await svctm %util
sda 4.20 14.15 0.01 15.38 4.62 0.30
sdb 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00
sdd 1933.43 8.48 143.49 297.71 2.19 99.95


这三个测试并行执行时客户机端的 iostat 命令的结果显示,在并行执行测试时,各个磁盘的吞吐量要低于在这些磁盘上单独运行测试时的吞吐量。清单 4 给出了这 3 个测试并行执行时 iostat 的结果。



                

avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 1.60 98.30 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s
sda 0.00 0.10 0.05 0.20 0.40 2.80 0.20
sdb 1.10 0.40 14.84 0.25 7084.86 7.60 3542.43
sdc 0.00 0.75 52.22 0.45 417.79 11.19 208.90
sdd 0.00 14.89 0.00 312.29 0.00 2618.29 0.00

Device: wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1.40 12.80 0.00 8.00 6.00 0.15
sdb 3.80 469.93 91.77 4818.38 66.26 100.00
sdc 5.60 8.14 30.72 641.45 18.98 100.00
sdd 1309.15 8.38 142.79 451.13 3.20 100.00

现在来看一下服务器上物理磁盘的使用情况。回想一下 图 1 中服务器驱动器 sdc 有 3 个分区,客户机将它们分别作为驱动器 sdbsdcsdd 使用。服务器端的 iostat 度量显示物理磁盘 sdc 的利用率是 100%,如清单 5 所示。



                
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.40 0.00 0.00 98.60

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s
sda 0.00 0.00 0.00 0.10 0.00 0.80 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 61.97 322.04 6821.79 2704.65 3410.89

Device: wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.40 8.00 0.00 15.00 15.00 0.15
sdb 0.00 0.00 0.00 0.00 0.00 0.00
sdc 1352.32 24.81 27.50 70.54 2.60 100.00

这个例子展示了物理磁盘资源出现竞争情况时对吞吐量和响应时间的影响。当 VSCSI 设备的吞吐量或响应时间变差时,查看一下物理设备的利用率,从而确认是否是物理设备竞争的原因。

虚 拟 LAN 是 POWER Hypervisor™ 的一个功能,它可以在逻辑分区之间启用安全通信,而不需要使用物理 I/O 适配器。当 VLAN 上的 LPAR 之间有 TCP/IP 通信数据时,有一些 TCP/IP 调优参数可以影响数据流的性能。您可以使用一组调优参数,它们在这种没有物理 I/O 适配器的环境中很好地工作。清单 6 给出了一些可获得更好的 VLAN 性能的调优建议。



                
/sbin/sysctl -w net.ipv4.tcp_timestamps=1
/sbin/sysctl -w net.ipv4.tcp_sack=1
/sbin/sysctl -w net.ipv4.tcp_window_scaling=1
/sbin/sysctl -w net.core.netdev_max_backlog=3000
/sbin/sysctl -w net.ipv4.tcp_wmem='4096 87380 30000000'
/sbin/sysctl -w net.ipv4.tcp_rmem='4096 87380 30000000'
/sbin/sysctl -w net.ipv4.ip_local_port_range='8096 131072'
/sbin/sysctl -w net.core.rmem_max=10485760
/sbin/sysctl -w net.core.rmem_default=10485760
/sbin/sysctl -w net.core.wmem_max=10485760
/sbin/sysctl -w net.core.wmem_default=10485760
/sbin/sysctl -w net.core.optmem_max=10000000
echo 128 > /sys/class/net/eth0/weight
echo 128 > /sys/class/net/eth1/weight

对 VLAN 进行网络分析的主要工具是 netstat,它可以显示有关网络系统的大量信息。其中两个最有用的输出是接口信息和网络统计信息。您可以使用 netstat -i 显示网络接口信息,使用 netstat -s 显示 TCP/IP 的协议统计信息。

用来度量最大 TCP 带宽的工具是 iperf(请参看 参考资料,访问 National Laboratory for Applied Network Research Web 站点)。

对于本例来说,iperf 用来查看一个 POWER5 系统配置上的 VLAN 带宽,这个系统包括一个 4 处理器的计算机,每个服务器和客户机分区使用了 0.5 个物理 CPU。启用了同步多线程(Simultaneous multithreading,SMT)特性,系统中有 2GB 的内存。报告显示的吞吐量只有大约 500 Mbits/sec。如果使用的是千兆适配器,该值大约是 1000 Mbits/sec。清单 7 给出了 iperf 的吞吐量和 vmstat 的输出结果。 vmstat 是一个 Linux 实时性能监测工具。vmstat 可以在 id (倒数第 2 列)列中报告 CPU 的空闲比率。CPU 利用率的结果显示该列值是 100%,即 CPU 空闲。



                

[root@power] /iperf_202/iperf-2.0.2/src > ./iperf -c en0host2 -w 1024KB -N
------------------------------------------------------------
Client connecting to en0host2, TCP port 5001
TCP window size: 256 KByte (WARNING: requested 1.00 MByte)
------------------------------------------------------------
[ 3] local 192.168.1.1 port 55990 connected with 192.168.1.2 port 5001
[ 3] 0.0-10.0 sec 632 MBytes 530 Mbits/sec

vmstat output:

[root@power] /root > vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 360088 75136 681724 0 0 1 3 13 37 1 6 93 0
0 0 0 360088 75136 681724 0 0 0 0 6 18 0 0 100 0
0 0 0 360088 75136 681724 0 0 0 0 9 12 0 0 100 0
0 0 0 360088 75136 681724 0 0 0 0 6 10 0 0 100 0
3 0 0 359684 75136 681724 0 0 0 0 358 96 0 2 98 0
1 0 0 359808 75136 681724 0 0 0 0 14774 1464 0 63 37 0
1 0 0 359684 75136 681724 0 0 0 8 13913 1452 0 64 36 0
1 0 0 359808 75136 681724 0 0 0 0 14676 1359 1 65 35 0
1 0 0 359544 75136 681724 0 0 0 8 14260 1598 12 67 20 0
1 0 0 359668 75136 681724 0 0 0 0 12198 1882 0 62 38 0
2 0 0 359544 75136 681724 0 0 0 0 13844 1435 1 63 37 0
1 0 0 359544 75136 681724 0 0 0 0 14808 1372 0 64 37 0
1 0 0 359668 75136 681724 0 0 0 0 13934 1454 0 62 37 0
1 0 0 359700 75136 681724 0 0 0 0 11327 1886 0 64 35 0
0 0 0 359576 75136 681724 0 0 0 0 14650 1343 0 60 40 0

运行测试的分区只分配了 0.5 个物理 CPU,这使得 vmstat 所度量出来的 CPU 利用率看起来非常高。这可能会导致您认为 iperf 是一个 CPU 密集型的程序。我们对系统重新进行了配置,为每个服务器和客户机分区都分配 1 个物理 CPU。在新配置好的系统上再次运行测试就得到了如清单 8 所示的改进后的结果。



                

[root@power] /iperf_202/iperf-2.0.2/src > ./iperf -c en0host2 -w 1024KB -N
------------------------------------------------------------
Client connecting to en0host2, TCP port 5001
TCP window size: 256 KByte (WARNING: requested 1.00 MByte)
------------------------------------------------------------
[ 3] local 192.168.1.1 port 39856 connected with 192.168.1.2 port 5001
[ 3] 0.0-10.0 sec 1.22 GBytes 1.05 Gbits/sec

通过增加 CPU 的处理能力,测试可以使以太网全速运行。了解了这一点,系统管理员就可以制定适当的 CPU 资源分配方案了。

理 解 SLES 10 所支持的 IBM System p 的虚拟 SCSI 和虚拟 LAN 特性可以帮助管理员对系统进行调优,以便实现更好的性能。本文说明物理磁盘出现资源竞争的情况可以导致 VSCSI 设备吞吐量或响应时间的下降。类似地,CPU 的限制也可能会限制 VLAN 的性能。这两种情况都可以通过向虚拟设备中添加额外的物理资源而得到缓解。

阅读(496) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~