Modeling Workload IO Size Mixes with Oracle’s vdbench tool

As we have discussed in previous blogs, if doing performance testing with real-world applications is not an option, our suggestion is to attempt to model your workload with load generators approved by application vendors, or to use a generic load generator like Oracle’s vdbench tool.

It is our belief that properly modeling your workloads, and then scaling them, is a superior storage performance testing methodology than just doing classic performance corners testing.

In THIS previous blog post we discussed a very simple way to approximate the reducibility rates of various workloads with Oracle’s vdbench tool.

Here we will discuss a simplistic method to approximate the IO size mixes of VSI (Virtual Storage Infrastructure), VDI (Virtual Desktop Infrastructure), Oracle, and SQL workloads with Oracle’s vdbench tool. In future blog posts, we will build upon this to develop more sophisticated workload modeling scripts.

Recently, we did some internal analysis of Pure1 data to determine the IO size & read/write mixes on FlashArrays that we know predominantly do VSI, VDI, Oracle, or SQL workloads. Of course, these will be different for every deployment. However, while not perfect, this gives us enough for simplistic workload modeling.

Also, a while back, we conducted an analysis of the reducibility rates for various workloads.
In summary, the following was found:

  • Databases had an average reducibility rate on Purity between 2:1 to 4:1
  • VSI had an average reducibility rate on Purity between 5:1 to 9:1
  • VDI had an average reducibility rate on Purity between 10:1 to >20:1

What follows below are charts of the results of the most recent Pure1 analysis, plus code snippets, to simplistically approximate these workloads with Oracle’s vdbench tool.

  • The degree of randomness is defaulted to 80% with the “seekpct=80” parameter.
  • For Oracle we’ll assume a Purity reducibility rate of 3.9:1 under load
    • This can be approximated on Purity 4.5.x with a “Oracle vdbench 5.04.03 3-4k-3” workload
  • For SQL we’ll assume a Purity reducibility rate of 2.5:1 under load
    • This can be approximated on Purity 4.5.x with a “Oracle vdbench 5.04.03 2-4k-2” workload
  • For VSI we’ll assume a reducibility Purity rate of 5.2:1 under load
    • This can be approximated on Purity 4.5.x with a “Oracle vdbench 5.04.03 4-4k-4” workload
  • For VDI we’ll assume a reducibility Purity rate of 10.0:1 under load
    • This can be approximated on Purity 4.5.x with a “Oracle vdbench 5.04.03 7-4k-8” workload
  • Adjust these as you see fit.

==

dedupratio=4
dedupunit=4k
compratio=4
wd=wd_vsi_read,rdpct=100,xfersize=(4k,25.68,8k,26.31,16k,6.4,32k,7.52,60k,10.52,128k,9.82,252k,7.31,504k,6.19,984k,0.23,1032k,0.02),seekpct=80,range=(0,100),sd=sd*
wd=wd_vsi_write,rdpct=0,xfersize=(4k,59.62,8k,14.81,16k,8.97,32k,6.13,60k,5.35,100k,1.63,212k,1.39,432k,1.95,920k,0.14,1032k,0.01),seekpct=80,range=(50,100),sd=sd*
rd=rd_vsi_ramp,wd=wd_vsi*,forrdpct=57.40,curve=(20,35,50,65,80,90,92,94,96,98,99),iorate=curve,interval=1,elapsed=300,maxdata=999t,forthreads=16

VSI – Read IO size mix
vsi_read_iops
VSI – Write IO size mix
vsi_write_iops
VSI – Percentage of Total IOs by IO Size
vsi-iops
VSI – Percentage of Total Data Throughput by IO Size
vsi-dt

==

dedupratio=7
dedupunit=4k
compratio=8
wd=wd_vdi_read,rdpct=100,xfersize=(4k,39.35,8k,9.37,16k,16.47,32k,10.37,64k,12.86,116k,5.45,220k,3.33,472k,1.96,984k,0.84,1032k,0.01),seekpct=80,range=(0,100),sd=sd*
wd=wd_vdi_write,rdpct=0,xfersize=(4k,61.11,8k,13.05,16k,8.41,28k,3.46,60k,9.31,104k,1.05,240k,2.91,372k,0.33,876k,0.33,2028k,0.04),seekpct=80,range=(50,100),sd=sd*
rd=rd_vdi_ramp,wd=wd_vdi*,forrdpct=59.44,curve=(20,35,50,65,80,90,92,94,96,98,99),iorate=curve,interval=1,elapsed=300,maxdata=999t,forthreads=16

VDI – Read IO size mix
vdi_read_iops
VDI – Write IO size mix
vdi_write_iops
VDI – Percentage of Total IOs by IO Size
vdi-iops
VDI – Percentage of Total Data Throughput by IO Size
vdi-dt

==

dedupratio=2
dedupunit=4k
compratio=2
wd=wd_sql_read,rdpct=100,xfersize=(4k,2.39,8k,53.57,16k,4.84,28k,2.64,64k,28.75,120k,1.79,220k,1.41,492k,4.24,524k,0.37),seekpct=80,range=(0,100),sd=sd*
wd=wd_sql_write,rdpct=0,xfersize=(4k,27.85,8k,35.24,16k,4.82,28k,2.58,64k,26.35,116k,0.6,244k,1.28,488k,0.38,536k,0.89,1032k,0.01),seekpct=80,range=(50,100),sd=sd*
rd=rd_sql_ramp,wd=wd_sql*,forrdpct=68.42,curve=(20,35,50,65,80,90,92,94,96,98,99),iorate=curve,interval=1,elapsed=300,maxdata=999t,forthreads=16

SQL – Read IO size mix
sql_read_iops
SQL – Write IO size mix
sql_write_iops
SQL – Percentage of Total IOs by IO Size
sql-iops
SQL – Percentage of Total Data Throughput by IO Size
sql-dt

==

dedupratio=3
dedupunit=4k
compratio=3
wd=wd_oracle_read,rdpct=100,xfersize=(4k,4.5,8k,41.05,16k,29.84,32k,1.23,56k,1.39,128k,15.19,252k,5.23,420k,0.18,1004k,1.39),seekpct=80,range=(0,100),sd=sd*
wd=wd_oracle_write,rdpct=0,xfersize=(4k,22.1,8k,37.3,16k,19.12,32k,5.35,56k,4.68,120k,7.65,236k,3.34,408k,0.15,944k,0.31),seekpct=80,range=(50,100),sd=sd*
rd=rd_oracle_ramp,wd=wd_oracle*,forrdpct=83.14,curve=(20,35,50,65,80,90,92,94,96,98,99),iorate=curve,interval=1,elapsed=300,maxdata=999t,forthreads=16

Oracle – Read IO size mix
oracle_read_iops
Oracle – Write IO size mix
oracle_write_iops
Oracle – Percentage of Total IOs by IO Size
oracle-iops
Oracle – Percentage of Total Data Throughput by IO Size
oracle-dt

Full examples of how to simplistically create synthetic models for these four workloads for use with Oracle’s vdbench tool can be found HERE.

Summary:
If it is decided that conducting a performance test with real-world applications is impractical, and synthetically modeling and scaling customer workloads is deemed necessary, the examples found in this blog post can be used as templates to help create composite workloads to test the performance of the storage array under test.