日期:2014-05-16  浏览次数:20601 次

Unix/Linux 系统自动化管理: CPU 管理篇

在 Unix/Linux 系统日常管理和系统维护的过程中,随时可能需要查看 CPU 的使用状态,并根据相应信息分析系统状况,判断系统的资源使用情况和系统负载情况。本文在介绍 Unix/Linux 系统中 CPU 相关机制和工具的基础上,对各工具进行了分析比较,并给出了自动化监控系统环境和 CPU 利用率的例子代码供读者参考。在 AIX 系统的 CPU 使用状态监控部分,我们将介绍 lparstat,mpstat 等工具。而在 Linux 系统 CPU 使用状态监控部分,我们将重点介绍 /proc 文件系统和 ps 等命令。

了解 AIX 系统中的可用 CPU 资源

AIX 系统中每个处理器在低位内存中有着对应的全局数据结构 PPDA (Per-processor Data Area),其中存储了处理器的各种配置信息和运行状态,比如时钟频率和 CPU 运行时间。AIX 系统接口查询 PPDA 中的数据并提供给终端用户或者应用程序使用。但在进行 CPU 监控之前,系统用户首先需要了解当前的系统环境和可用的计算资源。对于不同的系统环境,用户需要不同的监控策略。首先,对于没有划分微分区 (Micro Partition) 的服务器,系统用户可以通过很多操作系统接口得到机器实际可用的资源种类和数量。

硬件和操作系统没有使用虚拟化技术的系统


清单 1. 运行 prtconf 获得处理器的相关信息
				  
 $ prtconf | grep Processor 
 Processor Type: PowerPC_POWER6 
 Processor Implementation Mode: POWER 6 
 Processor Version: PV_6 
 Number Of Processors: 4 
 Processor Clock Speed: 4005 MHz 
  Model Implementation: Multiple Processor, PCI bus 
 + proc0                                        Processor 
 + proc2                                        Processor 
 + proc4                                        Processor 
 + proc6                                        Processor 


Processor Type 表示了处理器的类型属于 Power 6 系列。这里同样可以知道本机的处理器个数为 4,并且时钟运行频率为 4G。运用类似的命令接口,比如 lsdev -Cc processor,也可以得到其他与 CPU 相关的配置信息。

使用微分区的系统

虚拟化作为一项成熟的技术,在 IBM eServer pSeries 服务器和 BladeCenter JS 刀片服务器中已经得到广泛的应用。所以我们有必要简单说明用户在常见的虚拟化环境,微分区 (Micro Partition) 中如何得到可用的资源状态。AIX 的命令接口在虚拟化环境下仍然可以使用,但是通常得到的结果是分配给当前虚拟机的虚拟处理器 (Virtual CPU) 的信息,而不是物理处理器 (Physical CPU) 的。


清单 2. 在微分区上运行 prtconf 获得虚拟处理器的信息
				  
 # prtconf | grep Processor 
 Processor Type: PowerPC_POWER5 
 Processor Implementation Mode: POWER 5 
 Processor Version: PV_5 
 Number Of Processors: 1 
 Processor Clock Speed: 1654 MHz 
  Model Implementation: Multiple Processor, PCI bus 
 + proc0  

以上输出表示本机当前被分配了一个虚拟处理器,及其硬件类型和运行频率。为了获得该虚拟机获得的物理处理器的数量,通常需要访问对应的 HMC (Hardware Management Console) 或者 AMM (Advanced Management Module) 来获得详细的信息和配置。下面的实例运行于 HMC。


清单 3. 在 HMC 上运行 lssyscfg 获得微分区的配置
				  
 hscroot@hmc:~> lssyscfg -r prof -m Server-9117-MMA-SN060DD72 
 --filter "lpar_ids=p6ml4n05"
 name=p6ml4n05,lpar_name=p6ml4n05,lpar_id=6,lpar_env=aixlinux, 
 all_resources=0,min_mem=2048,desired_mem=3072,max_mem=4096, 
 min_num_huge_pages=0,desired_num_huge_pages=0, 
 max_num_huge_pages=0,mem_mode=ded,proc_mode=shared,min_proc_units=0.1, 
 desired_proc_units=0.2,max_proc_units=0.3,m