sd=
uniquely identifies each Storage Definition. The SD name is used by the Workload Definition (WD) and Run Definition (RD) parameters to identify which SDs to use for its workload.
When you specify default
as the SD name, the values entered will be used as default for all SD parameters that follow.
The name
can contain any free-format name, special characters not allowed.
sd=
参数作为每个存储定义的唯一标识。SD的名称被工作负载定义(WD)和运行定义(RD)参数用于确定要用于其工作负载的哪些SD。
当您将default
作为SD名称时,输入的值将作为随后所有SD参数的默认值。
name
可以是任意自由格式的名称,但不能包含特殊字符。
'lun='
describes the name of the raw disk or the file name of the file system file to use. Be careful that you do not specify any disk that contains data that you do not want to lose. Been there, done that. This is the main reason why Vdbench does not require root access. You don’t want to lose your root disk.
Please don’t think, “I’ll only be reading the customer’s currently active production disks”. One accidental rdpct=
with a value different than 100 and all data will be gone. That has happened at least twice!
lun=
描述了要使用的原始磁盘的名称或文件系统文件的文件名。一定不要指定任何包含您不希望丢失数据的磁盘。我们都有过这样的经历,所以Vdbench不需要root权限。毕竟您不想丢失根磁盘。
请不要认为,“我只会 读取 客户当前活动的生产磁盘”。一次意外的rdpct=
值不是100,所有数据都会消失。这种情况至少发生过两次!
命令 | 说明 |
---|---|
lun=/dev/rdsk/cxt0d0s0 | Name of raw Solaris disk to be used for this SD. |
lun=/dev/vx/rdsk/cxt0d0s0 | Name of a raw VXVM volume |
lun=/home/dir/filename | Solaris file system filename. No control over physical I/Oguaranteed since the file system may use system cache. |
lun=\.\d: | Name of raw mounted Windows disk to be used for this SD. |
lun=\.\PhysicalDrive1 | Physical number of raw Windows disk to be used for this SD. |
lun=c:\temp\filename | Windows: file system file name. |
lun=\.\c:\temp\filename | Windows: raw access to file. |
The raw disk or the file system file will be opened for input only unless rdpct=
is specified with any value other than 100 (default). This allows Vdbench to execute with read-only access to disks or files.
Block zero on a raw volume will never be accessed, this to prevent the volume label from being overwritten. This is accomplished^ 1 by never allowing Vdbench to generate a seek address of zero, no matter how large the data transfer size is. This also implies^ 2 that block zero will never be read.
Note: some volume managers will return a NULL block each time that a block is read that has never been written. Though of course this gives wonderful performance numbers the disk is never read and this therefore is NOT a valid workload. When you have a storage device like this, make sure that you first pre-format the whole volume using:
sd=sd1,lun=xx
wd=wd1,sd=*,xf=1m,seekpct=eof,rdpct=0
rd=rd1,wd=*,iorate=max,elapsed=100h,interval=60
原始磁盘或文件系统文件只会以输入方式打开,除非 rdpct=
的值不等于100(默认为 100)。这使得 Vdbench 能够以只读方式访问磁盘或文件。
原始卷的第一个块永远不会被访问,以防止卷标被覆盖。这是通过永远不允许 Vdbench 生成地址为零的寻址地址来实现的,无论数据传输大小如何。这也意味着第一个块永远不会被读取。
注意:一些卷管理器在每次读取从未写入过的块时会返回一个空块。尽管这提供了出色的性能指标,但磁盘实际上并未被读取,因此这不是一个有效的工作负载。当您使用这样的存储设备时,请确保首先使用以下命令对整个卷进行预格式化:
sd=sd1,lun=xx
wd=wd1,sd=*,xf=1m,seekpct=eof,rdpct=0
rd=rd1,wd=*,iorate=max,elapsed=100h,interval=60
(The elapsed time must be large enough to completely format the volume. Vdbench will stop when done, but if the elapsed time is too short Vdbench may terminate too early before the volume has been completely formatted).
You may also specify formatsds=yes
as a General Parameter, but remember, this will cause the format to be done each time the same parameter file is used.
Note: When an SD is recognized to be a raw device (lun name starts with \
on Windows or /dev
on Unix), Vdbench will refuse to write to block zero, this to avoid overwriting a volume label.
(经过时间必须足够长,以完全格式化卷。Vdbench 在完成后会停止,但如果经过时间太短,Vdbench 可能会在卷完全格式化之前提前终止)。
您还可以指定 formatsds=yes
作为通用参数,但请记住,这将导致每次使用相同参数文件时都进行格式化。
注意:当识别到 SD 是原始设备(在 Windows 上以 \
开头或在 Unix 上以 /dev
开头的 lun 名称)时,Vdbench 将拒绝写入第一个块,以避免覆盖卷标。
This parameter is only needed when you do a multi-host run where the lun names on each host are different. For instance if a lun is /dev/rdsk/a
on hosta but it is named /dev/rdsk/b
on hostb then you’ll have to tell Vdbench about it.
The lun
and host
parameters in this case have to be entered in pairs, connecting a lun name to a host name, e.g.:
sd=sd1,lun=/dev/rdsk/a,host=hosta,lun=/dev/rdsk/b,host=hostb
By default Vdbench assumes^ 3 that the lun names on each host are identical^ 4 .
Note: when using SD concatenation on multiple hosts Swat will do an extra verification to make sure you have specified the proper device names, and will even correct your definition if possible. Example:
sd=sd1,host=systemA,lun=/dev/rdsk/1,host=systemB,lun=/dev/rdsk/2 sd=sd2,host=systemA,lun=/dev/rdsk/2,host=systemB,lun=/dev/rdsk/1
Though technically it is of course (sadly) possible that this is correct, it likely is not.
Vdbench, by writing markers
to these disks on the Vdbench master and then verifying them on the clients will verify that this is incorrect, and will internally change this to:
sd=sd1,host=systemA,lun=/dev/rdsk/1,host=systemB,lun=/dev/rdsk/1 sd=sd2,host=systemA,lun=/dev/rdsk/2,host=systemB,lun=/dev/rdsk/2
(If the disk names are identical on all sides, then the extra host=
parameter is not needed)
这个参数只在执行多主机运行时需要,其中每台主机上的lun
名称都不同。例如,如果在主机A上 lun
是 /dev/rdsk/a
,但在主机B上它被命名为 /dev/rdsk/b
,那么您需要告诉 Vdbench。
在这种情况下,lun
和 host
参数必须成对输入,将 lun 名称与主机名连接起来,例如:
sd=sd1,lun=/dev/rdsk/a,host=hosta,lun=/dev/rdsk/b,host=hostb
默认情况下,Vdbench 假定每台主机上的 lun 名称相同。
注意:当在多个主机上使用 SD 连接时,Swat 将进行额外的验证,以确保您已正确指定设备名称,并且如果可能的话,甚至会更正您的定义。例如:
sd=sd1,host=systemA,lun=/dev/rdsk/1,host=systemB,lun=/dev/rdsk/2 sd=sd2,host=systemA,lun=/dev/rdsk/2,host=systemB,lun=/dev/rdsk/1
尽管从技术上讲,这当然是(可悲的)可能的,但很可能不是。
Vdbench 通过在 Vdbench 主节点上向这些磁盘写入 '标记',然后在客户端上验证它们来验证这一点,并将其内部更改为:
sd=sd1,host=systemA,lun=/dev/rdsk/1,host=systemB,lun=/dev/rdsk/1 sd=sd2,host=systemA,lun=/dev/rdsk/2,host=systemB,lun=/dev/rdsk/2
(如果所有方面的磁盘名称都相同,则不需要额外的 host=
参数)
This parameter allows you to quickly create a sequence of SDs, e.g.: sd=sd,lun=/dir/file,count=(0,8)
results in sd0-sd7
for /dir/file0-7
.
You may also specify a 'printf
' mask, e.g.:
sd=sd,lun=/dir/file%04d,count=(0,2)
This will result in sd1+2
for /dir/file0001
and file0002
.
Note: I have been asked numerous times to also support something like lun=/dev/rdsk/c0*
.
I consider this far too dangerous though and therefore decided against it. Once upon a time about 40 years ago I accidentally erased all disk drives on a production system (05:00 am). You don't ever want to do that.
该参数允许您快速创建一系列SD,例如,sd=sd,lun=/dir/file,count=(0,8)
会创建sd0至sd7对应于 /dir/file0至/dir/file7。
您还可以指定一个 'printf' 的补码参数,例如:
sd=sd,lun=/dir/file%04d,count=(0,2)
这将创建sd1和sd2对应于 /dir/file0001 和 /dir/file0002。
注意:我已经被多次要求支持 lun=/dev/rdsk/c0* 这样的功能。
尽管如此,我认为这太危险了,因此决定不支持。大约40年前的一天,我曾经意外地擦除了生产系统上的所有磁盘(凌晨5:00)。您绝对不想做那样的事。
size=
describes the size of the raw disk or file. You can enter this in bytes, kilobytes, megabytes, gigabytes or terabytes (k/m/g/t). If not specified, the size will be taken from the raw disk or from the file. Vdbench supports addresses larger than 2GB.
If this is a non-existing file, or an existing file that is not large enough, a separate Vdbench Run Definition named File_format_or_append_for_sd=
is automatically inserted and executed that will do a sequential write or append to the file until the file is full. This replaces the need to create a new file using mkfile or other utility.
Use formatsds=no
to suppress this auto-create (this is General parameter).
Note: to prevent accidentally creating a huge file in the /dev/rdsk/
directory because an incorrectly entered 50+ digit random hexadecimal lun name, Vdbench will refuse to create new file names that start with /dev/
. Bad things happen when your root directory fills up.
You can also use size=
to give Vdbench access to only a portion of your volume, though for that you can also use range=
below.
'size='用于描述原始磁盘或文件的大小。您可以以字节、千字节、兆字节、千兆字节或太字节(k/m/g/t)输入。如果未指定大小,将从原始磁盘或文件中获取。Vdbench的寻址超过2GB。
译者注:addresses暂时翻译成寻址
如果文件不存在,或者现有文件不够大,Vdbench会自动插入并执行一个单独的名为'File_format_or_append_for_sd='的Vdbench运行定义,该定义将对文件进行顺序写入或追加,直到文件填满。这替代了使用mkfile或其他实用程序创建新文件的需求。
使用'formatsds=no'可以阻止此自动创建(这是通用参数)。
注意:为了防止因为错误输入50多位十六进制lun名称而在/dev/rdsk/目录中意外创建一个巨大的文件,Vdbench将拒绝创建以/dev/开头的新文件名。当根目录填满时会发生糟糕的事情。
您还可以使用size=来让Vdbench只访问卷的一部分,不过为此您也可以使用下面的'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)
.
Note: the range=
parameter may not be used during Sd concatenation.
Note: hitarea if needed will be at the beginning of the range.
默认情况下,将使用整个SD。要限制工作负载的寻址范围,请指定SD的起始和结束范围:'range=(40,60)'将限制I/O活动从SD的40%开始,到SD的60%结束。
如果最大值大于100但小于200,Vdbench将认为这是在卷末端进行环绕。例如,使用range=(90,110),Vdbench将生成一个I/O工作负载,使用卷的最后10%和第一个10%。
当值大于200时,将考虑这些值是以字节而不是百分比给出的;例如,'range=(1g,2g)'。
注意:'range='参数在Sd concatenation期间不可用。注意:如果需要hitarea参数,请将它放在range参数的开头。
threads=nn
specifies the maximum number of concurrent I/O that can be outstanding for this SD. Be aware that depending on the storage subsystem, some of these I/Os may be queued inside of the operating system (wait queue). (On Solaris, check file kstat.html).
Warning: If you specify a LUN that physically consists^ 5 of multiple disk drives, the thread count determines the maximum concurrency for the LUN, not for the disks. A total of 8 concurrent threads for a total of 16 physical disks will not allow for much concurrency. Also, for Solaris, make sure that your sd_max_throttle
parameter in /etc/system
allows the requested amount of concurrency.
Note: be aware that the maximum concurrency will only occur when there is enough demand^ 6 . Requesting 10 iops against a device that can handle 1000 iops will not give you the concurrency that you request with the thread=
parameter.
Note: This SD parameter will be ignored when using SD concatenation.
This parameter may be overridden using the 'forthreads=' parameter.
'threads=nn'指定了此SD可以同时进行的最大I/O数量。请注意,根据存储子系统的不同,其中一些I/O可能会在操作系统内部排队(等待队列)。 (在Solaris上,请查看kstat.html文件)。
警告:如果您指定的LUN实际上由多个磁盘驱动器组成,则线程计数确定LUN的最大并发性,而不是磁盘的并发性。对于总共16个物理磁盘的8个并发线程将不允许太多并发。此外,对于Solaris,请确保您的/etc/system中的sd_max_throttle参数允许请求的并发量。
注意:请注意,最大并发性仅在有足够需求时才会发生。针对一个可以处理1000 iops的设备请求10个iops将不会给您使用thread=参数请求的并发性。
注意:在使用SD concatenation时,此参数将被忽略。
此参数可以使用'forthreads='参数进行覆盖。
See read hit percentage for an explanation. Default value is 1MB.
请参阅read hit percentage以了解详细信息。默认值为1MB。
Used with journaling only. Journal files are needed for each Storage Definition and are created by default in the current directory. The file names are sdname.jnl
and sdname.map
, where sdname
is the name of the SD. The .jnl
file is the actual journal file, while the .map
file is a backup of the copy of the latest Data Validation map residing in the .jnl
file.
See Data Validation and Journaling for a more detailed description of data validation and journaling.
When as part of the Data Validation and journaling testing you bring down your OS it is imperative^ 7 that all writes to the journal file are synchronous. If your OS or file system does not handle this properly you could end up with a corrupted journal file. A corrupted journal file means that the results will be unpredictable^ 8 during journal recovery.
Journaling therefore allows you to specify a RAW device, e.g. journal=/dev/xxxx
, bypassing the possibly faulty file system code.
仅用于日志记录。每个存储定义都需要一个日志文件,默认情况下在当前目录中创建。文件名为'sdname.jnl'和'sdname.map',其中'sdname'是SD的名称。.jnl文件是实际的日志文件,而.map文件是存储在.jnl文件中的最新数据验证映射的副本的备份。
详细了解数据验证和日志记录,请参阅数据验证和日志记录。
在数据验证和日志记录测试中,如果您关闭操作系统,则所有对日志文件的写操作都必须是同步的。如果您的操作系统或文件系统无法正确处理这一点,则可能会导致日志文件损坏。损坏的日志文件意味着在日志恢复期间结果将是不可预测的。
因此,日志记录允许您指定一个原始设备,例如journal=/dev/xxxx,绕过可能存在故障的文件系统代码。
Vdbench always starts at the beginning of a LUN, but some times it is needed to modify that. Some times a LUN does not start at an exact^ 9 required physical boundary and this parameter allows you do adjust^ 10 for that. The offset is in bytes and must be a multiple of 512.
Note: Vdbench never accesses block zero on any raw volume. This has been done to make sure that it never overwrites a volume label and/or vtoc.
译者注:VTOC:卷目录表( Volume Table Of Contents),是一个单个Extent上的顺序的数据集,并且存放在磁盘的0柱面0磁道之后,65535磁道之前。记录了存储设备上所有数据集的属性,如数据集名,定位信息,长度,记录格式,使用情况,建立日期等信息
Vdbench总是从LUN的开头开始,但有时需要修改这一点。有时LUN不会从精确的所需物理边界开始,此参数允许您调整这一点。偏移量以字节为单位,必须是512的倍数。
注意:Vdbench从不访问任何原始卷上的零块。这样做是为了确保它永远不会覆盖卷标签和/或vtoc。
Whenever Vdbench generates an random lba (logical byte address) it by default is always on a block boundary (xfersize=). Use the align=
parameter to change that to always generate an LBA on a different alignment^ 11 . The align=
value is in bytes and must be a multiple of 512.
This parameter may not be used when dedupratio=
is specified.
每当Vdbench生成一个随机的逻辑字节地址(LBA)时,默认情况下它总是在块边界上(xfersize=)。使用'align='参数可以更改为始终在不同的对齐位置生成LBA。align=值以字节为单位,必须是512的倍数。
在指定dedupratio=时,不能使用此参数。
This parameter allows you to control what parameters are passed to the system’s open and close functions. By default write operations are handled according to how the file system is mounted or for raw devices, how the device normally operates. This can mean that a write operation completes as soon as the data is stored in system cache. This makes for very good performance, but does not really exercise the storage.
Openflags can be specified for SD, WD, FSD, FWD, and RD parameters. Options (you can create any combination of these)
此参数允许您控制传递给操作系统的打开和关闭函数的参数。默认情况下,写操作根据文件系统的挂载方式或对于原始设备来处理。这可能意味着一旦数据存储在系统缓存中,写操作就完成了。这可以提供非常好的性能,但实际上并未真正利用存储。
Openflags可以针对SD、WD、FSD、FWD和RD参数进行指定。您可以创建任意组合的选项。
参数 | 说明 |
---|---|
Solaris: | (xx_SYNC descriptions found in man open)Please believe me, I have never really figured out what these options mean. |
o_dsync | Write I/O operations on the file descriptor complete as defined bysynchronized I/O data integrity completion |
o_rsync | Read I/O operations on the file descriptor complete at the same level of integrity as specified by the O_DSYNC and O_SYNC flags.If both O_DSYNC and O_RSYNC are set in oflag, all I/O operations on the file descriptor complete as defined by synchronized I/O data integrity completion. If both O_SYNC and O_RSYNC are set in oflag, all I/O operations on the file descriptor complete as defined by synchronized I/O file integrity completion. |
o_sync | Write I/O operations on the file descriptor complete as defined bysynchronized I/O file integrity completion. |
0x…… | Any hex value, to be passed to the open() function. |
fsync | Call fsync() before the file is closed. |
directio | Calls the directio() function after the file is opened, using ‘DIRECTIO_ON’ |
directio_off | Calls the directio() function after the file is opened, using ‘DIRECTIO_OFF’. This one is meant to be used if a previous failed I/O run left the target file name with directio active and you want to forcibly remove that status. |
clear_cache | When using directio() for an NFS mounted file, any data still residing in file system cache will continue to be used, circumventing the directio() request. This option will forcibly clear any existing data from cache using mmap()functions. |
参数 | 说明 |
---|---|
Linux: | |
o_direct or directio | Gives you raw access to a full volume (no partition). This parameter is required when using /dev/xxx volumes |
o_dsync o_rsync o_sync |
These three all pass ‘0x01000’ to the Linux open() function. I highly suggest you check /usr/include/bits/fcntl.h since not all flavors of Linux use the same bits. Then if needed code openflags=0x…. instead. |
fsync | Call fsync() before the file is closed. |
参数 | 说明 |
---|---|
0x…… | Any hex value, to be passed to the open() function. |
参数 | 说明 |
---|---|
Windows: | |
directio o_dsync o_rsynco_sync | Opens a file using the ' FILE_FLAG_NO_BUFFERING' flag |
参数 | 说明 |
---|---|
AIX | |
o_dsync | Passes 0x00400000 to open(). |
o_rsync | Passes 0x00200000 to open(). |
o_sync | Passes 0x00000010 to open(). |
o_direct or directio | Passes 0x08000000 to open(). |
0x…… | Any hex value, to be passed to the open() function. |
参数 | 说明 |
---|---|
MAC OSX: | |
OSX does not allow flags to be passed to open(), instead, after the open() request Vdbench callsthe fcntl() function. | |
f_nocache | Decimal 48 is passed to fcntl() |
directio | Decimal 48 is passed to fcntl() |
nnn | Decimal nnn is passed to fcntl() |
Note: In Vdbench 503 this was an SD parameter; it has been moved to WD, and its meaning has slightly^ 12 changed (the stream size
subparameter has been removed).
The streams=nn
parameter overrides the default processing done when reading or writing sequential data. By default Vdbench just reads or writes the whole lun or file (SD, or concatenated SD), or only a portion of it when the range=
parameter is used, but the streams=
parameter allows multiple concurrent sequential streams to be active.
streams=stream_count
. This parameter works together with the threads=
parameter. The file or lun is split into stream_count
pieces.
# Example:
wd=wd1,…..,streams=10
Each SD (or the concatenated SD) is split into 10 equally sized smaller pieces. The requested threads are spread out^ 13 over the streams, with as a possible result that some streams may not get the same amount of threads than other streams. This is unacceptable, so Vdbench will increase the threadcount to make sure each stream gets the same amount of threads.
Any adjustment in the threadcount will be reported to you.
Note that, since this is sequential I/O, a stream may run on only ONE JVM, this to avoid for instances reading blocks 1,1,2,2,3,3,4,4, etc.
Note: The stream count must be a multiple of the amount of JVMs used, this to make sure that the requested stream count can be equally spread around these JVMs. This also will be adjusted by Vdbench if needed.
See Multi JVM execution.
Note: rhpct=
and whpct=
are ignored when streams are requested. However, if you really want to run cache hits with streams, just code size='small'
to force all I/O to cache.
Note: Only ONE Workload Definition (WD) may be active when using streams.
注意:在Vdbench 503版本中,这是一个SD参数;现已移至WD,并且其含义略有变化(删除了“stream size”子参数)。
streams=nn参数覆盖了数据顺序读取或写入时的默认处理方式。默认情况下,Vdbench只会读取或写入整个LUN或文件(SD或连接的SD),或者仅在使用range=参数时读取或写入部分数据,但streams=参数允许多个并发顺序流处于活动状态。
streams=stream_count. 此参数与threads=参数一起使用。文件或LUN被分成了'stream_count'个等大小的片段。
例如:wd=wd1,…..,streams=10
每个SD(或连接的SD)被分成10个等大小的较小片段。请求的线程会分配到这些流上,可能的结果是某些流可能不会获得与其他流相同数量的线程。这是不可接受的,因此Vdbench将增加 threadcount 以确保每个流获得相同数量的线程。
任何对线程计数的调整都将向您报告。
请注意,由于这是顺序I/O,一个流可能只在一个JVM上运行,以避免例如读取块1,1,2,2,3,3,4,4等情况。
注意:流计数必须是使用的JVM数量的倍数,以确保请求的流计数可以均匀分布在这些JVM周围。如果需要,Vdbench也会进行调整。
请参阅多JVM执行。
注意:当请求流时,rhpct=和whpct=将被忽略。但是,如果您真的希望在流上运行缓存命中,请设置size='small'以强制所有I/O进入缓存。
注意:使用流时,只能有一个工作负载定义(WD)处于活动状态。