当前位置: 首页 > 工具软件 > Filebench > 使用案例 >

filebench 读写process

田丰
2023-12-01

运行前
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

define fileset

关于一组相关文件(例如,web服务器访问的所有html文件)的信息包含在一个文件集实体中。使用define Fileset命令指定文件集实体。定义文件集命令必须提供文件集的名称和文件所在目录的路径。此外,还接受几个可选的文件集属性。
描述filebench维护内部文件系统树。对于每个文件(无论它是否存在),在filebench中都有一个条目。条目将被标记是否存在,文件大小是什么。这将有助于解释如何重用和信任。
Attributes
name =强制性的。文件集的名称。随后flowops使用文件集名称来引用特定的文件集。
path = 强制性的。创建文件的目录的路径。在fileset子句中使用path指令来设置数据集的前缀路径。它通常设置在脚本的开头,或者作为参数传入
entries =可选的。文件集中的文件数。这是在文件集中可以创建的最大文件数。不是所有文件集中的文件都是在运行Filebench的一开始就创建的。请参见prealloc attribute来控制初始创建文件的比例。默认值为1024。文件集通常用于创建一组文件,而entries属性用于设置此类文件的数量。如果未指定entries属性,则只创建一个文件。
filesize = size =可选的。文件集中每个文件的大小。默认是1KiB。文件或fileset的filesize属性指定将创建的文件的大小。如果文件集和filegamma被指定为非0,那么filesize属性将实际指定平均文件大小,每个文件的实际大小将基于伽马分布,alpha则基于filegamma属性。size属性与定义文件和定义文件集命令一起使用。对于定义文件,它设置文件的大小。对于定义文件集,它设置文件的平均大小,实际大小由为文件集指定的gamma随机分布设置。
prealloc = prealloc可选的。在实际Filebench工作负载启动之前要预分配的文件集中文件的百分比。如果未指定prealloc,则默认值为0。如果prealloc没有指定数字,则该值为100。由文件或文件集实体定义的文件可以作为潜在文件或实际文件存在。作为一种可能的情况,关于它们的信息由文件或文件集实体保存,但它们不占用磁盘空间,也不存在于目录中。如果它们不存在,可以稍后使用creatfile流程创建它们。当与文件一起使用时,prealloc属性指定文件应该实际存在。当与文件集一起使用时,它指定实际存在的文件的百分比,默认值为100%。
reuse可选的。如果文件集存在于文件系统中,则重用它。如果文件系统中存在标记为“已存在”的文件集条目对应的文件,则Filebench将重用该文件。根据trusttree属性,将或不将该文件调整为适当的大小。根据trusttree属性,zd如果文件系统中不存在文件,则将创建或不创建它。
如果没有设置重用,并且存在文件集,那么在从头重新创建之前将完全删除该文件集。
可选的。是重用该文件,还是重新创建它(如果它已经存在)。重用属性允许重用与指定文件或文件集具有相同名称的现有文件或文件集。如果文件太大,它将被截断;如果文件太小,它将被重写。具有匹配名称的文件集也将被重用,单个文件将被调整为与其新指定的大小相匹配。
trusttree可选的。是否完全信任现有的文件集。暗示重用属性,另外省略文件存在和大小检查。
paralloc可选的。在文件系统上使用32个并行线程分配文件。默认情况下,使用单个线程。通过并行地创建和写入文件,使用这个属性可以加快文件的预分配。然而,它目前只适用于文件,而不是文件集。
readonlyOptional。使用O_RDONLY打开所有文件。也适用于新创建的文件。默认情况下使用O_RDWR标志。
writeonlyOptional。用O_WRONLY打开所有文件。也适用于新创建的文件。默认情况下使用O_RDWR标志。
dirwidth可选的。每个目录要创建多少个文件。文件集的dirwidth属性指定作为文件集的一部分创建的每个目录中的平均条目数。Filebench还将此方法与文件集中的文件总数结合使用,以计算文件集中目录树所需的平均深度。默认的dirwidth为0,它指定一个包含文件集的所有文件的单一级别目录。默认值为XXX。
dirgamma可选的。用于dirwidth文件的伽马分布。文件集的dirgamma属性指定了gamma分布的alpha参数,该参数将用于决定给定的子目录是否包含文件或其他子目录。如果未指定dirgamma属性,则默认值为1500。取值范围为100 ~ 10000,对应的伽马值为0.1 ~ 10。
didepthrv可选的。XXX。默认值为XXX。
leafdirs可选的。XXX。默认值为XXX。
Syntax

define fileset name=<name>,path=<pathname>[,entries=<files>][,filesize=<filesize>]
[,dirwidth=<width>][,dirgamma=<dirgamma>][,dirdepthrv=<$rv>][,leafdirs=<leafdirs]
[,prealloc | prealloc = <percent>],[,writeonly][,readonly][,paralloc][,reuse][,trusttree]

Examples

define fileset name="myfilesetF",path="/tmp"

define fileset name="myfilesetF",path="/tmp",entries=10000,filesize=16384,prealloc=80

define fileset name="myfilesetF",path="/tmp",entries=1000,filesize=16384,dirwidth=1000,prealloc

define process

Filebench进程表示和操作系统进程,包含一个或多个线程。接着,每个Filebench线程代表一个操作系统控制线程,并包含一组flowops。下面的示例说明如何指定流程、线程和流程集合。
进程实体对应操作系统进程。define process命令用于实例化给定的进程实体,该进程实体可能生成一个或多个相同的进程副本。每个进程由一个或多个线程组成。而线程则由一组定义线程应该做什么的操作(flowops)组成。线程还可以分配一个内存区域,然后某些flowops将其用作I/O的缓冲区空间。这个区域是通过设置memsize属性的值来创建的。如果设置了“useism”属性,则使用IPC共享内存,否则将使用线程本地内存。
当使用define命令指定进程和线程时,可以使用instances属性来请求定义的进程或线程的多个副本。如果与进程定义一起使用,将创建所需数量的操作系统进程,每个进程都有定义中包含的线程和flowops的自己副本。类似地,如果与线程定义一起使用,将为每个操作系统进程创建请求的线程数,每个进程都有自己的指定flowops副本。如果不包含实例流,则创建进程或线程的单个实例。
(filesize以字节为单位)

**Process attributes**

* `name = `
  Mandatory. Name of the process.

* `instances`
  Optional. How many instances of this process to spawn.
  Default is 1.
  the requested number
  of operating system processes will be created, each with its own copy of the
  threads and flowops included in the definition.
  If
  the `instance` flowop is not included, then a single instance of the
  process is created.

* nice
  Optional. Increase nice. Default is not to change the nice.
  The `nice` attribute allows you to lower the priority of the process (or set of
  processes if multiple instances are requested) below that of what it otherwise
  would be. Note that all processes are automatically set to a lower priority
  than the master process controlling the run. But if you want a particular
  process to be at a lower priority than the others, specify `nice` with some
  integer value to accomplish this.

**Thread attributes**

* `name = `
  Mandatory. Name of the process.

* `memsize = `
  Mandatory. Amount of memory this thread will allocate
  in the beginning. The thread will zero-out this region
  before the run and will allocate buffers for read and write
  flowops from this region. Default is XXXmb.
  This parameter in the thread clause sets the size
  of the private memory segment of the thread.

* `instances = `
  Optional. How many instances of this process to spawn.
  Default is 1.
  requested number of threads will be created for each
  operating system process, each with its own copy of the specified flowops. If
  the `instance` flowop is not included, then a single instance of the
  thread is created.

* `useism`
  Optional. Use shared memory instead of per-thread memory
  for all threads.
  The `useism` attribute tells the thread to use shared memory for its thread memory region.

**Syntax**

> ```define process name=<process name>[,instances=<number of instances>][,nice=<additional niceness>][,useism]
{
   thread name =<thread name>,memsize=<memory size>[,instances=<number of instances>][,nice=<additional niceness>] {
   }
 }

Flowops

flowop子句确定线程的实际操作。本节将介绍操作及其语法。流操作可以分为基本I/O、异步I/O、同步构造和杂项其他操作。
有些流程语法对所有流程都是通用的。它们在线程定义中使用flowop关键字定义。紧跟着flowop关键字的是要执行的特定操作的名称。接下来是一个属性列表,其中的name和iter属性对所有流程都是通用的。name属性是强制性的,它为该流程的特定实例提供了一个名称,通过这个名称,该实例可以在其他地方和结果中引用。该名称必须全局唯一。iter属性是可选的,但是如果指定了该属性,则允许在每次调用该流程时多次执行由流程指定的操作。

File I/O Flowops

读写文件和文件集。在打开或创建一个文件时,可以指定文件描述符编号,这将保存返回的文件描述符供以后使用。然后,对已经打开的文件的操作可以通过文件描述符号引用它。如果文件名或文件集名称没有提供文件描述符编号,其他读写流程将隐式打开文件供使用。对于文件集,可以通过向flowop传递一个文件索引号index来访问特定的文件,该索引号可以从一个随机变量中获得,从而提供随机的文件访问。否则将以轮询方式访问文件。

read

模拟posix读或读。该流程必须包含filesetname或filename属性。如果提供了filesetname属性,将从文件集中对文件执行读取操作。否则,它将读取由filename属性指定的文件。如果一个文件集和一个fd属性一起指定,那么引用的文件将被读取。否则将使用默认的fd=0,或者,如果设置了opennext属性,flowop将依次选择要读取的下一个文件。[XXX:这需要更多解释]。如果文件还没有打开,这个流程将打开它(如果提供的话,使用openfile流程中描述的directio和dsync属性)。
实际的读取是对线程流的线程内存中的随机偏移量进行的,其大小由iosize属性设置,如果设置了随机属性,则读取的是工作集大小中的随机磁盘偏移量,或者是下一个顺序位置。workingset属性指定用于选择随机磁盘偏移量的偏移范围[XXX:从开始或结束]
Attributes
name =强制性的。名称名称在实体类型中必须全局唯一。因此,如果您有两个进程,每个进程都有一个读类型flowop,那么您必须确保两个读流程都有唯一的名称,例如name=read1 name=read2。
filesetname = filename =其中一个属性是强制的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iosize =强制性?iosize属性用于指定I/O操作的大小。默认值为XXX。
directio 指定以直接而不是缓冲的I/O模式打开文件。本质上是绕过文件系统缓存,因此每个I/O请求都会导致一个到附加设备的实际I/O。需要与打开文件的flowops一起指定,该流程通常是openfile,但也可以是另一种I/O flowops。
dsync指定使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成同步写入。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
opennext opennext属性与I/O flowops一起使用,以指示该flowop应该在每次调用时打开不同的文件。XXX代码中有一些奇怪的东西。
iter =通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。
random 指定在文件中选择一个随机位置进行访问。如果没有此属性,将读写下一个顺序的文件块。
workingset =一些I/O flowops使用workingset属性来指定将实际读取或写入的文件的最大字节范围。这可以小于实际的文件大小,也可以大于当前的文件大小,用于设置文件可以增长到的最大大小。
Syntax

flowop read name=<name>,filesetname|filename=<fname>,iosize=<size>[,directio][,dsync]
[,iters=<count>][,random][,opennext][,workingset=<size>][,fd=<file-desc-number>]
[,index=<file-index>]

readwholefile

模拟读取整个文件。由fd属性(如果提供)或默认fd=0引用的文件集filesetname中的文件。如果文件描述符(0或非0)未打开,则readwholefile将在读取文件之前打开该文件。然后readwholefile流从文件的开始一直读到结束,使用0或更多的iosize读取,然后读取需要读取的剩余的小于iosize的内容。如果iosize没有定义或设置为零,那么将一次读取文件大小字节(如在fileset中定义的那样)。
Attributes
name 。流的名称
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
opennext。opennext属性与I/O flowops一起使用,以指示该flowop应该在每次调用时打开不同的文件。XXX代码中有一些奇怪的东西。
filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iosize = .强制?iosize属性用于指定I/O操作的大小。默认值为XXX。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。
Syntax

flowop readwholefile name=,filesetname=,iosize=,[,iters=][,fd=] [,index=]

fivestreamreaddirect.f

#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

set $dir=/tmp
set $nthreads=1
set $filesize=1g
set $iosize=1m

define file name=largefile1,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile2,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile3,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile4,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile5,path=$dir,size=$filesize,prealloc,reuse

define process name=seqread,instances=1
{
  thread name=seqread1,memsize=10m,instances=$nthreads
  {
    flowop read name=seqread1,filename=largefile1,iosize=$iosize,directio
  }
  thread name=seqread2,memsize=10m,instances=$nthreads
  {
    flowop read name=seqread2,filename=largefile2,iosize=$iosize,directio
  }
  thread name=seqread3,memsize=10m,instances=$nthreads
  {
    flowop read name=seqread3,filename=largefile3,iosize=$iosize,directio
  }
  thread name=seqread4,memsize=10m,instances=$nthreads
  {
    flowop read name=seqread4,filename=largefile4,iosize=$iosize,directio
  }
  thread name=seqread5,memsize=10m,instances=$nthreads
  {
    flowop read name=seqread5,filename=largefile5,iosize=$iosize,directio
  }
}

echo  "Five Stream Direct Read Version 3.0 personality successfully loaded"

write

模拟对文件的写入。写入的大小由iosize属性指定。如果指定了一个文件集,它将从fd属性所引用的文件集写入文件(如果提供了该属性),则写入默认的fd=0文件,或者写入序列的下一个文件(如果设置了opennext属性)。[XXX:顺列什么?]。如果提供了filename属性,则它将写入指定的文件。如果文件还没有打开,这个流程将打开它,使用(如果提供的话)openfile流程中描述的directio和dsync属性。flowop的workingset属性将用于设置最大文件大小(如果它非零),否则将使用整个文件大小。实际的写操作是从线程流的线程内存中的随机偏移量开始的,大小由iosize属性设置,如果设置了随机属性,则在workingset大小范围内的随机磁盘偏移量,或者在下一个顺序位置。
Attributes
name =
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。
directio 。指定以直接而不是缓冲的I/O模式打开文件。本质上是绕过文件系统缓存,因此每个I/O请求都会导致一个到附加设备的实际I/O。需要与打开文件的流程一起指定,该流程通常是openfile,但也可以是另一种I/O流程。
dsync。指定使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成同步写入。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
opennext。opennext属性与I/O flowops一起使用,以指示该flowop应该在每次调用时打开不同的文件。XXX代码中有一些奇怪的东西。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iosize = .强制?iosize属性用于指定I/O操作的大小。默认值为XXX。
random 。指定在文件中选择一个随机位置进行访问。如果没有此属性,将读写下一个顺序的文件块。
workingset =。一些I/O flowops使用workingset属性来指定将实际读取或写入的文件的最大字节范围。这可以小于实际的文件大小,也可以大于当前的文件大小,用于设置文件可以增长到的最大大小。
Syntax

flowop write name=,filesetname|filename=,iosize=[,directio][,dsync][,iters=][,random][,opennext][,workingset=][,fd=][,index=]

writewholefile

模拟整个文件的写操作。文件的大小取自由srcfd属性标识的文件集,而用于写入的文件则由fd属性标识。两者都默认为0。[XXX:如果fd=已设置但srcfd未设置,我们是否应该设置srcfd=fd?]进行多次iosize长度的写入,直到写入完整文件为止。如果iosize没有定义或设置为0,那么只写一次源文件的大小。
Attributes
name强制
dsync使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
srcfd =。srcfd属性指定在调用writewholefile流程时用作文件大小信息源的文件描述符。在下面的示例中,代码模拟了一个复制文件操作,在这个操作中,文件被读入,然后写入到一个新文件中,当然,这个新文件最终的大小将与原始文件相同。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iosize =强制性的吗?iosize属性用于指定I/O操作的大小。默认值为XXX。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。
Syntax

flowop writewholefile name=,filesetname=,iosize=[,dsync][,iters=][,srfd=][,fd=][,index=]

appendfile

模拟一个固定大小的附加到文件。如果使用filesetname属性指定了一个文件集,或者如果fd属性非零且与文件描述符关联的属性文件打开,则将数据追加到从文件集选择的文件中。如果指定了一个文件集,但是引用的文件没有打开,appendfile将打开它。如果没有指定文件集或非零的fd属性,那么将使用由“filename”属性命名的文件。如果找不到合适的文件,Filebench将终止。虽然workingset属性被接受,但它目前没有被使用。因此,对给定文件的flowop的重复调用将导致文件任意增大。每个追加的大小由iosize属性设置。
Attribute
name =强制的
directio直接而非缓冲I/O方式打开文件。本质上是绕过文件系统缓存,因此每个I/O请求都会导致一个到附加设备的实际I/O。需要与打开文件的流程一起指定,该流程通常是openfile,但也可以是另一种I/O流程。
dsync。指定使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成同步写入。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iosize =。强制性的吗?iosize属性用于指定I/O操作的大小。默认值为XXX。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。
workingset =。一些I/O flowops使用workingset属性来指定将实际读取或写入的文件的最大字节范围。这可以小于实际的文件大小,也可以大于当前的文件大小,用于设置文件可以增长到的最大大小。
Syntax

flowop appendfile name=, filename|fileset=, iosize=\ [,dsync] [,iters=] [,workingset=] [,fd=][,index=]

appendfilerand

XXX:我们应该删除它,并说应该使用一个随机变量吗?
模拟附加到文件的随机大小。如果使用fileset属性指定了一个文件集,或者如果fd属性非零且与文件描述符关联的属性文件打开,则将数据附加到从文件集选择的文件中。如果指定了一个文件集,但是引用的文件没有打开,appendfile将打开它。如果没有指定filesetname或非零的fd属性,那么将使用由filename属性命名的文件。如果找不到合适的文件,Filebench将终止。对给定文件重复调用流将导致文件任意增大。对文件的当前端进行写操作,其随机传输大小最多为“iosize”字节
Attribute
name =强制的
directio直接而非缓冲I/O方式打开文件。本质上是绕过文件系统缓存,因此每个I/O请求都会导致一个到附加设备的实际I/O。需要与打开文件的流程一起指定,该流程通常是openfile,但也可以是另一种I/O流程。
dsync。指定使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成同步写入。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iosize =。强制性的吗?iosize属性用于指定I/O操作的大小。默认值为XXX。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。
workingset =。一些I/O flowops使用workingset属性来指定将实际读取或写入的文件的最大字节范围。这可以小于实际的文件大小,也可以大于当前的文件大小,用于设置文件可以增长到的最大大小。
Syntax

flowop appendfilerand name=, filename|filesetname=, iosize=\ [,dsync] [,iters=] [,workingset=] [,fd=] [,index=]

File Metadata Flowops

打开、关闭和陈述文件和文件集。在打开或创建文件时,可以指定文件描述符编号。然后,对已经打开的文件的操作可以通过文件描述符号引用它。对于文件集,可以通过向flowop传递一个文件索引号来打开或创建特定的文件,该索引号可以从一个随机变量中获得,以提供随机的文件访问。否则将以轮询方式访问文件。

createfile

模拟文件的创建。将createfile的fd属性(如果提供的话)与创建的文件的操作系统特定的文件描述符关联起来,以便其他文件操作可以引用它。为文件创建操作从文件集中选择当前不存在的文件项。然后对文件执行打开操作,并设置O_CREATE标志以创建文件。通过包含directio属性,可以使用直接I/O创建(即打开)文件。通过设置dsync属性,可以强制写入行为与同步I/O数据完整性约束定义的一致。
Attributes
name = .必选。流的名称。
directio。指定以直接而不是缓冲的I/O模式打开文件。本质上是绕过文件系统缓存,因此每个I/O请求都会导致一个到附加设备的实际I/O。需要与打开文件的流程一起指定,该流程通常是openfile,但也可以是另一种I/O流程。
dsync。指定使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成同步写入。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。但是在接下来的迭代中fd会发生什么?
Syntax

flowop createfile name=,filesetname=[,fd=][,directio][,dsync][,index=]

Examples

flowop createfile name=mycreatefile,filesetname=myfileset

openfile

模拟文件打开操作。将openfile的fd属性(如果提供的话)与打开文件的操作系统特定的文件描述符关联起来,以便其他文件操作可以引用它。但是,如果提供的fd属性已经与打开的文件相关联,则openfile将失败。从文件集中选择文件存在的文件项进行文件打开操作。然后对文件条目的关联文件执行文件打开操作。通过包含directio属性,可以使用直接I/O打开文件。通过设置dsync属性,可以强制执行同步I/O数据完整性约束所定义的写操作。
Attributes
name = .必选。流的名称。必须是唯一的。
directio。指定以直接而不是缓冲的I/O模式打开文件。本质上是绕过文件系统缓存,因此每个I/O请求都会导致一个到附加设备的实际I/O。需要与打开文件的流程一起指定,该流程通常是openfile,但也可以是另一种I/O流程。
dsync。指定使用同步写入,直到附加的设备将数据写入非易失性存储器后才完成同步写入。这不仅会禁用文件系统回写缓存,而且还会防止设备(如附加的磁盘驱动器)执行回写缓存。该属性需要与可能打开该文件的所有flowops一起指定,因为该文件必须作为同步文件打开,才能使该属性有效。虽然openfile通常用于此目的,但任何其他flowops都将打开尚未打开的文件,因此它们可能也需要定义该属性。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。但是在接下来的迭代中fd会发生什么?
Syntax

flowop openfile name=,filesetname=[,fd=][,directio][,dsync][,index=]

closefile

模拟一个文件的关闭。由fd属性(如果提供)或默认fd=0引用的文件必须是打开的。简单地对引用的文件执行一个关闭操作。
Attributes
name = .必选。流的名称。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。但是在接下来的迭代中fd会发生什么?
Syntax

flowop closefile name= [,fd=]

fsync

模拟文件的fsync。由fd属性(如果提供)或默认fd=0引用的文件必须是打开的。
Attributes
name = .必选。流的名称。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。但是在接下来的迭代中fd会发生什么?
Syntax

flowop fsync name=[,fd=]

filemicro_writefsync.f

#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"%Z%%M%	%I%	%E% SMI"

# Single-threaded writes to initially empty file.
# I/O size is set to 8KB. After every 1024 writes 
# (i.e., 8MB written) fsync is called.
# The run finishes after 1GB is fully written.

set $dir=/tmp
set $iosize=8k
set $writeiters=1024
set $fsynccount=128

set mode quit firstdone

define file name=bigfile,path=$dir,size=0,prealloc

define process name=filewriter,instances=1
{
  thread name=filewriterthread,memsize=10m,instances=1
  {
    flowop appendfile name=append-file,filename=bigfile,iosize=$iosize,iters=$writeiters
    flowop fsync name=sync-file
    flowop finishoncount name=finish,value=128,target=sync-file
  }
}

echo  "FileMicro-WriteFsync Version 2.1 personality successfully loaded"

run

fivestreamwritedirect.f

#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

set $dir=/tmp
set $filesize=1g
set $nthreads=1
set $iosize=1m

define file name=largefile1,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile2,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile3,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile4,path=$dir,size=$filesize,prealloc,reuse
define file name=largefile5,path=$dir,size=$filesize,prealloc,reuse

define process name=seqwrite,instances=1
{
  thread name=seqwrite1,memsize=10m,instances=$nthreads
  {
    flowop write name=seqwrite1,filename=largefile1,iosize=$iosize,directio
  }
  thread name=seqwrite2,memsize=10m,instances=$nthreads
  {
    flowop write name=seqwrite2,filename=largefile2,iosize=$iosize,directio
  }
  thread name=seqwrite3,memsize=10m,instances=$nthreads
  {
    flowop write name=seqwrite3,filename=largefile3,iosize=$iosize,directio
  }
  thread name=seqwrite4,memsize=10m,instances=$nthreads
  {
    flowop write name=seqwrite4,filename=largefile4,iosize=$iosize,directio
  }
  thread name=seqwrite5,memsize=10m,instances=$nthreads
  {
    flowop write name=seqwrite5,filename=largefile5,iosize=$iosize,directio
  }
}

echo  "Five Stream Direct Write Version 3.0 personality successfully loaded"

statfile

模拟文件的统计。从filesetname属性指定的文件集中选择具有现有文件的任意文件集条目,然后对其执行stat()操作。
Attributes
name = .必选。流的名称。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。但是在接下来的迭代中fd会发生什么?
Syntax

flowop statfile name=,filesetname=[,fd=file-desc-number][,index=]

deletefile

模拟文件的删除。从filesetname属性指定的文件集中选择一个指定索引index或指定文件描述符-编号的文件条目,并删除它。
Attributes
name = .必选。流的名称。
fd =。flowop子句的fd参数用于显式地设置打开文件的文件描述符。当脚本用于模拟一个应用程序,该应用程序在不同的描述符上打开了许多文件,或者使用有限的或扩展的描述符进行打开/关闭时,这是很有用的。
Filesetname = filename =。其中一个属性是强制性的。filename属性指定一个文件的名称。它与I/O flowops一起用于指定要访问的特定文件。filesetname属性指定文件集的名称。它与I/O flowops一起用于指定要访问哪些特定的文件集。
iter =。通过将iter属性设置为所需的执行次数,每次调用单个flowops时可能会执行多次。如果未指定,则每次调用该flowop时只执行一次。但是在接下来的迭代中fd会发生什么?
Syntax

flowop deletefile name=,fileset=[,fd=][,index=]
 类似资料: