Skip to content

Latest commit

 

History

History
264 lines (127 loc) · 20.5 KB

1.14 工作负载(WD)定义参数详情.md

File metadata and controls

264 lines (127 loc) · 20.5 KB

The Workload Definition parameters describe what kind of workload must be executed using the storage definitions entered. Note that a lot of these parameters can be overridden within a Run definition (RD) using forxxx= parameters.

工作负载定义参数描述了使用输入的存储定义执行的工作负载类型。请注意,这些参数中许多都可以在运行定义(RD)中使用forxxx=参数进行覆盖。

# Example: 
wd=wd1,sd=(sd1,sd2),rdpct=100,xfersize=4k
参数 说明
wd=default Sets defaults for all WDs that are entered later.
wd=name Unique name for this Workload Definition (WD)
host=host_label Specify here which host you want this to run on.
iorate=nn Workload specific I/O rate
openflags= See openflags=
priority= Workload specific I/O priority.
range=(nn,nn) Limit seek range to a defined range within an SD.
rdpct=nn Read percentage. Default 100.
rhpct=nn Read hit percentage. Default 0.
sd=xx Name(s) of Storage Definition(s) to use
seekpct=nn Percentage of random seeks. Default seekpct=100 orseekpct=random.
skew=nn Percentage of skew that this workload receives from the totalI/O rate.
stride=(min,max) To allow for skip-sequential I/O.
whpct=nn Write hit percentage. Default 0.
xfersize=nn Data transfer size. Default 4k.
xfersize=(nn,%%,…) Data transfer size distribution.
xfersize=(min,max,align) Generate xfersize as a random value between min and max.

1. 'wd=name': Workload Definition Name

wd=name uniquely identifies each Workload Definition. The WD name is used by the Run Definition parameters to identify which workloads to execute. When you specify default as the WD name, the values entered will be used as default for all WD parameters that follow.

wd=name用于唯一标识每个工作负载定义。WD名称被用于运行定义参数,以确定要执行的工作负载。如果将default指定为WD名称,那么输入的值将被用作后续所有WD参数的默认值。

2. ‘host=host_label’

This parameter is only needed for multi-host runs where you do not want each workload to run on each host.

这个参数只在多主机运行时需要,用于指定不希望每个工作负载在每台主机上运行的情况。

# For example:
wd=wd1,host=hosta,…
wd=wd2,host=hostb,…

3. 'sd=name': SD names used in Workload

sd= selects a specific SD for this workload. A single SD name can be specified as sd=sd1, multiple SDs can be specified as either sd=(sd1,sd2,sd3,..), a range as in sd=(sd1-sd99), using a wildcard character sd=sd*, or a combination of these.

Note: When using an SD range, leading zeros are not allowed, e.g. (sd01-sd09). You may specify SDs also as an RD= subparameter.

sd=用于选择此工作负载的特定SD。可以指定单个SD名称,如sd=sd1,也可以指定多个SD,如sd=(sd1,sd2,sd3,..),还可以指定范围,如sd=(sd1-sd99),使用通配符字符sd=sd*,或者这些的组合。

注意:在使用SD范围时,不允许有前导零,例如(sd01-sd09)。您也可以将SD作为RD=的子参数指定。

4. 'rdpct=nn': Read Percentage

rdpct= specifies the read percentage of the workload. rdpct=100 means 100% read; rdpct=0 means 100% write. rdpct=80 means a read/write ratio of 4:1, etc.

The default is 100% read. If there are no workloads for a specific SD with a read percentage other than 100 this SD is opened for input only.

This parameter may be overridden using the ‘forrdpct=’ parameter.

rdpct=用于指定工作负载的读取百分比。rdpct=100表示100%读取;rdpct=0表示100%写入。rdpct=80表示读写比例为4:1,以此类推。

默认情况下为100%读取。如果特定SD的所有工作负载的读取百分比均为100,则该SD仅用于输入。

可以使用'forrdpct='参数覆盖此参数。

5. 'rhpct=nn' and 'whpct=nn': Read and Write Hit Percentage

rhpct= and whpct= specify the cache hit percentage that Vdbench will attempt to generate. This parameter is only useful when accessing raw devices or file systems mounted with forcedirectio (or using openflags). For this to work, each volume is divided into two parts: the first one- megabyte of storage will be accessed for cache hits and is called the hit area. The remaining space on the SD will be accessed for cache misses and is called the miss area.

When Vdbench needs to generate a cache hit, it generates an I/O to the hit area, assuming that the data accessed is, or soon will be, residing in cache. Cache misses will be targeted toward the miss area, assuming that the miss area is large enough to ensure that most random accesses are cache misses. As you can see, this will only be useful when Vdbench has control over which physical volume and physical blocks will be ultimately read or written (so no file system cache).

The 'hitarea=nn' and 'forhitarea=' parameters have been created to allow control over a volume's cache working set size. Some cached storage subsystems have different performance characteristics if too small a subset of the available cache is used. The total size of the SD hit or miss area must be at least 4 times the largest xfersize used, but Data Validation has much more stringent requirements, enough blocks to satisfy at least 2000 times the largest xfersize used.

These parameters may be overridden using the 'forrhpct=' or ‘forwhpct=’ parameters.

rhpct=whpct=参数指定Vdbench尝试生成的缓存命中率。这些参数仅在访问原始设备或使用forcedirectio挂载的文件系统(或使用openflags)时才有用。为了实现这一点,每个卷被划分为两部分:前1MB的存储空间用于缓存命中,称为命中区域。SD上剩余的空间用于缓存未命中,称为未命中区域

当Vdbench需要生成缓存命中时,它会生成一个对命中区域的I/O操作,假设访问的数据已经存在于缓存中或很快会存在于缓存中。缓存未命中将被定位到未命中区域,假设未命中区域足够大,以确保大多数随机访问是缓存未命中的。如您所见,这仅在Vdbench可以控制最终读取或写入的物理卷和物理块时才有用(因此没有文件系统缓存)。

'hitarea=nn' 'forhitarea=' 参数允许控制卷的缓存工作集大小。一些缓存存储子系统具有不同的性能特征,如果使用的可用缓存子集太小,则性能可能会有所不同。SD的命中或未命中区域的总大小必须至少是最大xfersize的4倍,但数据验证具有更严格的要求,足以满足至少是最大xfersize的2000倍的块。

这些参数可以通过'forrhpct=' 'forwhpct='参数进行覆盖。

6. 'xfersize=nn': Data Transfer Size

xfersize= specifies how much data is transferred for each I/O operation; allows (k)ilo and (m)ega bytes. This parameter may be overridden using the ‘forxfersize’ parameter.

# Example: 
xfersize=4k # (default)

You may also specify a distribution of data transfer sizes. Specify pairs of transfer size and percentages; the total of the percentages must add up to 100.

# Example: 
xfersize=(4k,10,8k,10,16k,80)

A third option uses three values: xfersize=(min,max,align). This causes a random value between min and max, with a multiple of align to be generated. This also requires the use of the SD align= parameter. This parameter may not be used when dedupratio= is specified.

xfersize=参数指定每次I/O操作传输的数据量;可以使用(k)字节和(m)兆字节。这个参数可以通过‘forxfersize’ 参数进行覆盖。

您还可以指定数据传输大小的分布。指定传输大小和百分比的配对;百分比的总和必须加起来为100。

第三种选项使用三个值:xfersize=(min,max,align)。这会在min和max之间生成一个随机值(align的倍数)。这也需要使用SD align=参数。在指定dedupratio=时不能使用此参数。

7. 'skew=nn': Percentage skew

skew= specifies the percentage of the run's total I/O rate that will be generated for this workload. By default the total I/O rate will be evenly divided among all workloads. However, if the skew value is nonzero, a percentage of the requested I/O rate equal to the percentage skew value will be apportioned to one workload, with the remaining skew evenly divided among the workloads that have no skew percentage specified. The total skew for all workloads used in a Run Definition must equal 100%.

Example: Five workload definitions, one workload specifies skew=60. This workload receives 60 percent of the requested I/O activity while the other four workloads each receive 10% of the requested I/O rate, with a total of 100%.

Vdbench generates I/O workloads by sending new I/O requests to a volume's (SD) internal work queue. This work queue has a maximum queue depth of 2000 per SD. If an SD cannot keep up with its requested workload and the queue fills up, Vdbench will not be able to generate new I/O requests for this and all other SDs until space in the queue becomes available again. This means that if you send 1000 IOPS to an SD that can handle only 100 IOPS, and 50 IOPS to a similar device, the queue for the first device will fill up, and I/O request generation for the second device will be held up. This has been done to enable Vdbench to preserve the requested workload skew while still allowing for a temporary backlog of requested I/Os.

Note: see also the abort_failed_skew=nn parameter.

To accommodate users that still would like to run an uncontrolled workload see 'iorate=max'.

skew=参数用来指定工作负载在总I/O速率中所占的比例。默认情况下,总I/O速率将平均分配给所有工作负载。但如果skew值不为零,则会将请求I/O速率的一部分(与skew值相等的百分比)分配给一个工作负载,剩余的则均匀分配给没有指定skew百分比的其他工作负载。在一个Run Definition中,所有工作负载的总skew必须等于100%。

例如:有五个工作负载定义,其中一个工作负载指定了skew=60。这个工作负载将获得请求I/O活动的60%,而其他四个工作负载将每个获得请求I/O速率的10%,总计为100%。

Vdbench通过向卷(SD)的内部工作队列发送新的I/O请求来生成I/O工作负载。每个SD的工作队列最大深度为2000。如果一个SD无法跟上其请求的工作负载并且队列填满了,Vdbench将无法为此SD和所有其他SD生成新的I/O请求,直到队列中再次有空间可用。这意味着,如果您向一个只能处理100 IOPS的SD发送1000 IOPS,而向一个类似的设备发送50 IOPS,则第一个设备的队列将填满,而第二个设备的I/O请求生成将被阻止。这样做是为了使Vdbench能够保持所请求的工作负载skew,同时允许请求的I/O出现临时“积压”。

注意:请参阅abort_failed_skew=nn参数。

为了满足仍希望运行不受控制工作负载的用户,请查看'iorate=max'

8. 'seekpct=nn': Percentage of Random Seeks

seekpct= specifies how often a seek to a random lba will be generated. See also the stride= parameter for skip sequential processing.

参数 说明
seekpct=100 orseekpct=random Every I/O will go to a different random seek address.
seekpct=0 orseekpct=sequential There will be NO random seeks, and the run will therefore be purely sequential. When the end of the volume or file is reached, Vdbench will continue at the beginning, unless 'seekpct=eof' (seebelow) is specified. Be aware that if the volume size is smaller than the cache size, continued processing will be all cache hits. Note: a 100% sequential workload is allowed to run on only ONE JVM, because without that limitation we could end up reading blocks 1,1,1,2,2,2,3,3,3,etc. Wonderful marketing performance numbers, but we're trying to stay honest here.
seekpct=seqnz seekpct=sequentialnz The ‘nz’ here tells Vdbench to NOT start on block zero each time, but instead start on a random block within the SD.This lowers the possibility that a second Vdbench run will just find all the data in cache.
seekpct=20 On average, 20% of the I/O operations will start at a new random seek address. This means that on average there will be one random seek, with 5 consecutive blocks of data transferred.See stride= below for skip sequential I/O.
seekpct=-1 orseekpct=eof A negative one value causes a sequential workload to terminate as soon as end-of-file is reached. Vdbench will continue until allworkloads using seekpct=eof have reached EOF.
seekpct=poissonseekpct=(poisson,nn) A Poisson seek distribution. See fileselect=(poisson,nn)

The randomizer used to generate a seek address is seeded using the host's time of day in micro seconds multiplied by the relative position of the Storage Definition (SD) defined for the workload (WD). For sequential processing, I/O for raw devices always starts at the second block as defined by the data transfer size (block zero is never used).

This parameter may be overridden using the ‘forseekpct=’ parameter, though forseek will only accept numeric values, not 'random' or 'seq'.

seekpct=参数指定生成随机逻辑块地址(LBA)的频率。另请参阅stride=参数以跳过顺序处理。

用于生成寻址地址的随机化器是使用主机的微秒级时间乘以为工作负载(WD)定义的存储定义(SD)的相对位置来初始化的。对于顺序处理,对于原始设备的I/O始终从第二个块开始(由数据传输大小定义,第0个块永远不会被使用)。

这个参数可以被‘forseekpct=’参数覆盖,尽管forseek只接受数值,不接受'random'或'seq'。

9. stride=(min,max): Skip-sequential I/O.

The stride= parameter changes the behavior when a new lba has to be generated because of the use of the seekpct= parameter. Instead of generating a brand new random lba, Vdbench skips n bytes, n being a random value between min and max, using a multiple of the current selected data transfer size. When end of volume is reached we start again at the beginning.

stride=参数改变了由于使用seekpct=参数而必须生成新的lba时的行为。不是生成全新的随机lba,而是跳过n字节,其中n是介于最小值和最大值之间的随机值,使用当前选定的数据传输大小的倍数。当到达卷末尾时,会从头开始。

10. 'range=nn': Limit Seek Range

By default, the whole SD will be used. To limit the seek range for a workload, specify the starting and ending range of the SD: range=(40,60) will limit I/O activity starting at 40% into the SD and ending at 60% into the SD.

If the max value is larger than 100 but smaller than 200, Vdbench will consider this a wrap across the end of your volume. For instance with range=(90,110) , Vdbench will generate an I/O workload using the last 10% and the first 10% of your volume.

When the values are greater than 200, the values will be considered given in bytes instead of in percentages; e.g., range=(1g,2g). Also see Hot Bands.

默认情况下,将使用整个SD。要限制工作负载的查找范围,请指定SD的起始和结束范围:range=(40,60)将限制从SD的40%开始到60%结束的I/O活动。

如果最大值大于100但小于200,Vdbench将视为卷尾部的环绕。例如,使用range=(90,110),Vdbench将生成一个I/O工作负载,使用卷的最后10%和前10%。

当值大于200时,这些值将被视为以字节而不是百分比给出;例如,range=(1g,2g)

11. ‘iorate=’ Workload specific I/O rate.

Normally the I/O rate for a workload is controlled by the rd=xxx,iorate= parameter, together with the workload skew= parameter. With the workload specific iorate= parameter you can now give a FIXED I/O rate to a workload, while the other workloads continue to be controlled by the rd=xxx,iorate= and the workload skew parameters.

When used, priority= must also be specified.

This option was initially created to test a ‘what if’: “If I run a Video On Demand (VOD) workload , what will the impact on performance be if I add some maintenance or video editing workload?”.

通常情况下,工作负载的I/O速率是通过rd=xxx,iorate=参数以及工作负载的skew=参数来控制的。现在,通过工作负载特定的iorate=参数,您可以为工作负载指定固定的I/O速率,而其他工作负载仍然由rd=xxx,iorate=和工作负载偏斜参数控制。

使用时,必须同时指定priority=参数。

最初创建此选项是为了测试一个“如果我运行视频点播(VOD)工作负载,如果我添加一些维护或视频编辑工作负载,对性能会有什么影响”的假设。

12. ‘priority=’ Workload specific I/O priority.

All I/O in Vdbench is scheduled using the expected I/O arrival times, which is obtained from the requested I/O rate. For instance, iorate=100 starts a new I/O on average every 1000/100 = 10 milliseconds. There are no I/O priorities within devices or workloads.

The new priority= parameter attempts to change this.

Normally I/O in Vdbench is handled using internal ‘work’ fifo queues. When the priority= parameter is used, any work in a higher priority fifo queue is processed before any lower priority fifo is checked causing I/O for that higher priority workload to be started first.

When any priority is specified, ALL workloads will have to have a priority specified. Priorities go from 1 (highest) to ‘n’ (lowest), and must be in sequence (priorities must be for instance 1 and 2, not 1 and 3).

Warning though: allowing for a specific workload iorate and priority does not guarantee that if you ask for 100 IOPS and your system can do only 50 that Vdbench magically gets the workload done.

在Vdbench中,所有的I/O都是根据期望的I/O到达时间进行安排的,这个时间是根据请求的I/O速率计算出来的。比如,iorate=100表示平均每1000/100 = 10毫秒启动一个新的I/O操作。设备或工作负载内部没有I/O优先级。

新的priority=参数试图改变这种情况。

通常情况下,在Vdbench中,I/O是使用内部的工作先进先出(FIFO)队列处理的。当使用priority=参数时,任何具有更高优先级FIFO队列中的工作将在检查任何较低优先级FIFO队列之前处理,从而导致具有更高优先级的工作负载的I/O操作优先启动。

当指定任何优先级时,所有工作负载都必须指定优先级。优先级从1(最高)到'n'(最低),并且必须连续(例如,优先级必须是1和2,而不是1和3)。

但要警告一下:允许为特定工作负载指定I/O速率和优先级并不能保证如果您请求100 IOPS,而您的系统只能处理50 IOPS,Vdbench就可以通过某种魔法完成工作负载。