分类: 系统运维
2016-01-26 17:55:42
这篇文档相当老,内容也不是很深入。原文是一套叫Unix Performance Tools Notebook的slide. 优点是介绍了除Glance之外的一些Unix通用的工具,还是有些用处。
? 硬件
? 操作系统
? 应用软件
? 人
? 变更
? 上述内容是如何管理的
? 网络
? 环境
计算机系统的核心部件包括:
? CPU:执行指令的硬件
? 内存:程序与它们的数据被加载的地方
? 硬盘:程序与数据在未被CPU使用时存放的地方
? 网络:计算机之间的接口
其他的部件包括
? 终端
? 磁带机
? 打印机
? 图形系统等
操作系统管理用户应用的硬件资源,将用户需求转换成硬件认识的指令。
HPUX kernel基于Berkeley 4.2,增加了AT&T System V的兼容接口。
HPUX在两个级别执行,user和kernel. 在user级别,系统用户可以与OS交互,输入命令调整kernel的运作。
User级别与Kernel级别通过系统调用接口连接。
作为一个Unix系统,HPUX支持多用户与多任务。性能与用户数、用户任务的类型,OS的配置等相关。
一个典型的HP处理器包含中央处理单元(CPU),cache,Translation look-aside buffer(TLB),协处理器,Special function unit(SFU).这些单元通过总线相联。
Cache(高速缓存)是高速的记忆体(通常访问时间在10-20纳秒,一般的记忆体在80-150纳秒)。高速缓存可以在一个CPU时钟周期内访问,存储CPU最近访问过的,或是预测将要被访问的指令或是数据。缓存的大小可以比CPU的主频对性能产生更大的影响。不同的CPU有不同的缓存大小。
Translation look-aside buffer(TLB)用来将虚拟地址转换为物理地址。它实质上是一种高速缓存,包含最近访问过的虚拟地址与物理地址对应关系及访问权限和访问ID。 TLB是内存中系统级别的转换表的子集。 TLB的大小也会影响系统的性能,不同的CPU也有不同的TBL大小。
TLB通常指示一页内存,而不是某一个点。
用户通常通过终端(Terminal)来访问主机,通过命令与进程来完成特定的任务。进程在用户输入命令或运行程序以后开始。
CPU将命令移动到内存中,也是它开始执行的地方。将命令移到内存中的时间取决于三个因素。 1. 数据存在哪里?如果是在buffer cache中,CPU可以快速访问到。 2. CPU处理指令有多快?3. 命令需要的资源是否空闲?
如果命令需要硬盘上的数据,也许需要在队列中等待被其他进程使用的硬盘。
总的流程可能包括一些CPU的运算、几页的内存和一些对硬盘的读写操作。每一步都需要时间。从系统性能管理的角度来看,不是关心完成操作总共用了多少时间,而是看在哪时以及如何消耗了时间。
SRUN: 进程可以运行或是正在运行,在kernel模式,内存中或是swap设备上。
SSLEEP: 进程正在等待某个事件,在内存中或是swap设备上。
SZOMB: 进程已经释放了除了进程表条目(process table entry)之外的全部系统资源。这个状态不会再改变。
SIDL: 进程正在被fork 或是 exec生成.
SSTOP: 进程被任务调度或是进程跟踪系统停止,等待继续。
CPU Scheduler:调度各进程对CPU的使用。
System Clock: 系统时钟
Interrupt Handler:中断管理,执行时钟中断,收集系统的统计信息。Context Switching:上下文切换, 保存进程的信息,这样进程就可以在中断后开始运行或是继续运行(如果被中断了).
CPU调度处理下面的事项:
? 上下文切换
? 中断
当所需的资源就绪后,进程就等待CPU调度程序安排CPU的时间(来运行)。
CPU的调度是多任务、多用户环境的基础。 通过在不同的、等待资源如其他的事件、IO等的进程之前切换CPU,操作系统可以处理更多的任务。
HPUX使用轮循调度。CPU让每个进程运行一个预设的时间段,称之为quantum 或是时间片,直到它结束或是被其他进程占先运行。CPU保存前一个进程的状态到一个”context”中,切换到下一进程。第一个进程被放到待运行队列的最后,等待下一次被运行。
作为一个多任务的系统,HPUX需要一些变化来做进程间的切换。这个机制通过中断CPU来切换优先级。时钟中断实现几个功能,它收集系统统计信息,进行上下文切换(context switching). 系统的性能取决于这些操作能否高速有效地进行。
? 时间片到期
? 进程退出
? 进程将自己置于sleep或是stopped状态
? 进程由系统调用中返回到user mode,但已不是最优先的进程
? 另一个实时优先的进程到了运行的时间
当一个进程进行了系统调用后,一系列的流程要进行,这样进程可以在kernel mode中执行系统代码。
? POSIX Real Time
n 1 wide
? HP-UX Real Time
n 1 wide
? Time Share
n 4 wide
运行队列的‘宽度’是不同的。宽度是指一个队列中优先级值的范围。
例如,在time-share级别的队列中,在优先级178到181(宽度为4)之间有一个队列。在这个队列中的所有进程都是同等对待,不管它的优先级实际上是多少,所以一个优先级为181的进程有可能比优先级178的进程得到更快的处理。这个功能只在某一个运行队列中生效。位于182-185队列中的进程不会比位于178-181队列中的进程获得更高的优先。
“bestq”指向队列中下一个进程,这个机制是为了提高运行队列的效率。否则,运行队列就必须查询每一个进程的优先级来确认是否还有其他进程需要优先运行。
多处理器环境下每个CPU管理自己的运行队列。但是,POSIX run time可以让所有的CPU都运行队列中的进程,换句话讲,一个CPU可以运行初始在另一CPU的运行队列中的进程。
分享处理器时间的进程初始状态下都被分配了相同的优先级。用户可以通过nice的赋值适度调整。
如前所述,分享时间的进程在执行后失去优先级,等待到它的下次执行机会时重新获得优先。进程失去优先级的机率是线性的,但是它重获优先的机会是指数特性的。当CPU负载高时,这个指数值下降。CPU负载低时,这个值升高。
一个进程的nice值被用来作为计算重获优先级的因子。所认,在CPU负载低的时候,nice值的基本没什么作用,相反,在CPU负载高时影响就大了。
Nice的赋值可以让某一个进程获得更低优先级。默认值是20. 要让一个进程在更低的优先级运行,可以把nice的值赋高一些,比如说39。
超级用户可以通过赋一个低的nice值给某一个进程,让它在更高的优先级别运行。
一个时间片等于10个‘tick’。每个正在运行的进程每隔4个’tick’会重新计算它的优先级。 优先级的计算基于每个进程使用的CPU时间总合。
在时间片结束后,系统决定哪个进程获得CPU。
每一秒钟,每个进程都被重排优先级。
当一个进程开始后,就被CPU指向内存来获取所需的数据。
内存访问可能只需通过buffer cache或是由磁盘上进行page in的操作。 如果所需的数据在一个硬盘上,而其他的进程正在访问硬盘,这个进程就要在一个队列里等待访问这个硬盘。
内存管理的含义是OS中管理内存的这一部分,它跟踪内存的哪一部分是可用的或是被占用的,为进程申请内存,管理进程的去激活。
Paging: 虚拟内存空间(叫pages)中的内容由虚拟内存(硬盘)移动到或是移出主内存的技术
Page Fault: 当CPU要访问一个内存中的页面时,它还没有从硬盘(虚拟内存)page in到主内存时,会发生的一个非法地址错误,或是陷阱。这个页面有可能在这个访问需求之前由主内存中page out了。
Deactivation:去激活,将一个进程由交换区移到到主内存中,和由主内存移动到交换区的过程
Thrashing: 系统颠簸 ,是这样的一种情况,进程被page in/page out的时间,比它本身处理进程本身的内容时间还长,大量的page fault出现。
处理page操作的后台进程每0.03秒运行一次。 如果空闲内存比LOTSFREE定义的值少,pageout例程就被调用。
Pageout使用‘双手’时钟算法来确定空闲的内存。这个进程在HPUX中叫’vhand’. ‘age’ hand对每一个内存页面对应的标志位进行老化操作(黄金甲按:我的理解是按一个间隔递增它的值)。如果第二只手扫描到这个标志位时它的值仍然是0,那这个页面就是空闲的,说明在第一只手扫过它之后没有被标志过。如果这个页面是干净的(没有被修改过的),它就被加到freelist中。 如果这个页面是脏的(修改过的),在被放到freelist之前需要把它的内容写到交换设备上。
‘手’旋转的速度取决于预期的内存需求。 剩余内存越少,扫描的速度越快。当paging操作过多时,deactivation就开始了。
Lotsfree, gpgslim, desfree, minfree,这几个值在系统启动时计算,每台主机根据内存大小的不同计算出来的值也是不一样的。
当可用内存少于Lotsfree以后,对页面的老化(aging)操作就开始了。然后,当剩余内存低于gpgslim, 窃用(stealing)操作就开始了。内存紧张时系统可能调整gpgslim的值。其他的值都是维持不变的。
当可用内存低于desfree以后,系统会非常积极地尝试空出内存,paging是必要的。这时,系统可能会调整双手算法尝试让内存使用稳定一些。这可能包括加速双手算法的过程,减少’老化’与’窃用’之间的时间间隔等。
当可用内存低于minfree之后,进程的deactivation开始。内存已经相当紧张,到了基本上无法恢复的阶段。
虚拟文件系统virtual file system(VFS)的概念被引入来处理网络上的文件系统。每个文件系统类型有其自己的VFS。 相似的,每个文件有虚拟文件结点virtual file node(vnode),就像旧的文件系统有inode一样。 每个本地文件系统的vnode指向inode,NFS的vnode指向remote node(rnode).
Inode是指向数据块的指针。 Vnode代表多种文件系统,指向一个inode.
注意裸设备不使用buffer cache.
在这个例子里,要取得命令行中命令所需的数据,进程必须要访问硬盘上的文件。文件系统的结构类似于相面的框图。对于系统的用户来说,文件系统结构组织在一个树形结构下,从/开始。
文件系统是操作系统软件控制数据存放的部分,控制了数据是如何存放的,如何被内存管理识别。
每一个文件系统中的文件由一个inode表示。一个inode长128字节。它包含了必要的信息来控制访问,比如说文件大小、权限、属主和物理数据块的地址。HPUX通过inode实现文件的安全控制。
因为inode了解数据存放的情况,所以对文件的所有访问都先访问inode.
这些硬盘的特性与文件系统相关:
? 如何提高buffer cache的命中率来减少对硬盘的访问。
? 如何使用文件系统参数如block和fragment size,minfree,rotdelay等来控制文件的分布,优化访问时间。
? 如何均衡分布硬盘的负载
对文件系统的访问,CPU并不直接由硬盘读取或写入。如果硬盘传输率低,文件系统的响应时间与输出就会很差。Kernel通过buffer cache来尽量减少对硬盘的访问。
Buffer cache的大小可以通过nbuf和bufpages参数来调整(黄金甲按:在11.31中因为UFC的使用这两个参数已经没用了)。