Access Specifications tab允许用户控制每一个worker对其选中的target所执行的I/O类型。该Tab下主要包括Global Access Specification和Assigned Access Specifications列表以及一些按钮,我们将详细介绍它们的意义和使用方法。
Global Access Specifications和Assigned Access Specifications列表
Global Access Specifications列表列出了当前定义的所有访问规则(Access Specification),一个访问规则可以指定一种类型的I/O或多种类型的混合I/O。Assigned Access Specifications列表显示了当前指派给选中的worker的访问规则,可以通过选中一个或多个访问规则并点击Add按钮将其指派给worker。每个访问规则由名称和图标组成,名称由用户定义,最好是能清楚的描述该访问规则的形态。图标指定了访问规则的Default Assignment,它决定了创建一个worker后会自动分配哪一个访问规则给它。一共有4种Default Assignment:All Workers、Disk Workers、Network Workers以及None。
在Assigned Access Specifications列表中,每一个访问规则左侧的LED(带有颜色的圆圈)表示在测试时该访问规则所处的状态:
- 蓝色:访问规则尚未运行
- 绿色:正在运行的访问规则
- 红色:运行完毕的访问规则
如果Assigned Access Specifications列表中有多个访问规则,Iometer会执行一个系列测试(series of tests),访问规则将从上至下顺序执行,执行每一个访问规则期间,Iometer运行一个或多个测试(由Test Setup tab的设置决定),如果Test Setup tab没有指定运行时间,每个测试会一直运行直到你按了工具栏上的Stop按钮为止。
可以分配不同的访问规则给不同的worker,例如,让磁盘worker执行类似数据库的I/O,同时让网络worker执行类似web-server的I/O(分别用不同的访问规则定义)。如果列表中存在多个访问规则,所有worker会同时执行它们的首个访问规则,然后执行第二个,等等。如果每一个worker的访问规则数量不同,拥有少量访问规则的worker在其他拥有较多访问规则的worker依然在工作的时候将处于空闲状态。你可以分配一个空闲访问规则来强制让一个worker在其他worker正在工作的时候处于空闲状态。
单个访问规则可以多次指派给同一个worker。例如,如果有两个worker(1和2)以及两个访问规则(A和B),可以把访问规则A和B指派给worker1,为worker2指派访问规则A的两个副本。这种情况下将运行两个测试:在一个测试中,两个worker都将运行访问规则A,在第二个测试中,worker1运行访问规则B,同时worker2再次运行访问规则A。
如果在Topology面板选中了一个manager或“All Managers”, Assigned Access Specifications列表将是空的,除非该manager或“All Managers”的worker都采用相同的访问规则列表。在选中了某个manager或“All Managers”的情况下对此列表进行更改,那么这种更改会被指派给该manager或“All Managers”下的所有worker。
点击New将弹出Edit Access Specification对话框,用于创建一个新的访问规则,它显示了访问规则的定义并且允许对其进行修改。每个访问规则可以由多个I/O形态组成,每个I/O形态由Size、%Access、%Read、%Random、Delay、Burst、Alignment、Reply字段构成,显示
在中间的表格内,每一行都是一个I/O形态。下面,我们将介绍其中的每一个字段的含义:
Transfer Request Size – 指定每个I/O请求的读写字节的大小,默认是2KB,取值范围是1字节(0MB+0KB+1Byte)到差不多1GB(1023MB+1023KB+1023Byte),仅受限于可用的虚拟内存。
Percent of Access Specification – 指定每一种I/O形态(Edit Access Specification对话框中间表格内的每一行)所占一个访问规则的I/O百分比。默认是100%,取值范围是1%-100%,增量为1%。如果一个访问规则有多行(多个I/O形态),每一行的%Access字段决定了该行控制的I/O操作的执行几率,这些几率是%Read和%Random字段的几率结合后的结果。每一行的%Access字段的加法和必须等于100%,每一行的执行顺序是随机的,但随着测试时间的推移,访问规则中的每一行必然会以指定的几率执行。
注意:访问规则越复杂,需要运行测试的时间足够久才能确保随机选择操作会尽可能的与所配置的百分比相当。
Percent Read/Write Distribution – 指定读写操作的比例。(对于网络worker,写操作是发送,读操作是接收。当相应的服务器在“写”的时候,网络客户端总是“读”,反之亦然)。例如,指定%read = 40%,那么一个I/O有40%的可能性是“读”,60%的可能是“写”。这意味着读和写是随机的,但随着访问规则的执行,总的来看,Iometer会平均执行40%读和60%写(2:3的读写比例)
Percent Random/Sequential Distribution – 指定随机访问率(默认是100%)。例如,%Random = 60%表示一个I/O有60%的机会是访问一个随机地址,40%的机会访问一个顺序地址。这个值对于网络worker是忽略的。
小提示:要以顺序的方式访问磁盘,选中该磁盘并指派一个worker,设置# of outstanding I/Os =1。
Burstiness Length – 指定每个爆发的连续执行的I/O数量,可以输入任何非0值,默认是1。如果Reply字段为非0,这里指的就是事务数量(请求+响应),而不是I/O数量。
Transfer Delay – 指定在每一个I/O操作的爆发之前的延迟,默认是0,可以指定任何非负值,单位是毫秒(1000 = 1秒)。如果值为0,Burst Length是没意义的,因为在爆发之间没有任何延迟。
Align I/O On – 指定每一个磁盘I/O的对齐,默认是“扇区边界”。如果该字段的值是n字节,则每一个I/O会在磁盘的n倍字节处开始执行。取值范围从1到1023MB+1023KB+1023Bytes,但指定的值必须是磁盘扇区大小的倍数。指定0值或选择“扇区边界“单选按钮会使得I/O在扇区边界对齐。网络worker忽略该值。
注意:如果Alignment字段不是”扇区边界“且Size字段并非Alignment字段值的倍数,那么连续I/O将不会是真正的连续。例如,如果Size = 3KB,Alignment = 2KB,那么每个3KB I/O在其下一个I/O之前会有一个1KB的”洞“。例如,假设扇区是1KB大小,那么I/O落到磁盘上的视图就是DDDXDDDXDDDX….(D代表1KB数据,X代表为了对其而浪费的1KB空间)
Reply Size – 指定对每一个I/O请求的响应大小,默认是No Reply。取值范围是1Byte到1023MB+1023KB+1023Bytes,仅受限于可用的虚拟内存。0值或选择No Reply代表没有响应。
如果Reply字段为非0值,一旦一个I/O请求完成,会立刻返回一个响应,即“读”请求会得到“写”响应,或“写”请求得到一个”读”响应(个人理解:涉及底层设备I/O处理,源发起“读”之后,接收方必然要把内容写回发起者的内存、硬盘等位置才能最后被源读取;而写请求也必然要求接收方先读取原先地址的内容才能进行写操作)。请求的大小由Size字段指定,响应的大小由Reply字段指定,请求与响应一同被称为一个事务。每个事务的请求从发起到响应完成所用的时间、最大和平均事务时间、每秒平均事务量都会被记录并报告。
如果指定了Reply,Reply的方向(读或写)总是请求的反方向,同时它的对齐和随机/连续等设置与对应的请求是一致的。如果指定了Burstiness,Burst字段指定的是事务(请求+响应)数量,而非I/O数量。