There's not really any out of the box comprehensible GUI tool suitable for what you want (including vCOPS), but tools like (r)esxtop can produce CSV-exports you can use to graph with etc.
Besides (r)esxtop, here's a PowerCLI example for determining IOPS per VM on a particular datastore (realtime, last hour averages):
Get-Datastore DataStore1Name | Get-VM | Sort |
Select @{N="VM Name"; E={$_.Name}},
@{N="AvgReadIOPS"; E={[math]::round((Get-Stat $_ -stat "datastore.numberReadAveraged.average" -RealTime | Select -Expand Value | measure -average).Average, 1)}},
@{N="AvgWriteIOPS"; E={[math]::round((Get-Stat $_ -stat "datastore.numberWriteAveraged.average" -RealTime | Select -Expand Value | measure -average).Average, 1)}} |
Sort AvgWriteIOPS -Desc |
Format-Table -autosize
Or over a longer period of time in the past (might need custom vCenter collection interval):
$DaysBack = -1
Get-Datastore DataStore1Name | Get-VM | Sort |
Select @{N="VM Name"; E={$_.Name}},
@{N="AvgReadIOPS"; E={[math]::round((Get-Stat $_ -stat "datastore.numberReadAveraged.average" -Start (Get-Date).AddDays($DaysBack) -Finish (Get-Date) | Select -Expand Value | measure -average).Average, 1)}},
@{N="AvgWriteIOPS"; E={[math]::round((Get-Stat $_ -stat "datastore.numberWriteAveraged.average" -Start (Get-Date).AddDays($DaysBack) -Finish (Get-Date) | Select -Expand Value | measure -average).Average, 1)}} |
Sort AvgWriteIOPS -Desc |
Format-Table -autosize
Sample output:
VM Name | AvgReadIOPS | AvgWriteIOPS | ||
------- | ----------- | ------------ | ||
someVM1 | 3,2 | 9,5 | ||
someVM2 | 0,3 | 8,8 | ||
someVM3 | 1,5 | 3,2 |
[...]