As specified earlier, there is a specific order in which these parameters must be specified, with the ‘General Parameters’ at the beginning of the parameter file.
There is however ONE exception: the include=parmfile
parameter. This can reside^ 1 anywhere. It behaves like the good old fashioned #include
statement for C code.
The file name specified will be inserted in-line into what is currently being read. You can use as many include=
parameters needed.
One use of this parameter could be if you want to keep the SD or FSD parameters separated from the rest of the parameters. SDs and FSDs typically change frequently, while the rest of the parameters stay unchanged.
A different use could be for instance if you have created a fixed, complex ‘Application X’ set of workloads and you just want to include this existing workload in a new test run.
For instance include=payroll
or include=email
.
If you code only a file name and not a directory name, Vdbench will look for the file name in the directory of the file containing the current include=
statement.
如前所述,这些参数必须按特定顺序指定,其中“通用参数”位于参数文件的开头。
然而,有一个例外:include=parmfile
参数。这可以出现在任何地方。它的行为类似于C语言中的老式#include
语句。
指定的文件名将被内联插入到当前正在读取的内容中。您可以根据需要使用任意多的include=
参数。
这个参数的一个用途可能是,如果您想将SD或FSD参数与其他参数分开。SD和FSD通常会频繁更改,而其他参数保持不变。
另一个用途可能是,例如,如果您已经创建了一个固定的、复杂的“应用程序X”工作负载集合,并且您只想在新的测试运行中包含这个现有的工作负载。
例如include=payroll
或include=email
。
如果您只编写文件名而不是目录名,Vdbench将在包含当前include=
语句的文件所在的目录中查找文件名。
Vdbench by default will abort after 50 data validation or read/write errors. If one or more but less than the specified amount of errors occur, Vdbench at the end of the run (elapsed=
) will abort.
There are three ways to define the error count:
参数 | 说明 |
---|---|
data_errors=nn dataerrors=nn |
Causes an abort after nn validation errors. Default 50 |
dataerrors="script_name" | Causes this command/script to be executed after the first error, followed by an abort. This command can be used for diagnostic^ 2 data collection and/or system dumps. When an error happens, no new i/o is started again allowing this script call to hopefully be run in a semi-idle^ 3 system. |
dataerrors=(nn,mm) | Terminates the Vdbench run after ‘nn’ errors, or ‘mm’seconds after the last error. This gives Vdbench the chance to report more errors, but eliminates^ 4 the possibility that Vdbench keeps running unnoticed for a long period of time after an error. |
dataerrors=remove | For raw (SD/WD) I/O: The failing SD will be removed but I/O will continue to all others. |
dataerrors=(remove,nn) | Same, but the SD will only be removed for nn seconds afterwhich i/o will start again. |
默认情况下,Vdbench在发生50次数据验证或读/写错误后将中止。如果出现或多或少的错误,但是数量少于指定数量时,Vdbench将在运行结束(elapsed=
)时中止。
有三种方法可以定义错误计数:
参数 | 说明 |
---|---|
data_errors=nn dataerrors=nn |
Causes an abort after nn validation errors. Default 50 |
dataerrors="script_name" | Causes this command/script to be executed after the first error, followed by an abort. This command can be used for diagnostic^ 2 data collection and/or system dumps. When an error happens, no new i/o is started again allowing this script call to hopefully be run in a semi-idle^ 3 system. |
dataerrors=(nn,mm) | Terminates the Vdbench run after ‘nn’ errors, or ‘mm’seconds after the last error. This gives Vdbench the chance to report more errors, but eliminates^ 4 the possibility that Vdbench keeps running unnoticed for a long period of time after an error. |
dataerrors=remove | For raw (SD/WD) I/O: The failing SD will be removed but I/O will continue to all others. |
dataerrors=(remove,nn) | Same, but the SD will only be removed for nn seconds afterwhich i/o will start again. |
The command syntax under data_errors=script_name
can be as follows:
data_errors= "script_name $output $lun $lba $size $sector $error".
After the error, the script is called with substituted values for output directory name
, LUN name
, lba
, and data transfer size
. This allows for quicker collection of diagnostic data.
$sector
will contain the failing sector address (in bytes) during a Data Validation error. It will contain -1
for a read or write error.
$error
will contain r
or w
for read or write error. It will contain the internal Data Validation error flags for a Data Validation error. See source file BadSector.java
for an explanation of those flags.
Note: ‘’lba’ and ‘sector’ when using the Vdbench raw i/o functionality will always be the same. When using file system functionality though Vdbench internally concatenates^ 5 all files within an FSD into one large ‘pretend^ 6 to be a lun’ setup. In that case ‘lba’ is the lba within the file that failed, and ‘sector’ is the reported block within the concatenation.
在data_errors=script_name
下的命令语法可以如下:
data_errors= "script_name $output $lun $lba $size $sector $error".
错误发生后,将使用替换值(输出目录名称
、LUN名称
、lba
和数据传输大小
)调用脚本。这可以更快地收集诊断数据。
$sector
将在数据验证错误期间包含失败的扇区地址(以字节为单位)。对于读或写错误,它将包含-1
。
$error
将包含用r
或w
表示的读或写错误。对于数据验证错误,它将包含内部数据验证错误标志。有关这些标志的解释,请参见源文件BadSector.java
。
注意:当使用Vdbench的原始I/O功能时,‘lba’和‘sector’始终相同。然而,当使用文件系统功能时,Vdbench在内部将FSD中的所有文件连接成一个大的‘假装是一个LUN’设置。在这种情况下,‘lba’是失败文件中的lba,‘sector’是连接中报告的块。
Until Vdbench 503 these parameters were known as start_cmd
and end_cmd
and can continue to be used. Double quotes must be used if any of the commands include a blank.
You may specify one or more commands: startcmd=(cmd1,cmd2,….)
, each of course using parentheses if needed.
You may also add cons
, sum
, or log
as an extra parameter, with log
being the default. This parameter determines where the output of these commands will be sent: the console, summary.html, or to logfile.html. Example: startcmd=("echo hello world", cons)
直到Vdbench 503版本,这些参数被称为start_cmd
和end_cmd
,可以继续使用。需要注意的是,如果任何命令包含空格,必须使用双引号将其括起来。
您可以指定一个或多个命令,格式为startcmd=(cmd1,cmd2,….)
,每个命令都需要使用括号。
此外,您可以添加cons
、sum
或log
作为额外参数。这些参数用于确定命令的输出将发送到控制台、summary.html还是logfile.html。例如:startcmd=("echo hello world", cons)
。
参数 | 说明 |
---|---|
(Similar syntax for both startcmd and endcmd) | |
startcmd=command1 | Run 'command1' on the first slave on a host, sendingoutput to file '*stdout.html' |
startcmd=("xxx yyy",cons) | Run 'xxx yyy' sending output to the console. |
startcmd=(cmd,master) | Run 'cmd' on the master; default ‘slave’. Note: When used as a General Parameter, startcmd will always run on the master. |
startcmd=(cmd,sum) | Send output to summary.html |
startcmd=(cmd,log) | Send output to logfile.html (default) |
There are two places where you may use this parameter: Either as a general parameter specified at the beginning of a parameter file, or as part of a Run Definition (RD).
When used as a general parameter, startcmd=cmd
will be executed right before the first run; endcmd=cmd
will be executed immediately after the last run is finished or has failed. Whether endcmd
will run after a failure of course depends on the type of failure. The use of CTRL-C precludes^ 7 endcmd
from being run.
When used as a Run Definition parameter, startcmd=cmd
will be executed right before each run; endcmd=cmd
will be executed immediately after each run is finished.
There is one extra parameter available: startcmd=(master,xxx)
. By default the command will be run on the first slave on each client, but when you're running on a dozen^ 8 clients that became a little too expensive. The master
parameter will now move the execution to the master JVM, of which there of course is just one.
Note that if you start a long running command you need to add &
at the end of the command to allow asynchronous execution.
These commands or scripts can be used for anything you like. For example, uname –a
and psrinfo
come to mind.
A string containing $output
in the requested command will be replaced by the output directory name requested using the -o
execution parameter, allowing the command/script access to this directory name.
When starting Vdbench, the command config.sh –o output.directory host1 .. hostn
will always be executed. This allows any kind of preprocessing^ 9 to be done, or in the default case, the gathering of configuration specific data. After this, my_config.sh –o output.directory host1 .. hostn
will be executed. my_config.sh
is there for you to use, and will not be replaced by a (re)installation of Vdbench.
If you never want either of these scripts to be executed, create file noconfig
in the Vdbench directory.
Note: Sometimes, depending on which system you are running on, config.sh
can take a few seconds or sometimes minutes. If you don’t need this to run, simply create file noconfig
in the Vdbench directory.
Note: config.sh
is NOT called for Windows systems.
Starting Vdbench50407 the user may optionally create a new script directory under the PARENT directory of where Vdbench resides. For instance: /var/vdbench50407
contains vdbench, user may create /var/vdbscript/
. Any script or command will be first searched for in /vdbscript/
and then in /var/vdbench50407/solaris(or)linux
. If found that script will be used. This new option allows you to now have a permanent^ 10 place for scripts called by Vdbench without worrying that a re-install of Vdbench will overlay whatever you have there.
有两个地方可以使用这个参数:作为通用参数放在参数文件的开头,或者作为RD的一部分。
当作为通用参数时,startcmd=cmd
会在本次运行前执行命令;endcmd=cmd
会在全部运行结束或失败后立即执行。全部运行失败后 endcmd
是否会执行取决于错误的类型。当Vdbench运行过程中按CTRL-C后,不会执行endcmd
的命令。
当作为RD的参数时,startcmd=cmd
会在每个运行开始前执行;endcmd=cmd
会在每个运行结束后立即执行。
还有一个额外的参数可用:startcmd=(master,xxx)
。默认情况下,该命令会在每个客户端的第一个slave上运行,但是当你在十几个客户端运行时,就变得有些太昂贵了。这个master
参数会将本次执行放到主JVM(当然,只有一个主JVM)上。
注意,如果执行命令时间过长,记得在命令末尾添加 &
--- 这会以异步的方式执行。
这些命令或脚本可以随意使用。例如,uname -a
和psrinfo
。
请求命令中的$output
字符串将被替换为使用-o
执行参数请求的输出目录名称,使得命令/脚本可以访问该目录名称。这样设计旨在让命令更加灵活,可以动态地操作特定的输出目录。
在启动Vdbench时,将始终执行命令config.sh –o output.directory host1 .. hostn
。这允许进行各种预处理,或者在默认情况下,收集特定配置数据。之后,将执行my_config.sh –o output.directory host1 .. hostn
。 my_config.sh
供您使用,并且不会被(重新)安装Vdbench时替换。这个设计允许您自定义配置过程,保留您的自定义脚本。
如果您不希望执行这两个脚本中的任何一个,请在Vdbench目录中创建一个名为noconfig
的文件。
注意:有时取决于您所在的系统,config.sh
可能需要几秒钟或者有时甚至几分钟的时间。如果您不需要运行此脚本,在Vdbench目录中创建一个名为noconfig
的文件即可。
注意:对于Windows系统,不会调用config.sh
。
在启动Vdbench50407时,用户可以选择在Vdbench所在的PARENT目录下创建一个新的脚本目录。例如:/var/vdbench50407
包含 vdbench,用户可以创建 /var/vdbscript/
。任何脚本或命令将首先在 /vdbscript/
中查找,然后在 /var/vdbench50407/solaris(或)linux
中查找。如果找到,将使用该脚本。这个新选项允许您为 Vdbench 调用的脚本提供一个永久的位置,而不必担心重新安装 Vdbench 会覆盖您已有的内容。
By default Vdbench writes a random non-compressible, non dedupable data pattern. See also the compratio=
and dedupratio=
parameters.
参数 | 说明 |
---|---|
pattern=/file/name | The data found in this file is copied as often as possible into the data pattern buffer. |
默认情况下,Vdbench生成的数据是随机、不压缩、不重复的。
See also pattern=
above.
By default Vdbench will write an uncompressible random data pattern. compratio=nn
generates a data pattern that results in a nn:1
ratio.
Understanding that there are different compression algorithms this parameter cannot guarantee^ 11 the ultimate^ 12 results. The data patterns implemented are based on the use of the ‘LZJB' compression algorithm using a ZFS record size of 128k, and with that in mind the accuracy^ 13 for this implementation is plus or minus 5%.
This parameter may be overridden using the forcompratio=
parameter.
默认情况下,Vdbench 会创建一个无法压缩的随机数据模式。通过设置 compratio=nn
,可以生成一个数据模式,使得压缩后的数据与原始数据的比率为 nn:1
。
由于存在多种压缩算法,该参数无法保证最终的压缩效果。Vdbench 实现的数据模式是基于使用 128k ZFS 记录大小的 ‘LZJB' 压缩算法。因此,该实现的压缩精度大约在正负 5% 的范围内。
可以使用 forcompratio=
参数覆盖此参数。
This is how the data pattern is generated:
-
A one-megabyte minimum data pattern buffer is filled with random numbers. This is done only once.
-
A number of random 32-bit words will be replaced with zeroes, this depending on the
compratio=
parameter used. The number of zeros is based on experiments done using the LZJB compression algorithm with 128k ZFS recordsize; compression ratios1:1
through25:1
are the only ones implemented; any ratio larger than25:1
will be set to25
. -
Data starting at the pattern buffer + (remainder^ 14 of the Logical Byte Address (lba) divided by the length of the pattern buffer) is copied into the data buffer. The copy wraps around to the beginning of the pattern buffer if needed. This takes care of the requested compression ratio.
-
The first 8 bytes of each 4k portion^ 15 of the data buffer is overlaid^ 16 by a combination of lba, 4k offset, file handle, and the lower four bytes^ 17 of the system's High Resolution Timer (HRT)[^ 18 ]. This is done to make sure that the data can not be deduped. See also the
dedupratio=
parameter.
以下是数据模式的生成过程:
-
将最小为一兆字节的数据模式缓冲区填满随机数。这个过程只执行一次。
-
根据指定的
compratio=
参数,将一定数量的随机 32 位字符替换为零。这些零的数量是基于使用 128k ZFS 记录大小的 LZJB 压缩算法进行的实验得出的;目前只实现了1:1
到25:1
的压缩比;超过25:1
的比率将被调整为25:1
。 -
从模式缓冲区的某个位置开始(这个位置是逻辑字节地址 (lba) 除以模式缓冲区长度的余数),将数据复制到数据缓冲区中。如果需要,复制过程会从模式缓冲区的开头继续。这一步骤确保了所需的压缩比得以实现。
-
为了确保数据不能被去重,每个 4k 数据块的前 8 个字节会被逻辑字节地址、4k 偏移量、文件句柄和系统的高精度计时器 (HRT) 的低四位字节的组合所覆盖。关于去重的更多信息,请参考
dedupratio=
参数。
Vdbench communicates between the master and slave JVMs using Java sockets, using port 5570
. If on your system this port is already used by something else you may override this setting using the port=nnn
parameter.
Since with Vdbench you can create and execute as many different workloads as you can think of, running more than one Vdbench run at the same time should not be necessary. However, if you choose to do so your Vdbench could run into connection problems if it tries to connect to the same port that another Vdbench execution already is using. To eliminate this risk[^ 19 ], Vdbench will increment the port number by one when it gets a connection failure to see if that connection will be successful. Vdbench will do this a maximum of eight times before it gives up. The end result is that it will try to use ports 5570
through 5578
(default).
Starting Vdbench50402 however the connection port will be released as soon as the master and all of its slaves are connected making the port available again for other copies of Vdbench. The chance that you will ever need more than 8
ports therefore is very small.
You can also use the -p nnnn
execution parameter to override the port number, or override the used port numbers permanently using the ‘portnumbers.txt’ file.
Vdbench通过Java Socket在主、从JVM 之间进行通信,使用端口5570
。如果您的系统上这个端口已经被其他应用占用,您可以使用port=nnn
参数来更改这个设置。
由于使用Vdbench,您可以创建和执行您能想到的任何不同的工作负载,因此同时运行多个Vdbench实例通常不是必须的。然而,如果您选择这样做,您的Vdbench可能会遇到连接问题,如果它试图连接到另一个Vdbench实例已经在使用的同一个端口。为了消除这种风险,当Vdbench遇到连接失败时,它会尝试将端口号增加1,看看是否能成功连接。Vdbench最多会尝试这样做八次,然后放弃。最终结果是,它将尝试使用端口5570
到5578
(默认值)。
然而,从Vdbench50402版本开始,一旦主节点和所有从节点都连接上,连接端口将会立即释放,使得端口再次可用于其他Vdbench实例。因此,您需要使用超过8
个端口的可能性非常小。
您也可以使用-p nnnn
执行参数来覆盖端口号,或者使用‘portnumbers.txt’文件来永久更改使用的端口号。
The anchor directory for a File System Definition (FSD) is automatically created if it does not exist. However, its parent directories will NOT be created. Use create_anchors=yes
to also include the creation of the parent directories.
文件系统定义(FSD)的锚点目录如果不存在会自动被创建。然而,它的上级目录将不会被创建。使用create_anchors=yes
可以同时创建上级目录。
By default Vdbench will create a separate report with detailed statistics[^ 20 ] for each SD. Starting Vdbench 5.02 Vdbench will no longer create SD reports for each slave or host (200 SDs over 8 slaves plus one host creates 1800 reports!). To still create these detail reports specify report=host_detail
or report=slave_detail
or abbreviated report=(host,slave)
depending on your needs.
report=no_sd_detail
will completely suppress the creation of SD reports.
默认情况下,Vdbench会为每个SD创建一个包含详细统计信息的单独报告。从Vdbench 5.02版本开始,Vdbench不再为每个从节点或主机创建SD报告(200个SD在8个从节点和一个主机上会产生1800个报告!)。如果您仍然需要创建这些详细报告,可以根据您的需求指定report=host_detail
、report=slave_detail
或缩写report=(host,slave)
。
使用report=no_sd_detail
可以完全禁止创建SD报告。
Response time histograms allow you to get a more detailed understanding of I/O response times. Vdbench already reports averages and maximums, but at times it can be very useful to know what variation[^ 21 ] there is in response times. The histograms for instance can give you some indication as to how much of the I/O was handled from storage system cache and which ones had to really come from spinning[^ 22 ] disk. Note of course that the response time can vary[^ 23 ] depending on the data transfer size and the queue depth.
The histogram=(default,nn,…,nn)
parameter defines how many histogram buckets there are and what the range of the buckets is.
Default:
histogram=(default,20,40,60,80,100,200,400,600,800,1m,2m,4m,6m,8m,10m,20m,40m,60m,80m,100m,200m,400m,600m,800m,1s,2s)
# (All in one line).
Values are in microseconds, you may also specify u(micro), m(milli) or s(seconds). You may specify a maximum of 64 buckets.
You may permanently override the default by creating file histogram.txt
with a valid histogram parameter inside of your Vdbench installation directory.
Data reported in the histograms will exclude all warmup intervals.
响应时间直方图能让您更详细地了解I/O响应时间。Vdbench已经报告了平均值和最大值,但有时了解响应时间的变化是非常有用的。例如,直方图可以给您一些关于多少I/O是从存储系统缓存处理的,以及哪些是真正来自旋转磁盘的指示。当然,请注意,响应时间可能会根据数据传输大小和队列深度而变化。
histogram=(default,nn,…,nn)
参数定义了有多少个直方图区间以及这些区间的范围。
默认值:
histogram=(default,20,40,60,80,100,200,400,600,800,1m,2m,4m,6m,8m,10m,20m,40m,60m,80m,100m,200m,400m,600m,800m,1s,2s)
# (All in one line).
值以微秒为单位,您也可以使用u(微秒)、m(毫秒)或s(秒)来表示。您最多可以指定64个区间。
您可以通过在Vdbench安装目录中创建一个名为histogram.txt
的文件并在其中写入有效的直方图参数来永久覆盖默认值。
直方图中报告的数据将排除所有预热间隔。
When Vdbench creates new or expands existing disk files specified using SD parameters the default is xfersize=128k
. (xfersize=512
for files smaller than 128k). To override this default, specify formatxfersize=nnn
.)
当Vdbench根据SD参数指定的方式创建新的或扩展现有的磁盘文件时,默认的传输大小是xfersize=128k
。(对于小于128k的文件,传输大小为xfersize=512
)。要覆盖这个默认值,请指定formatxfersize=nnn
。
Vdbench runs terminate after elapsed=nnn
seconds, or, when seekpct=eof
is used after elapsed=nnn
seconds or when EOF is reached on the last SD, whichever is first.
There are TWO ways to allow external control of Vdbench shutdown.
Vdbench运行在elapsed=nnn
秒后终止,或者,在使用seekpct=eof
时,在elapsed=nnn
秒后或者在最后一个SD上达到EOF时终止,以先到的情况为准。
有两种方式可以实现对Vdbench关闭的外部控制:--- 详见 11.1 和 11.2
At the end of each reporting interval Vdbench looks for file $temp/vdbench.shutdown.$pid
, where $temp
is the system TEMP directory, and $pid
is the process-id of the Vdbench master JVM. When that file is found, Vdbench will shut down cleanly.
The $temp
directory name as used by Java is displayed at the top in logfile.html
, look for java.io.tmpdir
.
在每个报告间隔结束时,Vdbench会检查是否存在一个名为 $temp/vdbench.shutdown.$pid
的文件,其中$temp
是系统的TEMP目录,$pid
是Vdbench主JVM的进程ID。如果找到这个文件,Vdbench将会执行优雅的关闭操作。
Java使用的$temp
目录名称显示在logfile.html
的顶部,请参考 java.io.tmpdir
。
The monitor=/monitor/file/name
parameter allows you to terminate the currently active run, or even the complete Vdbench execution.
Vdbench at the end of each reporting interval will look at the monitor file name, and depending on its contents will either terminate the current run, or will terminate Vdbench.
Vdbench will always start with erasing the monitor file, but after that will check the file contents each interval:
end_rd
will terminate the current run AFTER the next reporting interval.end_vdbench
will terminate Vdbench AFTER the next reporting interval, skipping any still remaining Run Definitions..
monitor=/monitor/file/name
参数可以用来中止当前运行,甚至是完全停止Vdbench执行。
在每个报告间隔结束时,Vdbench会检查监视器文件名,并根据文件内容中止当前运行或完全停止Vdbench。
Vdbench将始终在开始时清除监视器文件,但之后会在每个间隔检查文件内容:
- *
end_rd
*将在下一个报告间隔后中止当前运行。 - *
end_vdbench
*将在下一个报告间隔后停止Vdbench,跳过任何仍未完成的运行定义。
By default on Solaris /var/adm/messages
, and on Linux /var/log/message
is scanned every five seconds to look for error messages that possibly could be related to the workload you are running.
The messagescan=
parameter give you some control over this.
默认情况下,Vdbench会每五秒钟扫描Solaris上的/var/adm/messages
和Linux上的/var/log/message
,以查找可能与您正在运行的工作负载相关的错误消息。
参数messagescan=
可以让您对此进行一些控制。
参数 | 说明 |
---|---|
messagescan=no | suppresses the scan |
messagescan=yes | Keeps the default |
messagescan=nodisplay | Does the scan, but does not display the messages found on stdout. |
messagescan=1000 | Stop scanning after 1000 messages. (default) |
This new general parameter causes Vdbench to keep track of how long an SD or FSD has not completed any i/o or FWD operations on a slave.
At the end of each reporting interval Vdbench keeps track of consecutive[^ 25 ] periods where the I/O count for an SD or FSD reported by a slave is zero. To prevent false reporting Vdbench will not check for timeouts for a workload that may complete before the specified elapsed time, for instance any workload using seekpct=eof
or format=yes
.
这个新的通用参数让Vdbench可以追踪从节点上的一个SD或FSD多长时间没有完成任何I/O或FWD操作。
在每个报告间隔结束时,Vdbench会记录从节点上SD或FSD的I/O计数为零的连续时段。为了防止误报,Vdbench不会对可能在规定时间之前完成的工作负载进行超时检查,比如任何使用了seekpct=eof
或format=yes
的工作负载。
参数 | 说明 |
---|---|
timeout=report | Vdbench at normal termination will report any SD or FSD that had zeroi/o for more than one second. |
timeout=(report,60) | Same, but for more than 60 seconds. |
timeout=60 | Will print a message every 60 seconds for those SDs or FSDs that arenot completing any I/O. |
timeout=(60,abort) | Will abort Vdbench if it does not see any i/o completions for 60 seconds |
timeout=(60,600) | Vdbench will warn about timeout every 60 seconds, but will abort after600 seconds if the problem is not resolved. |
timeout=(60,script.sh) | Will call 'script.sh', and if the script returns 'abort', Vdbench will abort. Any other value returned by the script will cause vdbench to continue. The script will be called again ‘nn’ seconds later if the timeout continues.This script will also be called when Vdbench fails to properly terminate during a run’s shutdown. At the end of elapsed= seconds all i/o outstanding at that time MUST complete, and Vdbench waits for it to complete for a maximum of five minutes. Vdbench then will abort after calling this script. |
Example of what’s reported on logfile.html when active: | Longest idle period for fsd=fsd1 from slave=localhost-0 2 seconds between04/06/2018-10:57:35-MDT and 04/06/2018-10:57:37-MDT |
[^ 18 ]: 高精度定时器层(High Resolution Timer)的框架,可以为我们提供纳秒级的定时精度,以满足对精确时间有迫切需求的应用程序或内核驱动程序。高分辨率定时器层有两种工作模式:低精度模式与高精度模式。 [^ 19 ]: 风险 [^ 20 ]: 统计信息 [^ 21 ]: 变化 [^ 22 ]: 旋转的 [^ 23 ]: 变化,改变,不同,变更等 [^ 24 ]: 临时的 [^ 25 ]: 连续的