RHCA学习笔记:RH442-Unit5 队列原理

NIT 5 Queuing Theory 队列原理

目标:

1.明白性能调优的关键术语

2. 应用队列技术解决性能问题

3.明白性能调优的复杂性

5.1    Introduction to queuing theory 队列原理简介

A.      Little’s Law 给出了队列原理的基础

John Little于1961年用数学证明了这个原理。

B.      带来的好处:

a.       可以用工程学方法来进行性能管理。

b.       量化系统未来的性能

c.       说明监测工具的输出内容之间关系

d.       验证测量值和软件仪表数据的正确性。

5.2    Little’s Law

A.      关键术语:

a.       Queue length: average number of requests waiting in the system

队列长度:在系统中同时等待的平均请求数.

b.       Arrival rate: the rate at which requests enter a system

到达率:一次性有多少请求到达系统

c.       Wait time: average time to satisfy a request

等待时间:满足一个请求的平均时间

Also known as wall clock,latency,response time,or residence time

硬件时钟,延时,响应时间,驻留时间

 公式:      L = A W   队列长度=到达率*等待时间

                          A=arrivals/observation period A=到达率/观测时间

 

5.3    Queue length 队列长度

A.      缓存在内存中的请求数

a.       L 可以是可以进行读写调整的或者只读的

b.       队列可以进行优先级排序

例:执行写之前先执行读(这就是为什么要优先级排序)

算法必须防止饿死。

B.      注意事项:

a.       短的队列长度可以优化内存

b.       长的队列长充可以对重要请求进行有效的重新排序

5.4    Queue length vs wait time 队列长度VS 等待时间

A.      为了使到达率处于稳定状态

直接改变W来改变L

B.      例(假设到达率为200 requests/s):

a.       初步方案:400 req= 200 req/s * 2s

b.       减少W 或L: 200 req = 200 req/s * 1s

c.       提升W 或L: 800 req = 200 req/s * 4s

C.      小结

a.       在可预期的等待时间内限制队列长度

b.       限制等待时间来优化队列长度

5.5    Wait time 等待时间

A.等待时间包括:

Queue time(排队时间:请求资源所花费的时间

Service time(服务时间):处理一个请求所花的时间

B. 策略:

a. 减少排队时间

b. 减少服务时间

W=Q+S

L=A (Q+S)

5.6    A closer look at wait time

A.      服务时间包括:

a.       System time系统时间:内核运算所花的时间

b.       User time用户时间:用户用于真正工作所花的时间

s= system call

u= user code

r= real time

r-u-s= real data transfer time

B. 策略

a. 减少系统时间(阻塞用户模式操作)

b. 只花费用户模式所需的时间

W=Q + (Tsys+Tuser)

5.7    How much user time is needed? For 20 inputs? For 100 inputs?

(略)

5.8    Profiling time with time 时间分析

A.      使用脚本来算出时间

Export TIME=”\n%e %S %U”

/usr/bin/time tar czf /tmp/demo.tgz /etc/ 2>&1 | tail –l | awk ‘BEGIN {print “W\tTsys\tTuser\tQ”} {print $1 ”\t” $2 “\t” $3 “\t” $1 - $2 - $3}’

a.       计算排队时间:Q=W – (Tsys+Tuser)

b.       可以分析出排队时间Q的问题。

5.9    Completion rate 完成率

A.      关键术语:

Bandwidth:data+overhead 带宽:数据+开销

Throughput:data only (Mbps)吞吐量:数据

Overhead: cost of doing work (Mbps) 开销:传输数据的开销

B.      带宽通常是固定的

减少开销可以提升吞吐量

B=X+O 带宽=完成率+开销

带宽固定的情况下,减少开销可以提高完成率。

5.10 Arrival rate vs completion rate 到达率VS完成率

A. 关键术语:

Arrival time(A)到达率:一次有多少个请求到达系统(packets/s)

Completion rate(C)完成率:一次可以完成多少个请求(packets/s)

Observation period观察时间:观察资源所花时间(1s)

稳定状态:条件是当A=C时

B 目标:调整时用C替代A

a.       调整时到达率是系统外部因素,因此很难去调整。

b.       完成率是可调整的,但很出现到达率与完成率相等的情况

c.       系统很少真正的处于稳定状态。

d.       请求有可能在观察时间内完成不了

C.      警告:

a.       如果过分调整系统可能会引起系统不稳定,或者机器崩溃。

5.11 Finding a valid observation period 找出有效的观察时间。

A.      当观察时间适当长时,A average= C average

a.       用观察时间为1秒收集数据

b.       比较相对little’s Law 的测量值

c.       测量值是否匹配计算值?

如是,观察时间有效,且L=CW

如不是,用长点的间隔时间重复以上步骤。

B. 例:使用iostat 和dd 来确定有效间隔时间。

dd if=/dev/zero of =/tmp/bigfile bs=1M count=1024

5.12           redicting system-wide limits 预测系统性能极限

A.      木桶理论

X system =X resource / V resource

B.      小结

a.       饱和资源是瓶颈。

b.       减少访问次数(V resource)可以提高系统吞吐量

c.       提升资源吞吐量(X resource) 可以提高系统吞吐量。

5.13       Predicting resource limits 预测资源极限

A.      利用率法则

Utilization = (service time) * (arrival rate)

利用率=服务时间 * 到达率

B.      在稳定状态(C=A)下资源饱和(U=1)

1=SC   è  C max =1/S

C.      资源饱和情况下:

a.       减少S可以提升C,因此A提高了

b.       增加到达数量会加大队列长度,所以等待时间上升了

c.       减少到达率来减少队列长度,所以等待时间下降了

5.14           Summary of strategies 策略汇总

A.      调整L

a.       限制队列长度

b.       对读请求进行排序,以更多的去响应读请求

B.      调整A或C

a.       通过更多的资源(SMP,RAID)减少访问次数。

b.       延时资源访问直到思考时间到。

c.       提高资源吞吐量(更有效的协议,较少的开销)

C.      调整W

a.       减少请求过期时间

b.       使用资源来减少服务时间(memory cache , disk)

D. 一次只能调整上面的一项。

时间: 2024-10-12 22:45:53

RHCA学习笔记:RH442-Unit5 队列原理的相关文章

Java IO学习笔记:概念与原理

Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了流,然后将这些流还可以写到另外的目的地(文件.内存.控制台.网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分. 二.分类 流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕.流分类的方式很多: 1.按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序. 2.

C++学习笔记34 模版的原理

模版在C++中具有非常重要的地位,STL就是大量运用模版写出来的. 模版的优点我就不一一列举了.这里我只说一下模版的原理. 当编译器遇到模版方法定义的时候,编译器进行语法检查,但是并不会编译模版.编译器无法编译模版定义,因为编译器不知道要使用的类型是什么,编译器不知道x和y的类型的情况下无法为x=y这样的语句生成代码. 当编译器遇到一个实例化的模版的时候,例如vector<int> vi(这里我只是拿vector举例,实际上基本类型的vector代码好像会自动存在编译器中),编译器会将模版类定

HCNP学习笔记之OSPF协议原理及配置9-基础知识特殊区域

为了减少外部路由对内部路由器的影响,可以通过设置特殊区域减少路由的数量. 因为对于内部路由不需要知道外部路由的明细. 即特殊区域是为了减少LSDB的规模. 1 stub区域,过滤了4类,5类 LSA,以一条到外部网络的默认路由替代. stub 区域实例: 由路由表可以看出,区域间路由(3类 network-summary-LSA)可以通告到stub中. 5类as-external-LSA被过滤,外部路由被转换成一条默认路由. 2 完全stub区域,过滤了3,4,5类LSA,拓扑和上例相同. 3

Android学习笔记View的工作原理

自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果. 实现自定义View,需要掌握View的底层工作原理,比如View的测量过程.布局流程以及绘制流程,除此之外,还需要掌握View常见的回调方法.而对于那些具有滑动效果的自定义View,我们还需要处理View的滑动,如果遇到滑动冲突则需要处理相应的滑动冲突. 下面是View的常见回调方法: 构造方法 onAttach onVisibilityChanged onDetach onFinishInflate on

RHCA学习笔记:RH442-Unit8进程与调度

UNIT 8  Processes and the Scheduler 进程与调度 学习目标 A. CPU cache 与Service time之间的关系 B. 分析应用程序使用CPU cache时的情况(CPU使用率与CPU cache命中率) C. 抢占 (根据优先级抢占) D 根据进程优先级顺序进行调度与排序 E. 监控内核和进程的性能 8.1    Characterizing prosess states 进程状态  查看进程状态: ps axo pid,comm,stat –sor

HCNP学习笔记之OSPF协议原理及配置1-基础知识

7.25日在济南博赛参加了HCNP的培训,感觉和HCDA不同,内容偏重理论,多而杂,现整理一下,和大家分享,也希望得到高手的指点. 先说下学习的感想和给初学者的建议: 学习的过程本身对自己就一种锻炼,要做好吃苦的准备,坚持下去,你一定会取得不凡的成就. 理论学习和操作是个迭代的过程. 很多同学花时间去背命令,我觉的不是可取的.命令只是一个工具,可以通过练习强化.但我们除了要知道怎么作(操作),还要知道为什么要这么做(理论).这样很好的解决实际当中遇到的问题. 所以,学习应该是理论-实践-理论-实

学习笔记:单调队列

转自:http://apps.hi.baidu.com/share/detail/34010558 [单调队列]在解一个序列某个区间段的最值问题,我们可以用到单调队列来解决.  比如poj2823 Sliding Window 就是一个很好的例子:给定一个序列,要求序列中固定长度为k 的区间中的最大值和最小值.  [原理]单调队列维护的是区间最值:  1.最大值的维护:          比如我们要维护一个区间为k的最大值的单调队列,由于新插入 的节点他的“生命力”肯定比原先已经在队列中的元素“

Android(java)学习笔记95:Android原理揭秘系列之View、ViewGroup

作过Android 应用开发的朋友都知道,Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.AndroidUI界面的一般结构可参见下面的示意图: 可见,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup,而子ViewGroup又可以包含下一层的叶子节点的View和ViewGroup.事实上,这种灵活的Vi

C++学习笔记50:队列类模板

队列是只能向一端添加元素,从另一端删除元素的线性群体 循环队列 在想象中将数组弯曲成环形,元素出队时,后继元素不移动,每当队尾达到数组最后一个元素时,便再回到数组开头. 队列类模板 //Queue.h #ifndef QUEUE_H #define QUEUE_H #include <cassert> //类模板的定义 template <class T, int SIZE = 50> class Queue { private: int front, rear, count; T