%!PS-Adobe-3.0
%%Pages: 2
%%EndComments
%%BeginProlog
%% BEGIN SPECSFS97 1.00
%% results000= 4900 4948 0.5 1483917 299 3 T 49689640 35 4 2 2 3.0
%% results001= 9835 9952 0.5 2985247 299 3 T 99728720 35 4 2 2 3.0
%% results002= 14770 14990 0.6 4482924 299 3 T 149771440 35 4 2 2 3.0
%% results003= 19670 19933 0.7 5976540 299 3 T 199457440 35 4 2 2 3.0
%% results004= 24605 25130 0.8 7516822 299 3 T 249496520 35 4 2 2 3.0
%% results005= 29540 29941 1.0 8982197 300 3 T 299539240 35 4 2 2 3.0
%% results006= 34475 35238 1.2 10554375 299 3 T 349578320 35 4 2 2 3.0
%% results007= 39375 40114 1.5 12018088 299 3 T 399264320 35 4 2 2 3.0
%% results008= 44310 45334 2.0 13582040 299 3 T 449307040 35 4 2 2 3.0
%% results009= 49245 50139 3.2 15000140 299 3 T 499346120 35 4 2 2 3.0
%% FILENAME = sfs97r1-20030623-00155.sub
%% biod_max_read_setting = 2
%% biod_max_write_setting = 2
%% bridge_type = N/A
%% buffer_cache_size = default
%% company_name = Hitachi Data Systems
%% cpu_type = 2.2-GHz Intel Pentium 4
%% date_hardware_available = April 2003
%% date_software_available = May 2003
%% date_tested = March 2003
%% dc_disk_contents000 = F1/F1/F1/F2/F2/F2
%% dc_disk_type000 = DKR2D-J72FC
%% dc_number_disks000 = 32/32/32/32/32/32
%% dc_number_of_type000 = 4
%% dc_special_config_notes000 = see notes
%% dc_type000 = X2050A FC-AL adapter card (256 KB RAM standard)
%% file_system_config = 48 RAID-5 groups of 4 disks each
%% file_system_creation_options = default
%% fileset_size = 476.2 GB
%% filesystem_name = WAFL
%% hub_type = N/A
%% lg_cc_options000 = N/A
%% lg_compiler000 = cc, used SFS97_R1 Precompiled Binaries
%% lg_cpu_number_desc000 = 2 x 1.0-GHz Pentium III
%% lg_identifier000 = LG1
%% lg_memsize000 = 1024 MB
%% lg_model_name000 = Supermicro SuperServer 6010H
%% lg_os_and_version000 = SunOS 5.8 Generic_108529-11 i86pc i386
%% lg_processes = 4
%% lg_type_net_controller000 = Intel Pro/1000 T Server Adapter
%% licensee_number = 276
%% location_of_licensee = Santa Clara, CA
%% maxops = 50139
%% memory_size = 45056 MB
%% network_controller_description = X1025D PCI adapter card
%% network_controller_type = Gigabit Ethernet
%% network_transport = TCP
%% nfs_version = 3
%% notes000 = NetApp's embedded operating system processes NFS requests from the network layer without any NFS daemons, and uses non-volatile memory to improve performance.
%% notes001 = The tested system was a failover cluster comprised of two nodes joined by a cluster interconnect.
%% notes002 = The cluster option was licensed and enabled.
%% notes003 = The memory size includes 6 GB in each node of the GF960c and 32 GB in the HDS 9980V.
%% notes004 = Each disk controller had two FC connections and both were active.
%% notes005 = Each node was the owner of one filesystem and each had the ability to take over the partner filesystem.
%% notes006 = The F1 filesystem was striped across all loops of the first node. The F2 filesystem was striped across all loops of the second node.
%% notes007 = Each filesystem was composed of 24 RAID-5 groups; each RAID-5 group was composed of 4 disks.
%% notes008 = In the event of a power outage, the UPS for the HDS 9980V has enough power to flush the entire cache to disk.
%% notes009 = Server tunings:
%% notes010 = date 0801 -- set clock to 8:01am for reproducibility
%% notes011 = options minra 1 -- to minimize file read-ahead
%% notes012 = options no_atime_on 1 -- to disable access time update
%% notes013 = NetApp and WAFL are registered trademarks and "Data ONTAP" and "Network Appliance" are trademarks of Network Appliance, Inc. in the United States and other countries.
%% notes014 = All other trademarks belong to their respective owners and should be treated as such.
%% notes015 = The benchmark run was done on a Hitachi Data Systems GF960c/HDS 9980V. The Network Appliance, Inc. GF960c/HDS 9980V (sfs97r1-20030401-00139) and Hitachi Data Systems GF960c/HDS 9980V are electronically equivalent. The actual SFS tests were not rerun.
%% number_nfs_daemons = N/A
%% number_of_clients = 35
%% number_of_cpus = 4 cores, 4 chips, 1 core/chip (2 per node)
%% number_of_file_systems = 2
%% number_of_network_controllers = 2 (1 per node)
%% number_of_networks = 1 (N1)
%% nvram_description = minimum 7-day battery-backed shelf-life
%% nvram_size = 512 MB (256 MB per node)
%% nvram_type = DIMMs on PCI cards
%% operating_system_and_version = Data ONTAP 6.4.1
%% other_cache_size = N/A
%% other_network_hardware = N/A
%% other_software = Cluster Option
%% other_special_hardware = X1925A cluster adapter card (see notes)
%% output_types = raw,asc
%% overall_response = 1.03687349169309
%% primary_cpu_cache_size = 12 K uops I + 8 KB D
%% product_name = NetApp GF960c Failover Cluster / HDS 9980V (32GB cache)
%% rcs_version = $Id: formsfs,v 1.1 2001/04/17 22:39:11 sgold Exp $
%% secondary_cpu_cache_size = 512 KB on-die
%% sfsversion = 3.0
%% switch_type_and_config_options = Extreme BlackDiamond 6816 (N1)
%% tb_lg_identifier000 = LG1
%% tb_lg_number000 = 1/2/../35
%% tb_network000 = N1
%% tb_notes000 = N/A
%% tb_target_fs000 = F1,F2
%% total_num_disk_controllers = 6
%% total_number_of_disks = 192
%% uninterruptible_power_supply = APC Silcon 80KW
%% version = 0.1
%% END SPECsfs97 1.00
/x { initgraphics clear erasepage (test.ps) run } def
/Italic /Times-Italic findfont def
/Bold /Times-Bold findfont def
/Roman /Times-Roman findfont def
/Fixed /Courier findfont def
/Symbol /Symbol findfont def
/mean_title_offset 0 def
/merit_throughput (50139 Ops/Sec (Overall Response Time = 1.04 msec)) def
/invalid_run false def
/Page_offset 1 def
/Volume () def
/Issue () def
/Page () def
/company_name (Hitachi Data Systems) def
/product_name (NetApp GF960c Failover Cluster / HDS 9980V (32GB cache)) def
/license_num (276) def
/tester_name () def
/test_date (March 2003) def
/hw_avail (April 2003) def
/sw_avail (May 2003) def
/metric_name (SPECsfs97_R1.v3) def
/cpumemory [
[ (Model Name:) (NetApp GF960c Failover Cluster / HDS 9980V (32GB cache)) ]
[ (Processor:) (2.2-GHz Intel Pentium 4) ]
[ (# of Processors:) (4 cores, 4 chips, 1 core/chip (2 per node)) ]
[ (Primary Cache:) (12 K uops I + 8 KB D) ]
[ (Secondary Cache:) (512 KB on-die) ]
[ (Other Cache:) (N/A) ]
[ (UPS:) (APC Silcon 80KW) ]
[ (Other Hardware:) (X1925A cluster adapter card (see notes)) ]
[ (Memory Size:) (45056 MB) ]
[ (NVRAM Size:) (512 MB (256 MB per node)) ]
[ (NVRAM Type:) (DIMMs on PCI cards) ]
[ (NVRAM Description:) (minimum 7-day battery-backed shelf-life) ]
] def
/serversoftware [
[ (OS Name and Version:) (Data ONTAP 6.4.1) ]
[ (Other Software:) (Cluster Option) ]
[ (File System:) (WAFL) ]
[ (NFS version:) (3) ]
] def
/servertuning [
[ (Buffer Cache Size:) (default) ]
[ (# NFS Processes:) (N/A) ]
[ (Fileset Size:) (476.2 GB) ]
] def
/notes [
(Other Notes)
( -NetApp's embedded operating system processes NFS requests from the network)
( layer without any NFS daemons, and uses non-volatile memory to improve)
( performance.)
( -The tested system was a failover cluster comprised of two nodes joined by a)
( cluster interconnect.)
( -The cluster option was licensed and enabled.)
( -The memory size includes 6 GB in each node of the GF960c and 32 GB in the HDS)
( 9980V.)
( -Each disk controller had two FC connections and both were active.)
( -Each node was the owner of one filesystem and each had the ability to take)
( over the partner filesystem.)
( -The F1 filesystem was striped across all loops of the first node. The F2)
( filesystem was striped across all loops of the second node.)
( -Each filesystem was composed of 24 RAID-5 groups; each RAID-5 group was)
( composed of 4 disks.)
( -In the event of a power outage, the UPS for the HDS 9980V has enough power to)
( flush the entire cache to disk.)
( -Server tunings:)
( -date 0801 -- set clock to 8:01am for reproducibility)
( -options minra 1 -- to minimize file read-ahead)
( -options no_atime_on 1 -- to disable access time update)
( -NetApp and WAFL are registered trademarks and "Data ONTAP" and "Network)
( Appliance" are trademarks of Network Appliance, Inc. in the United States and)
( other countries.)
( -All other trademarks belong to their respective owners and should be treated)
( as such.)
( -The benchmark run was done on a Hitachi Data Systems GF960c/HDS 9980V. The)
( Network Appliance, Inc. GF960c/HDS 9980V (sfs97r1-20030401-00139) and Hitachi)
( Data Systems GF960c/HDS 9980V are electronically equivalent. The actual SFS)
( tests were not rerun.)
] def
/testbed [
[ (LG #) (LG Type) (Network) (Target File Systems) (Notes) ]
[ (1/2/../35) (LG1) (N1) (F1,F2) (N/A) ]
] def
/network [
[ (Network Type:) (Gigabit Ethernet) ]
[ (Network Controller Desc.:) (X1025D PCI adapter card) ]
[ (Number Networks:) (1 (N1)) ]
[ (Number Network Controllers:) (2 (1 per node)) ]
[ (Protocol Type:) (TCP) ]
[ (Switch Type:) (Extreme BlackDiamond 6816 (N1)) ]
[ (Bridge Type:) (N/A) ]
[ (Hub Type:) (N/A) ]
[ (Other Network Hardware:) (N/A) ]
] def
/num_clients 35 def
/loadgentxt [
[ (Number of Load Generators:) (35) ]
[ (Number of Processes per LG:) (4) ]
[ (Biod Max Read Setting:) (2) ]
[ (Biod Max Write Setting:) (2) ]
[ () () ]
[ (LG Type:) (LG1) ]
[ (LG Model:) (Supermicro SuperServer 6010H) ]
[ (Number and Type Processors:) (2 x 1.0-GHz Pentium III) ]
[ (Memory Size:) (1024 MB) ]
[ (Operating System:) (SunOS 5.8 Generic_108529-11 i86pc i386) ]
[ (Compiler:) (cc, used SFS97_R1 Precompiled Binaries) ]
[ (Compiler Options:) (N/A) ]
[ (Network Type:) (Intel Pro/1000 T Server Adapter) ]
] def
/disksub [
[ (Number Disk Controllers:) (6) ]
[ (Number of Disks:) (192) ]
[ (Number of Filesystems:) (2) ]
[ (File System Creation Ops:) (default) ]
[ (File System Config:) (48 RAID-5 groups of 4 disks each) ]
[ () () ]
[ (Disk Controller:) (X2050A FC-AL adapter card (256 KB RAM standard)) ]
[ (# of Controller Type:) (4) ]
[ (Number of Disks:) (32/32/32/32/32/32) ]
[ (Disk Type:) (DKR2D-J72FC) ]
[ (File Systems on Disks:) (F1/F1/F1/F2/F2/F2) ]
[ (Special Config Notes:) (see notes) ]
] def
/series_data [
[ (4948) (0.5) ]
[ (9952) (0.5) ]
[ (14990) (0.6) ]
[ (19933) (0.7) ]
[ (25130) (0.8) ]
[ (29941) (1.0) ]
[ (35238) (1.2) ]
[ (40114) (1.5) ]
[ (45334) (2.0) ]
[ (50139) (3.2) ]
] def
/min_x 9952.0 def
/min_y 0.5 def
/ort_data [
[ (50139) ( 1.04) ]
] def
/ort 1.04 def
/ortt ( 1.04) def % JK
/maxops 50139 def
/starttime usertime def % for profiling
/=string where {
pop
} {
/=string 128 string def
} ifelse
% change this to true if you have trouble printing this file. This will
% enable the error handler to tell you what the problem is
false {
errordict begin
/handleerror {
systemdict begin
initgraphics
/Courier findfont 12 scalefont setfont
72 720 moveto
(Postscript problem: ) show
/errorname get
=string cvs show
72 700 moveto
(Command: ) show
/command get
=string cvs show
systemdict /showpage get exec
end
} def
end
} if
/SPECdict 80 dict def
SPECdict begin
/a4_size [ 595 842 ] def
/letter_size [ 612 792 ] def
/inch { 72 mul } def
/cm { 28.35 mul } def
/border 0.5 inch def
/page_size letter_size dup dup 0 get border 2 mul sub 0 exch put
dup dup 1 get border 2 mul sub 1 exch put
def
/Colors where {
/color_enabled deviceinfo /Colors get 1 gt def
pop
} {
/color_enabled false def
} ifelse
/xtilt {
[ 1 0
4 -1 roll
sin
1 0 0 ]
concat
} bind def
/charheight {
gsave
newpath
0 0 moveto
false charpath
flattenpath pathbbox
exch pop
3 -1 roll pop
grestore
} bind def
/smart_cvr {
dup (N/A) eq {
pop
0
} {
dup (--) eq {
pop
0
} {
dup () eq {
pop
0
} {
cvr
} ifelse
} ifelse
} ifelse
} def
/smart_cvi {
dup (N/A) eq {
pop
0
} {
dup (--) eq {
pop
0
} {
dup () eq {
pop
0
} {
cvi
} ifelse
} ifelse
} ifelse
} def
/stringmetrics {
/uly 0.0 def
/lly 0.0 def
{
( ) dup 0 4 -1 roll put
charheight
dup uly gt {
/uly exch def
} {
pop
} ifelse
dup lly lt {
/lly exch def
} {
pop
} ifelse
} bind forall
lly
uly
} bind def
/stringheight {
stringmetrics
exch sub
} bind def
/descender {
stringmetrics
pop
} bind def
% Draw a box.
% x y width height ->
/boxit {
gsave
newpath
4 2 roll
translate
0 0 moveto
dup 0 exch lineto
2 copy lineto
pop 0 lineto
closepath
stroke
grestore
} bind def
% Draw a filled box.
% x y width height ->
/shadeboxit {
gsave
newpath
4 2 roll
translate
0 0 moveto
dup 0 exch lineto
2 copy lineto
pop 0 lineto
closepath
gsave
0.95 setgray
fill
grestore
stroke
grestore
} bind def
% Draw a shaded rectangular area.
% x y width height ->
/shadeit {
gsave
4 2 roll
translate
0 0 moveto
dup 0 exch lineto
2 copy lineto
pop 0 lineto
closepath
0.9 setgray
fill
grestore
} bind def
% This will set the origin and scale so that the figure will fill the area
% width height desired_width desired_height ->
/maxpect { % w h dw dh
1 index 4 index div % w h dw dh dw/w
1 index 4 index div % w h dw dh dw/w dh/h
2 copy lt {
pop dup % w h dw dh dw/w dw/w
5 -1 roll mul % w dw dh dw/w dw/w*h
3 -1 roll exch sub % w dw dw/w dh-dw/w*h
2 div 0 exch % w dw w/dw 0 (dh-w/dw*h)/2
} {
exch pop dup % w h dw dh h/dh h/dh
6 -1 roll % h dw dh h/dh h/dh w
mul 4 -1 roll exch % h dh h/dh dw h/dh*w
sub 2 div 0 % h dh h/dh (dw-h/dh*w)/2 0
} ifelse
translate
dup
scale
pop pop
} bind def
% This will return a scale that will make the current font fit the area
% strings max_size desired_width desired_height ->
/maxtext { % w h dw dh
10 dict begin
/y_size exch def
/x_size exch def
gsave
/max_size exch def
/strings exch def
/ref_width 0 def
/ref_height 0 def
/count 0 def
strings {
/count count 1 add def
dup stringwidth pop dup ref_width gt { /ref_width exch def }
{ pop } ifelse
stringmetrics exch pop dup ref_height gt { /ref_height exch def }
{ pop } ifelse
} forall
ref_width 0 gt ref_height 0 gt and {
x_size ref_width div
y_size ref_height count mul div
2 copy gt { exch } if pop
max_size 2 copy gt { exch } if pop
} {
99999
} ifelse
grestore
end
} def
% Function: Concatenates two strings together.
% string1 string2 append string
/append {
2 copy length exch length add % find the length of the new.
string dup % string1 string2 string string
4 2 roll % string string string1 string2
2 index 0 3 index % string string string1 string2 string 0 string1
putinterval % stuff the first string in.
% string string string1 string2
exch length exch putinterval
} bind def
/cropmark {
gsave
color_enabled {
1.0 0.0 0.0 setrgbcolor
} if
2 copy 20 sub moveto
2 copy 20 add lineto stroke
exch
2 copy 20 sub exch moveto
20 add exch lineto stroke
grestore
} bind def
/rshow {
dup stringwidth pop
neg 0 rmoveto show
} bind def
/center_show {
dup stringwidth pop 2 div
neg 0 rmoveto show
} bind def
/sigshow {
dup 0 gt {
(0) stringwidth pop mul
2 cvr dup cvi ne {
(.) stringwidth pop add
} if
neg 0 rmoveto
} {
pop
} ifelse
dup stringwidth pop
neg 0 rmoveto show
} bind def
% value -> tick tickval
/tickit {
10 dict begin
/largest exch def
/multiplier 1 def
/found false def
{
[ 1 2 3 5 ]
{
multiplier mul /tick_val exch def
[ 5 6 7 8 9 10 ]
{
/ticks exch def
ticks tick_val mul dup largest ge {
/largest exch def
/found true def exit
} {
pop
} ifelse
} forall
found { exit } if
} forall
found { exit } if
/multiplier multiplier 10 mul def
} loop
ticks
tick_val
end
} bind def
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
/pageSave save def
%%EndPageSetup
/SPECbanner {
20 dict begin
/y_size exch def
/x_size exch def
/y_loc exch def
/x_loc exch def
gsave
x_loc y_loc translate
% draw a box around the area
0 0 x_size y_size boxit
% draw the title
gsave
y_size y_size 0.2 mul translate
Bold 72 scalefont setfont
(SPECsfs97 Result) dup dup
stringwidth pop exch stringheight
x_size y_size dup 0.1 mul add sub % remaining x size
y_size 0.55 mul % remaining y size
maxpect
0 y_size 0.2 mul moveto show
grestore
gsave
y_size y_size 0.1 mul translate
Symbol 10 scalefont dup /Symb10 exch def setfont
(\343) dup dup stringwidth pop exch stringheight % s1 s1w s1h
Roman 10 scalefont dup /Roman10 exch def setfont
( Copyright 1997-2004 Standard Performance Evaluation Corporation)
dup dup stringwidth pop exch stringheight %s1 s1w s1h s2 s2w s2h
5 -2 roll 3 -1 roll add 3 1 roll add exch % s1 s2 s2w+s1w s1h+s2h
x_size y_size dup 0.1 mul add sub % remaining x size
y_size 0.3 mul dup 0.0 mul sub % remaining y size
maxpect
0 0 moveto
Symb10 setfont exch show
Roman10 setfont show
grestore
grestore
end
} def
/SPECpage {
gsave
4 2 roll translate
2 copy 0 0 4 2 roll boxit % w h
dup 0.7 mul Roman exch scalefont setfont
%%% Leave this section out for now but should be replaced later
%%% (Volume: ) Volume append
%%% ( Issue: ) append Issue append
%%% Page dup smart_cvi Page_offset add 2 mod 0 eq { exch } if
%%% 2 copy append descender neg % w h s1 s2 d
%%% /desc exch def
%%%
%%% 2 index 0.2 mul dup desc add moveto show
%%% 3 1 roll
%%% 0.2 mul dup 3 -1 roll exch sub exch desc add
%%% moveto rshow
grestore
} def
/SPECtitle {
4 copy
10 dict begin
gsave
4 2 roll translate
/height exch def
dup
/width exch 0.45 mul def
width sub dup
gsave
0 translate
% 0 0 width height 2 div shadeit
0 0 width height shadeboxit % JK boxit -> shadeboxit
height 0.7 mul 2 div
Roman exch scalefont setfont
% titles
metric_name
dup stringheight 2 div height 0.75 mul exch sub
dup /y1 exch def
8 exch moveto
show
width dup 0.40 mul sub height 0.1 mul sub y1 moveto
(=) show
width 8 sub y1 moveto
% means 1 get mean_title_offset 1 get sigshow
% figure_of_merit mean_title_offset sigshow
height 0.6 mul 3 div
Bold exch scalefont setfont % JK Roman -> Bold
merit_throughput
dup stringheight 2 div height 0.4 mul exch sub
dup /y2 exch def
8 exch moveto
show
grestore
/width exch def
gsave
Roman 10 scalefont dup setfont
[ company_name product_name ] 3.2 width height 0.2 mul sub
height 0.67 mul maxtext % JK changed .7 to .67 to fit better
dup /font_size exch def
scalefont setfont
[ company_name product_name ] dup length /count exch 1 sub def {
height 0.1 mul
count font_size mul 10 mul height 0.1 mul add moveto
show
/count count 1 sub def
} forall
grestore
grestore
end
boxit
} def
/SPECinfobar {
gsave
4 2 roll translate
/height exch def
/width exch def
Roman height 0.7 mul scalefont setfont
[
[ (Tested:) test_date .18 ]
[ (By:) company_name .26 ]
[ (License #:) license_num .12 ]
[ (Hardware Avail:) hw_avail .22 ]
[ (Software Avail:) sw_avail .22 ]
]
dup length
0 exch 1 exch 1 sub {
2 copy get exch pop aload pop
width mul /sub_width exch def
0 0 sub_width height boxit
height 0.2 mul dup moveto exch show
height 0.2 mul dup sub_width exch sub exch moveto rshow
sub_width 0 translate % move for next iteration
} for
pop
grestore
} def
/SPECadvertisement {
gsave
4 2 roll translate
/height exch def
/width exch def
0 0 moveto
0 height rlineto
width 0 rlineto
0 height neg rlineto
closepath
gsave
.97 setgray
fill
grestore
stroke
Roman height 0.25 mul scalefont setfont
[
[ (For More) (Information) (contact) 0 .33 ]
[ ()
(SPEC)
() 1 .33 ]
[ ()
(info@spec.org)
(http://www.spec.org/) 2 .33 ]
]
dup length
0 exch 1 exch 1 sub {
2 copy get exch pop aload pop
width mul /sub_width exch def
dup 2 eq {
pop
height 0.2 mul dup sub_width exch sub exch moveto rshow
sub_width height 0.2 mul sub height 0.45 mul moveto rshow
sub_width height 0.2 mul sub height 0.7 mul moveto rshow
} {
0 eq {
height 0.2 mul dup moveto show
height 0.2 mul height 0.45 mul moveto show
height 0.2 mul height 0.7 mul moveto show
} {
sub_width 2 div height 0.2 mul moveto center_show
sub_width 2 div height 0.45 mul moveto center_show
sub_width 2 div height 0.7 mul moveto center_show
} ifelse
} ifelse
sub_width 0 translate % move for next iteration
} for
pop
grestore
} def
/SPECsfsgraph {
200 dict begin
gsave
4 2 roll translate
2 copy 0 0 4 2 roll boxit
/height exch def
/width exch def
/sub_width width .1 mul def
0 0 sub_width height shadeboxit
sub_width 0 sub_width height shadeboxit
/title_size 8 def
Roman title_size scalefont setfont
/sub_height height title_size 4 mul sub def % JK 2 -> 4
gsave % JK
sub_width .5 mul height title_size sub moveto
(Throughput) center_show
sub_width 1.5 mul height title_size sub moveto
(Average) center_show % JK Response -> Average
0 title_size neg translate
sub_width 1.5 mul height title_size sub moveto
(Response) center_show
0 title_size neg translate
sub_width .5 mul height title_size sub moveto
(\(ops/sec\)) center_show
sub_width 1.5 mul height title_size sub moveto
(\(msec\)) center_show
% JK gsave
0 sub_height translate
/size_x sub_width 16 sub def
/size_y sub_height 16 sub def
sub_height series_data length div
10 2 copy lt { pop } { exch pop } ifelse
/font_size exch def
Roman font_size scalefont setfont
0 10 translate % JK -4 -> 10
% JK: I changed to following section to bold the last data points in the
% the throughput and response time. I used a counter that when it equalls
% the number of lines in the series it changes the font to bold.
/lines series_data length def
/count 0 def
/max_x 0 def
/max_y 0 def
0 1 series_data length 1 sub {
/count count 1 add def
series_data exch get dup
0 get
lines count eq {Bold font_size scalefont setfont}{} ifelse
dup smart_cvr dup max_x le { pop } { /max_x exch def } ifelse
sub_width font_size sub 0 moveto 0 sigshow
1 get
dup smart_cvr dup max_y le { pop } { /max_y exch def } ifelse
sub_width 2 mul font_size sub 0 moveto 0 sigshow
0 font_size neg translate
} for
grestore
gsave
% Normalize the graph to the maximum of 40 msec
/max_y 40 def
max_x tickit /x_tick_val exch def /x_ticks exch def
max_y tickit /y_tick_val exch def /y_ticks exch def
sub_width 2 mul title_size translate
/sub_width width sub_width 2 mul sub 40 sub def
/sub_height sub_height 20 sub def
10 20 translate
Roman 10 scalefont setfont
gsave
(Average Response Time (msec)) dup % str
stringmetrics exch pop dup 3 1 roll % h str h
neg 90 rotate % h str -h
height 2 index % h str -h height str
stringwidth pop % h str -h height w
sub 2 div % h str -h (height-w)/2
exch
moveto show
grestore
% JK added the x-axis label
gsave
sub_width 2 div -20 moveto
(Throughput (ops/sec)) show
grestore
sub_width exch sub /sub_width exch def
20 10 translate % JK 0 -> 10
1000 cvi =string cvs stringwidth pop dup
sub_width exch sub /sub_width exch def
0 translate
0 0 moveto 0 sub_height lineto stroke
0 0 moveto sub_width 0 lineto stroke
/x_dist sub_width x_ticks x_tick_val mul div def
/y_dist sub_height y_ticks y_tick_val mul div def
% x_ticks x_tick_val x_dist mul mul
% y_ticks y_tick_val y_dist mul mul cropmark
% ACA -- Dont start graph at 0,0 ... start line at first point
% 0 0 moveto
/start_x x_dist min_x mul def
/start_y y_dist min_y mul def
start_x start_y moveto
series_data {
aload pop
smart_cvr y_dist mul exch
smart_cvr x_dist mul exch
lineto
} forall
stroke
% Draw the Overall Response Time line
%
% Turn on the dashed line
[3] 0 setdash
/start_x x_dist 0 mul def
/start_y y_dist ort mul def
start_x start_y moveto
ort_data {
aload pop
smart_cvr y_dist mul exch
smart_cvr x_dist mul exch
lineto
} forall
stroke
% JK next two lines
start_x 15 add start_y 5 add moveto
(Overall Response Time=) show
ortt show
( msec) show
% Turn off the dashed line
[] 0 setdash
0 1 y_ticks {
dup
y_tick_val y_dist mul mul dup dup
-5 exch moveto 5 exch lineto stroke
-7 exch 3 sub moveto y_tick_val mul cvi =string cvs rshow
} for
0 1 x_ticks {
dup
x_tick_val x_dist mul mul dup dup
-5 moveto 5 lineto stroke
-15 moveto x_tick_val mul cvi =string cvs center_show
} for
grestore
grestore
end
} def
/SPECconfig {
40 dict begin
gsave
4 2 roll translate
/size_y exch def
/size_x exch def
/border size_y .1 mul dup 12 gt { pop 12 } if def
Roman 10 scalefont setfont
0 0 size_x size_y boxit
% gsave
% /sub_size_y size_y 0.12 mul def
% 0 size_y sub_size_y sub translate
% 0 0 size_x sub_size_y boxit
% [ (Hardware/Software Configuration for: ) product_name ] dup
% 1.2 size_x border 2 mul sub sub_size_y 0.55 mul maxtext
% 10 mul Roman exch scalefont setfont
% aload pop
% dup descender neg sub_size_y 0.1 mul add
% size_x 2 div exch translate
% 0 0 moveto dup center_show
% stringheight sub_size_y 0.15 mul add 0 exch translate
% 0 0 moveto center_show
% grestore
%
% /size_y size_y sub_size_y sub def
Roman 5 scalefont setfont
cpumemory length serversoftware length network length add add /num_lines exch def
num_lines array /temp1_array exch def
num_lines array /temp2_array exch def
/i 0 def
cpumemory {
aload pop
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
serversoftware {
aload pop
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
network {
aload pop
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
temp1_array
2.4 size_x 0.40 mul border sub size_y 0.6 mul maxtext
temp2_array
2.4 size_x 0.60 mul border sub size_y 0.6 mul maxtext
2 copy lt { pop } { exch pop } ifelse
dup 1.20 lt {
pop
[ (A line in your configuration is too long)
(or you have too many lines.)
(Please fix the problem and try again) ] dup
1.2 size_x border sub size_y .8 mul maxtext
10 mul Roman exch scalefont setfont
size_y .1 mul size_y .9 mul translate
{
dup stringheight 0 exch 1.1 mul neg translate
0 0 moveto show
} forall
} {
5 mul Roman exch scalefont setfont
/line_space size_y 0.70 mul num_lines div def
0 size_y 0.95 mul translate
gsave
size_y .05 mul Bold exch scalefont setfont
size_x 2 div 0 moveto
(CPU, Memory and Power) center_show
grestore
cpumemory {
aload pop
0 line_space neg translate
size_x 0.40 mul 0 moveto show
border 0 moveto show
} forall
0 size_y .1 mul neg translate
gsave
size_y .05 mul Bold exch scalefont setfont
size_x 2 div 0 moveto
(Server Software) center_show
grestore
serversoftware {
aload pop
0 line_space neg translate
size_x 0.40 mul 0 moveto show
border 0 moveto show
} forall
0 size_y .1 mul neg translate
gsave
size_y .05 mul Bold exch scalefont setfont
size_x 2 div 0 moveto
(Network Subsystem) center_show
grestore
network {
aload pop
0 line_space neg translate
size_x 0.40 mul 0 moveto show
border 0 moveto show
} forall
} ifelse
grestore
end
} def
/SPECconfig2 {
40 dict begin
gsave
4 2 roll translate
/size_y exch def
/size_x exch def
/border size_y .1 mul dup 12 gt { pop 12 } if def
Roman 10 scalefont setfont
0 0 size_x size_y boxit
% gsave
% /sub_size_y size_y 0.12 mul def
% 0 size_y sub_size_y sub translate
% 0 0 size_x sub_size_y boxit
% [ (Network/HTTP Configuration for: ) product_name ] dup
% 1.2 size_x border 2 mul sub sub_size_y 0.55 mul maxtext
% 10 mul Roman exch scalefont setfont
% aload pop
% dup descender neg sub_size_y 0.1 mul add
% size_x 2 div exch translate
% 0 0 moveto dup center_show
% stringheight sub_size_y 0.15 mul add 0 exch translate
% 0 0 moveto center_show
% grestore
%
% /size_y size_y sub_size_y sub def
Roman 5 scalefont setfont
disksub length servertuning length add 2 add /num_lines exch def
num_lines array /temp1_array exch def
num_lines array /temp2_array exch def
/i 0 def
servertuning {
aload pop
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
disksub {
aload pop
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
{
i num_lines ge { exit } if
temp2_array i (x) put
temp1_array i (x) put
/i i 1 add def
} loop
temp1_array
2.4 size_x 0.40 mul border sub size_y 0.6 mul maxtext
temp2_array
2.4 size_x 0.60 mul border sub size_y 0.6 mul maxtext
2 copy lt { pop } { exch pop } ifelse
dup 1.20 lt {
pop
[ (A line in your configuration is too long)
(or you have too many lines.)
(Please fix the problem and try again) ] dup
1.2 size_x border sub size_y .8 mul maxtext
10 mul Roman exch scalefont setfont
size_y .1 mul size_y .9 mul translate
{
dup stringheight 0 exch 1.1 mul neg translate
0 0 moveto show
} forall
} {
5 mul /font_size exch def
Roman font_size scalefont setfont
/line_space size_y 0.80 mul num_lines div def
0 size_y 0.95 mul translate
gsave
size_y .05 mul Bold exch scalefont setfont
size_x 2 div 0 moveto
(Server Tuning) center_show
grestore
servertuning {
aload pop
0 line_space neg translate
size_x 0.40 mul 0 moveto show
border 0 moveto show
} forall
% 0 size_y .1 mul neg translate
0 font_size 2 mul neg translate
gsave
size_y .05 mul Bold exch scalefont setfont
size_x 2 div 0 moveto
(Disk Subsystem) center_show
grestore
disksub {
aload pop
0 line_space neg translate
size_x 0.40 mul 0 moveto show
border 0 moveto show
} forall
} ifelse
grestore
end
} def
% JK Page numbers
/SPECpagenumber1 {
gsave
Roman 9 scalefont setfont
page_x 2 div 0 -40 add moveto
(Page 1 of 2) center_show
grestore
} def
/SPECpagenumber2 {
gsave
Roman 9 scalefont setfont
page_x 2 div 0 -40 add moveto
(Page 2 of 2) center_show
grestore
} def
/SPECloadgentxt {
40 dict begin
gsave
4 2 roll translate
/size_y exch def
/size_x exch def
/border size_y .1 mul dup 12 gt { pop 12 } if def
Roman 10 scalefont setfont
0 0 size_x size_y boxit
Roman 5 scalefont setfont
loadgentxt length /num_lines exch def
num_lines array /temp1_array exch def
num_lines array /temp2_array exch def
/i 0 def
loadgentxt {
aload pop
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
% JK Ok, here's a big hack to get more than two clients to show up
% in the Load Generator section. When there are three or more
% clients let's just hardcode the sizes.
%
% Note: This bypasses the size check on 3 or 4 clients
%
% old:
% temp1_array
% 2.4 size_x 0.40 mul border sub size_y 0.6 mul maxtext
% temp2_array
% 2.4 size_x 0.60 mul border sub size_y 0.6 mul maxtext
% new:
num_lines 23 lt {
temp1_array
2.4 size_x 0.40 mul border sub size_y 0.6 mul maxtext
temp2_array
2.4 size_x 0.60 mul border sub size_y 0.6 mul maxtext
} {
1.4 1.4
/num_lines 22 def
} ifelse
2 copy lt { pop } { exch pop } ifelse
dup 1.20 lt {
pop
[ (A line in your configuration is too long)
(or you have too many lines.)
(Please fix the problem and try again) ] dup
1.2 size_x border sub size_y .8 mul maxtext
10 mul Roman exch scalefont setfont
size_y .1 mul size_y .9 mul translate
{
dup stringheight 0 exch 1.1 mul neg translate
0 0 moveto show
} forall
} {
% JK old:
% 5 mul Roman exch scalefont setfont
% new:
5 mul /font_size exch def
Roman font_size scalefont setfont
/line_space size_y 0.88 mul num_lines div def % JK 0.90 -> 0.88
0 size_y 0.95 mul translate
gsave
% JK old:
% size_y .05 mul Bold exch scalefont setfont
% new:
Bold 12 scalefont setfont
size_x 2 div -3 moveto
(Load Generator (LG) Configuration) center_show
grestore
0 -5 translate % JK
/count 0 def % JK added a counter to move to the next column
loadgentxt {
/count count 1 add def % JK
aload pop
23 count eq { size_x .5 mul 18 line_space mul translate } if % JK
0 line_space neg translate
% JK old:
% size_x 0.30 mul 0 moveto show
% new:
size_x .5 mul font_size 14 div mul 0 moveto show
border 0 moveto show
} forall
} ifelse
grestore
end
} def
/SPECtestbed {
40 dict begin
gsave
4 2 roll translate
/size_y exch def
/size_x exch def
/border size_y .1 mul dup 12 gt { pop 12 } if def
Roman 10 scalefont setfont
0 0 size_x size_y boxit
Roman 5 scalefont setfont
testbed length /num_lines exch def
num_lines array /temp1_array exch def
num_lines array /temp2_array exch def
num_lines array /temp3_array exch def
num_lines array /temp4_array exch def
num_lines array /temp5_array exch def
/i 0 def
testbed {
aload pop
temp5_array i 3 -1 roll put
temp4_array i 3 -1 roll put
temp3_array i 3 -1 roll put
temp2_array i 3 -1 roll put
temp1_array i 3 -1 roll put
/i i 1 add def
} forall
temp1_array
2.4 size_x 0.10 mul border sub size_y 0.6 mul maxtext
temp2_array
2.4 size_x 0.10 mul border sub size_y 0.6 mul maxtext
temp3_array
2.4 size_x 0.10 mul border sub size_y 0.6 mul maxtext
temp4_array
2.4 size_x 0.60 mul border sub size_y 0.6 mul maxtext
temp5_array
2.4 size_x 0.10 mul border sub size_y 0.6 mul maxtext
2 copy lt { pop } { exch pop } ifelse
2 copy lt { pop } { exch pop } ifelse
2 copy lt { pop } { exch pop } ifelse
2 copy lt { pop } { exch pop } ifelse
dup 1.20 lt {
pop
[ (A line in your configuration is too long)
(or you have too many lines.)
(Please fix the problem and try again) ] dup
1.2 size_x border sub size_y .8 mul maxtext
10 mul Roman exch scalefont setfont
size_y .1 mul size_y .9 mul translate
{
dup stringheight 0 exch 1.1 mul neg translate
0 0 moveto show
} forall
} {
5 mul /font_size exch def
% JK 5 mul Roman exch scalefont setfont
Roman font_size scalefont setfont
/line_space size_y 0.90 mul num_lines div def
0 size_y 0.95 mul translate
gsave
% JK size_y .05 mul Bold exch scalefont setfont
Bold 12 scalefont setfont
size_x 2 div -3 moveto
(Testbed Configuration) center_show
grestore
0 -5 translate
testbed {
aload pop
0 font_size neg translate % JK line_space -> font_size
size_x 0.90 mul 0 moveto show
size_x 0.30 mul 0 moveto show
size_x 0.20 mul 0 moveto show
size_x 0.10 mul 0 moveto show
border 0 moveto show
} forall
} ifelse
grestore
end
} def
/SPECnotes {
gsave
4 2 roll translate
/size_y exch def
/size_x exch def
0 0 size_x size_y boxit
12 dup dup translate
dup 2 mul exch size_y exch sub /size_y exch def
size_x exch sub /size_x exch def
0 size_y 12 sub translate
gsave
Bold 12 scalefont setfont
size_x 2 div 0 moveto
(Notes/Tuning Information) center_show
grestore
0 -5 translate
% JK /size_y size_y 12 5 add sub def
/size_y size_y 60 sub def
Roman 10 scalefont setfont % JK Fixed -> Roman
notes 1.2 .9 div size_x size_y maxtext
dup 0.60 lt {
pop
[ (A line in your notes/tuning section is too long or )
(you have too many lines.) append
(Please fix the problem and try again) ] dup
1.2 size_x 12 sub size_y .9 mul maxtext
10 mul Roman exch scalefont setfont
{
dup stringheight 0 exch 1.1 mul neg translate
0 0 moveto show
} forall
} {
10 mul .9 mul
dup /line_space exch def
Roman exch scalefont setfont % JK Fixed -> Roman
notes {
% dup stringheight 0 exch neg translate
0 line_space neg translate
0 0 moveto show
} forall
} ifelse
grestore
} def
border border translate
/height_left page_size 1 get def
/page_x page_size 0 get def
/page_y page_size 1 get def
0 0 page_x page_y boxit
/test false def
page_y 0.05 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECbanner
} ifelse
height_left exch sub /height_left exch def
12
0 0 page_x 3 index
test {
boxit
} {
SPECpage
} ifelse
dup height_left exch sub /height_left exch def
0 exch translate
page_y 0.07 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECtitle
} ifelse
height_left exch sub /height_left exch def
12
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECinfobar
} ifelse
height_left exch sub /height_left exch def
32
0 0 page_x 3 index
test {
boxit
} {
SPECadvertisement
} ifelse
dup height_left exch sub /height_left exch def
0 exch translate
page_y 0.35 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECsfsgraph
} ifelse
height_left exch sub /height_left exch def
% Split the page in half for the description areas
0.50
height_left
0 height_left 2 index sub page_x 4 index mul 3 index
test {
boxit
} {
SPECconfig
} ifelse
page_x
2 index mul height_left 2 index sub page_x dup 6 -1 roll mul sub 3 index
test {
boxit
} {
SPECconfig2
} ifelse
height_left exch sub /height_left exch def
test {
boxit
} {
SPECpagenumber1
} ifelse
invalid_run test not and {
gsave
Roman 10 scalefont setfont
0 page_y .25 mul translate
page_y .50 mul page_x atan dup rotate
currentlinewidth 1.5 mul setlinewidth
pop page_y .5 mul dup mul page_x 0.8 mul dup mul add sqrt
(INVALID RUN) dup 1 array astore
9999 4 -1 roll 9999 maxtext
10 mul Roman exch scalefont setfont
page_x 0.1 mul 0 moveto false charpath stroke
grestore
} if
false {
Roman 12 scalefont setfont
0 0 moveto (UserTime: ) show usertime starttime sub 1000 div
dup =string cvs show
(Render Time: ) print =string cvs print (\n) print
} if
showpage
%%EndPage: 1 1
%%Page: 2 2
%
% Start Page Two of the SFS reporting page
%
border border translate
/height_left page_size 1 get def
/page_x page_size 0 get def
/page_y page_size 1 get def
0 0 page_x page_y boxit
/test false def
page_y 0.05 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECbanner
} ifelse
height_left exch sub /height_left exch def
12
0 0 page_x 3 index
test {
boxit
} {
SPECpage
} ifelse
dup height_left exch sub /height_left exch def
0 exch translate
page_y 0.07 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECtitle
} ifelse
height_left exch sub /height_left exch def
32
0 0 page_x 3 index
test {
boxit
} {
SPECadvertisement
} ifelse
dup height_left exch sub /height_left exch def
0 exch translate
page_y 0.25 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECloadgentxt
} ifelse
height_left exch sub /height_left exch def
page_y 0.25 mul
0 height_left 2 index sub page_x 3 index
test {
boxit
} {
SPECtestbed
} ifelse
height_left exch sub /height_left exch def
0 0 page_x height_left
test {
boxit
} {
SPECnotes
} ifelse
test {
boxit
}{
SPECpagenumber2
} ifelse
invalid_run test not and {
gsave
Roman 10 scalefont setfont
0 page_y .25 mul translate
page_y .50 mul page_x atan dup rotate
currentlinewidth 1.5 mul setlinewidth
pop page_y .5 mul dup mul page_x 0.8 mul dup mul add sqrt
(INVALID RUN) dup 1 array astore
9999 4 -1 roll 9999 maxtext
10 mul Roman exch scalefont setfont
page_x 0.1 mul 0 moveto false charpath stroke
grestore
} if
false {
Roman 12 scalefont setfont
0 0 moveto (UserTime: ) show usertime starttime sub 1000 div
dup =string cvs show
(Render Time: ) print =string cvs print (\n) print
} if
showpage
pageSave restore
%%EndPage: 2 2
%%PageTrailer
%%Trailer
end
%%EOF