I thought I would revisit the VNXe performance analysis topic. In 2012 I published some posts around performance analysis of an EMC VNXe storage array. This information applies only to the 1st generation VNXe arrays not to the newer 2nd generation arrays.
In my previous articles I posted a PowerShell module to use to access the VNXe performance database. Since that time I fixed a bug around rollover of timestamps and made a couple other small improvements. The module has also now been published to GitHub.
Here is some background and you can see my previous posts for additional information.
http://muegge.com/blog/emc-vnxe-performance-analysis-with-powershell/
http://muegge.com/blog/emc-vnxe-performance-analysis-with-powershell-part-ii/
The VNXe collects performance statistics in a sqlite database, which can be accessed via scp on the array controllers. It is also available via the diagnostic data package, which can be retried via the system menu in Unisphere. There are a few database file which hold different pieces of performance data about the array. The MTSVNXePerformance PowerShell module provides cmdlets to query the database files and retrieve additional performance information over what is provided in the Unisphere GUI.
I will show some examples of using the module to get performance information. The first one is a simple table with pool capacity information.
The first step is to load the modules, set file path variables, and the sqlite location. This also uses a module to provide charting from the .Net MSChart controls.
1 2 3 4 5 6 7 8 9 10 |
Import-Module MTSVNXePerformance Import-Module MTSChart $ReportPath = "C:\Data\VNXe_Test\APM0011\Report" $ChartPath = "C:\Data\VNXe_Test\APM0011\Report\Charts" $VNXeHOstName = 'APM0011' Set-VNXeSQLiteLocation -Path "C:\Data\VNXe_Test\APM0011" |
The next step is to get some data from the VNXe sqlite tables.
1 2 3 4 |
$PoolNames = Get-PoolNames $PoolsCapacity = Get-VNXeCapacityStats "pools" $PoolStats = Get-PoolStats -InputObject $PoolsCapacity |
This give us the information we need about pools. So now we can look at rollup Information by using a command like so.
1 2 3 4 |
foreach($Pool in $PoolNames){ ($pool.pool_id) Get-SeriesRollup -InputObject ($PoolStats | Where-Object pool_id -EQ ($pool.pool_id)) -Property allocated_space | Select-Object Property,Average,Median,95thPercentile,99thPercentile,Maximum } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
capacity Property : allocated_space Average : 11995418476876.4 Median : 11922903662592 95thPercentile : 12146110889984 99thPercentile : 14344034189312 Maximum : 14344034189312 extreme_performance Property : allocated_space Average : 0 Median : 0 95thPercentile : 0 99thPercentile : 0 Maximum : 0 performance Property : allocated_space Average : 12350317260716.9 Median : 12907799642112 95thPercentile : 13460785070080 99thPercentile : 14122753196032 Maximum : 14570441670656 |
Next we will look at IOPS from the dart summary data. Data is stored in different tables based on type of information and time period. As data is collected it I summarized and moved to historical tables storing longer time periods at less data resolution. Here we are going to get dart store stats which gives us all IO information for each of the data movers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
$OSSPA = Get-VNXeBasicDefaultStats 'os_spa_default' $OSStats = Get-OSStats -InputObject $OSSPA $ImgFullPath = ($ChartPath + '\' + $VNXeHOstName + '_Dart2_IOPS.png') $Dart2 = Get-VNXeBasicDefaultStats 'dart2' $DartStoreStats2 = Get-DartStoreStats -InputObject $Dart2 Out-MTSChart -InputObject $DartStoreStats2 ` -XValue 'TimeStamp' ` -YValues 'StoreReadsPerSec,StoreWritesPerSec' ` -ChartType 'Line' ` -ChartTitle 'Dart 2 IOPS' ` -XInterval 20 ` -Height 600 ` -width 800 ` -ChartFileType 'png' ` -ChartFullPath $ImgFullPath ` -LegendOn | Out-Null iex $ImgFullPath $ImgFullPath = ($ChartPath + '\' + $VNXeHOstName + '_Dart3_IOPS.png') $Dart3 = Get-VNXeBasicDefaultStats 'dart3' $DartStoreStats3 = Get-DartStoreStats -InputObject $Dart3 Out-MTSChart -InputObject $DartStoreStats3 ` -XValue 'TimeStamp' ` -YValues 'StoreReadsPerSec,StoreWritesPerSec' ` -ChartType 'Line' ` -ChartTitle 'Dart 3 IOPS' ` -XInterval 20 ` -Height 600 ` -width 800 ` -ChartFileType 'png' ` -ChartFullPath $ImgFullPath ` -LegendOn | Out-Null iex $ImgFullPath |
This produces the following charts using the MSChart .Net charting controls.
The module can be used to produce complete VNXe performance reports like the one below.
The script that produces the report above is included in the examples folder in the GitHub project.
I recieved a fair amount of interest on the first posts around this topic. I hope this update and refresher is still useful to some folks.
Regards,
Dave