OpenSolaris
Collectives
Discussions
Documentation
Download
Source Browser
Free CD
Log-in
|
en
Community Group performance
:
FileBench
>
Quick Start Guide to FileBench
Top Menu
Show
:
Comments
Attachments
History
Information
Print
:
Print
Print preview
Export as PDF
Export as RTF
Export as HTML
Export as XAR
Wiki code for
Quick Start Guide to FileBench
Hide Line numbers
1: Temporary Note: we are about to give FileBench a much needed facelift. This guide does *NOT* represent the current bits hanging out on sourceforge. This guide is for bits that will update sourceforge and appear in ON. This guide is made temporary to help us get PSARC approval to integrate FileBench into Solaris, and will be made permanent once the PSARC case gets approved. 2: 3: == FileBench Command 4: 5: The ’filebench’ command can be found in /usr/benchmarks/filebench: 6: 7: {{{ 8: 9: diskmonster# /usr/benchmarks/filebench/bin/filebench 10: Usage: 11: filebench <profile name> 12: filebench -c <stat_dir> ... 13: diskmonster# 14: 15: }}} 16: 17: == Profiles 18: 19: In order to do a run, you first need a "profile". A profile specifies what workload(s) you’d like to run, where you would like your results to be saved, what parameters you’d like to have for each workload, what directory you’d like to test against, your filesystem type, a description of your run, and how long you’d like to run for. A nice feature of having a profile is that you don’t have to re-enter your specifics every time you want to do a run. 20: 21: A profile is described by a file ending in ’.prof’. Example profiles can be found here: 22: 23: {{{ 24: 25: diskmonster# ls /usr/benchmarks/filebench/config 26: fileio.prof filemacro.prof filemicro.prof generic.func seqread.prof 27: diskmonster# 28: 29: }}} 30: 31: Let’s take a look at one profile: 32: 33: {{{ 34: 35: diskmonster# cat /usr/benchmarks/filebench/config/seqread.prof 36: 37: DEFAULTS { 38: runtime = 120; 39: dir = /tmp; 40: stats = /tmp; 41: filesystem = tmpfs; 42: description = "fileio tmpfs"; 43: } 44: 45: CONFIG seqread1m { 46: function = generic; 47: personality = multistreamread; 48: filesize = 40g; 49: iosize = 1m; 50: } 51: diskmonster# 52: 53: }}} 54: 55: For the "DEFAULTS" part, what this tells us is that filebench will run for 120 seconds, will run (create files, do I/O, etc) on /tmp, save the results in /tmp, treats the filesystem as tmpfs, and has the "fileio tmpfs" description (this is used for comparing results). 56: 57: For the "CONFIG" part, what this tells us is that filebench is going to run the ’multistreamread’ workload with files of size 40GB and I/O sizes of 1MB. The ’function’ definition can be safely ignored for now as its for future use. The parameters that you specify here (filesize, iosize) override the workload’s default. The defaults can be found in the workload description (a ’.f’ file). If you want to know more about a workload’s description, go [[here>>#workload]]. 58: 59: == Doing an Actual Run 60: 61: The first thing to do is to create your own profile. Let’s leverage an example profile: 62: 63: {{{ 64: 65: diskmonster# pwd 66: /var/tmp/ekstarz/fb 67: diskmonster# cp /usr/benchmarks/filebench/config/seqread.prof my_seqread.prof 68: 69: }}} 70: 71: Now edit the parts that you wish to change. In my case, i have a ZFS filesystem mounted at ’/bigIO’. Here’s an example of what you could change it to (i’ve changed dir, stats, filesystem, description, and filesize): 72: 73: {{{ 74: 75: diskmonster# cat my_seqread.prof 76: 77: DEFAULTS { 78: runtime = 120; 79: dir = /bigIO; 80: stats = /var/tmp/ekstarz/fb/stats; 81: filesystem = zfs; 82: description = "zfs ON 8/1/2007"; 83: } 84: 85: CONFIG seqread1m { 86: function = generic; 87: personality = multistreamread; 88: filesize = 40g; 89: iosize = 1m; 90: } 91: diskmonster# 92: 93: }}} 94: 95: Ok, now that we have our own profile, let’s do a run (note that we pass in the profile file, ’my_seqread.prof’, with the ending suffix of ’.prof’ chopped off): 96: 97: {{{ 98: 99: diskmonster# /usr/benchmarks/filebench/bin/filebench my_seqread 100: parsing profile for config: seqread1m 101: Running /tmp/diskmonster-tmpfs-my_seqread-May_7_2008-14h_31m_48s/seqread1m/thisrun.f 102: FileBench Version 1.3.0 103: 102330: 0.020: Multi Stream Read Version 2.0 personality successfully loaded 104: 102330: 0.020: Creating/pre-allocating files and filesets 105: 102330: 0.021: File largefile4: mbytes=40 106: 102330: 0.021: Re-using file largefile4. 107: 102330: 0.021: Creating file largefile4... 108: 102330: 0.021: Re-using file /tmp/largefile4/00000001/00000001 109: 102330: 0.035: Preallocated 1 of 1 of file largefile4 in 1 seconds 110: 102330: 0.035: File largefile3: mbytes=40 111: 102330: 0.035: Re-using file largefile3. 112: 102330: 0.035: Creating file largefile3... 113: 102330: 0.035: Re-using file /tmp/largefile3/00000001/00000001 114: 102330: 0.050: Preallocated 1 of 1 of file largefile3 in 1 seconds 115: 102330: 0.050: File largefile2: mbytes=40 116: 102330: 0.050: Re-using file largefile2. 117: 102330: 0.050: Creating file largefile2... 118: 102330: 0.050: Re-using file /tmp/largefile2/00000001/00000001 119: 102330: 0.066: Preallocated 1 of 1 of file largefile2 in 1 seconds 120: 102330: 0.066: File largefile1: mbytes=40 121: 102330: 0.066: Re-using file largefile1. 122: 102330: 0.066: Creating file largefile1... 123: 102330: 0.066: Re-using file /tmp/largefile1/00000001/00000001 124: 102330: 0.080: Preallocated 1 of 1 of file largefile1 in 1 seconds 125: 102330: 0.080: waiting for fileset pre-allocation to finish 126: 102330: 0.080: Running ’/usr/benchmarks/filebench/scripts/fs_flush tmpfs /tmp’ 127: filesystem type is: tmpfs, no action required, so exiting 128: 102330: 0.089: Change dir to /tmp/diskmonster-tmpfs-my_seqread-May_7_2008-14h_31m_48s/seqread1m 129: 102330: 0.089: Starting 1 seqread instances 130: 102333: 1.091: Starting 1 seqread4 threads 131: 102333: 1.092: Starting 1 seqread3 threads 132: 102333: 1.092: Starting 1 seqread2 threads 133: 102333: 1.092: Starting 1 seqread1 threads 134: 102330: 4.101: Running... 135: 102330: 125.301: Run took 120 seconds... 136: 102330: 125.302: Per-Operation Breakdown 137: limit 0ops/s 0.0mb/s 0.0ms/op 0us/op-cpu 138: seqread4 633ops/s 618.0mb/s 1.6ms/op 1471us/op-cpu 139: limit 0ops/s 0.0mb/s 0.0ms/op 0us/op-cpu 140: seqread3 596ops/s 581.5mb/s 1.7ms/op 1559us/op-cpu 141: limit 0ops/s 0.0mb/s 0.0ms/op 0us/op-cpu 142: seqread2 615ops/s 600.4mb/s 1.6ms/op 1516us/op-cpu 143: limit 0ops/s 0.0mb/s 0.0ms/op 0us/op-cpu 144: seqread1 638ops/s 622.2mb/s 1.6ms/op 1454us/op-cpu 145: 146: 102330: 125.302: 147: IO Summary: 300905 ops 2482.7 ops/s, (2483/0 r/w) 2422.1mb/s, 1509us cpu/op, 1.6ms latency 148: 102330: 125.302: Stats dump to file ’stats.seqread1m.out’ 149: 102330: 125.302: in statsdump stats.seqread1m.out 150: 102330: 125.303: Shutting down processes 151: Generating html for /tmp/diskmonster-tmpfs-my_seqread-May_7_2008-14h_31m_48s 152: file = /tmp/diskmonster-tmpfs-my_seqread-May_7_2008-14h_31m_48s/seqread1m/stats.seqread1m.out 153: 154: diskmonster# 155: 156: }}} 157: 158: In order to compare results, use the ’-c’ option: 159: 160: {{{ 161: 162: diskmonster# /usr/benchmarks/filebench/bin/filebench -c stats/diskmonster-zfs-my_sqread-Aug_1_2007-13h_04m_05s stats/diskmonster-zfs-my_sqread-Aug_1_2007-13h_18m_00s 163: Generating html for stats/diskmonster-zfs-my_sqread-Aug_1_2007-13h_04m_05s 164: file = stats/diskmonster-zfs-my_sqread-Aug_1_2007-13h_04m_05s/seqread1m/stats.seqread1m.out 165: Generating html for stats/diskmonster-zfs-my_sqread-Aug_1_2007-13h_18m_00s 166: file = stats/diskmonster-zfs-my_sqread-Aug_1_2007-13h_18m_00s/seqread1m/stats.seqread1m.out 167: diskmonster# 168: 169: }}} 170: 171: This generates an ’index.html’ file that you can proudly show your management of how you’ve increased performance by 2x. An example of what the output looks like is [[here>>Community Group performance.example_comparison]]. 172: 173: == Workloads 174: 175: You can find the available workloads at: 176: 177: {{{ 178: 179: diskmonster# ls /usr/benchmarks/filebench/workloads 180: bringover.f fileserver.f 181: compflow_demo.f mongo.f 182: copyfiles.f multistreamread.f 183: createfiles.f multistreamreaddirect.f 184: deletefiles.f multistreamwrite.f 185: filemicro_create.f multistreamwritedirect.f 186: filemicro_createfiles.f oltp.f 187: filemicro_createrand.f randomread.f 188: filemicro_delete.f randomrw.f 189: filemicro_rread.f randomwrite.f 190: filemicro_rwrite.f singlestreamread.f 191: filemicro_rwritedsync.f singlestreamreaddirect.f 192: filemicro_rwritefsync.f singlestreamwrite.f 193: filemicro_seqread.f singlestreamwritedirect.f 194: filemicro_seqwrite.f tpcso.f 195: filemicro_seqwriterand.f varmail.f 196: filemicro_seqwriterandvargam.f webproxy.f 197: filemicro_seqwriterandvartab.f webserver.f 198: filemicro_writefsync.f 199: diskmonster# 200: 201: }}} 202: 203: So what is a workload, and what does it do? Let’s take a look at the ’multistreamread.f’ workload. We can find its description here: 204: 205: {{{ 206: 207: diskmonster# cat /usr/benchmarks/filebench/workloads/multistreamread.f 208: 209: set $dir=/tmp 210: set $filesize=1g 211: set $nthreads=1 212: set $iosize=1m 213: set $directio=0 214: 215: define file name=largefile1,path=$dir,size=$filesize,prealloc,reuse 216: define file name=largefile2,path=$dir,size=$filesize,prealloc,reuse 217: define file name=largefile3,path=$dir,size=$filesize,prealloc,reuse 218: define file name=largefile4,path=$dir,size=$filesize,prealloc,reuse 219: 220: define process name=seqread,instances=1 221: { 222: thread name=seqread1,memsize=10m,instances=$nthreads 223: { 224: flowop read name=seqread1,filename=largefile1,iosize=$iosize,directio=$directio 225: flowop bwlimit name=limit 226: } 227: thread name=seqread2,memsize=10m,instances=$nthreads 228: { 229: flowop read name=seqread2,filename=largefile2,iosize=$iosize,directio=$directio 230: flowop bwlimit name=limit 231: } 232: thread name=seqread3,memsize=10m,instances=$nthreads 233: { 234: flowop read name=seqread3,filename=largefile3,iosize=$iosize,directio=$directio 235: flowop bwlimit name=limit 236: } 237: thread name=seqread4,memsize=10m,instances=$nthreads 238: { 239: flowop read name=seqread4,filename=largefile4,iosize=$iosize,directio=$directio 240: flowop bwlimit name=limit 241: } 242: } 243: 244: echo "Multi Stream Read Version 1.9 2005/06/21 21:18:52 personality successfully loaded" 245: usage "Usage: set \$dir=" 246: usage " set \$filesize= defaults to $filesize" 247: usage " set \$nthreads= defaults to $nthreads" 248: usage " set \$iosize= defaults to $iosize" 249: usage " set \$directio= defaults to $directio" 250: usage " " 251: usage " run runtime (e.g. run 60)" 252: 253: diskmonster# 254: 255: }}} 256: 257: We can see that the workload has pre-defined defaults: 258: 259: {{{ 260: 261: set $dir=/tmp 262: set $filesize=1g 263: set $nthreads=1 264: set $iosize=1m 265: set $directio=0 266: 267: }}} 268: 269: Since our ’my_seqread.prof’ profile specified filesize and iosize, those parameters will override the defaults. 270: 271: We can also see that this workload creates four files (of name ’largefile1’, ’largefile2’, ’largefile3’, and ’largefile4’): 272: 273: {{{ 274: 275: define file name=largefile1,path=$dir,size=$filesize,prealloc,reuse 276: define file name=largefile2,path=$dir,size=$filesize,prealloc,reuse 277: define file name=largefile3,path=$dir,size=$filesize,prealloc,reuse 278: define file name=largefile4,path=$dir,size=$filesize,prealloc,reuse 279: 280: }}} 281: 282: This workload then creates four threads (each thread operates on its own file). Each of these main threads then creates ’nthreads’ to do the processing. In our case (the default), ’nthreads’ is set to 1. 283: 284: {{{ 285: 286: thread name=seqread1,memsize=10m,instances=$nthreads 287: { 288: flowop read name=seqread1,filename=largefile1,iosize=$iosize,directio=$directio 289: flowop bwlimit name=limit 290: } 291: 292: }}} 293: 294: Without being a ’.f’ expert, one can easily see what this workload is doing: four parallel threads, each thread reading in 1MB sequential I/Os on a 40GB file. 295: 296: More detailed information can be found on the [[FileBench wiki>>http://www.solarisinternals.com/wiki/index.php/FileBench]]. 297: 298: Happy FileBenching!
Search
Collectives
Community Group
Academic and Research
Accessibility
Advocacy
Appliances
Approachability
Architecture Process and Tools
BrandZ
Chinese Users
Community Advisory Board
Databases
Desktop
Device Drivers
Distribution
Documentation
DTrace
Emerging Platforms
Fault Management
Games on OpenSolaris
HA Clusters
HPC Developer
Installation and Packaging
Internationalization and Localization
Laptop
Logical Domains
Modular Debugger (MDB)
Networking
NFS
Observability
OpenSolaris Governing Board (OGB)
OpenSolaris Printing
OS/Net (ON)
Performance
Power Management
PowerPC
Security
Service Management Facility (smf(5))
Software Porters
Solaris Volume Manager
Storage
Systems Administration Community Group
Testing
Tools Home
Unix File Systems (UFS)
Website Community
X Window System
Xen
ZFS
Zones
Project
ADSL Modem Enhancement
ARC Process Definition
ARM Platform Port
Automatic Data Migration
BIND Update
Bluetooth Stack & Drivers
Brocade FC HBA - Initiator
Brocade FC HBA - Target
Brussels - unified network link configuration
Caiman, Solaris Install Revisited
Celeste
Český portál
Chime Visualization Tool for DTrace
CIFS client for Solaris
CIFS Server
Clearview: Network Interface Coherence
Cluster Agent: Informix Dynamic Server
Cluster Agent: OpenSolaris Container
Cluster Agent: OpenSolaris xVM
Cluster Agent: Oracle E-Business Suite
Cluster agent: PostgreSQL
Cluster Agent: Samba
Cluster Agent: Tomcat
CMT
Coarse Data Flow Parallelism
Colorado: Open HA Cluster on OpenSolaris
Command Assistant
Common Array Manager
Companion - /opt/sfw: Free and Open Source software
COMSTAR: Common Multiprotocol SCSI Target
Content
Contest
CPU Observability
Credentials Process Groups
Crossbow: Network Virtualization and Resource Control
Crypto KMS Agent Toolkit
Cryptographic Framework
Data Migration Manager
Data Tethers
Deutsches Portal
Device Detection Tool
Device Driver Utility
Device Manager
Device Mapper
Direct Rendering Infrastructure & 3D drivers
DTrace Guide
Duckwater: Simplified name services management
Easy Tools
Emancipation
Emulex Fibre Channel Device Driver
Emulex Advanced Ethernet Device Driver
Enable/Enhance Solaris support for Intel Platform
Enhance the support of USB webcams
Enhanced SMF Profiles
Enhancements for AMD-based Platforms
Erlang DTrace Integration
Ethernet bridge module for Solaris
Evaluate Conary
Events Registry
Ext3 file system support
F/OSS Package Base
Facilitation
Fibre Channel over Ethernet
Fine Grained Access Policy (FGAP)
Fingerprint Authentication
Flexible Mandatory Access Control
Forensic Tools
Fully Open X Project
Fuse on Solaris
gcore
Generic Machine Check Architecture Improvements
Google SOC
HA-JBoss
HA-MySQL
Hadoop Live CD
Hitachi
HoneyComb Fixed Content Storage
HPC Stack
Image Packaging System
Improved Performance MIB
Indiana
Innovation Awards
Input Method
Intel Graphics
Internet Key Exchange, version 2
Interrupt Resource Management
IP Datapath Refactoring
IP over Infiniband
IPsec Tunnel Reform
iSCSI Extensions for Remote DMA (iSER)
iSNS Server
JeOS - Just enough Operating System
JKstat - a java binding for libkstat
Journaled File System (JFS)
K Desktop Environment
Kerberos
Kernel Sockets
Kernel SSL Enhancements
Key Management Framework
Korn Shell 93 integration/migration project
Labeled IPsec
LatencyTOP
Layer 2 Filtering
LDoms Manager
Lending
libMicro - portable microbenchmarks
Link Layer Discovery
Live Media: Technologies for distributions running from CD and other media
Locale Data
lofi compression and cryptography support
lx64 brand
Media Management System
Mega_sas
Mexico
MilaX minimal Live Distribution
MIPS Platform Port
Mozilla DTrace
MRSL.NONsharedDevice
Multi-lingual Glossary
Multi-pathing software (MPxIO)
Multiple disk sector size support
Multiple DOI
Muskoka: An open repository for OpenSolaris technical content
Navigator
Nemo: A Framework for High-Performance Networking
Network Auto-Magic
Network Data Management Protocol
Network MIBs
Network Storage
Network Time Protocol (NTP)
Nevada Globalization
New Design of 4over6 Mechanism Based on OpenSolaris
NFS RDMA transport update and performance analysis
NFS Server in non-Global Zones
NFS version 4.1 pNFS
NFSv4 namespace extensions
Nightingale: Port Songbird to OpenSolaris
NPort ID Virtualization (NPIV)
NUMA
Object Storage Device (OSD) support for Solaris
OHACGE Script Based Plug-in
ON/Nevada (ONNV) Project
Open Development Infrastructure
Open HA Cluster Utilities
Open Sound System
OpenGrok
OpenPegasus CIM Server
OpenRTI
OpenSolaris Busybox
OpenSolaris Desktop
OpenSolaris Hispano
OpenSolaris Security Audit
OpenSolaris support for the QEMU processor emulator: host and guest
PEF: Packet Event Framework
Performance Wrappers
Pkgfactory
Polski Portal
Portail Francophone
Portal Brasil
Portals
Power Management Usability Interfaces
Presto: Automatic Printing Configuration
Printable Many Page Solaris Manuals
Promise SuperTrak RAID HBA Driver
QLogic Converged Network Adapter GLDv3 NIC Driver
Quagga Routing Protocol Suite Integration
RAID Configuration Utility
RBridge (IETF TRILL) support
RDMA Offload Framework
Reno: Login Process Enhancements for Interop
Resource Management
s10brand
SAM/QFS
SCM Migration Project
SCSI RDMA Protocol
SDcard Drivers
Sensor Abstraction Layer
Session Initiation Protocol
SFW
Shell: bourne shell, korn shell, C shell, etc.
Sierra: Intel WiFi Chipsets Support
Simple Panels
SM-HBA Based SAS HBA Management
SMF Documentation
Solaris iSCSI Target
Solaris PowerPC Port
SourceJuicer
Sparks: name service switch/nscd enhancements
Squashfs
Star integration/migration project
Starfish
Starter Kit
Storage Power Management
Sun Security Toolkit
Sun StorageTek Availability Suite
Support for OpenFabrics User Verbs / API on OpenSolaris OS
Support gcc4/GCCfss in Solaris
Suspend/Resume
SVR4 Packaging
Systemz
Tamarack: Removable Media Enhancements in Solaris
Tesla: OpenSolaris Enhanced Power Management
Test Development
Tickless Kernel Architecture
TIPC
Trademarks
Trusted networking interface policy database for Trusted Extensions
Trusted Platform Module support
Use Case
Validated Execution Project
Virtual Console
Virtual Network Machines
Visual Panels
Visualization for HPC
Volo
VRRP: Virtual Router Redundancy Protocol Implementation
VSCAN service
Web Stack
Website
Winchester: Schema mapping and ID mapping for AD Interoperability
Wireless USB Support
Wireless Wide Area Network
X Consolidation
x86 Generic FMA Topology Enumerator
Xen Gate
Xfce: A lightweight desktop environment
ZFS Boot and Install
ZFS on disk encryption support
Zone Manager
Zone Statistics
Русский портал
البوابة العربية
भारतीय पोर्टल
中国门户
日本ポータル
한국 포탈
User Group
Adelaide
Argentina
Arizona
Atlanta
Baltimore-Washington
Bangalore
Bangkok
Bangladesh
Beijing
Bélem
Berlin
Bhimavaram
Bloomington
Campus Ambassadors
Capital Region
Cardiff
Charlotte
Chengdu
Chennai
Chihuahua
Chile
Cleveland
Colombia
Columbus
Connecticut
Cracow
Czech
Dallas/Ft. Worth
Danish
Delaware
Edinburgh
Egypt
Finland
Florida
Front Range
FuZhou
Great Lakes
Greece
Hangzhou
Hawaii
HeFei
Houston
Hyderabad
Indonesia
Irish
Israel
Italian
Jinan
Kabul
Kansas City
Latvia
London
Madurai
Manchester
Mato Grosso
Melbourne
Minas Gerais
Minnesota
Montreal
Moscow
Mumbai
Munich
NEA
Netherlands
New England
New York City
New Zealand
NIT Hamirpur
Noroeste
Oklahoma City
Osnabrück
Peru
Philadelphia
Piaski
Pittsburgh
Porto Alegre
Puget Sound
Pune
Queensland
Research Triangle Park
Romania
Russia
San Antonio
San Diego
San Francisco
São Paulo
Scottish
Serbia
Shanghai
Shenzhen
Silicon Valley
Singapore
Slovak
South African
Southern Connecticut
St. Louis
Sweden
Switzerland
Sydney
Szczecin
Taiwan
Tecum
Thames Valley
Tokyo
Toronto
Trondheim
Tulsa
Turkey
Ukraine
University of Melbourne
Vale do Paraíba
Vancouver
Venezuela
Welsh - Cymru
Wisconsin
Xi'an
Subsites
Code Reviews
Code Repositories
Package Search
Bugster
Bugzilla
Test Machines
Planet
Mailing Lists
Elections & Polls
ARC Case Logs
Source Juicer
Package Factory
User Authentication
Community Group performance Pages
FileBench
Sample Comparison
Gotchas
Quick Start Guide to FileBench
Files
libMicro
Sample Comparison
OpenSolaris NUMA project
8 CPU chip Opteron
Improved Latency Discovery
Load Balancing
Observability
Roles and Grants
Technical Documents