[demo] Add Filebench demo
This commit is contained in:
parent
3cb34b95a7
commit
2a013d402e
19
.github/workflows/demo_test.yml
vendored
19
.github/workflows/demo_test.yml
vendored
@ -1289,3 +1289,22 @@ jobs:
|
|||||||
|
|
||||||
- name: Clean Swtpm test
|
- name: Clean Swtpm test
|
||||||
run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos && rm -rf ./swtpm"
|
run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos && rm -rf ./swtpm"
|
||||||
|
|
||||||
|
|
||||||
|
Filebench_test:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- uses: ./.github/workflows/composite_action/sim
|
||||||
|
with:
|
||||||
|
container-name: ${{ github.job }}
|
||||||
|
build-envs: 'OCCLUM_RELEASE_BUILD=1'
|
||||||
|
|
||||||
|
- name: Preinstall dependencies and build Filebench
|
||||||
|
run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/benchmarks/filebench && ./preinstall_deps.sh && ./dl_and_build_filebench.sh"
|
||||||
|
|
||||||
|
- name: Prepare occlum instance and Run Filebench on Ext2
|
||||||
|
run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/benchmarks/filebench && SGX_MODE=SIM ./run_workload.sh readfiles"
|
||||||
|
3
demos/benchmarks/filebench/.gitignore
vendored
Normal file
3
demos/benchmarks/filebench/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
filebench
|
||||||
|
filebench*.tar.gz
|
||||||
|
occlum_instance
|
25
demos/benchmarks/filebench/README.md
Normal file
25
demos/benchmarks/filebench/README.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
## Run Filebench on Occlum
|
||||||
|
|
||||||
|
[Filebench](https://github.com/Filebench/Filebench) is a benchmark tool aiming to test the file system and the storage system under certain workloads. This demo demonstrates how can Filebench run on Occlum.
|
||||||
|
|
||||||
|
### Step 1: Preinstall dependencies
|
||||||
|
Related dependencies: bison flex
|
||||||
|
```
|
||||||
|
cd demos/benchmarks/filebench && ./preinstall_deps.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Build Filebench from source
|
||||||
|
```
|
||||||
|
cd demos/benchmarks/filebench && ./dl_and_build_Filebench.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The script will download the source code, make some adaptation then compile Filebench into a binary.
|
||||||
|
|
||||||
|
### Step 3: Run Filebench workloads
|
||||||
|
```
|
||||||
|
cd demos/benchmarks/filebench && ./run_workload.sh <workload_name>
|
||||||
|
```
|
||||||
|
|
||||||
|
The script will run user-specific workloads under `filebench/workloads`. The corresponding results will be outputed.
|
||||||
|
|
||||||
|
Refer to [Filebench/wiki/Workload-model-language](https://github.com/Filebench/Filebench/wiki/Workload-model-language) and see more information about workloads.
|
63
demos/benchmarks/filebench/apply-filebench-to-occlum.patch
Normal file
63
demos/benchmarks/filebench/apply-filebench-to-occlum.patch
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
diff --color -ruN filebench/config.h modify/config.h
|
||||||
|
--- filebench/config.h 2022-05-10 11:24:44.393676003 +0800
|
||||||
|
+++ modify/config.h 2022-05-10 11:15:23.769794727 +0800
|
||||||
|
@@ -295,6 +295,7 @@
|
||||||
|
|
||||||
|
/* Define if you have SYSV sems */
|
||||||
|
#define HAVE_SYSV_SEM 1
|
||||||
|
+#undef HAVE_SYSV_SEM
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
diff --color -ruN filebench/ipc.c modify/ipc.c
|
||||||
|
--- filebench/ipc.c 2022-05-10 11:24:44.393676003 +0800
|
||||||
|
+++ modify/ipc.c 2022-05-10 11:16:06.768145518 +0800
|
||||||
|
@@ -400,21 +400,22 @@
|
||||||
|
int
|
||||||
|
ipc_attach(void *shmaddr, char *shmpath)
|
||||||
|
{
|
||||||
|
- int shmfd;
|
||||||
|
+ // int shmfd;
|
||||||
|
|
||||||
|
- if ((shmfd = open(shmpath, O_RDWR)) < 0) {
|
||||||
|
- filebench_log(LOG_FATAL, "Could not open shared memory "
|
||||||
|
- "file %s: %s", shmpath, strerror(errno));
|
||||||
|
- return (-1);
|
||||||
|
- }
|
||||||
|
+ // if ((shmfd = open(shmpath, O_RDWR)) < 0) {
|
||||||
|
+ // filebench_log(LOG_FATAL, "Could not open shared memory "
|
||||||
|
+ // "file %s: %s", shmpath, strerror(errno));
|
||||||
|
+ // return (-1);
|
||||||
|
+ // }
|
||||||
|
|
||||||
|
- if ((filebench_shm = (filebench_shm_t *)mmap(shmaddr,
|
||||||
|
- sizeof (filebench_shm_t), PROT_READ | PROT_WRITE,
|
||||||
|
- MAP_SHARED | MAP_FIXED, shmfd, 0)) == MAP_FAILED) {
|
||||||
|
- filebench_log(LOG_FATAL, "Could not mmap the shared "
|
||||||
|
- "memory file: %s", strerror(errno));
|
||||||
|
- return (-1);
|
||||||
|
- }
|
||||||
|
+ // if ((filebench_shm = (filebench_shm_t *)mmap(shmaddr,
|
||||||
|
+ // sizeof (filebench_shm_t), PROT_READ | PROT_WRITE,
|
||||||
|
+ // MAP_SHARED | MAP_FIXED, shmfd, 0)) == MAP_FAILED) {
|
||||||
|
+ // filebench_log(LOG_FATAL, "Could not mmap the shared "
|
||||||
|
+ // "memory file: %s", strerror(errno));
|
||||||
|
+ // return (-1);
|
||||||
|
+ // }
|
||||||
|
+ filebench_shm = (filebench_shm_t *)shmaddr;
|
||||||
|
|
||||||
|
if (filebench_shm != shmaddr) {
|
||||||
|
filebench_log(LOG_FATAL, "Could not mmap the shared "
|
||||||
|
diff --color -ruN filebench/procflow.c modify/procflow.c
|
||||||
|
--- filebench/procflow.c 2022-05-10 11:24:44.393676003 +0800
|
||||||
|
+++ modify/procflow.c 2022-05-10 11:16:35.772217279 +0800
|
||||||
|
@@ -90,7 +90,8 @@
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
- if ((pid = fork()) < 0) {
|
||||||
|
+ // if ((pid = fork()) < 0) {
|
||||||
|
+ if ((pid = vfork()) < 0) {
|
||||||
|
filebench_log(LOG_ERROR,
|
||||||
|
"procflow_createproc fork failed: %s",
|
||||||
|
strerror(errno));
|
32
demos/benchmarks/filebench/dl_and_build_filebench.sh
Executable file
32
demos/benchmarks/filebench/dl_and_build_filebench.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
echo -e "${BLUE}Start building filebench from tarball.${NC}"
|
||||||
|
|
||||||
|
# Download release tarball
|
||||||
|
VERSION="1.5-alpha3"
|
||||||
|
TARBALL="filebench-${VERSION}.tar.gz"
|
||||||
|
rm -f ${TARBALL}
|
||||||
|
wget https://github.com/filebench/filebench/releases/download/${VERSION}/${TARBALL}
|
||||||
|
rm -rf filebench && mkdir filebench
|
||||||
|
tar -zxvf filebench-${VERSION}.tar.gz -C filebench --strip-components 1
|
||||||
|
pushd filebench
|
||||||
|
|
||||||
|
./configure
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Make modification to
|
||||||
|
# 1. Replace fork to vfork
|
||||||
|
# 2. Prepare shared memory region for child processes
|
||||||
|
# 3. Disable SYSV semaphores
|
||||||
|
patch -s -p0 < apply-filebench-to-occlum.patch
|
||||||
|
|
||||||
|
pushd filebench
|
||||||
|
# Build and install filebench tool
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
echo -e "${BLUE}Finish building filebench from tarball.${NC}"
|
||||||
|
|
||||||
|
popd
|
18
demos/benchmarks/filebench/filebench.yaml
Normal file
18
demos/benchmarks/filebench/filebench.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
includes:
|
||||||
|
- base.yaml
|
||||||
|
# filebench
|
||||||
|
targets:
|
||||||
|
# copy filebench, bash and busybox
|
||||||
|
- target: /bin
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- /usr/local/bin/filebench
|
||||||
|
# copy workload files
|
||||||
|
- target: /
|
||||||
|
copy:
|
||||||
|
- dirs:
|
||||||
|
- ../workloads
|
||||||
|
- target: /opt/occlum/glibc/lib
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- /lib/x86_64-linux-gnu/libgcc_s.so.1
|
18
demos/benchmarks/filebench/preinstall_deps.sh
Executable file
18
demos/benchmarks/filebench/preinstall_deps.sh
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
echo -e "${BLUE}Start installing dependencies.${NC}"
|
||||||
|
|
||||||
|
DEPS="bison flex"
|
||||||
|
|
||||||
|
OS=`awk -F= '/^NAME/{print $2}' /etc/os-release`
|
||||||
|
if [ "$OS" == "\"Ubuntu\"" ]; then
|
||||||
|
apt-get update -y && apt-get install -y ${DEPS}
|
||||||
|
else
|
||||||
|
echo "Unsupported OS: $OS"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${BLUE}Finish installing dependencies.${NC}"
|
38
demos/benchmarks/filebench/run_workload.sh
Executable file
38
demos/benchmarks/filebench/run_workload.sh
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
WORKLOAD_LIST=("readfiles" "videoserver" "fileserver" "varmail" "oltp")
|
||||||
|
# More about workload model language at
|
||||||
|
# https://github.com/filebench/filebench/wiki/Workload-model-language
|
||||||
|
|
||||||
|
WORKLOAD_FILE=$1
|
||||||
|
if [[ ! " ${WORKLOAD_LIST[@]} " =~ " ${WORKLOAD_FILE} " ]]; then
|
||||||
|
echo "Please select a workload from: readfiles | videoserver | fileserver | varmail | oltp"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1. Init Occlum Workspace
|
||||||
|
rm -rf occlum_instance && occlum new occlum_instance
|
||||||
|
cd occlum_instance
|
||||||
|
|
||||||
|
# Enlarge "kernel_space_heap_size" when "pre-allocating files failed" occurs
|
||||||
|
# Enlarge "user_space_size" when "procflow exec proc failed" occurs
|
||||||
|
TCS_NUM=$(($(nproc) * 2))
|
||||||
|
new_json="$(jq --argjson THREAD_NUM ${TCS_NUM} '.resource_limits.user_space_size="2000MB" |
|
||||||
|
.resource_limits.kernel_space_heap_max_size="1000MB" |
|
||||||
|
.resource_limits.max_num_of_threads = $THREAD_NUM |
|
||||||
|
.mount += [{"target": "/ext2", "type": "ext2", "options": {"disk_size": "10GB"}}]' Occlum.json)" && \
|
||||||
|
echo "${new_json}" > Occlum.json
|
||||||
|
|
||||||
|
# 2. Copy files into Occlum Workspace and build
|
||||||
|
rm -rf image
|
||||||
|
copy_bom -f ../filebench.yaml --root image --include-dir /opt/occlum/etc/template
|
||||||
|
|
||||||
|
occlum build
|
||||||
|
|
||||||
|
# 3. Run benchmark under different workloads
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
echo -e "${BLUE}Run filebench on Occlum.${NC}"
|
||||||
|
|
||||||
|
occlum run /bin/filebench -f /workloads/${WORKLOAD_FILE}.f
|
56
demos/benchmarks/filebench/workloads/fileserver.f
Normal file
56
demos/benchmarks/filebench/workloads/fileserver.f
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
set $dir=/ext2/fbtest_ext2
|
||||||
|
set $nfiles=10000
|
||||||
|
set $meandirwidth=20
|
||||||
|
set $filesize=128k
|
||||||
|
set $nthreads=16
|
||||||
|
set $iosize=1m
|
||||||
|
set $meanappendsize=16k
|
||||||
|
|
||||||
|
define fileset name=bigfileset,path=$dir,size=$filesize,entries=$nfiles,dirwidth=$meandirwidth,prealloc=80
|
||||||
|
|
||||||
|
define process name=filereader,instances=1
|
||||||
|
{
|
||||||
|
thread name=filereaderthread,memsize=10m,instances=$nthreads
|
||||||
|
{
|
||||||
|
flowop createfile name=createfile1,filesetname=bigfileset,fd=1
|
||||||
|
flowop writewholefile name=wrtfile1,srcfd=1,fd=1,iosize=$iosize
|
||||||
|
flowop closefile name=closefile1,fd=1
|
||||||
|
flowop openfile name=openfile1,filesetname=bigfileset,fd=1
|
||||||
|
flowop appendfilerand name=appendfilerand1,iosize=$meanappendsize,fd=1
|
||||||
|
flowop closefile name=closefile2,fd=1
|
||||||
|
flowop openfile name=openfile2,filesetname=bigfileset,fd=1
|
||||||
|
flowop readwholefile name=readfile1,fd=1,iosize=$iosize
|
||||||
|
flowop closefile name=closefile3,fd=1
|
||||||
|
flowop deletefile name=deletefile1,filesetname=bigfileset
|
||||||
|
flowop statfile name=statfile1,filesetname=bigfileset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "File-server Version 3.0 personality successfully loaded"
|
||||||
|
|
||||||
|
run 60
|
82
demos/benchmarks/filebench/workloads/oltp.f
Normal file
82
demos/benchmarks/filebench/workloads/oltp.f
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#
|
||||||
|
# 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 2009 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
# Use is subject to license terms.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Workload "oltp" from filebench cannot run directly on Occlum
|
||||||
|
# since aio write/wait and semaphore-related flowops are not supported.
|
||||||
|
# We replace some flowops to achieve similar performance quota.
|
||||||
|
|
||||||
|
set $dir=/root/fbtest
|
||||||
|
set $eventrate=0
|
||||||
|
set $iosize=2k
|
||||||
|
set $nshadows=200
|
||||||
|
set $ndbwriters=10
|
||||||
|
set $usermode=200000
|
||||||
|
set $filesize=10m
|
||||||
|
set $memperthread=1m
|
||||||
|
set $workingset=0
|
||||||
|
set $logfilesize=10m
|
||||||
|
set $nfiles=10
|
||||||
|
set $nlogfiles=1
|
||||||
|
set $directio=0
|
||||||
|
eventgen rate = $eventrate
|
||||||
|
|
||||||
|
# Define a datafile and logfile
|
||||||
|
define fileset name=datafiles,path=$dir,size=$filesize,entries=$nfiles,dirwidth=1024,prealloc=100,reuse
|
||||||
|
define fileset name=logfile,path=$dir,size=$logfilesize,entries=$nlogfiles,dirwidth=1024,prealloc=100,reuse
|
||||||
|
|
||||||
|
define process name=lgwr,instances=1
|
||||||
|
{
|
||||||
|
thread name=lgwr,memsize=$memperthread
|
||||||
|
{
|
||||||
|
flowop write name=lg-write,filesetname=logfile,
|
||||||
|
iosize=256k,random,directio=$directio,dsync
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define database writer processes
|
||||||
|
define process name=dbwr,instances=$ndbwriters
|
||||||
|
{
|
||||||
|
thread name=dbwr,memsize=$memperthread
|
||||||
|
{
|
||||||
|
flowop write name=dbwrite-a,filesetname=datafiles,
|
||||||
|
iosize=$iosize,workingset=$workingset,random,iters=100,opennext,directio=$directio,dsync
|
||||||
|
flowop hog name=dbwr-hog,value=10000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
define process name=shadow,instances=$nshadows
|
||||||
|
{
|
||||||
|
thread name=shadow,memsize=$memperthread
|
||||||
|
{
|
||||||
|
flowop read name=shadowread,filesetname=datafiles,
|
||||||
|
iosize=$iosize,workingset=$workingset,random,opennext,directio=$directio
|
||||||
|
flowop hog name=shadowhog,value=$usermode
|
||||||
|
flowop eventlimit name=random-rate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "OLTP Version 3.0 personality successfully loaded"
|
||||||
|
|
||||||
|
run 60
|
11
demos/benchmarks/filebench/workloads/readfiles.f
Normal file
11
demos/benchmarks/filebench/workloads/readfiles.f
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# A simple readfiles workload
|
||||||
|
|
||||||
|
define fileset name="testF",entries=16,filesize=4k,path="/ext2/fbtest_ext2",prealloc
|
||||||
|
define process name="readerP",instances=1 {
|
||||||
|
thread name="readerT",instances=1 {
|
||||||
|
flowop openfile name="openOP",filesetname="testF"
|
||||||
|
flowop readwholefile name="readOP",filesetname="testF"
|
||||||
|
flowop closefile name="closeOP"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
run 30
|
60
demos/benchmarks/filebench/workloads/varmail.f
Normal file
60
demos/benchmarks/filebench/workloads/varmail.f
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# flowop openfile name=openfile2,filesetname=bigfileset,fd=1
|
||||||
|
#
|
||||||
|
|
||||||
|
set $dir=/root/fbtest
|
||||||
|
set $nfiles=8000
|
||||||
|
set $meandirwidth=1000
|
||||||
|
set $filesize=16k
|
||||||
|
set $nthreads=16
|
||||||
|
set $iosize=1m
|
||||||
|
set $meanappendsize=16k
|
||||||
|
|
||||||
|
define fileset name=bigfileset,path=$dir,size=$filesize,entries=$nfiles,dirwidth=$meandirwidth,prealloc=80
|
||||||
|
|
||||||
|
define process name=filereader,instances=1
|
||||||
|
{
|
||||||
|
thread name=filereaderthread,memsize=10m,instances=$nthreads
|
||||||
|
{
|
||||||
|
flowop deletefile name=deletefile1,filesetname=bigfileset
|
||||||
|
flowop createfile name=createfile2,filesetname=bigfileset,fd=1
|
||||||
|
flowop appendfilerand name=appendfilerand2,iosize=$meanappendsize,fd=1
|
||||||
|
flowop fsync name=fsyncfile2,fd=1
|
||||||
|
flowop closefile name=closefile2,fd=1
|
||||||
|
flowop openfile name=openfile3,filesetname=bigfileset,fd=1
|
||||||
|
flowop readwholefile name=readfile3,fd=1,iosize=$iosize
|
||||||
|
flowop appendfilerand name=appendfilerand3,iosize=$meanappendsize,fd=1
|
||||||
|
flowop fsync name=fsyncfile3,fd=1
|
||||||
|
flowop closefile name=closefile3,fd=1
|
||||||
|
flowop openfile name=openfile4,filesetname=bigfileset,fd=1
|
||||||
|
flowop readwholefile name=readfile4,fd=1,iosize=$iosize
|
||||||
|
flowop closefile name=closefile4,fd=1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Varmail Version 3.0 personality successfully loaded"
|
||||||
|
|
||||||
|
run 60
|
76
demos/benchmarks/filebench/workloads/videoserver.f
Normal file
76
demos/benchmarks/filebench/workloads/videoserver.f
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#
|
||||||
|
# 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 2009 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
# Use is subject to license terms.
|
||||||
|
#
|
||||||
|
# This workloads emulates a video server. It has two filesets, one of videos
|
||||||
|
# being actively served, and one of videos availabe but currently inactive
|
||||||
|
# (passive). However, one thread, vidwriter, is writing new videos to replace
|
||||||
|
# no longer viewed videos in the passive set. Meanwhile $nthreads threads are
|
||||||
|
# serving up videos from the activevids fileset. If the desired rate is R mb/s,
|
||||||
|
# and $nthreads is set to T, then set the $srvbwrate to R * T to get the
|
||||||
|
# desired rate per video stream. The video replacement rate of one video
|
||||||
|
# file per replacement interval, is set by $repintval which defaults to
|
||||||
|
# 1 second. Thus the write bandwidth will be set as $filesize/$repintval.
|
||||||
|
#
|
||||||
|
|
||||||
|
set $dir=/root/fbtest
|
||||||
|
set $eventrate=96
|
||||||
|
set $filesize=1g
|
||||||
|
set $nthreads=48
|
||||||
|
set $numactivevids=5
|
||||||
|
set $numpassivevids=30
|
||||||
|
set $reuseit=false
|
||||||
|
set $readiosize=256k
|
||||||
|
set $writeiosize=1m
|
||||||
|
set $passvidsname=passivevids
|
||||||
|
set $actvidsname=activevids
|
||||||
|
set $repintval=10
|
||||||
|
eventgen rate=$eventrate
|
||||||
|
|
||||||
|
define fileset name=$actvidsname,path=$dir,size=$filesize,entries=$numactivevids,dirwidth=4,prealloc,paralloc,reuse=$reuseit
|
||||||
|
define fileset name=$passvidsname,path=$dir,size=$filesize,entries=$numpassivevids,dirwidth=20,prealloc=50,paralloc,reuse=$reuseit
|
||||||
|
|
||||||
|
define process name=vidwriter,instances=1
|
||||||
|
{
|
||||||
|
thread name=vidwriter,memsize=10m,instances=1
|
||||||
|
{
|
||||||
|
flowop deletefile name=vidremover,filesetname=$passvidsname
|
||||||
|
flowop createfile name=wrtopen,filesetname=$passvidsname,fd=1
|
||||||
|
flowop writewholefile name=newvid,iosize=$writeiosize,fd=1,srcfd=1
|
||||||
|
flowop closefile name=wrtclose, fd=1
|
||||||
|
flowop delay name=replaceinterval, value=$repintval
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
define process name=vidreaders,instances=1
|
||||||
|
{
|
||||||
|
thread name=vidreaders,memsize=10m,instances=$nthreads
|
||||||
|
{
|
||||||
|
flowop read name=vidreader,filesetname=$actvidsname,iosize=$readiosize
|
||||||
|
flowop bwlimit name=serverlimit, target=vidreader
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Video Server Version 3.0 personality successfully loaded"
|
||||||
|
|
||||||
|
run 60
|
Loading…
Reference in New Issue
Block a user