Chapter 20. Solid-State Disk Deployment Guidelines

Solid-state disks (SSD) are storage devices that use NAND flash chips to persistently store data. This sets them apart from previous generations of disks, which store data in rotating, magnetic platters. In an SSD, the access time for data across the full Logical Block Address (LBA) range is constant; whereas with older disks that use rotating media, access patterns that span large address ranges incur seek costs. As such, SSD devices have better latency and throughput.
Performance degrades as the number of used blocks approaches the disk capacity. The degree of performance impact varies greatly by vendor. However, all devices experience some degradation.
To address the degradation issue, the host system (for example, the Linux kernel) may use discard requests to inform the storage that a given range of blocks is no longer in use. An SSD can use this information to free up space internally, using the free blocks for wear-leveling. Discards will only be issued if the storage advertises support in terms of its storage protocol (be it ATA or SCSI). Discard requests are issued to the storage using the negotiated discard command specific to the storage protocol (TRIM command for ATA, and WRITE SAME with UNMAP set, or UNMAP command for SCSI).
Enabling discard support is most useful when the following two points are true:
  • Free space is still available on the file system.
  • Most logical blocks on the underlying storage device have already been written to.
For more information about TRIM, refer to its Data Set Management T13 Specifications from the following link:
For more information about UNMAP, refer to section 4.7.3.4 of the SCSI Block Commands 3 T10 Specification from the following link:

Note

Not all solid-state devices in the market have discard support. To determine if your solid-state device has discard support check for /sys/block/sda/queue/discard_granularity.

Deployment Considerations

Because of the internal layout and operation of SSDs, it is best to partition devices on an internal erase block boundary. Partitioning utilities in Red Hat Enterprise Linux 7 chooses sane defaults if the SSD exports topology information.
However, if the device does not export topology information, Red Hat recommends that the first partition be created at a 1MB boundary.
The Logical Volume Manager (LVM), the device-mapper (DM) targets, and MD (software raid) targets that LVM uses support discards. The only DM targets that do not support discards are dm-snapshot, dm-crypt, and dm-raid45. Discard support for the dm-mirror was added in Red Hat Enterprise Linux 6.1 and as of 7.0 MD supports discards.
Using RAID level 5 over SSD results in low performance if SSDs do not handle discard correctly. You can set discard in the raid456.conf file, or in the GRUB2 configuration. For instructions, see the following procedures.

Procedure 20.1. Setting discard in raid456.conf

The devices_handle_discard_safely module parameter is set in the raid456 module. To enable discard in the raid456.conf file:
  1. Verify that your hardware supports discards:
    # cat /sys/block/disk-name/queue/discard_zeroes_data
    If the returned value is 1, discards are supported. If the command returns 0, the RAID code has to zero the disk out, which takes more time.
  2. Create the /etc/modprobe.d/raid456.conf file, and include the following line:
    options raid456 devices_handle_discard_safely=Y
    
  3. Use the dracut -f command to rebuild the initial ramdisk (initrd).
  4. Reboot the system for the changes to take effect.

Procedure 20.2. Setting discard in the GRUB2 Configuration

The devices_handle_discard_safely module parameter is set in the raid456 module. To enable discard in the GRUB2 configuration:
  1. Verify that your hardware supports discards:
    # cat /sys/block/disk-name/queue/discard_zeroes_data
    If the returned value is 1, discards are supported. If the command returns 0, the RAID code has to zero the disk out, which takes more time.
  2. Add the following line to the /etc/default/grub file:
    raid456.devices_handle_discard_safely=Y
    
  3. The location of the GRUB2 configuration file is different on systems with the BIOS firmware and on systems with UEFI. Use one of the following commands to recreate the GRUB2 configuration file.
    • On a system with the BIOS firmware, use:
      # grub2-mkconfig -o /boot/grub2/grub.cfg
    • On a system with the UEFI firmware, use:
      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
  4. Reboot the system for the changes to take effect.

Note

In Red Hat Enterprise Linux 7, only the ext4 and XFS file systems fully support discard.
In Red Hat Enterprise Linux 6.3 and earlier, only the ext4 file system fully supports discard. Starting with Red Hat Enterprise Linux 6.4, both ext4 and XFS file systems fully support discard. To enable discard commands on a device, use the discard option of the mount command. For example, to mount /dev/sda2 to /mnt with discard enabled, use:
# mount -t ext4 -o discard /dev/sda2 /mnt
By default, ext4 does not issue the discard command to, primarily, avoid problems on devices which might not properly implement discard. The Linux swap code issues discard commands to discard-enabled devices, and there is no option to control this behavior.

Performance Tuning Considerations

For information on performance tuning considerations regarding solid-state disks, see the Solid-State Disks section in the Red Hat Enterprise Linux 7 Performance Tuning Guide.