ESXi SSD RAID Performance Optimization: Fixing Non-SSD Detection and TRIM Configuration


2 views

When setting up ESXi 5.5u1 with hardware RAID, the hypervisor only sees the logical volume presented by the RAID controller, not the underlying physical SSDs. This leads to the storage being classified as "non-SSD" even when using high-performance solid-state drives.

The SSD/non-SSD flag affects several VMware features:

  • Space reclamation (TRIM/UNMAP support)
  • VM storage policies for automated tiering
  • VSAN configuration options
  • Swap to host cache behavior

For LSI MegaRAID controllers (common in enterprise setups), you can force SSD detection:

esxcli storage nmp device set --device naa.xxxxxxxxxxxx --psp VMW_PSP_RR --claim-rule=transport=ssd

Verify the change with:

esxcli storage nmp device list | grep -A5 "Device Display Name"

Most hardware RAID controllers don't pass TRIM commands to underlying SSDs. For optimal performance:

  1. Check your RAID controller's documentation for SSD-specific settings
  2. Consider using controller cache in write-back mode (with BBU)
  3. Monitor wear leveling through vendor tools

Create a custom Storage Array Type Plugin rule:

esxcli storage nmp satp rule add -s VMW_SATP_LOCAL -d naa.xxxxxxxxxxxx -o enable_ssd
esxcli storage core claiming reclaim -d naa.xxxxxxxxxxxx

Before and after configuration comparison using esxtop:

# Before:
DEVICE                 DAVG/cmd  KAVG/cmd  GAVG/cmd
naa.xxxxxxxxxxxx         5.12      0.21      5.33

# After SSD flag:
DEVICE                 DAVG/cmd  KAVG/cmd  GAVG/cmd  
naa.xxxxxxxxxxxx         1.87      0.18      2.05

When using hardware RAID controllers with SSDs in VMware ESXi, the hypervisor only sees the virtual disk presented by the RAID controller, not the underlying physical SSDs. This abstraction layer causes ESXi to incorrectly identify SSD-backed storage as traditional spinning disks.

The most significant performance implication involves TRIM/UNMAP commands. Without proper SSD flagging:

esxcli storage core device list --device=naa.*
# Output shows:
# Is SSD: false
# Is Local: true
# Is Offline: false

This prevents ESXi from sending space reclamation commands to the underlying SSDs, potentially leading to:

  • Gradual write performance degradation
  • Reduced SSD lifespan
  • Inefficient storage utilization

For LSI MegaRAID controllers (common scenario):

# First identify your device ID:
esxcli storage core device list | grep -i megaraid

# Then force SSD tagging:
esxcli storage nmp device set --device=naa.XXXXXXXXXXXXXXXX --device-type=ssd

Different RAID controllers handle SSD detection differently:

Controller Type SSD Detection Method Recommended Action
LSI MegaRAID Manual device-type setting Use esxcli nmp device set
Dell PERC Controller BIOS flag Set "SSD" in disk properties
HP Smart Array Automatic if SSD cache enabled Check ciss driver settings

Use ESXi's native tools to validate improvements:

# Before modification:
vmkfstools -P /vmfs/volumes/datastore1 | grep SSD
# SSD: false

# After modification:
esxcli storage core device set -d naa.XXXXXXXX -S enable
vmkfstools -P /vmfs/volumes/datastore1 | grep SSD
# SSD: true

For production environments, consider these additional tweaks:

# Enable UNMAP at the VMFS level:
esxcli storage vmfs unmap set -l datastore1 -e 1

# Adjust queue depth for SSD arrays:
esxcli system module parameters set -m nvme -p "queue_depth=64"

Remember that these changes may require host reboots and should be tested in non-production environments first.